mirror of
https://github.com/Pantonius/pantosite-astro.git
synced 2026-05-04 09:25:19 +00:00
Things are a changing
This commit is contained in:
@@ -22,3 +22,8 @@ pnpm-debug.log*
|
|||||||
|
|
||||||
# jetbrains setting folder
|
# jetbrains setting folder
|
||||||
.idea/
|
.idea/
|
||||||
|
|
||||||
|
# Vault CMS / Obsidian
|
||||||
|
.obsidian/workspace.json
|
||||||
|
.obsidian/workspace-mobile.json
|
||||||
|
.ref/
|
||||||
|
|||||||
@@ -7,6 +7,9 @@ import sitemap from '@astrojs/sitemap';
|
|||||||
|
|
||||||
// https://astro.build/config
|
// https://astro.build/config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
|
vite: {
|
||||||
|
assetsInclude: ['**/*.base', '**/.obsidian/**', '**/_bases/**'],
|
||||||
|
},
|
||||||
site: 'https://pantonius.dev',
|
site: 'https://pantonius.dev',
|
||||||
markdown: {
|
markdown: {
|
||||||
remarkPlugins: [remarkMath],
|
remarkPlugins: [remarkMath],
|
||||||
|
|||||||
Generated
+12469
-3
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
import { getCollection } from 'astro:content';
|
||||||
|
import BlogPost from '../../layouts/BlogPost.astro';
|
||||||
|
import { render } from 'astro:content';
|
||||||
|
import { convertCollectionPost, convertPost, type Post } from '../../models/Post';
|
||||||
|
|
||||||
|
export async function getStaticPaths() {
|
||||||
|
const posts: Post[] = (await getCollection('blog')).map(convertPost);
|
||||||
|
return posts.map((post) => ({
|
||||||
|
params: { slug: post.id },
|
||||||
|
props: post,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
type Props = Post;
|
||||||
|
|
||||||
|
const post: Post = Astro.props;
|
||||||
|
const { Content } = await render(convertCollectionPost(post));
|
||||||
|
---
|
||||||
|
|
||||||
|
<BlogPost {...post}>
|
||||||
|
<Content />
|
||||||
|
</BlogPost>
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
import BaseHead from '../../components/BaseHead.astro';
|
||||||
|
import Header from '../../components/Header.astro';
|
||||||
|
import Main from '../../components/Main.astro';
|
||||||
|
import Footer from '../../components/Footer.astro';
|
||||||
|
import { SITE_TITLE, SITE_DESCRIPTION } from '../../consts';
|
||||||
|
import { getCollection } from 'astro:content';
|
||||||
|
import Showcase from '../../components/Showcase.astro';
|
||||||
|
import { convertPost } from '../../models/Post';
|
||||||
|
|
||||||
|
const posts: Post[] = (await getCollection('blog')).map(convertPost).sort(
|
||||||
|
(a, b) => b.pubDate.valueOf() - a.pubDate.valueOf(),
|
||||||
|
);
|
||||||
|
---
|
||||||
|
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<BaseHead title={SITE_TITLE} description={SITE_DESCRIPTION} />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<Header />
|
||||||
|
<Main>
|
||||||
|
{posts.length === 0 ? (
|
||||||
|
<h1 style="opacity: .5; user-select: none;">No posts yet 😛</h1>
|
||||||
|
) : (
|
||||||
|
<Showcase collection="blog" posts={posts} />
|
||||||
|
)}
|
||||||
|
</Main>
|
||||||
|
<Footer />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+39
-13
@@ -5,16 +5,16 @@ import Socials from "./Socials.astro";
|
|||||||
---
|
---
|
||||||
|
|
||||||
<header>
|
<header>
|
||||||
<nav>
|
<nav class="head">
|
||||||
<a class="logo" href="/">
|
<a class="logo" href="/">
|
||||||
<img src="/logo.svg" alt="ಠ_ಠ" />
|
<img src="/logo.svg" alt="ಠ_ಠ" />
|
||||||
</a>
|
</a>
|
||||||
<div class="internal-links">
|
<Socials/>
|
||||||
|
</nav>
|
||||||
|
<nav class="internal-links">
|
||||||
<HeaderLink href="/projects">Projects</HeaderLink>
|
<HeaderLink href="/projects">Projects</HeaderLink>
|
||||||
<HeaderLink href="/photography">Photography</HeaderLink>
|
<HeaderLink href="/photography">Photography</HeaderLink>
|
||||||
<HeaderLink href="/blog">Blog</HeaderLink>
|
<HeaderLink href="/blog">Blog</HeaderLink>
|
||||||
</div>
|
|
||||||
<Socials />
|
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
@@ -23,9 +23,21 @@ import Socials from "./Socials.astro";
|
|||||||
<style>
|
<style>
|
||||||
header {
|
header {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0 1em;
|
padding: .5em 1em;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background-color: var(--background-soft);
|
background-color: var(--background-soft);
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
header .logo {
|
header .logo {
|
||||||
@@ -41,32 +53,46 @@ import Socials from "./Socials.astro";
|
|||||||
height: 24pt;
|
height: 24pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav {
|
.internal-links {
|
||||||
|
|
||||||
|
position: absolute;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
flex-direction: row;
|
||||||
justify-content: space-between;
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav a {
|
.internal-links a {
|
||||||
padding: .4em 0.5em;
|
padding: .4em 0.5em;
|
||||||
color: var(--text);
|
color: var(--text);
|
||||||
border-bottom: 4px solid transparent;
|
border-bottom: 4px solid transparent;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav a.active {
|
.internal-links a.active {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
border-bottom-color: var(--primary);
|
border-bottom-color: var(--primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@media (max-width: 720px) {
|
@media (max-width: 720px) {
|
||||||
|
header {
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
header .logo img {
|
header .logo img {
|
||||||
height: 18pt;
|
height: 18pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav {
|
nav.head {
|
||||||
font-size: 16px;
|
padding: .5em 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.internal-links {
|
||||||
|
border-top: var(--background) 1px solid;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ const isActive = href === pathname || href === '/' + (subpath?.[0] || '');
|
|||||||
a {
|
a {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
font-variant-caps: small-caps;
|
||||||
}
|
}
|
||||||
a.active {
|
a.active {
|
||||||
font-weight: bolder;
|
font-weight: bolder;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ const color = Astro.props.color || 'var(--text)';
|
|||||||
<a href={`/${collection}/${post.id}/`}>
|
<a href={`/${collection}/${post.id}/`}>
|
||||||
{
|
{
|
||||||
post.heroImage && (
|
post.heroImage && (
|
||||||
<img class="heroImage" src={post.heroImage} alt="" />
|
<img class="heroImage" src={post.heroImage.src} alt="" />
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,19 +1,15 @@
|
|||||||
<div class="social-links">
|
<div class="social-links">
|
||||||
<a href="https://github.com/Pantonius" target="_blank">
|
<a href="https://github.com/Pantonius" target="_blank">
|
||||||
<span class="sr-only">Go to my GitHub repo</span>
|
<span class="sr-only">Go to my GitHub repo</span>
|
||||||
<svg
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" width="42" height="42"><!--!Font Awesome Free v7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M237.9 461.4C237.9 463.4 235.6 465 232.7 465C229.4 465.3 227.1 463.7 227.1 461.4C227.1 459.4 229.4 457.8 232.3 457.8C235.3 457.5 237.9 459.1 237.9 461.4zM206.8 456.9C206.1 458.9 208.1 461.2 211.1 461.8C213.7 462.8 216.7 461.8 217.3 459.8C217.9 457.8 216 455.5 213 454.6C210.4 453.9 207.5 454.9 206.8 456.9zM251 455.2C248.1 455.9 246.1 457.8 246.4 460.1C246.7 462.1 249.3 463.4 252.3 462.7C255.2 462 257.2 460.1 256.9 458.1C256.6 456.2 253.9 454.9 251 455.2zM316.8 72C178.1 72 72 177.3 72 316C72 426.9 141.8 521.8 241.5 555.2C254.3 557.5 258.8 549.6 258.8 543.1C258.8 536.9 258.5 502.7 258.5 481.7C258.5 481.7 188.5 496.7 173.8 451.9C173.8 451.9 162.4 422.8 146 415.3C146 415.3 123.1 399.6 147.6 399.9C147.6 399.9 172.5 401.9 186.2 425.7C208.1 464.3 244.8 453.2 259.1 446.6C261.4 430.6 267.9 419.5 275.1 412.9C219.2 406.7 162.8 398.6 162.8 302.4C162.8 274.9 170.4 261.1 186.4 243.5C183.8 237 175.3 210.2 189 175.6C209.9 169.1 258 202.6 258 202.6C278 197 299.5 194.1 320.8 194.1C342.1 194.1 363.6 197 383.6 202.6C383.6 202.6 431.7 169 452.6 175.6C466.3 210.3 457.8 237 455.2 243.5C471.2 261.2 481 275 481 302.4C481 398.9 422.1 406.6 366.2 412.9C375.4 420.8 383.2 435.8 383.2 459.3C383.2 493 382.9 534.7 382.9 542.9C382.9 549.4 387.5 557.3 400.2 555C500.2 521.8 568 426.9 568 316C568 177.3 455.5 72 316.8 72zM169.2 416.9C167.9 417.9 168.2 420.2 169.9 422.1C171.5 423.7 173.8 424.4 175.1 423.1C176.4 422.1 176.1 419.8 174.4 417.9C172.8 416.3 170.5 415.6 169.2 416.9zM158.4 408.8C157.7 410.1 158.7 411.7 160.7 412.7C162.3 413.7 164.3 413.4 165 412C165.7 410.7 164.7 409.1 162.7 408.1C160.7 407.5 159.1 407.8 158.4 408.8zM190.8 444.4C189.2 445.7 189.8 448.7 192.1 450.6C194.4 452.9 197.3 453.2 198.6 451.6C199.9 450.3 199.3 447.3 197.3 445.4C195.1 443.1 192.1 442.8 190.8 444.4zM179.4 429.7C177.8 430.7 177.8 433.3 179.4 435.6C181 437.9 183.7 438.9 185 437.9C186.6 436.6 186.6 434 185 431.7C183.6 429.4 181 428.4 179.4 429.7z"/></svg>
|
||||||
viewBox="0 0 16 16"
|
|
||||||
aria-hidden="true"
|
|
||||||
width="32"
|
|
||||||
height="32"
|
|
||||||
><path
|
|
||||||
fill="currentColor"
|
|
||||||
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"
|
|
||||||
></path></svg>
|
|
||||||
</a>
|
</a>
|
||||||
<a href="https://mastodon.social/@pantonius" target="_blank">
|
<a href="https://mastodon.social/@pantonius" target="_blank">
|
||||||
<span class="sr-only">Go to my Mastodon profile</span>
|
<span class="sr-only">Go to my Mastodon profile</span>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" width="46" height="46"><!--!Font Awesome Free v7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M529 243.1C529 145.9 465.3 117.4 465.3 117.4C402.8 88.7 236.7 89 174.8 117.4C174.8 117.4 111.1 145.9 111.1 243.1C111.1 358.8 104.5 502.5 216.7 532.2C257.2 542.9 292 545.2 320 543.6C370.8 540.8 399.3 525.5 399.3 525.5L397.6 488.6C397.6 488.6 361.3 500 320.5 498.7C280.1 497.3 237.5 494.3 230.9 444.7C230.3 440.1 230 435.4 230 430.8C315.6 451.7 388.7 439.9 408.7 437.5C464.8 430.8 513.7 396.2 519.9 364.6C529.7 314.8 528.9 243.1 528.9 243.1zM453.9 368.3L407.3 368.3L407.3 254.1C407.3 204.4 343.3 202.5 343.3 261L343.3 323.5L297 323.5L297 261C297 202.5 233 204.4 233 254.1L233 368.3L186.3 368.3C186.3 246.2 181.1 220.4 204.7 193.3C230.6 164.4 284.5 162.5 308.5 199.4L320.1 218.9L331.7 199.4C355.8 162.3 409.8 164.6 435.5 193.3C459.2 220.6 453.9 246.3 453.9 368.3L453.9 368.3z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" width="42" height="42"><!--!Font Awesome Free v7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M529 243.1C529 145.9 465.3 117.4 465.3 117.4C402.8 88.7 236.7 89 174.8 117.4C174.8 117.4 111.1 145.9 111.1 243.1C111.1 358.8 104.5 502.5 216.7 532.2C257.2 542.9 292 545.2 320 543.6C370.8 540.8 399.3 525.5 399.3 525.5L397.6 488.6C397.6 488.6 361.3 500 320.5 498.7C280.1 497.3 237.5 494.3 230.9 444.7C230.3 440.1 230 435.4 230 430.8C315.6 451.7 388.7 439.9 408.7 437.5C464.8 430.8 513.7 396.2 519.9 364.6C529.7 314.8 528.9 243.1 528.9 243.1zM453.9 368.3L407.3 368.3L407.3 254.1C407.3 204.4 343.3 202.5 343.3 261L343.3 323.5L297 323.5L297 261C297 202.5 233 204.4 233 254.1L233 368.3L186.3 368.3C186.3 246.2 181.1 220.4 204.7 193.3C230.6 164.4 284.5 162.5 308.5 199.4L320.1 218.9L331.7 199.4C355.8 162.3 409.8 164.6 435.5 193.3C459.2 220.6 453.9 246.3 453.9 368.3L453.9 368.3z"/></svg>
|
||||||
|
</a>
|
||||||
|
<a href="https://instagram.com/kindpanto" target="_blank">
|
||||||
|
<span class="sr-only">Go to my Instgram profile</span>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" width="42" height="42"><!--!Font Awesome Free v7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path fill="currentColor" d="M320.3 205C256.8 204.8 205.2 256.2 205 319.7C204.8 383.2 256.2 434.8 319.7 435C383.2 435.2 434.8 383.8 435 320.3C435.2 256.8 383.8 205.2 320.3 205zM319.7 245.4C360.9 245.2 394.4 278.5 394.6 319.7C394.8 360.9 361.5 394.4 320.3 394.6C279.1 394.8 245.6 361.5 245.4 320.3C245.2 279.1 278.5 245.6 319.7 245.4zM413.1 200.3C413.1 185.5 425.1 173.5 439.9 173.5C454.7 173.5 466.7 185.5 466.7 200.3C466.7 215.1 454.7 227.1 439.9 227.1C425.1 227.1 413.1 215.1 413.1 200.3zM542.8 227.5C541.1 191.6 532.9 159.8 506.6 133.6C480.4 107.4 448.6 99.2 412.7 97.4C375.7 95.3 264.8 95.3 227.8 97.4C192 99.1 160.2 107.3 133.9 133.5C107.6 159.7 99.5 191.5 97.7 227.4C95.6 264.4 95.6 375.3 97.7 412.3C99.4 448.2 107.6 480 133.9 506.2C160.2 532.4 191.9 540.6 227.8 542.4C264.8 544.5 375.7 544.5 412.7 542.4C448.6 540.7 480.4 532.5 506.6 506.2C532.8 480 541 448.2 542.8 412.3C544.9 375.3 544.9 264.5 542.8 227.5zM495 452C487.2 471.6 472.1 486.7 452.4 494.6C422.9 506.3 352.9 503.6 320.3 503.6C287.7 503.6 217.6 506.2 188.2 494.6C168.6 486.8 153.5 471.7 145.6 452C133.9 422.5 136.6 352.5 136.6 319.9C136.6 287.3 134 217.2 145.6 187.8C153.4 168.2 168.5 153.1 188.2 145.2C217.7 133.5 287.7 136.2 320.3 136.2C352.9 136.2 423 133.6 452.4 145.2C472 153 487.1 168.1 495 187.8C506.7 217.3 504 287.3 504 319.9C504 352.5 506.7 422.6 495 452z"/></svg>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -5,14 +5,14 @@ const bachelor = defineCollection({
|
|||||||
// Load Markdown and MDX files in the `src/content/blog/` directory.
|
// Load Markdown and MDX files in the `src/content/blog/` directory.
|
||||||
loader: glob({ base: './src/content/bachelor', pattern: '**/*.{md,mdx}' }),
|
loader: glob({ base: './src/content/bachelor', pattern: '**/*.{md,mdx}' }),
|
||||||
// Type-check frontmatter using a schema
|
// Type-check frontmatter using a schema
|
||||||
schema: z.object({
|
schema: ({ image }) => z.object({
|
||||||
title: z.string(),
|
title: z.string(),
|
||||||
description: z.string(),
|
description: z.string(),
|
||||||
part: z.number(),
|
part: z.number(),
|
||||||
// Transform string to Date object
|
// Transform string to Date object
|
||||||
pubDate: z.coerce.date(),
|
pubDate: z.coerce.date(),
|
||||||
updatedDate: z.coerce.date().optional(),
|
updatedDate: z.coerce.date().optional(),
|
||||||
heroImage: z.string().optional(),
|
heroImage: image().optional(),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -20,13 +20,13 @@ const blog = defineCollection({
|
|||||||
// Load Markdown and MDX files in the `src/content/blog/` directory.
|
// Load Markdown and MDX files in the `src/content/blog/` directory.
|
||||||
loader: glob({ base: './src/content/blog', pattern: '**/*.{md,mdx}' }),
|
loader: glob({ base: './src/content/blog', pattern: '**/*.{md,mdx}' }),
|
||||||
// Type-check frontmatter using a schema
|
// Type-check frontmatter using a schema
|
||||||
schema: z.object({
|
schema: ({ image }) => z.object({
|
||||||
title: z.string(),
|
title: z.string(),
|
||||||
description: z.string(),
|
description: z.string(),
|
||||||
// Transform string to Date object
|
// Transform string to Date object
|
||||||
pubDate: z.coerce.date(),
|
pubDate: z.coerce.date(),
|
||||||
updatedDate: z.coerce.date().optional(),
|
updatedDate: z.coerce.date().optional(),
|
||||||
heroImage: z.string().optional(),
|
heroImage: image().optional(),
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -52,13 +52,13 @@ const projects = defineCollection({
|
|||||||
base: './src/content/projects', pattern: '**/*.{md,mdx}'
|
base: './src/content/projects', pattern: '**/*.{md,mdx}'
|
||||||
}),
|
}),
|
||||||
// Type-check frontmatter using a schema
|
// Type-check frontmatter using a schema
|
||||||
schema: z.object({
|
schema: ({ image }) => z.object({
|
||||||
title: z.string(),
|
title: z.string(),
|
||||||
description: z.string(),
|
description: z.string(),
|
||||||
// Transform string to Date object
|
// Transform string to Date object
|
||||||
pubDate: z.coerce.date(),
|
pubDate: z.coerce.date(),
|
||||||
updatedDate: z.coerce.date().optional(),
|
updatedDate: z.coerce.date().optional(),
|
||||||
heroImage: z.string().optional(),
|
heroImage: image().optional(),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Vendored
+47
@@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"showInlineTitle": false,
|
||||||
|
"promptDelete": true,
|
||||||
|
"showIndentGuide": false,
|
||||||
|
"attachmentFolderPath": "attachments",
|
||||||
|
"userIgnoreFilters": [
|
||||||
|
"dist",
|
||||||
|
"node_modules/"
|
||||||
|
],
|
||||||
|
"focusNewTab": false,
|
||||||
|
"mobilePullAction": "command-palette:open",
|
||||||
|
"trashOption": "system",
|
||||||
|
"alwaysUpdateLinks": true,
|
||||||
|
"useMarkdownLinks": true,
|
||||||
|
"mobileToolbarCommands": [
|
||||||
|
"editor:undo",
|
||||||
|
"editor:redo",
|
||||||
|
"editor:insert-wikilink",
|
||||||
|
"editor:insert-embed",
|
||||||
|
"editor:insert-tag",
|
||||||
|
"editor:attach-file",
|
||||||
|
"editor:set-heading",
|
||||||
|
"editor:toggle-bold",
|
||||||
|
"editor:toggle-italics",
|
||||||
|
"editor:toggle-strikethrough",
|
||||||
|
"editor:toggle-highlight",
|
||||||
|
"editor:toggle-code",
|
||||||
|
"editor:toggle-blockquote",
|
||||||
|
"editor:insert-link",
|
||||||
|
"editor:toggle-bullet-list",
|
||||||
|
"editor:toggle-numbered-list",
|
||||||
|
"editor:toggle-checklist-status",
|
||||||
|
"editor:indent-list",
|
||||||
|
"editor:unindent-list",
|
||||||
|
"astro-composer:standardize-properties",
|
||||||
|
"astro-composer:convert-wikilinks-astro",
|
||||||
|
"seo:seo-run-current",
|
||||||
|
"editor:configure-toolbar"
|
||||||
|
],
|
||||||
|
"newFileLocation": "folder",
|
||||||
|
"newFileFolderPath": "blog",
|
||||||
|
"newLinkFormat": "relative",
|
||||||
|
"mobileQuickRibbonItem": "",
|
||||||
|
"vimMode": false,
|
||||||
|
"readableLineLength": true,
|
||||||
|
"defaultViewMode": "source"
|
||||||
|
}
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"cssTheme": "Oxygen",
|
||||||
|
"showViewHeader": true,
|
||||||
|
"showRibbon": false,
|
||||||
|
"enabledCssSnippets": [
|
||||||
|
"astro-modular-styling"
|
||||||
|
],
|
||||||
|
"theme": "moonstone",
|
||||||
|
"accentColor": ""
|
||||||
|
}
|
||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"backlinkInDocument": true
|
||||||
|
}
|
||||||
Vendored
+10
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"ctime": 1755331588238,
|
||||||
|
"path": "_formatting-reference.md",
|
||||||
|
"title": "Formatting Reference"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
[
|
||||||
|
"seo",
|
||||||
|
"property-over-file-name",
|
||||||
|
"oxygen-settings",
|
||||||
|
"vault-cms",
|
||||||
|
"astro-composer",
|
||||||
|
"settings-search",
|
||||||
|
"editing-toolbar",
|
||||||
|
"image-manager",
|
||||||
|
"bases-cms",
|
||||||
|
"home-base",
|
||||||
|
"obsidian-git",
|
||||||
|
"zenmode",
|
||||||
|
"tag-wrangler",
|
||||||
|
"explorer-focus",
|
||||||
|
"ui-tweaker",
|
||||||
|
"obsidian42-brat",
|
||||||
|
"omnisearch",
|
||||||
|
"data-files-editor",
|
||||||
|
"file-name-history",
|
||||||
|
"nested-properties",
|
||||||
|
"paste-image-into-property",
|
||||||
|
"homepage",
|
||||||
|
"obsidian-paste-image-rename"
|
||||||
|
]
|
||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"file-explorer": true,
|
||||||
|
"global-search": true,
|
||||||
|
"switcher": true,
|
||||||
|
"graph": false,
|
||||||
|
"backlink": false,
|
||||||
|
"canvas": false,
|
||||||
|
"outgoing-link": false,
|
||||||
|
"tag-pane": true,
|
||||||
|
"footnotes": false,
|
||||||
|
"properties": false,
|
||||||
|
"page-preview": false,
|
||||||
|
"daily-notes": false,
|
||||||
|
"templates": false,
|
||||||
|
"note-composer": false,
|
||||||
|
"command-palette": true,
|
||||||
|
"slash-command": true,
|
||||||
|
"editor-status": true,
|
||||||
|
"bookmarks": true,
|
||||||
|
"markdown-importer": false,
|
||||||
|
"zk-prefixer": false,
|
||||||
|
"random-note": false,
|
||||||
|
"outline": true,
|
||||||
|
"word-count": true,
|
||||||
|
"slides": false,
|
||||||
|
"audio-recorder": false,
|
||||||
|
"workspaces": false,
|
||||||
|
"file-recovery": true,
|
||||||
|
"publish": false,
|
||||||
|
"sync": false,
|
||||||
|
"bases": true,
|
||||||
|
"webviewer": false
|
||||||
|
}
|
||||||
Vendored
+30
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"collapse-filter": true,
|
||||||
|
"search": "path:posts/",
|
||||||
|
"showTags": false,
|
||||||
|
"showAttachments": false,
|
||||||
|
"hideUnresolved": false,
|
||||||
|
"showOrphans": true,
|
||||||
|
"collapse-color-groups": true,
|
||||||
|
"colorGroups": [
|
||||||
|
{
|
||||||
|
"query": "",
|
||||||
|
"color": {
|
||||||
|
"a": 1,
|
||||||
|
"rgb": 14701138
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"collapse-display": true,
|
||||||
|
"showArrow": false,
|
||||||
|
"textFadeMultiplier": 0,
|
||||||
|
"nodeSizeMultiplier": 1,
|
||||||
|
"lineSizeMultiplier": 1,
|
||||||
|
"collapse-forces": true,
|
||||||
|
"centerStrength": 0.518713248970312,
|
||||||
|
"repelStrength": 10,
|
||||||
|
"linkStrength": 1,
|
||||||
|
"linkDistance": 250,
|
||||||
|
"scale": 1.0147822288211785,
|
||||||
|
"close": true
|
||||||
|
}
|
||||||
Vendored
+274
@@ -0,0 +1,274 @@
|
|||||||
|
{
|
||||||
|
"app:go-back": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Alt"
|
||||||
|
],
|
||||||
|
"key": "ArrowLeft"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt"
|
||||||
|
],
|
||||||
|
"key": "ArrowLeft"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"app:go-forward": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Alt"
|
||||||
|
],
|
||||||
|
"key": "ArrowRight"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt"
|
||||||
|
],
|
||||||
|
"key": "ArrowRight"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"homepage:open-homepage": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "M"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"app:toggle-left-sidebar": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "Z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"app:toggle-right-sidebar": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "X"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"obsidian-git:push": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "S"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"insert-unsplash-image:insert": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"custom-save:save": [],
|
||||||
|
"editor:insert-callout": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "C"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"astro-composer:rename-note": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "R"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"astro-composer:rename-content": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "R"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editor:toggle-fold-properties": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "P"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"seo:seo-open-global": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"insert-unsplash-image:insert-in-frontmatter": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"astro-modular-settings:open-settings": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": ","
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"seo:open-global": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"oxygen-settings:toggle-minimal-focus-mode": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "F"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"zenmode:exit-zen-mode": [],
|
||||||
|
"oxygen-settings:toggle-zen-mode": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "Z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"oxygen-settings:toggle-tab-containers": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "S"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"app:toggle-ribbon": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "A"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"zenmode:toggle-zen-mode": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "Z"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"app:reload": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "R"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme:toggle-light-dark": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "M"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"astro-composer:open-project-terminal": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "D"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"editing-toolbar:workplace-fullscreen-focus": [],
|
||||||
|
"editing-toolbar:fullscreen-focus": [],
|
||||||
|
"editing-toolbar:hide-show-menu": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "E"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"astro-composer:edit-astro-config": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": ","
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"image-manager:search-image": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"image-manager:insert-remote-image-to-property": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"ui-tweaker:toggle-tab-bar": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Alt",
|
||||||
|
"Mod"
|
||||||
|
],
|
||||||
|
"key": "S"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"omnisearch:show-modal": [
|
||||||
|
{
|
||||||
|
"modifiers": [
|
||||||
|
"Mod",
|
||||||
|
"Shift"
|
||||||
|
],
|
||||||
|
"key": "O"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"defaultTemplate": "---\ntitle: \"{{title}}\"\npubDate: {{date}}\ndescription: \"\"\nheroImage: \"\"\n---\n",
|
||||||
|
"autoInsertProperties": true,
|
||||||
|
"dateFormat": "YYYY-MM-DD",
|
||||||
|
"enableCopyHeadingLink": true,
|
||||||
|
"copyHeadingLinkFormat": "astro",
|
||||||
|
"addTrailingSlashToLinks": true,
|
||||||
|
"enableOpenTerminalCommand": true,
|
||||||
|
"terminalProjectRootPath": "../..",
|
||||||
|
"terminalApplicationName": "",
|
||||||
|
"enableTerminalDebugLogging": false,
|
||||||
|
"enableTerminalRibbonIcon": true,
|
||||||
|
"enableOpenConfigFileCommand": true,
|
||||||
|
"configFilePath": "../../astro.config.mjs",
|
||||||
|
"enableConfigRibbonIcon": true,
|
||||||
|
"contentTypes": [
|
||||||
|
{
|
||||||
|
"id": "content-type-1775852991942-ai56rw2lw",
|
||||||
|
"name": "Blog",
|
||||||
|
"folder": "blog",
|
||||||
|
"linkBasePath": "/blog/",
|
||||||
|
"template": "---\ntitle: \"{{title}}\"\npubDate: {{date}}\ndescription: \"\"\nheroImage: \"\"\n---\n",
|
||||||
|
"enabled": true,
|
||||||
|
"creationMode": "file",
|
||||||
|
"indexFileName": "index",
|
||||||
|
"ignoreSubfolders": false,
|
||||||
|
"enableUnderscorePrefix": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "content-type-1775852991942-7eiqfk6yj",
|
||||||
|
"name": "Bachelor",
|
||||||
|
"folder": "bachelor",
|
||||||
|
"linkBasePath": "/bachelor/",
|
||||||
|
"template": "---\ntitle: \"{{title}}\"\npubDate: {{date}}\ndescription: \"\"\nheroImage: \"\"\npart: 1\n---\n",
|
||||||
|
"enabled": true,
|
||||||
|
"creationMode": "file",
|
||||||
|
"indexFileName": "index",
|
||||||
|
"ignoreSubfolders": false,
|
||||||
|
"enableUnderscorePrefix": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "content-type-1775852991942-gvtf8m5h6",
|
||||||
|
"name": "Projects",
|
||||||
|
"folder": "projects",
|
||||||
|
"linkBasePath": "/projects/",
|
||||||
|
"template": "---\ntitle: \"{{title}}\"\npubDate: {{date}}\ndescription: \"\"\nheroImage: \"\"\n---\n",
|
||||||
|
"enabled": true,
|
||||||
|
"creationMode": "file",
|
||||||
|
"indexFileName": "index",
|
||||||
|
"ignoreSubfolders": false,
|
||||||
|
"enableUnderscorePrefix": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"migrationCompleted": true,
|
||||||
|
"helpButtonReplacement": {
|
||||||
|
"enabled": true,
|
||||||
|
"commandId": "astro-composer:edit-astro-config",
|
||||||
|
"iconId": "rocket"
|
||||||
|
},
|
||||||
|
"showMdxFilesInExplorer": true,
|
||||||
|
"processBackgroundFileChanges": true,
|
||||||
|
"syncDraftDate": false,
|
||||||
|
"draftDetectionMode": "property",
|
||||||
|
"draftProperty": "",
|
||||||
|
"draftLogic": "true-is-draft",
|
||||||
|
"publishDateField": "pubDate",
|
||||||
|
"renameOnTitleClick": false,
|
||||||
|
"updateModifiedDate": false,
|
||||||
|
"modifiedDateField": ""
|
||||||
|
}
|
||||||
+4467
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"id":"astro-composer","name":"Astro Composer","version":"0.12.0","minAppVersion":"1.11.0","description":"Turn your notes into posts and pages for your Astro blog with automated content management features.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false}
|
||||||
@@ -0,0 +1,372 @@
|
|||||||
|
.astro-composer-title-input {
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-button-container {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure all buttons in the button container use default cursor */
|
||||||
|
.astro-composer-button-container button {
|
||||||
|
cursor: default !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-button-container button:hover {
|
||||||
|
cursor: default !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-cancel-button,
|
||||||
|
.astro-composer-create-button {
|
||||||
|
padding: 6px 12px;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: default !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-cancel-button:hover,
|
||||||
|
.astro-composer-create-button:hover {
|
||||||
|
cursor: default !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-create-button.mod-cta {
|
||||||
|
background-color: var(--interactive-accent);
|
||||||
|
color: var(--text-on-accent);
|
||||||
|
cursor: default !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-create-button.mod-cta:hover {
|
||||||
|
background-color: var(--interactive-accent-hover);
|
||||||
|
cursor: default !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-template-textarea {
|
||||||
|
height: 300px; /* Adjusted for 5-10 lines of properties */
|
||||||
|
width: 100%;
|
||||||
|
padding: 8px;
|
||||||
|
resize: vertical; /* Allow vertical resizing */
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-modal {
|
||||||
|
padding: 20px;
|
||||||
|
max-width: 500px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-modal h2 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Custom Content Types Styling */
|
||||||
|
.custom-content-types-container {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-content-type-item {
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 16px;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-content-type-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-content-type-header .setting-item {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-content-type-header .setting-item-name {
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-content-type-item .setting-item {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-content-type-item .setting-item:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add spacing between settings in custom content types since we removed dividers */
|
||||||
|
.custom-content-type-settings > div {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-content-type-settings > div:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-content-type-settings {
|
||||||
|
transition: all 0.2s ease-in-out;
|
||||||
|
padding-top: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-content-type-settings[style*="none"] {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile-specific improvements for Astro Composer modal */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
/* Force mobile positioning for all modals containing our content */
|
||||||
|
.modal:has(.astro-composer-title-input) {
|
||||||
|
position: fixed !important;
|
||||||
|
top: 10% !important;
|
||||||
|
left: 50% !important;
|
||||||
|
transform: translateX(-50%) !important;
|
||||||
|
max-height: 50vh !important;
|
||||||
|
overflow-y: auto !important;
|
||||||
|
width: 90vw !important;
|
||||||
|
max-width: 500px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Only target our specific modal content, not all modals */
|
||||||
|
.modal .astro-composer-title-input {
|
||||||
|
font-size: 16px; /* Prevents zoom on iOS */
|
||||||
|
padding: 12px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure our modal content is properly sized on mobile */
|
||||||
|
.modal .astro-composer-button-container {
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal .astro-composer-cancel-button,
|
||||||
|
.modal .astro-composer-create-button {
|
||||||
|
width: 100%;
|
||||||
|
padding: 12px;
|
||||||
|
font-size: 16px;
|
||||||
|
cursor: default !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal .astro-composer-cancel-button:hover,
|
||||||
|
.modal .astro-composer-create-button:hover {
|
||||||
|
cursor: default !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fallback for browsers that don't support :has() */
|
||||||
|
.astro-composer-mobile-modal {
|
||||||
|
position: fixed !important;
|
||||||
|
top: 10% !important;
|
||||||
|
left: 50% !important;
|
||||||
|
transform: translateX(-50%) !important;
|
||||||
|
max-height: 50vh !important;
|
||||||
|
overflow-y: auto !important;
|
||||||
|
width: 90vw !important;
|
||||||
|
max-width: 500px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Settings UI utility classes */
|
||||||
|
.astro-composer-setting-container-visible {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-setting-container-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-custom-type-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-header-name {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Collapse button */
|
||||||
|
.astro-composer-collapse-button {
|
||||||
|
background: transparent !important;
|
||||||
|
border: none !important;
|
||||||
|
padding: 4px;
|
||||||
|
margin-right: 4px;
|
||||||
|
cursor: default;
|
||||||
|
color: var(--text-muted);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: background-color 0.2s ease, color 0.2s ease;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-collapse-button:hover {
|
||||||
|
background-color: var(--background-modifier-hover);
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-collapse-button:active {
|
||||||
|
background-color: var(--background-modifier-active);
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-collapse-button svg {
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-collapse-button.is-collapsed svg {
|
||||||
|
transform: rotate(-90deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reorder buttons container */
|
||||||
|
.astro-composer-reorder-buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
gap: 4px;
|
||||||
|
margin-right: 8px;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reorder buttons - minimal icon-only style */
|
||||||
|
.astro-composer-reorder-button {
|
||||||
|
background: transparent !important;
|
||||||
|
border: none !important;
|
||||||
|
padding: 4px;
|
||||||
|
cursor: default;
|
||||||
|
color: var(--text-muted);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: background-color 0.2s ease, color 0.2s ease;
|
||||||
|
line-height: 1;
|
||||||
|
opacity: 0.6;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-reorder-button:hover:not(:disabled) {
|
||||||
|
background-color: var(--background-modifier-hover);
|
||||||
|
color: var(--text-normal);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-reorder-button:active:not(:disabled) {
|
||||||
|
background-color: var(--background-modifier-active);
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-reorder-button:disabled {
|
||||||
|
opacity: 0.2;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-reorder-button svg {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-remove-setting {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-add-button {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Floating button container - no settings background, right-aligned */
|
||||||
|
.astro-composer-add-button-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 16px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding: 0;
|
||||||
|
background: transparent;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-add-button-container button {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Settings tab - hidden setting elements */
|
||||||
|
/* Only hide the setting item info elements, not nested ones inside content types */
|
||||||
|
.astro-composer-setting-hidden-elements > .setting-item-info > .setting-item-name,
|
||||||
|
.astro-composer-setting-hidden-elements > .setting-item-info > .setting-item-description,
|
||||||
|
.astro-composer-setting-hidden-elements > .setting-item-control {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-setting-hidden-elements {
|
||||||
|
border-top: none;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-setting-container-full-width {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-custom-types-container-visible {
|
||||||
|
display: block !important;
|
||||||
|
width: 100% !important;
|
||||||
|
visibility: visible !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure custom content types container is always visible even when parent has hidden elements */
|
||||||
|
.astro-composer-setting-hidden-elements .custom-content-types-container {
|
||||||
|
display: block !important;
|
||||||
|
visibility: visible !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure content type items inside the container are visible */
|
||||||
|
.custom-content-types-container .custom-content-type-item {
|
||||||
|
display: block !important;
|
||||||
|
visibility: visible !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Conflict warning styles */
|
||||||
|
.astro-composer-conflict-warning {
|
||||||
|
color: var(--text-warning);
|
||||||
|
font-size: 0.9em;
|
||||||
|
margin-top: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-conflict-warning.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Help button replacement */
|
||||||
|
/* No special display needed - inherits from parent flex container */
|
||||||
|
|
||||||
|
/* Ribbon context menu hiding - these will be applied via classes */
|
||||||
|
.astro-composer-hide-terminal-icon .menu-item:has(svg[data-lucide="terminal-square"]),
|
||||||
|
.astro-composer-hide-terminal-icon .menu-item:has(.lucide-terminal-square),
|
||||||
|
.astro-composer-hide-terminal-icon .menu-item .menu-item-icon:has(svg[data-lucide="terminal-square"]),
|
||||||
|
.astro-composer-hide-terminal-icon .menu-item .menu-item-icon:has(.lucide-terminal-square) {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.astro-composer-hide-config-icon .menu-item:has(svg[data-lucide="wrench"]),
|
||||||
|
.astro-composer-hide-config-icon .menu-item:has(svg[data-lucide="rocket"]),
|
||||||
|
.astro-composer-hide-config-icon .menu-item:has(.lucide-wrench),
|
||||||
|
.astro-composer-hide-config-icon .menu-item:has(.lucide-rocket),
|
||||||
|
.astro-composer-hide-config-icon .menu-item .menu-item-icon:has(svg[data-lucide="wrench"]),
|
||||||
|
.astro-composer-hide-config-icon .menu-item .menu-item-icon:has(svg[data-lucide="rocket"]),
|
||||||
|
.astro-composer-hide-config-icon .menu-item .menu-item-icon:has(.lucide-wrench),
|
||||||
|
.astro-composer-hide-config-icon .menu-item .menu-item-icon:has(.lucide-rocket) {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Help button hiding */
|
||||||
|
.astro-composer-hide-help-button .workspace-drawer-vault-actions .clickable-icon:has(svg.help) {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Scoped to only this plugin's settings container to avoid affecting other plugins */
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"confirmBulkOperations": true,
|
||||||
|
"deleteParentFolder": true,
|
||||||
|
"deleteParentFolderFilename": "index",
|
||||||
|
"deleteUniqueAttachments": true,
|
||||||
|
"confirmDeletions": true,
|
||||||
|
"useHomeIcon": true,
|
||||||
|
"enableQuickEdit": true,
|
||||||
|
"quickEditCommand": "astro-composer:rename-content",
|
||||||
|
"quickEditCommandName": "Astro Composer: Rename current content",
|
||||||
|
"quickEditIcon": "lucide-pencil-line",
|
||||||
|
"quickEditOpenFile": false,
|
||||||
|
"showToolbarSelectAll": true,
|
||||||
|
"showToolbarClear": true,
|
||||||
|
"showToolbarDraft": true,
|
||||||
|
"showToolbarPublish": true,
|
||||||
|
"showToolbarTags": true,
|
||||||
|
"showToolbarSet": true,
|
||||||
|
"showToolbarRemove": true,
|
||||||
|
"showToolbarDelete": true,
|
||||||
|
"forceStaticGifImages": false,
|
||||||
|
"embeddedViewRefreshDebounceMs": 250,
|
||||||
|
"virtualScrollThreshold": 100,
|
||||||
|
"virtualScrollBuffer": 20,
|
||||||
|
"migrationBasesCmsToCmsDone": true,
|
||||||
|
"showPropertiesInfoModal": true,
|
||||||
|
"thumbnailCacheSize": "balanced"
|
||||||
|
}
|
||||||
+6786
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "bases-cms",
|
||||||
|
"name": "Bases CMS",
|
||||||
|
"version": "0.4.9",
|
||||||
|
"minAppVersion": "1.11.0",
|
||||||
|
"description": "Manage your notes in bases like a content management system.",
|
||||||
|
"author": "David V. Kimball",
|
||||||
|
"authorUrl": "https://davidvkimball.com",
|
||||||
|
"fundingUrl": "https://patreon.com/davidvkimball",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
+1570
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"doLoadTxt": false,
|
||||||
|
"doCreateTxt": false,
|
||||||
|
"doLoadXml": false,
|
||||||
|
"doCreateXml": false,
|
||||||
|
"doLoadJson": true,
|
||||||
|
"doCreateJson": true,
|
||||||
|
"doLoadYaml": false,
|
||||||
|
"doCreateYaml": false,
|
||||||
|
"doLoadAstro": true,
|
||||||
|
"doCreateAstro": true,
|
||||||
|
"doLoadTs": false,
|
||||||
|
"doCreateTs": false,
|
||||||
|
"doLoadCss": false,
|
||||||
|
"doCreateCss": false,
|
||||||
|
"doLoadHtml": false,
|
||||||
|
"doCreateHtml": false,
|
||||||
|
"doLoadJs": false,
|
||||||
|
"doCreateJs": false,
|
||||||
|
"doLoadMjs": false,
|
||||||
|
"doCreateMjs": false,
|
||||||
|
"doAutosaveFiles": true,
|
||||||
|
"lineWrapping": true
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "data-files-editor",
|
||||||
|
"name": "Data Files Editor",
|
||||||
|
"version": "1.4.1",
|
||||||
|
"minAppVersion": "0.15.0",
|
||||||
|
"description": "Plugin to edit data files like txt, xml, json, and yaml",
|
||||||
|
"author": "ZukTol",
|
||||||
|
"authorUrl": "https://github.com/ZukTol",
|
||||||
|
"fundingUrl": "",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.datafile-source-view.mod-cm6 .cm-gutters {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
background-color: transparent;
|
||||||
|
color: var(--text-faint) !important;
|
||||||
|
border-right: none !important;
|
||||||
|
margin-inline-end: var(--file-folding-offset);
|
||||||
|
font-size: var(--font-ui-smaller);
|
||||||
|
z-index: 1;
|
||||||
|
font-variant: tabular-nums;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-gutterElement.cm-activeLineGutter {
|
||||||
|
background-color: #aaeeff44;
|
||||||
|
}
|
||||||
+123
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"id":"disable-tabs","name":"Disable Tabs","version":"1.0.10","minAppVersion":"1.11.0","description":"Disables having more than one tab open at a time.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
/* Hide mobile new tab icon when the plugin setting is enabled */
|
||||||
|
body.disable-tabs-hide-mobile-icon .mobile-navbar-action-tabs {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Scoped to only this plugin's settings container to avoid affecting other plugins */
|
||||||
@@ -0,0 +1,441 @@
|
|||||||
|
{
|
||||||
|
"lastVersion": "3.2.7",
|
||||||
|
"aestheticStyle": "glass",
|
||||||
|
"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": "SubmenuCommands-header",
|
||||||
|
"name": "submenu",
|
||||||
|
"icon": "heading-glyph",
|
||||||
|
"SubmenuCommands": [
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:header2-text",
|
||||||
|
"name": "Header 2",
|
||||||
|
"icon": "header-2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:header3-text",
|
||||||
|
"name": "Header 3",
|
||||||
|
"icon": "header-3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "editing-toolbar:toggle-format-brush",
|
||||||
|
"name": "Format Painter",
|
||||||
|
"icon": "paintbrush"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:format-eraser",
|
||||||
|
"name": "Clear text formatting",
|
||||||
|
"icon": "eraser"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:editor:swap-line-down",
|
||||||
|
"name": "Swap line down",
|
||||||
|
"icon": "lucide-corner-right-down"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "SubmenuCommands-text-tools",
|
||||||
|
"name": "Text Tools",
|
||||||
|
"icon": "box",
|
||||||
|
"menuType": "dropdown",
|
||||||
|
"SubmenuCommands": [
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:get-plain-text",
|
||||||
|
"name": "Get Plain Text",
|
||||||
|
"icon": "lucide-file-text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:smart-symbols",
|
||||||
|
"name": "Full Half Converter",
|
||||||
|
"icon": "lucide-at-sign"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editingToolbar-Divider-Line",
|
||||||
|
"name": "Line Operations",
|
||||||
|
"icon": "vertical-split"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:insert-blank-lines",
|
||||||
|
"name": "Insert Blank Lines",
|
||||||
|
"icon": "lucide-space"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:remove-blank-lines",
|
||||||
|
"name": "Remove Blank Lines",
|
||||||
|
"icon": "lucide-minimize-2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:split-lines",
|
||||||
|
"name": "Split Lines",
|
||||||
|
"icon": "lucide-split"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:merge-lines",
|
||||||
|
"name": "Merge Lines",
|
||||||
|
"icon": "lucide-merge"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:dedupe-lines",
|
||||||
|
"name": "Dedupe Lines",
|
||||||
|
"icon": "lucide-filter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editingToolbar-Divider-Line",
|
||||||
|
"name": "Text Processing",
|
||||||
|
"icon": "vertical-split"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:add-wrap",
|
||||||
|
"name": "Add Prefix/Suffix",
|
||||||
|
"icon": "lucide-wrap-text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:number-lines",
|
||||||
|
"name": "Number Lines (Custom)",
|
||||||
|
"icon": "lucide-list-ordered"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:remove-whitespace-trim",
|
||||||
|
"name": "Trim Line Ends",
|
||||||
|
"icon": "lucide-scissors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:remove-whitespace-compress",
|
||||||
|
"name": "Shrink Extra Spaces",
|
||||||
|
"icon": "lucide-minimize"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:remove-whitespace-all",
|
||||||
|
"name": "Remove All Whitespace",
|
||||||
|
"icon": "lucide-eraser"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editingToolbar-Divider-Line",
|
||||||
|
"name": "Advanced Tools",
|
||||||
|
"icon": "vertical-split"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:list-to-table",
|
||||||
|
"name": "List to Table",
|
||||||
|
"icon": "lucide-table"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:table-to-list",
|
||||||
|
"name": "Table to List",
|
||||||
|
"icon": "lucide-list"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:extract-between",
|
||||||
|
"name": "Extract Between Strings",
|
||||||
|
"icon": "lucide-brackets"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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:toggle-blockquote",
|
||||||
|
"name": "Blockquote",
|
||||||
|
"icon": "quote"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:insert-callout",
|
||||||
|
"name": "Insert Callout ",
|
||||||
|
"icon": "alert-triangle"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "SubmenuCommands-list",
|
||||||
|
"name": "submenu-list",
|
||||||
|
"icon": "bullet-list-glyph",
|
||||||
|
"SubmenuCommands": [
|
||||||
|
{
|
||||||
|
"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: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:editor:toggle-checklist-status",
|
||||||
|
"name": "Checklist",
|
||||||
|
"icon": "checkbox-glyph"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "editing-toolbar:renumber-ordered-list",
|
||||||
|
"name": "Reorder numbered list",
|
||||||
|
"icon": "list-restart"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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: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:custom-summary",
|
||||||
|
"name": "Summary",
|
||||||
|
"icon": "chat-bubbles-filled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:custom-small",
|
||||||
|
"name": "Small text",
|
||||||
|
"icon": "header-n"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:superscript",
|
||||||
|
"name": "Superscript",
|
||||||
|
"icon": "superscript-glyph"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:subscript",
|
||||||
|
"name": "Subscript",
|
||||||
|
"icon": "subscript-glyph"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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-aligin",
|
||||||
|
"name": "submenu-aligin",
|
||||||
|
"icon": "align-left",
|
||||||
|
"SubmenuCommands": [
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:left",
|
||||||
|
"name": "<p aligin=\"left\"></p>",
|
||||||
|
"icon": "align-left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:center",
|
||||||
|
"name": "<center>",
|
||||||
|
"icon": "align-center"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:right",
|
||||||
|
"name": "<p aligin=\"right\"></p>",
|
||||||
|
"icon": "align-right"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "editing-toolbar:justify",
|
||||||
|
"name": "<p aligin=\"justify\"></p>",
|
||||||
|
"icon": "align-justify"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "zenmode:toggle-zen-mode",
|
||||||
|
"name": "Zen Mode: Toggle",
|
||||||
|
"icon": "expand"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"followingCommands": [],
|
||||||
|
"topCommands": [],
|
||||||
|
"fixedCommands": [],
|
||||||
|
"mobileCommands": [],
|
||||||
|
"enableMultipleConfig": false,
|
||||||
|
"enableTopToolbar": true,
|
||||||
|
"enableFollowingToolbar": false,
|
||||||
|
"enableFixedToolbar": false,
|
||||||
|
"appendMethod": "workspace",
|
||||||
|
"shouldShowMenuOnSelect": false,
|
||||||
|
"cMenuVisibility": false,
|
||||||
|
"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": [
|
||||||
|
{
|
||||||
|
"id": "custom-summary",
|
||||||
|
"name": "Summary",
|
||||||
|
"prefix": "<details> \n<summary>",
|
||||||
|
"suffix": "</summary> \nInclude details here.\n</details>",
|
||||||
|
"char": 0,
|
||||||
|
"line": 0,
|
||||||
|
"islinehead": false,
|
||||||
|
"icon": "chat-bubbles-filled"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom-small",
|
||||||
|
"name": "Small text",
|
||||||
|
"prefix": "<small>",
|
||||||
|
"suffix": "</small>",
|
||||||
|
"char": 0,
|
||||||
|
"line": 0,
|
||||||
|
"islinehead": false,
|
||||||
|
"icon": "header-n"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"viewTypeSettings": {
|
||||||
|
"bases": false
|
||||||
|
},
|
||||||
|
"appearanceByStyle": {
|
||||||
|
"top": {
|
||||||
|
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
|
||||||
|
"toolbarIconColor": "var(--text-normal)",
|
||||||
|
"toolbarIconSize": 18,
|
||||||
|
"aestheticStyle": "glass"
|
||||||
|
},
|
||||||
|
"following": {
|
||||||
|
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
|
||||||
|
"toolbarIconColor": "var(--text-normal)",
|
||||||
|
"toolbarIconSize": 18,
|
||||||
|
"aestheticStyle": "default"
|
||||||
|
},
|
||||||
|
"fixed": {
|
||||||
|
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
|
||||||
|
"toolbarIconColor": "var(--text-normal)",
|
||||||
|
"toolbarIconSize": 18,
|
||||||
|
"aestheticStyle": "default"
|
||||||
|
},
|
||||||
|
"mobile": {
|
||||||
|
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
|
||||||
|
"toolbarIconColor": "var(--text-normal)",
|
||||||
|
"toolbarIconSize": 18,
|
||||||
|
"aestheticStyle": "default"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
|
||||||
|
"toolbarIconColor": "var(--text-normal)",
|
||||||
|
"toolbarIconSize": 18,
|
||||||
|
"useCurrentLineForRegex": false,
|
||||||
|
"commandIdsFixed": true
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "editing-toolbar",
|
||||||
|
"name": "Editing Toolbar",
|
||||||
|
"version": "3.2.7",
|
||||||
|
"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,11 @@
|
|||||||
|
{
|
||||||
|
"showRightClickMenu": true,
|
||||||
|
"showFileExplorerIcon": true,
|
||||||
|
"focusLevel": "parent",
|
||||||
|
"customFolderPath": "src/content",
|
||||||
|
"hideAncestorFolders": false,
|
||||||
|
"autoHidePaths": [
|
||||||
|
"node_modules",
|
||||||
|
"dist"
|
||||||
|
]
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"id":"explorer-focus","name":"Explorer Focus","version":"0.1.9","minAppVersion":"1.11.0","description":"Focus on a specific file or folder in the file explorer.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* No custom styles needed - using native Obsidian classes */
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"historyPropertyName": "aliases",
|
||||||
|
"ignoreRegexes": [
|
||||||
|
"^_",
|
||||||
|
"^Untitled$",
|
||||||
|
"^Untitled \\d+$"
|
||||||
|
],
|
||||||
|
"timeoutSeconds": 5,
|
||||||
|
"caseSensitive": false,
|
||||||
|
"autoCreateFrontmatter": true,
|
||||||
|
"includeFolders": [],
|
||||||
|
"excludeFolders": [],
|
||||||
|
"fileExtensions": [
|
||||||
|
"md",
|
||||||
|
"mdx"
|
||||||
|
],
|
||||||
|
"trackFolderRenames": "index",
|
||||||
|
"excludePropertyName": ""
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"id":"file-name-history","name":"File Name History","version":"0.2.7","minAppVersion":"1.11.0","description":"Store file name or folder name change history into note properties.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/* Scoped to only this plugin's settings container to avoid affecting other plugins */
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
{
|
||||||
|
"syncFolderName": true,
|
||||||
|
"ctrlKey": true,
|
||||||
|
"altKey": false,
|
||||||
|
"hideFolderNote": true,
|
||||||
|
"templatePath": "",
|
||||||
|
"autoCreate": false,
|
||||||
|
"autoCreateFocusFiles": true,
|
||||||
|
"autoCreateForAttachmentFolder": false,
|
||||||
|
"autoCreateForFiles": false,
|
||||||
|
"enableCollapsing": false,
|
||||||
|
"excludeFolders": [],
|
||||||
|
"whitelistFolders": [],
|
||||||
|
"showDeleteConfirmation": true,
|
||||||
|
"underlineFolder": true,
|
||||||
|
"stopWhitespaceCollapsing": true,
|
||||||
|
"underlineFolderInPath": true,
|
||||||
|
"openFolderNoteOnClickInPath": true,
|
||||||
|
"openInNewTab": false,
|
||||||
|
"focusExistingTab": false,
|
||||||
|
"oldFolderNoteName": "{{folder_name}}",
|
||||||
|
"folderNoteName": "index",
|
||||||
|
"folderNoteType": ".md",
|
||||||
|
"disableFolderHighlighting": false,
|
||||||
|
"newFolderNoteName": "{{folder_name}}",
|
||||||
|
"storageLocation": "insideFolder",
|
||||||
|
"syncDelete": false,
|
||||||
|
"showRenameConfirmation": true,
|
||||||
|
"defaultOverview": {
|
||||||
|
"id": "",
|
||||||
|
"folderPath": "",
|
||||||
|
"title": "{{folderName}} overview",
|
||||||
|
"showTitle": false,
|
||||||
|
"depth": 3,
|
||||||
|
"includeTypes": [
|
||||||
|
"folder",
|
||||||
|
"markdown"
|
||||||
|
],
|
||||||
|
"style": "list",
|
||||||
|
"disableFileTag": false,
|
||||||
|
"sortBy": "name",
|
||||||
|
"sortByAsc": true,
|
||||||
|
"showEmptyFolders": false,
|
||||||
|
"onlyIncludeSubfolders": false,
|
||||||
|
"storeFolderCondition": true,
|
||||||
|
"showFolderNotes": false,
|
||||||
|
"disableCollapseIcon": true,
|
||||||
|
"alwaysCollapse": false,
|
||||||
|
"autoSync": true,
|
||||||
|
"allowDragAndDrop": true,
|
||||||
|
"hideLinkList": true,
|
||||||
|
"hideFolderOverview": false,
|
||||||
|
"useActualLinks": false,
|
||||||
|
"fmtpIntegration": false,
|
||||||
|
"titleSize": 1,
|
||||||
|
"isInCallout": false
|
||||||
|
},
|
||||||
|
"useSubmenus": true,
|
||||||
|
"syncMove": true,
|
||||||
|
"frontMatterTitle": {
|
||||||
|
"enabled": false,
|
||||||
|
"explorer": true,
|
||||||
|
"path": true
|
||||||
|
},
|
||||||
|
"settingsTab": "general",
|
||||||
|
"supportedFileTypes": [
|
||||||
|
"md",
|
||||||
|
"canvas",
|
||||||
|
"base"
|
||||||
|
],
|
||||||
|
"boldName": false,
|
||||||
|
"boldNameInPath": false,
|
||||||
|
"cursiveName": false,
|
||||||
|
"cursiveNameInPath": false,
|
||||||
|
"disableOpenFolderNoteOnClick": false,
|
||||||
|
"openByClick": true,
|
||||||
|
"openWithCtrl": false,
|
||||||
|
"openWithAlt": false,
|
||||||
|
"excludeFolderDefaultSettings": {
|
||||||
|
"type": "folder",
|
||||||
|
"path": "",
|
||||||
|
"id": "a8a3086d-f63b-409f-be17-9e5676db13b5",
|
||||||
|
"subFolders": true,
|
||||||
|
"disableSync": true,
|
||||||
|
"disableAutoCreate": true,
|
||||||
|
"disableFolderNote": false,
|
||||||
|
"enableCollapsing": false,
|
||||||
|
"position": 0,
|
||||||
|
"excludeFromFolderOverview": false,
|
||||||
|
"string": "",
|
||||||
|
"hideInSettings": false,
|
||||||
|
"detached": false,
|
||||||
|
"showFolderNote": false
|
||||||
|
},
|
||||||
|
"excludePatternDefaultSettings": {
|
||||||
|
"type": "pattern",
|
||||||
|
"path": "",
|
||||||
|
"id": "d97ab7fb-3b20-49e7-8128-666bf4985a2c",
|
||||||
|
"subFolders": true,
|
||||||
|
"disableSync": true,
|
||||||
|
"disableAutoCreate": true,
|
||||||
|
"disableFolderNote": false,
|
||||||
|
"enableCollapsing": false,
|
||||||
|
"position": 0,
|
||||||
|
"excludeFromFolderOverview": false,
|
||||||
|
"string": "",
|
||||||
|
"hideInSettings": false,
|
||||||
|
"detached": false,
|
||||||
|
"showFolderNote": false
|
||||||
|
},
|
||||||
|
"hideCollapsingIcon": false,
|
||||||
|
"hideCollapsingIconForEmptyFolders": false,
|
||||||
|
"tabManagerEnabled": true,
|
||||||
|
"ignoreAttachmentFolder": true,
|
||||||
|
"deleteFilesAction": "trash",
|
||||||
|
"openSidebar": {
|
||||||
|
"mobile": false,
|
||||||
|
"desktop": true
|
||||||
|
},
|
||||||
|
"highlightFolder": true,
|
||||||
|
"persistentSettingsTab": {
|
||||||
|
"afterRestart": true,
|
||||||
|
"afterChangingTab": true
|
||||||
|
},
|
||||||
|
"firstTimeInsertOverview": true,
|
||||||
|
"fvGlobalSettings": {
|
||||||
|
"autoUpdateLinks": false
|
||||||
|
}
|
||||||
|
}
|
||||||
+9144
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"id": "folder-notes",
|
||||||
|
"name": "Folder notes",
|
||||||
|
"version": "1.8.18",
|
||||||
|
"minAppVersion": "0.15.0",
|
||||||
|
"description": "Create notes within folders that can be accessed without collapsing the folder, similar to the functionality offered in Notion.",
|
||||||
|
"author": "Lost Paul",
|
||||||
|
"authorUrl": "https://github.com/LostPaul",
|
||||||
|
"fundingUrl": "https://ko-fi.com/paul305844",
|
||||||
|
"helpUrl": "https://lostpaul.github.io/obsidian-folder-notes/",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
@@ -0,0 +1,349 @@
|
|||||||
|
/* ==========================================================================
|
||||||
|
General States & Utilities
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.hide,
|
||||||
|
.hide-folder .folder-name,
|
||||||
|
.hide-folder-note .is-folder-note {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* make.md plugin integration */
|
||||||
|
.hide-folder-note .mk-tree-node > .mk-tree-wrapper > .dropzone > .mk-tree-item.is-folder-note {
|
||||||
|
opacity: 40%;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pointer-cursor,
|
||||||
|
.has-folder-note .nav-folder-title-content:hover,
|
||||||
|
.has-folder-note.view-header-breadcrumb:hover,
|
||||||
|
.nav-folder-collapse-indicator:hover,
|
||||||
|
.fn-delete-confirmation-modal-buttons span:hover,
|
||||||
|
.fn-delete-confirmation-modal-buttons input:hover {
|
||||||
|
cursor: pointer !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide-folder-note :not(.show-folder-note-in-explorer).only-has-folder-note .nav-folder-children {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Tree Items
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
body:not(.is-grabbing) .tree-item-self.fn-is-active:hover,
|
||||||
|
body:not(.disable-folder-highlight) .tree-item-self.fn-is-active {
|
||||||
|
color: var(--nav-item-color-active);
|
||||||
|
background-color: var(--nav-item-background-active);
|
||||||
|
font-weight: var(--nav-item-weight-active);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Exclude Folder Settings
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.fn-excluded-folder-heading {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
border-top: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.add-exclude-folder-item,
|
||||||
|
.fn-exclude-folder-list {
|
||||||
|
padding-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-exclude-folder-list.setting-item {
|
||||||
|
border-top: 0 !important;
|
||||||
|
border-bottom: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-exclude-folder-list .setting-item-control {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-exclude-folder-list .setting-item-info {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-exclude-folder-list .search-input-container {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Modal Styles
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.fn-backup-warning-modal .fn-modal-button-container {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.5rem;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-confirmation-modal {
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-confirmation-modal .setting-item {
|
||||||
|
border-top: 0 !important;
|
||||||
|
padding-top: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(.is-phone) .fn-confirmation-modal-button {
|
||||||
|
margin-right: 0.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(.is-phone) .fn-delete-confirmation-modal-buttons {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(.is-phone) .fn-delete-confirmation-modal-buttons .fn-confirmation-modal-button {
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(.is-phone) .fn-delete-confirmation-modal-buttons input[type="checkbox"] {
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .fn-delete-confirmation-modal-buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .fn-delete-confirmation-modal-buttons .fn-confirmation-modal-button {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Folder Overview
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.folder-overview-container.fv-remove-edit-button .folder-overview-edit-button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-line:has(.fv-link-list-item),
|
||||||
|
li:has(.fv-link-list-item),
|
||||||
|
.el-ul:has(.fv-link-list-item),
|
||||||
|
.cm-line:has(.fv-link-list-start),
|
||||||
|
.cm-line:has(.fv-link-list-end),
|
||||||
|
.fv-hide-overview {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.folder-overview-list {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
margin-bottom: 0 !important;
|
||||||
|
padding-bottom: 1.200 !important;
|
||||||
|
padding-top: 1.200 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-overview-list-item {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-overview-list::marker {
|
||||||
|
color: var(--text-faint);
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-list::marker {
|
||||||
|
color: var(--text-normal) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-overview-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-gap: 20px;
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-overview-grid-item {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
margin: 0 1.2rem 1.2rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-overview-grid-item-article article {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 15px;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-overview-grid-item-article a {
|
||||||
|
text-decoration: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-overview-grid-item-article h1 {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overview-setting-item-fv {
|
||||||
|
border-top: 1px solid var(--background-modifier-border);
|
||||||
|
padding: 0.75em 0;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overview-setting-item-fv .setting-item {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
File Explorer & Path Styling
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.folder-note-underline .has-folder-note .nav-folder-title-content {
|
||||||
|
text-decoration-line: underline;
|
||||||
|
text-decoration-color: var(--text-faint);
|
||||||
|
text-decoration-thickness: 2px;
|
||||||
|
text-underline-offset: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-note-underline-path .has-folder-note.view-header-breadcrumb {
|
||||||
|
text-decoration-line: underline;
|
||||||
|
text-decoration-color: var(--text-faint);
|
||||||
|
text-decoration-thickness: 1px;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-note-bold .has-folder-note .nav-folder-title-content,
|
||||||
|
.folder-note-bold-path .has-folder-note.view-header-breadcrumb {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.folder-note-cursive .has-folder-note .nav-folder-title-content,
|
||||||
|
.folder-note-cursive-path .has-folder-note.view-header-breadcrumb {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Collapse Icon Handling */
|
||||||
|
|
||||||
|
.fn-folder-overview-collapse-icon {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-has-no-files .collapse-icon,
|
||||||
|
.fn-hide-collapse-icon .has-folder-note.only-has-folder-note .tree-item-icon,
|
||||||
|
body.fn-ignore-attachment-folder.fn-hide-collapse-icon .only-has-folder-note .fn-empty-folder.fn-has-attachment-folder .tree-item-icon,
|
||||||
|
body.fn-hide-collapse-icon .only-has-folder-note .fn-empty-folder:not(.fn-has-attachment-folder) .tree-item-icon,
|
||||||
|
body.fn-hide-empty-collapse-icon :not(.only-has-folder-note) > .fn-empty-folder:not(.fn-has-attachment-folder) .tree-item-icon,
|
||||||
|
body.fn-hide-collapse-icon.only-has-folder-note:not(.is-collapsed):not(.show-folder-note-in-explorer)>.nav-folder-children {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Settings Tabs
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.fn-settings-tab-bar {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-settings-tab {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--size-4-2);
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-settings-tab-active {
|
||||||
|
background-color: var(--color-accent);
|
||||||
|
color: var(--text-on-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-settings-tab-name {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-settings-tab-icon {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Suggestion Container
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
.fn-suggestion-container {
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
max-width: 500px;
|
||||||
|
max-height: 300px;
|
||||||
|
border-radius: var(--radius-m);
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
box-shadow: var(--shadow-s);
|
||||||
|
z-index: var(--layer-notice);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Whitelist Folder Input (Desktop & Mobile)
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/* Default Desktop Layout */
|
||||||
|
.fn-whitelist-folder-input-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-whitelist-folder-input-container input {
|
||||||
|
flex-grow: 1;
|
||||||
|
width: auto;
|
||||||
|
margin-right: 8px;
|
||||||
|
height: 40px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-whitelist-folder-buttons {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
flex-grow: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile Overrides */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.fn-whitelist-folder-input-container {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-whitelist-folder-input-container input {
|
||||||
|
width: 100%;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fn-whitelist-folder-buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .fn-overview-folder-path .setting-item-control {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
{
|
||||||
|
"homeBaseType": "File",
|
||||||
|
"homeBaseValue": "_bases/Home.base",
|
||||||
|
"openOnStartup": true,
|
||||||
|
"openViewMode": "default",
|
||||||
|
"openMode": "replace-all",
|
||||||
|
"manualOpenMode": "retain",
|
||||||
|
"replaceNewTab": false,
|
||||||
|
"newTabMode": "only-when-empty",
|
||||||
|
"openWhenAllTabsClosed": false,
|
||||||
|
"useDifferentFileForNewTab": false,
|
||||||
|
"newTabType": "File",
|
||||||
|
"newTabValue": "",
|
||||||
|
"newTabSeparateMobile": false,
|
||||||
|
"mobileNewTabType": "File",
|
||||||
|
"mobileNewTabValue": "",
|
||||||
|
"showStickyHomeIcon": true,
|
||||||
|
"stickyIconName": "home",
|
||||||
|
"hideHomeTabHeader": true,
|
||||||
|
"replaceMobileNewTab": false,
|
||||||
|
"separateMobile": false,
|
||||||
|
"mobileHomeBaseType": "File",
|
||||||
|
"mobileHomeBaseValue": "",
|
||||||
|
"commandOnOpen": "",
|
||||||
|
"waitForGitSync": false,
|
||||||
|
"gitSyncTimeout": 3,
|
||||||
|
"revertView": false,
|
||||||
|
"autoScroll": false,
|
||||||
|
"hideReleaseNotes": false,
|
||||||
|
"stickyIconReplaceTab": false
|
||||||
|
}
|
||||||
+3958
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"id":"home-base","name":"Home Base","version":"0.2.6","minAppVersion":"1.11.0","description":"Your dedicated home in your vault.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false}
|
||||||
+217
@@ -0,0 +1,217 @@
|
|||||||
|
/**
|
||||||
|
* Home Base Plugin Styles
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Icon Picker (matching iconic plugin)
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
.iconic-icon-picker .iconic-search-results {
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconic-icon-picker .iconic-search-results>.setting-item-info {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconic-icon-picker .iconic-search-results>.setting-item-control {
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconic-icon-picker .iconic-search-results:focus-visible {
|
||||||
|
box-shadow: 0 0 0 2px var(--background-modifier-border-focus);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Search result icons */
|
||||||
|
.iconic-icon-picker .iconic-search-result>* {
|
||||||
|
height: var(--icon-size);
|
||||||
|
--icon-size: calc(var(--icon-l) * 1.25);
|
||||||
|
--icon-stroke: calc(var(--icon-l-stroke-width) * 6/7);
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconic-icon-picker .iconic-search-result.is-selected {
|
||||||
|
background-color: var(--background-modifier-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconic-icon-picker .iconic-invisible {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Sticky Home Icon (Desktop)
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
/* Sticky home icon - part of tab bar structure, flows inline with tabs */
|
||||||
|
.workspace-tab-header-container-inner>.home-base-sticky-icon {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
margin-left: 8px;
|
||||||
|
margin-right: 8px;
|
||||||
|
cursor: default;
|
||||||
|
color: var(--text-muted);
|
||||||
|
transition: color 150ms ease;
|
||||||
|
background: none;
|
||||||
|
height: var(--tab-height, 32px);
|
||||||
|
width: 24px;
|
||||||
|
min-width: 24px;
|
||||||
|
max-width: 24px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
pointer-events: auto;
|
||||||
|
align-self: center;
|
||||||
|
margin-top: -8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reduce left padding since icon is now inside the container */
|
||||||
|
/* Only apply to splits that actually have the sticky icon (not the other side of a split view) */
|
||||||
|
.workspace-split.mod-vertical.mod-root.home-base-sticky-icon-enabled .workspace-tab-header-container-inner:has(.home-base-sticky-icon) {
|
||||||
|
padding-left: 0;
|
||||||
|
/* Icon is inside, so no extra left padding needed */
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-base-sticky-icon:hover {
|
||||||
|
background: none;
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-base-sticky-icon-active {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-base-sticky-icon-active:hover {
|
||||||
|
color: var(--text-accent-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-tab-header-container-inner>.home-base-sticky-icon svg {
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
min-width: 18px;
|
||||||
|
min-height: 18px;
|
||||||
|
max-width: 18px;
|
||||||
|
max-height: 18px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
display: block;
|
||||||
|
/* Prevent any size changes */
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide home base tab header when sticky icon is enabled */
|
||||||
|
/* Completely remove from DOM flow to prevent tab counting */
|
||||||
|
.workspace-tab-header.is-home-base-tab,
|
||||||
|
.workspace-tab-header[data-home-base-ghost="true"] {
|
||||||
|
display: none !important;
|
||||||
|
/* Remove from accessibility tree */
|
||||||
|
visibility: hidden !important;
|
||||||
|
/* Remove from layout completely */
|
||||||
|
position: fixed !important;
|
||||||
|
left: -9999px !important;
|
||||||
|
top: -9999px !important;
|
||||||
|
width: 0 !important;
|
||||||
|
height: 0 !important;
|
||||||
|
overflow: hidden !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
border: none !important;
|
||||||
|
/* Ensure it doesn't count for tab counting logic */
|
||||||
|
pointer-events: none !important;
|
||||||
|
/* Make it not count for :nth-child selectors */
|
||||||
|
order: -9999 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide sticky icon when tab bar is hidden - general purpose rules */
|
||||||
|
/* These work automatically because the icon is inside the tab container */
|
||||||
|
|
||||||
|
/* Zen Mode */
|
||||||
|
body.zenmode-active .home-base-sticky-icon {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* UI Tweaker */
|
||||||
|
body.hider-tabs .home-base-sticky-icon {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* When tab header container is hidden via display:none, icon should also be hidden */
|
||||||
|
.workspace-tab-header-container[style*="display: none"] .home-base-sticky-icon,
|
||||||
|
.workspace-tab-header-container[style*="display:none"] .home-base-sticky-icon {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* When tab container inner is hidden via display:none */
|
||||||
|
.workspace-tab-header-container-inner[style*="display: none"] .home-base-sticky-icon,
|
||||||
|
.workspace-tab-header-container-inner[style*="display:none"] .home-base-sticky-icon {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Oxygen theme auto-hide: When tab container has opacity 0 and pointer-events none, hide icon */
|
||||||
|
/* Only hide when opacity is 0 AND it's clearly meant to be hidden (not just a transition) */
|
||||||
|
.workspace-tab-header-container[style*="opacity: 0"][style*="pointer-events: none"] .home-base-sticky-icon,
|
||||||
|
.workspace-tab-header-container[style*="opacity:0"][style*="pointer-events:none"] .home-base-sticky-icon {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Focus mode: REMOVED - was incorrectly hiding icon when window is focused */
|
||||||
|
/* Focus mode should be handled by the tab bar hiding, not by this rule */
|
||||||
|
|
||||||
|
/* Additional safety: Hide icon when parent workspace-tabs is hidden via display */
|
||||||
|
.workspace-tabs[style*="display: none"] .home-base-sticky-icon,
|
||||||
|
.workspace-tabs[style*="display:none"] .home-base-sticky-icon {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* JavaScript-controlled hiding removed - CSS handles all visibility automatically */
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Mobile New Tab Button Replacement
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
/* Hide the default SVG when mobile home is enabled */
|
||||||
|
.home-base-mobile-enabled .mobile-navbar-action-new-tab .clickable-icon svg {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add Lucide house icon as replacement */
|
||||||
|
.home-base-mobile-enabled .mobile-navbar-action-new-tab .clickable-icon::before {
|
||||||
|
content: '';
|
||||||
|
display: inline-block;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
background-color: currentColor;
|
||||||
|
-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8'/%3E%3Cpath d='M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'/%3E%3C/svg%3E") no-repeat center / contain;
|
||||||
|
mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8'/%3E%3Cpath d='M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'/%3E%3C/svg%3E") no-repeat center / contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Settings Tab Styles
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
/* File suggester styling - scoped to home base suggestions */
|
||||||
|
.home-base-suggestion-item .suggestion-title {
|
||||||
|
font-weight: 500;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-base-suggestion-item .suggestion-note {
|
||||||
|
color: var(--text-faint);
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
font-size: var(--font-smaller);
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-base-suggestion-item .suggestion-flair {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 1px 4px;
|
||||||
|
margin-left: 8px;
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
background-color: var(--background-modifier-border);
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: var(--font-smallest);
|
||||||
|
font-weight: 500;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Scoped to only this plugin's settings container to avoid affecting other plugins */
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"id": "homepage",
|
||||||
|
"name": "Homepage",
|
||||||
|
"version": "4.4.0",
|
||||||
|
"minAppVersion": "1.11.0",
|
||||||
|
"description": "Open a specified note, canvas, base, or workspace on startup, or set it for quick access later.",
|
||||||
|
"author": "novov",
|
||||||
|
"authorUrl": "https://novov.me",
|
||||||
|
"isDesktopOnly": false,
|
||||||
|
"fundingUrl": {
|
||||||
|
"Ko-fi": "https://ko-fi.com/novov"
|
||||||
|
}
|
||||||
|
}
|
||||||
+231
@@ -0,0 +1,231 @@
|
|||||||
|
@keyframes nv-interstitial-destroy {
|
||||||
|
from { opacity: 1; }
|
||||||
|
to { opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-item[nv-greyed] {
|
||||||
|
opacity: .5;
|
||||||
|
pointer-events: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting .setting-item-control {
|
||||||
|
padding-top: var(--size-4-1);
|
||||||
|
flex-basis: 100%;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting .setting-item-control input, #nv-main-setting .setting-item-control select {
|
||||||
|
font-size: var(--font-ui-medium);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting .setting-item-control select {
|
||||||
|
padding: var(--size-4-3) var(--size-4-4);
|
||||||
|
padding-right: var(--size-4-8);
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting .setting-item-control input {
|
||||||
|
flex-grow: 1;
|
||||||
|
padding: var(--size-4-5) var(--size-4-4);
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting .setting-item-control input[disabled] {
|
||||||
|
opacity: 0.3;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting #nv-desc, #nv-main-setting #nv-info {
|
||||||
|
flex-basis: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting #nv-desc {
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--text-normal);
|
||||||
|
font-size: var(--font-ui-small);
|
||||||
|
padding: 10px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting #nv-desc.mod-warning {
|
||||||
|
color: var(--text-error);
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting #nv-desc code {
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
font-size: var(--font-smaller);
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting #nv-desc small {
|
||||||
|
display: block;
|
||||||
|
font-weight: 400;
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: calc(var(--font-ui-smaller) * 0.9);
|
||||||
|
padding: 5px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-homepage-file-tag {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-left: var(--size-2-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-mobile-setting, .nv-command-setting {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
row-gap: var(--size-2-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-mobile-setting .nv-mobile-info {
|
||||||
|
font-size: var(--font-ui-smaller);
|
||||||
|
width: 100%;
|
||||||
|
margin-right: var(--size-4-18);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-desc {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-box {
|
||||||
|
margin: 1em 0 0;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 12px;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-pill {
|
||||||
|
background-color: var(--background-modifier-hover);
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
font-size: var(--font-ui-small);
|
||||||
|
padding: var(--size-2-1) var(--size-2-2) var(--size-2-1) var(--size-2-3) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-pill.nv-command-invalid {
|
||||||
|
color: var(--text-faint);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-pill button {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0 0 0 3px;
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-pill button:first-of-type {
|
||||||
|
margin-left: var(--size-4-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-pill button.nv-command-selected {
|
||||||
|
margin-left: var(--size-2-2);
|
||||||
|
padding: 0 var(--size-2-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-pill button.nv-command-selected span {
|
||||||
|
color: var(--text-accent);
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 0.9em;
|
||||||
|
vertical-align: top;
|
||||||
|
position: relative;
|
||||||
|
top: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-pill > .svg-icon, .nv-command-pill button .svg-icon {
|
||||||
|
height: 1em;
|
||||||
|
width: 1em;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-pill > .svg-icon {
|
||||||
|
vertical-align: text-bottom;
|
||||||
|
position: relative;
|
||||||
|
margin: 0 var(--size-2-1) 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-pill.nv-dragging {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-command-add-button {
|
||||||
|
font-size: var(--font-ui-small);
|
||||||
|
padding: var(--size-2-2) var(--size-4-2);
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nv-main-setting + .setting-item, .nv-command-desc + .setting-item {
|
||||||
|
padding-top: 20px;
|
||||||
|
border-top: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-debug-button {
|
||||||
|
margin: 3em 0 -0.2em;
|
||||||
|
font-size: var(--font-ui-smaller);
|
||||||
|
padding: 0;
|
||||||
|
height: auto;
|
||||||
|
float: right;
|
||||||
|
box-shadow: none !important;
|
||||||
|
background: none !important;
|
||||||
|
color: var(--text-accent);
|
||||||
|
font-weight: 600;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nv-debug-button:hover, .nv-debug-button:active {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone #nv-main-setting .setting-item-control {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone #nv-main-setting .setting-item-control select {
|
||||||
|
width: auto;
|
||||||
|
max-width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .nv-mobile-setting {
|
||||||
|
row-gap: var(--size-4-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .nv-mobile-setting .setting-item-info {
|
||||||
|
max-width: calc(100% - 100px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .nv-mobile-setting {
|
||||||
|
row-gap: var(--size-4-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .nv-mobile-setting .setting-item-info {
|
||||||
|
max-width: calc(100% - 100px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .nv-command-pill {
|
||||||
|
width: 100%;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
padding: 0 0 var(--size-4-2);
|
||||||
|
display: flex;
|
||||||
|
gap: var(--size-4-4);
|
||||||
|
align-items: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .nv-command-pill .nv-command-text {
|
||||||
|
flex-grow: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .nv-command-pill, .is-phone .nv-command-add-button {
|
||||||
|
font-size: var(--font-ui-medium);
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-phone .nv-command-pill button {
|
||||||
|
line-height: var(--font-ui-medium);
|
||||||
|
height: 100%;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
@@ -0,0 +1,118 @@
|
|||||||
|
{
|
||||||
|
"enableRenameOnPaste": true,
|
||||||
|
"enableRenameOnDrop": true,
|
||||||
|
"imageNameTemplate": "{{DATE:YYYY-MM-DD}}_{{fileName}}",
|
||||||
|
"attachmentLocation": "obsidian",
|
||||||
|
"customAttachmentPath": "./assets",
|
||||||
|
"defaultProvider": "local",
|
||||||
|
"unsplashProxyServer": "",
|
||||||
|
"pexelsApiKey": "",
|
||||||
|
"pexelsApiKeySecretId": "",
|
||||||
|
"pixabayApiKey": "",
|
||||||
|
"pixabayApiKeySecretId": "",
|
||||||
|
"defaultOrientation": "any",
|
||||||
|
"defaultImageSize": "large",
|
||||||
|
"enablePropertyPaste": true,
|
||||||
|
"propertyLinkFormat": "obsidian",
|
||||||
|
"customPropertyLinkFormat": "{image-url}",
|
||||||
|
"defaultPropertyName": "heroImage",
|
||||||
|
"defaultIconPropertyName": "icon",
|
||||||
|
"altTextProperty": "",
|
||||||
|
"autoConvertRemoteImages": false,
|
||||||
|
"convertOnNoteOpen": false,
|
||||||
|
"convertOnNoteSave": false,
|
||||||
|
"processBackgroundChanges": true,
|
||||||
|
"showRenameDialog": true,
|
||||||
|
"autoRename": false,
|
||||||
|
"dupNumberDelimiter": "-",
|
||||||
|
"dupNumberAtStart": false,
|
||||||
|
"disableRenameNotice": false,
|
||||||
|
"enableDescriptiveImages": true,
|
||||||
|
"insertSize": "",
|
||||||
|
"insertReferral": true,
|
||||||
|
"insertBackLink": false,
|
||||||
|
"appendReferral": false,
|
||||||
|
"banner": {
|
||||||
|
"properties": {
|
||||||
|
"imageProperty": "heroImage",
|
||||||
|
"iconProperty": "icon"
|
||||||
|
},
|
||||||
|
"desktop": {
|
||||||
|
"enabled": true,
|
||||||
|
"height": 240,
|
||||||
|
"viewOffset": 0,
|
||||||
|
"noteOffset": -32,
|
||||||
|
"borderRadius": [
|
||||||
|
8,
|
||||||
|
8,
|
||||||
|
8,
|
||||||
|
8
|
||||||
|
],
|
||||||
|
"padding": 8,
|
||||||
|
"fade": true,
|
||||||
|
"iconEnabled": false,
|
||||||
|
"iconSize": 96,
|
||||||
|
"iconRadius": 8,
|
||||||
|
"iconBackground": true,
|
||||||
|
"iconBorder": 2,
|
||||||
|
"iconFrame": true,
|
||||||
|
"iconAlignmentH": "flex-start",
|
||||||
|
"iconAlignmentV": "flex-end",
|
||||||
|
"iconOffsetX": 0,
|
||||||
|
"iconOffsetY": -24
|
||||||
|
},
|
||||||
|
"tablet": {
|
||||||
|
"enabled": true,
|
||||||
|
"height": 190,
|
||||||
|
"viewOffset": 0,
|
||||||
|
"noteOffset": -32,
|
||||||
|
"borderRadius": [
|
||||||
|
8,
|
||||||
|
8,
|
||||||
|
8,
|
||||||
|
8
|
||||||
|
],
|
||||||
|
"padding": 8,
|
||||||
|
"fade": true,
|
||||||
|
"iconEnabled": false,
|
||||||
|
"iconSize": 96,
|
||||||
|
"iconRadius": 8,
|
||||||
|
"iconBackground": true,
|
||||||
|
"iconBorder": 2,
|
||||||
|
"iconFrame": true,
|
||||||
|
"iconAlignmentH": "flex-start",
|
||||||
|
"iconAlignmentV": "flex-end",
|
||||||
|
"iconOffsetX": 0,
|
||||||
|
"iconOffsetY": -24
|
||||||
|
},
|
||||||
|
"phone": {
|
||||||
|
"enabled": true,
|
||||||
|
"height": 160,
|
||||||
|
"viewOffset": 0,
|
||||||
|
"noteOffset": -32,
|
||||||
|
"borderRadius": [
|
||||||
|
8,
|
||||||
|
8,
|
||||||
|
8,
|
||||||
|
8
|
||||||
|
],
|
||||||
|
"padding": 8,
|
||||||
|
"fade": true,
|
||||||
|
"iconEnabled": false,
|
||||||
|
"iconSize": 56,
|
||||||
|
"iconRadius": 8,
|
||||||
|
"iconBackground": true,
|
||||||
|
"iconBorder": 2,
|
||||||
|
"iconFrame": true,
|
||||||
|
"iconAlignmentH": "flex-start",
|
||||||
|
"iconAlignmentV": "flex-end",
|
||||||
|
"iconOffsetX": 0,
|
||||||
|
"iconOffsetY": -24
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"supportedExtensions": [
|
||||||
|
"md",
|
||||||
|
"mdx"
|
||||||
|
],
|
||||||
|
"debugMode": false
|
||||||
|
}
|
||||||
+4257
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"id":"image-manager","name":"Image Manager","version":"0.3.2","minAppVersion":"1.11.0","description":"Insert, rename, and sort images within your notes.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false}
|
||||||
@@ -0,0 +1,530 @@
|
|||||||
|
/* Image Manager Plugin Styles */
|
||||||
|
|
||||||
|
/* Rename Modal uses Obsidian's default modal sizing */
|
||||||
|
|
||||||
|
.image-manager-rename-modal .modal-content {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-preview {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
padding: 1rem;
|
||||||
|
background: var(--background-secondary);
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-preview img,
|
||||||
|
.image-manager-preview-img {
|
||||||
|
max-width: 100%;
|
||||||
|
max-height: 200px;
|
||||||
|
object-fit: contain;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-info {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-info ul {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-info li {
|
||||||
|
padding: 0.25rem 0;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-info li strong {
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-error {
|
||||||
|
color: var(--text-error);
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-error-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-error-visible {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remote search modal styles */
|
||||||
|
.image-inserter-container .modal-close-button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .modal-content {
|
||||||
|
overflow-y: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container {
|
||||||
|
z-index: 1;
|
||||||
|
position: relative;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .input-group {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .query-input {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .selector {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area {
|
||||||
|
overflow-x: hidden;
|
||||||
|
margin-top: 6px;
|
||||||
|
width: 100%;
|
||||||
|
max-height: 70vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area.loading {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area .images-list {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(1, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 600px) {
|
||||||
|
.image-inserter-container .container {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container {
|
||||||
|
max-width: 80vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area .images-list {
|
||||||
|
grid-template-columns: repeat(2, 1fr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
|
.image-inserter-container .container .scroll-area .images-list {
|
||||||
|
grid-template-columns: repeat(3, 1fr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 1200px) {
|
||||||
|
.image-inserter-container .container .scroll-area .images-list {
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area .images-list .query-result {
|
||||||
|
padding: 5px 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area .images-list .query-result img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area .images-list .query-result.is-selected {
|
||||||
|
background-color: var(--background-tertiary);
|
||||||
|
box-shadow: 0 1px 3px rgb(0 0 0 / 12%), 0 1px 2px rgb(0 0 0 / 24%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area .pagination {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 24px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area .pagination .btn {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Loading Animation */
|
||||||
|
.image-inserter-container .loading-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .loading-container .loader-icon {
|
||||||
|
display: inline-block;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
color: var(--text-normal);
|
||||||
|
animation: loader-spin 1s linear infinite;
|
||||||
|
transform-origin: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .loading-container .loader-icon svg {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes loader-spin {
|
||||||
|
from {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area .no-result-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-inserter-container .container .scroll-area .no-result-container.error-text {
|
||||||
|
color: var(--text-error);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Scoped to only this plugin's settings container to avoid affecting other plugins */
|
||||||
|
|
||||||
|
|
||||||
|
/* File Picker Modal (hidden) */
|
||||||
|
.image-manager-file-picker input[type="file"] {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Confirmation Modal */
|
||||||
|
.image-manager-confirm-message {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-confirm-message p {
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
white-space: pre-line;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-confirm-buttons {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.5rem;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.image-manager-confirm-buttons button {
|
||||||
|
min-width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ==========================================
|
||||||
|
Banner Image Styles
|
||||||
|
========================================== */
|
||||||
|
|
||||||
|
/* Default CSS Variables for Banner */
|
||||||
|
body {
|
||||||
|
/* Banner Variables */
|
||||||
|
--im-banner-padding: 8px;
|
||||||
|
--im-banner-radius: 0px 0px 0px 0px;
|
||||||
|
--im-banner-height: 240px;
|
||||||
|
--im-banner-url: none;
|
||||||
|
--im-banner-repeat: no-repeat;
|
||||||
|
--im-banner-size: cover;
|
||||||
|
--im-banner-img-x: 0px;
|
||||||
|
--im-banner-img-y: 0px;
|
||||||
|
--im-banner-note-offset: -32px;
|
||||||
|
--im-banner-view-offset: 0px;
|
||||||
|
--im-banner-mask: linear-gradient(180deg, transparent 25%, var(--background-primary));
|
||||||
|
--im-banner-mask-webkit: -webkit-linear-gradient(270deg, transparent 25%, var(--background-primary));
|
||||||
|
|
||||||
|
/* Icon Variables */
|
||||||
|
--im-banner-icon-align-h: flex-start;
|
||||||
|
--im-banner-icon-align-v: flex-end;
|
||||||
|
--im-banner-icon-size-w: 96px;
|
||||||
|
--im-banner-icon-size-h: 96px;
|
||||||
|
--im-banner-icon-offset-x: 0px;
|
||||||
|
--im-banner-icon-offset-y: -24px;
|
||||||
|
--im-banner-icon-radius: 8px;
|
||||||
|
--im-banner-icon-value: '';
|
||||||
|
--im-banner-icon-fontsize: inherit;
|
||||||
|
--im-banner-icon-background: rgb(from var(--background-primary) r g b / 80%);
|
||||||
|
--im-banner-icon-border: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Banner Container */
|
||||||
|
div.image-manager-banner {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
z-index: 1;
|
||||||
|
width: calc(100% - (var(--im-banner-padding) * 2));
|
||||||
|
height: 100%;
|
||||||
|
margin-left: var(--im-banner-padding);
|
||||||
|
max-height: var(--im-banner-height);
|
||||||
|
padding: var(--size-4-3) var(--size-4-3) 0 var(--size-4-3);
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
|
user-select: none;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Banner content wrapper (for rounding and clipping) */
|
||||||
|
div.image-manager-banner > div.banner-content {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
z-index: 2;
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: var(--im-banner-radius);
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
|
/* Hardware acceleration fix for jagged rounded corners */
|
||||||
|
-webkit-mask-image: -webkit-radial-gradient(white, black);
|
||||||
|
-webkit-backface-visibility: hidden;
|
||||||
|
backface-visibility: hidden;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Banner video element */
|
||||||
|
div.image-manager-banner > div.banner-content > video {
|
||||||
|
inset: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
z-index: 2;
|
||||||
|
animation: im-banner-fade-in 1s cubic-bezier(0.4, 0, 0.2, 1) forwards, im-banner-video-anim 1s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
||||||
|
object-position: calc(50% + var(--im-banner-img-x)) calc(50% + var(--im-banner-img-y));
|
||||||
|
border-radius: var(--im-banner-radius);
|
||||||
|
transition: object-position 0.5s ease-in-out;
|
||||||
|
will-change: object-position;
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Banner image background (::before pseudo-element) */
|
||||||
|
div.image-manager-banner > div.banner-content::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
z-index: 2;
|
||||||
|
box-shadow: inset 0 2px 4px 1px rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: var(--im-banner-radius);
|
||||||
|
background-color: rgba(0, 0, 0, 0.2);
|
||||||
|
background-image: var(--im-banner-url);
|
||||||
|
background-repeat: var(--im-banner-repeat);
|
||||||
|
background-size: var(--im-banner-size);
|
||||||
|
background-position-x: calc(50% + var(--im-banner-img-x));
|
||||||
|
background-position-y: calc(50% + var(--im-banner-img-y));
|
||||||
|
animation: im-banner-fade-in 1s cubic-bezier(0.4, 0, 0.2, 1) forwards, im-banner-anim 1s cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
||||||
|
transition: background-position-x 0.5s ease-in-out;
|
||||||
|
will-change: background-position-x, background-position-y;
|
||||||
|
transform-style: preserve-3d;
|
||||||
|
backface-visibility: hidden;
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Banner fade overlay (::after pseudo-element) */
|
||||||
|
div.image-manager-banner > div.banner-content::after {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
z-index: 3;
|
||||||
|
content: '';
|
||||||
|
border-radius: var(--im-banner-radius);
|
||||||
|
background: var(--im-banner-mask);
|
||||||
|
background: var(--im-banner-mask-webkit);
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Static state (no animation) */
|
||||||
|
div.image-manager-banner.static > div.banner-content::after {
|
||||||
|
animation: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.image-manager-banner.static > div.banner-content::before {
|
||||||
|
animation: none !important;
|
||||||
|
opacity: 1 !important;
|
||||||
|
transition: background-position-x 0.5s ease-in-out, background-position-y 0.5s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Static video */
|
||||||
|
div.image-manager-banner.static > div.banner-content > video {
|
||||||
|
animation: none !important;
|
||||||
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* During animation, disable transition to prevent conflicts */
|
||||||
|
div.image-manager-banner:not(.static) > div.banner-content::before {
|
||||||
|
transition: background-position-x 0.5s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Content after banner */
|
||||||
|
div.image-manager-banner + div {
|
||||||
|
position: relative;
|
||||||
|
z-index: 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Banner animations */
|
||||||
|
@keyframes im-banner-fade-in {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes im-banner-anim {
|
||||||
|
from {
|
||||||
|
background-position-y: calc(50% + (var(--im-banner-img-y, 0px) - 10px));
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
background-position-y: calc(50% + var(--im-banner-img-y, 0px));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes im-banner-video-anim {
|
||||||
|
from {
|
||||||
|
object-position: calc(50% + var(--im-banner-img-x, 0px)) calc(50% + (var(--im-banner-img-y, 0px) - 10px));
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
object-position: calc(50% + var(--im-banner-img-x, 0px)) calc(50% + var(--im-banner-img-y, 0px));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes im-banner-icon-anim {
|
||||||
|
from {
|
||||||
|
transform: translate(var(--im-banner-icon-offset-x), calc(var(--im-banner-icon-offset-y) - 10px));
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
transform: translate(var(--im-banner-icon-offset-x), var(--im-banner-icon-offset-y));
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Icon Container */
|
||||||
|
div.image-manager-banner > div.banner-icon {
|
||||||
|
position: relative;
|
||||||
|
display: flex;
|
||||||
|
justify-content: var(--im-banner-icon-align-h);
|
||||||
|
align-items: var(--im-banner-icon-align-v);
|
||||||
|
width: inherit;
|
||||||
|
height: inherit;
|
||||||
|
z-index: 4;
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: var(--file-line-width);
|
||||||
|
transform: translate(0, 0);
|
||||||
|
animation: im-banner-fade-in 0.7s linear forwards, im-banner-icon-anim 0.8s ease-out;
|
||||||
|
will-change: transform, opacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.image-manager-banner > div.banner-icon > div {
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
width: var(--im-banner-icon-size-w);
|
||||||
|
height: var(--im-banner-icon-size-h);
|
||||||
|
background-color: var(--im-banner-icon-background);
|
||||||
|
transform: translate(var(--im-banner-icon-offset-x), var(--im-banner-icon-offset-y));
|
||||||
|
border-radius: var(--im-banner-icon-radius);
|
||||||
|
border: var(--im-banner-icon-border) solid var(--background-primary);
|
||||||
|
z-index: 2;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Text icon */
|
||||||
|
div.image-manager-banner > div.banner-icon > div[data-type="text"]::after {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: 1;
|
||||||
|
text-transform: uppercase;
|
||||||
|
content: var(--im-banner-icon-value);
|
||||||
|
color: var(--text-normal);
|
||||||
|
line-height: 0;
|
||||||
|
font-size: var(--im-banner-icon-fontsize, inherit);
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Link/image icon */
|
||||||
|
div.image-manager-banner > div.banner-icon > div[data-type="link"]::after {
|
||||||
|
position: absolute;
|
||||||
|
text-transform: uppercase;
|
||||||
|
inset: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: 1;
|
||||||
|
transform: translate(0, 0);
|
||||||
|
content: '';
|
||||||
|
background-image: var(--im-banner-icon-value);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Static icon (no animation) */
|
||||||
|
div.image-manager-banner.static > div.banner-icon {
|
||||||
|
animation: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile adjustments */
|
||||||
|
body.is-tablet div.image-manager-banner {
|
||||||
|
width: calc(100% - (var(--im-banner-padding) * 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
body.is-phone div.image-manager-banner {
|
||||||
|
width: calc(100% - (var(--im-banner-padding) * 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
body.is-tablet div.image-manager-banner > div.banner-icon {
|
||||||
|
left: calc(var(--size-4-2) * -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
body.is-phone div.image-manager-banner > div.banner-icon {
|
||||||
|
left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Frontmatter Overrides for views with banner */
|
||||||
|
.workspace-leaf-content[data-im-banner] .view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller,
|
||||||
|
.workspace-leaf-content[data-im-banner] .view-content .markdown-preview-view {
|
||||||
|
padding-top: var(--im-banner-height, 240px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-im-banner] .view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller .inline-embed .el-pre.mod-frontmatter.mod-ui,
|
||||||
|
.workspace-leaf-content[data-im-banner] .view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller .inline-embed .markdown-preview-view,
|
||||||
|
.workspace-leaf-content[data-im-banner] .view-content .markdown-preview-view .inline-embed .el-pre.mod-frontmatter.mod-ui,
|
||||||
|
.workspace-leaf-content[data-im-banner] .view-content .markdown-preview-view .inline-embed .markdown-preview-view {
|
||||||
|
padding-top: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-im-banner] .view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller .cm-sizer {
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
margin-top: var(--im-banner-note-offset, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-im-banner][data-mode="source"] .view-content > .markdown-source-view.mod-cm6 > .cm-editor > .cm-scroller .cm-sizer {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-im-banner] .view-content {
|
||||||
|
margin-top: var(--im-banner-view-offset, 0);
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"author":"mnaoumov","authorUrl":"https://github.com/mnaoumov/","description":"Allows to view/edit nested frontmatter properties.","fundingUrl":"https://www.buymeacoffee.com/mnaoumov","id":"nested-properties","isDesktopOnly":false,"name":"Nested Properties","version":"1.2.0","minAppVersion":"1.12.7"}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.metadata-property:not(.nested-properties-container .metadata-property):has(>.metadata-property-value>.nested-properties-container){flex-wrap:wrap;overflow:auto}.metadata-property:not(.nested-properties-container .metadata-property):has(>.metadata-property-value>.nested-properties-container)>.metadata-property-warning-icon{display:none}.metadata-property:not(.nested-properties-container .metadata-property):has(>.metadata-property-value>.nested-properties-container)>.metadata-property-value{overflow:visible;width:100%;margin-left:144px}.metadata-property:not(.nested-properties-container .metadata-property):has(>.metadata-property-value>.nested-properties-container).is-collapsed{flex-wrap:nowrap;overflow:hidden}.metadata-property:not(.nested-properties-container .metadata-property):has(>.metadata-property-value>.nested-properties-container).is-collapsed>.metadata-property-value{flex-direction:row;overflow:hidden;width:auto;margin-left:0}.nested-properties-container{width:100%;display:flex;flex-direction:column}.nested-properties-container .metadata-property{width:100%;border-bottom:none;overflow:visible}.nested-properties-container .nested-properties-collapsible{flex-wrap:wrap}.nested-properties-container .nested-properties-collapsible>.metadata-property-value{flex-direction:column;overflow:visible;width:100%;margin-left:144px}.nested-properties-container .nested-properties-collapsible.is-collapsed>.metadata-property-value{flex-direction:row;overflow:hidden;width:auto;margin-left:0}.nested-properties-collapsible.is-collapsed{flex-wrap:nowrap}.nested-properties-collapsible.is-collapsed>.metadata-property-value>.nested-properties-container{display:none}.nested-properties-collapsible.is-collapsed>.metadata-property-key>.nested-properties-collapse-btn{transform:rotate(-90deg)}.nested-properties-summary{display:none;color:var(--text-muted);font-style:italic;cursor:var(--cursor);white-space:nowrap}.nested-properties-collapsible.is-collapsed>.metadata-property-value>.nested-properties-summary{display:inline}.metadata-container:not(:has(.nested-properties-collapsible)) .nested-properties-header-actions{display:none}.nested-properties-header-actions{display:inline-flex;align-items:center;margin-left:4px;vertical-align:middle}.nested-properties-add-item,.nested-properties-add-property{display:inline-flex;width:fit-content;align-items:center;gap:4px;padding:2px 4px;color:var(--text-muted);font-size:var(--metadata-label-font-size);cursor:var(--cursor);border-radius:var(--radius-s)}.nested-properties-add-item:hover,.nested-properties-add-property:hover{color:var(--text-normal);background:var(--background-modifier-hover)}.nested-properties-add-item svg,.nested-properties-add-property svg{width:16px;height:16px}.nested-properties-add-property input{background:transparent;border:none;outline:none;color:var(--text-normal);font-size:inherit;padding:0}.nested-properties-floating-scrollbar{display:none;position:fixed;left:var(--track-left);width:var(--track-width);bottom:var(--track-bottom);height:12px;z-index:10;cursor:ew-resize;background:var(--background-secondary);border-top:1px solid var(--background-modifier-border)}.nested-properties-floating-scrollbar.is-visible{display:block}.nested-properties-floating-scrollbar-thumb{position:absolute;left:var(--thumb-left);width:var(--thumb-width);top:2px;height:8px;border-radius:4px;background:var(--scrollbar-thumb-bg)}.nested-properties-floating-scrollbar-thumb:hover{background:var(--scrollbar-active-thumb-bg)}.nested-properties-ew-resize{cursor:ew-resize}.nested-properties-collapse-btn{display:inline-flex;align-items:center;justify-content:center;cursor:var(--cursor);color:var(--text-muted);flex-shrink:0;width:16px;height:16px;align-self:center;transition:transform .1s ease-in-out}.nested-properties-collapse-btn svg{width:10px;height:10px}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"commitMessage": "Blog update {{date}}: {{numFiles}} file(s) changed.",
|
||||||
|
"autoCommitMessage": "Blog update {{date}}: {{numFiles}} file(s) changed.",
|
||||||
|
"commitMessageScript": "",
|
||||||
|
"commitDateFormat": "M/D/YYYY h:ma",
|
||||||
|
"autoSaveInterval": 0,
|
||||||
|
"autoPushInterval": 0,
|
||||||
|
"autoPullInterval": 0,
|
||||||
|
"autoPullOnBoot": true,
|
||||||
|
"autoCommitOnlyStaged": false,
|
||||||
|
"disablePush": false,
|
||||||
|
"pullBeforePush": true,
|
||||||
|
"disablePopups": false,
|
||||||
|
"showErrorNotices": true,
|
||||||
|
"disablePopupsForNoChanges": true,
|
||||||
|
"listChangedFilesInMessageBody": false,
|
||||||
|
"showStatusBar": true,
|
||||||
|
"updateSubmodules": false,
|
||||||
|
"syncMethod": "merge",
|
||||||
|
"mergeStrategy": "none",
|
||||||
|
"customMessageOnAutoBackup": false,
|
||||||
|
"autoBackupAfterFileChange": false,
|
||||||
|
"treeStructure": false,
|
||||||
|
"refreshSourceControl": true,
|
||||||
|
"basePath": "",
|
||||||
|
"differentIntervalCommitAndPush": false,
|
||||||
|
"changedFilesInStatusBar": true,
|
||||||
|
"showedMobileNotice": true,
|
||||||
|
"refreshSourceControlTimer": 7000,
|
||||||
|
"showBranchStatusBar": false,
|
||||||
|
"setLastSaveToLastCommit": false,
|
||||||
|
"submoduleRecurseCheckout": false,
|
||||||
|
"gitDir": "",
|
||||||
|
"showFileMenu": false,
|
||||||
|
"authorInHistoryView": "hide",
|
||||||
|
"dateInHistoryView": false,
|
||||||
|
"diffStyle": "split",
|
||||||
|
"hunks": {
|
||||||
|
"showSigns": false,
|
||||||
|
"hunkCommands": false,
|
||||||
|
"statusBar": "disabled"
|
||||||
|
},
|
||||||
|
"lineAuthor": {
|
||||||
|
"show": false,
|
||||||
|
"followMovement": "inactive",
|
||||||
|
"authorDisplay": "initials",
|
||||||
|
"showCommitHash": false,
|
||||||
|
"dateTimeFormatOptions": "date",
|
||||||
|
"dateTimeFormatCustomString": "YYYY-MM-DD HH:mm",
|
||||||
|
"dateTimeTimezone": "viewer-local",
|
||||||
|
"coloringMaxAge": "1y",
|
||||||
|
"colorNew": {
|
||||||
|
"r": 255,
|
||||||
|
"g": 150,
|
||||||
|
"b": 150
|
||||||
|
},
|
||||||
|
"colorOld": {
|
||||||
|
"r": 120,
|
||||||
|
"g": 160,
|
||||||
|
"b": 255
|
||||||
|
},
|
||||||
|
"textColorCss": "var(--text-muted)",
|
||||||
|
"ignoreWhitespace": false,
|
||||||
|
"gutterSpacingFallbackLength": 5,
|
||||||
|
"lastShownAuthorDisplay": "initials",
|
||||||
|
"lastShownDateTimeFormatOptions": "date"
|
||||||
|
}
|
||||||
|
}
|
||||||
+452
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"author": "Vinzent",
|
||||||
|
"authorUrl": "https://github.com/Vinzent03",
|
||||||
|
"id": "obsidian-git",
|
||||||
|
"name": "Git",
|
||||||
|
"description": "Integrate Git version control with automatic backup and other advanced features.",
|
||||||
|
"isDesktopOnly": false,
|
||||||
|
"fundingUrl": "https://ko-fi.com/vinzent",
|
||||||
|
"version": "2.38.0"
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
PROMPT="$1"
|
||||||
|
TEMP_FILE="$OBSIDIAN_GIT_CREDENTIALS_INPUT"
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
rm -f "$TEMP_FILE" "$TEMP_FILE.response"
|
||||||
|
}
|
||||||
|
trap cleanup EXIT
|
||||||
|
|
||||||
|
echo "$PROMPT" > "$TEMP_FILE"
|
||||||
|
|
||||||
|
while [ ! -e "$TEMP_FILE.response" ]; do
|
||||||
|
if [ ! -e "$TEMP_FILE" ]; then
|
||||||
|
echo "Trigger file got removed: Abort" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
sleep 0.1
|
||||||
|
done
|
||||||
|
|
||||||
|
RESPONSE=$(cat "$TEMP_FILE.response")
|
||||||
|
|
||||||
|
echo "$RESPONSE"
|
||||||
@@ -0,0 +1,710 @@
|
|||||||
|
@keyframes loading {
|
||||||
|
0% {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-signs-gutter {
|
||||||
|
.cm-gutterElement {
|
||||||
|
/* Needed to align the sign properly for different line heigts. Such as
|
||||||
|
* when having a heading or list item.
|
||||||
|
*/
|
||||||
|
padding-top: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-type="git-view"] .button-border {
|
||||||
|
border: 2px solid var(--interactive-accent);
|
||||||
|
border-radius: var(--radius-s);
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-type="git-view"] .view-content {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-type="git-history-view"] .view-content {
|
||||||
|
padding-left: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading > svg {
|
||||||
|
animation: 2s linear infinite loading;
|
||||||
|
transform-origin: 50% 50%;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.obsidian-git-center {
|
||||||
|
margin: auto;
|
||||||
|
text-align: center;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.obsidian-git-textarea {
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.obsidian-git-disabled {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.obsidian-git-center-button {
|
||||||
|
display: block;
|
||||||
|
margin: 20px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip.mod-left {
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tooltip.mod-right {
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Limits the scrollbar to the view body */
|
||||||
|
.git-view {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Re-enable wrapping of nav buttns to prevent overflow on smaller screens #*/
|
||||||
|
.workspace-drawer .git-view .nav-buttons-container {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-tools {
|
||||||
|
display: flex;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
.git-tools .type {
|
||||||
|
padding-left: var(--size-2-1);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-tools .type[data-type="M"] {
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
.git-tools .type[data-type="D"] {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
.git-tools .buttons {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.git-tools .buttons > * {
|
||||||
|
padding: 0 0;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-type="git-view"] .tree-item-self,
|
||||||
|
.workspace-leaf-content[data-type="git-history-view"] .tree-item-self {
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.workspace-leaf-content[data-type="git-view"]
|
||||||
|
.tree-item-self:hover
|
||||||
|
.clickable-icon,
|
||||||
|
.workspace-leaf-content[data-type="git-history-view"]
|
||||||
|
.tree-item-self:hover
|
||||||
|
.clickable-icon {
|
||||||
|
color: var(--icon-color-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Highlight an item as active if it's diff is currently opened */
|
||||||
|
.is-active .git-tools .buttons > * {
|
||||||
|
color: var(--nav-item-color-active);
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-author {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-date {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-ref {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ====== diff2html ======
|
||||||
|
The following styles are adapted from the obsidian-version-history plugin by
|
||||||
|
@kometenstaub https://github.com/kometenstaub/obsidian-version-history-diff/blob/main/src/styles.scss
|
||||||
|
which itself is adapted from the diff2html library with the following original license:
|
||||||
|
|
||||||
|
https://github.com/rtfpessoa/diff2html/blob/master/LICENSE.md
|
||||||
|
|
||||||
|
Copyright 2014-2016 Rodrigo Fernandes https://rtfpessoa.github.io/
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
||||||
|
documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
|
||||||
|
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
|
||||||
|
Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||||
|
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.theme-dark,
|
||||||
|
.theme-light {
|
||||||
|
--git-delete-bg: #ff475040;
|
||||||
|
--git-delete-hl: #96050a75;
|
||||||
|
--git-insert-bg: #68d36840;
|
||||||
|
--git-insert-hl: #23c02350;
|
||||||
|
--git-change-bg: #ffd55840;
|
||||||
|
--git-selected: #3572b0;
|
||||||
|
|
||||||
|
--git-delete: #c33;
|
||||||
|
--git-insert: #399839;
|
||||||
|
--git-change: #d0b44c;
|
||||||
|
--git-move: #3572b0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-diff {
|
||||||
|
.d2h-d-none {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.d2h-wrapper {
|
||||||
|
text-align: left;
|
||||||
|
border-radius: 0.25em;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
.d2h-file-header.d2h-file-header {
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
border-bottom: 1px solid var(--background-modifier-border);
|
||||||
|
font-family:
|
||||||
|
Source Sans Pro,
|
||||||
|
Helvetica Neue,
|
||||||
|
Helvetica,
|
||||||
|
Arial,
|
||||||
|
sans-serif;
|
||||||
|
height: 35px;
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
.d2h-file-header,
|
||||||
|
.d2h-file-stats {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.d2h-file-header {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.d2h-file-stats {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
.d2h-lines-added {
|
||||||
|
border: 1px solid var(--color-green);
|
||||||
|
border-radius: 5px 0 0 5px;
|
||||||
|
color: var(--color-green);
|
||||||
|
padding: 2px;
|
||||||
|
text-align: right;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.d2h-lines-deleted {
|
||||||
|
border: 1px solid var(--color-red);
|
||||||
|
border-radius: 0 5px 5px 0;
|
||||||
|
color: var(--color-red);
|
||||||
|
margin-left: 1px;
|
||||||
|
padding: 2px;
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.d2h-file-name-wrapper {
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
font-size: 15px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.d2h-file-name {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
color: var(--text-normal);
|
||||||
|
font-size: var(--h5-size);
|
||||||
|
}
|
||||||
|
.d2h-file-wrapper {
|
||||||
|
border: 1px solid var(--background-secondary-alt);
|
||||||
|
border-radius: 3px;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
max-height: 100%;
|
||||||
|
}
|
||||||
|
.d2h-file-collapse {
|
||||||
|
-webkit-box-pack: end;
|
||||||
|
-ms-flex-pack: end;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
align-items: center;
|
||||||
|
border: 1px solid var(--background-secondary-alt);
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: none;
|
||||||
|
font-size: 12px;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding: 4px 8px;
|
||||||
|
}
|
||||||
|
.d2h-file-collapse.d2h-selected {
|
||||||
|
background-color: var(--git-selected);
|
||||||
|
}
|
||||||
|
.d2h-file-collapse-input {
|
||||||
|
margin: 0 4px 0 0;
|
||||||
|
}
|
||||||
|
.d2h-diff-table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
font-family: var(--font-monospace);
|
||||||
|
font-size: var(--code-size);
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.d2h-files-diff {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.d2h-file-diff {
|
||||||
|
/*
|
||||||
|
overflow-y: scroll;
|
||||||
|
*/
|
||||||
|
border-radius: 5px;
|
||||||
|
font-size: var(--font-text-size);
|
||||||
|
line-height: var(--line-height-normal);
|
||||||
|
}
|
||||||
|
.d2h-file-side-diff {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: -8px;
|
||||||
|
margin-right: -4px;
|
||||||
|
overflow-x: scroll;
|
||||||
|
overflow-y: hidden;
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
.d2h-code-line {
|
||||||
|
padding-left: 6em;
|
||||||
|
padding-right: 1.5em;
|
||||||
|
}
|
||||||
|
.d2h-code-line,
|
||||||
|
.d2h-code-side-line {
|
||||||
|
display: inline-block;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.d2h-code-side-line {
|
||||||
|
/* needed to be changed */
|
||||||
|
padding-left: 0.5em;
|
||||||
|
padding-right: 0.5em;
|
||||||
|
}
|
||||||
|
.d2h-code-line-ctn {
|
||||||
|
word-wrap: normal;
|
||||||
|
background: none;
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-user-select: text;
|
||||||
|
-moz-user-select: text;
|
||||||
|
-ms-user-select: text;
|
||||||
|
user-select: text;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 100%;
|
||||||
|
/* only works for line-by-line */
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
.d2h-code-line del,
|
||||||
|
.d2h-code-side-line del {
|
||||||
|
background-color: var(--git-delete-hl);
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
.d2h-code-line del,
|
||||||
|
.d2h-code-line ins,
|
||||||
|
.d2h-code-side-line del,
|
||||||
|
.d2h-code-side-line ins {
|
||||||
|
border-radius: 0.2em;
|
||||||
|
display: inline-block;
|
||||||
|
margin-top: -1px;
|
||||||
|
text-decoration: none;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.d2h-code-line ins,
|
||||||
|
.d2h-code-side-line ins {
|
||||||
|
background-color: var(--git-insert-hl);
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.d2h-code-line-prefix {
|
||||||
|
word-wrap: normal;
|
||||||
|
background: none;
|
||||||
|
display: inline;
|
||||||
|
padding: 0;
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
.line-num1 {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.line-num1,
|
||||||
|
.line-num2 {
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: hidden;
|
||||||
|
/*
|
||||||
|
padding: 0 0.5em;
|
||||||
|
*/
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
width: 2.5em;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.line-num2 {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
.d2h-code-linenumber {
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border: solid var(--background-modifier-border);
|
||||||
|
border-width: 0 1px;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: var(--text-faint);
|
||||||
|
cursor: pointer;
|
||||||
|
display: inline-block;
|
||||||
|
position: absolute;
|
||||||
|
text-align: right;
|
||||||
|
width: 5.5em;
|
||||||
|
}
|
||||||
|
.d2h-code-linenumber:after {
|
||||||
|
content: "\200b";
|
||||||
|
}
|
||||||
|
.d2h-code-side-linenumber {
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border: solid var(--background-modifier-border);
|
||||||
|
border-width: 0 1px;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: var(--text-faint);
|
||||||
|
cursor: pointer;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0 0.5em;
|
||||||
|
text-align: right;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
width: 4em;
|
||||||
|
/* needed to be changed */
|
||||||
|
display: table-cell;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.d2h-code-side-linenumber:after {
|
||||||
|
content: "\200b";
|
||||||
|
}
|
||||||
|
.d2h-code-side-emptyplaceholder,
|
||||||
|
.d2h-emptyplaceholder {
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border-color: var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
.d2h-code-line-prefix,
|
||||||
|
.d2h-code-linenumber,
|
||||||
|
.d2h-code-side-linenumber,
|
||||||
|
.d2h-emptyplaceholder {
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.d2h-code-linenumber,
|
||||||
|
.d2h-code-side-linenumber {
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
.d2h-del {
|
||||||
|
background-color: var(--git-delete-bg);
|
||||||
|
border-color: var(--git-delete-hl);
|
||||||
|
}
|
||||||
|
.d2h-ins {
|
||||||
|
background-color: var(--git-insert-bg);
|
||||||
|
border-color: var(--git-insert-hl);
|
||||||
|
}
|
||||||
|
.d2h-info {
|
||||||
|
background-color: var(--background-primary);
|
||||||
|
border-color: var(--background-modifier-border);
|
||||||
|
color: var(--text-faint);
|
||||||
|
}
|
||||||
|
.d2h-del,
|
||||||
|
.d2h-ins,
|
||||||
|
.d2h-file-diff .d2h-change {
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
.d2h-file-diff .d2h-del.d2h-change {
|
||||||
|
background-color: var(--git-change-bg);
|
||||||
|
}
|
||||||
|
.d2h-file-diff .d2h-ins.d2h-change {
|
||||||
|
background-color: var(--git-insert-bg);
|
||||||
|
}
|
||||||
|
.d2h-file-list-wrapper {
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: default;
|
||||||
|
-webkit-user-drag: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.d2h-file-list-header {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.d2h-file-list-title {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.d2h-file-list-line {
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.d2h-file-list {
|
||||||
|
}
|
||||||
|
.d2h-file-list > li {
|
||||||
|
border-bottom: 1px solid var(--background-modifier-border);
|
||||||
|
margin: 0;
|
||||||
|
padding: 5px 10px;
|
||||||
|
}
|
||||||
|
.d2h-file-list > li:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.d2h-file-switch {
|
||||||
|
cursor: pointer;
|
||||||
|
display: none;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
.d2h-icon {
|
||||||
|
fill: currentColor;
|
||||||
|
margin-right: 10px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.d2h-deleted {
|
||||||
|
color: var(--git-delete);
|
||||||
|
}
|
||||||
|
.d2h-added {
|
||||||
|
color: var(--git-insert);
|
||||||
|
}
|
||||||
|
.d2h-changed {
|
||||||
|
color: var(--git-change);
|
||||||
|
}
|
||||||
|
.d2h-moved {
|
||||||
|
color: var(--git-move);
|
||||||
|
}
|
||||||
|
.d2h-tag {
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: flex;
|
||||||
|
font-size: 10px;
|
||||||
|
margin-left: 5px;
|
||||||
|
padding: 0 2px;
|
||||||
|
}
|
||||||
|
.d2h-deleted-tag {
|
||||||
|
border: 1px solid var(--git-delete);
|
||||||
|
}
|
||||||
|
.d2h-added-tag {
|
||||||
|
border: 1px solid var(--git-insert);
|
||||||
|
}
|
||||||
|
.d2h-changed-tag {
|
||||||
|
border: 1px solid var(--git-change);
|
||||||
|
}
|
||||||
|
.d2h-moved-tag {
|
||||||
|
border: 1px solid var(--git-move);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* needed for line-by-line*/
|
||||||
|
|
||||||
|
.d2h-diff-tbody {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ====================== Line Authoring Information ====================== */
|
||||||
|
|
||||||
|
.cm-gutterElement.obs-git-blame-gutter {
|
||||||
|
/* Add background color to spacing inbetween and around the gutter for better aesthetics */
|
||||||
|
border-width: 0px 2px 0.2px 2px;
|
||||||
|
border-style: solid;
|
||||||
|
border-color: var(--background-secondary);
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.cm-gutterElement.obs-git-blame-gutter > div,
|
||||||
|
.line-author-settings-preview {
|
||||||
|
/* delegate text color to settings */
|
||||||
|
color: var(--obs-git-gutter-text);
|
||||||
|
font-family: monospace;
|
||||||
|
height: 100%; /* ensure, that age-based background color occupies entire parent */
|
||||||
|
text-align: right;
|
||||||
|
padding: 0px 6px 0px 6px;
|
||||||
|
white-space: pre; /* Keep spaces and do not collapse them. */
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 800px) {
|
||||||
|
/* hide git blame gutter not to superpose text */
|
||||||
|
.cm-gutterElement.obs-git-blame-gutter {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-unified-diff-view,
|
||||||
|
.git-split-diff-view .cm-deletedLine .cm-changedText {
|
||||||
|
background-color: #ee443330;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-unified-diff-view,
|
||||||
|
.git-split-diff-view .cm-insertedLine .cm-changedText {
|
||||||
|
background-color: #22bb2230;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-obscure-prompt[git-is-obscured="true"] #git-show-password:after {
|
||||||
|
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>');
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-obscure-prompt[git-is-obscured="false"] #git-show-password:after {
|
||||||
|
-webkit-mask-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-eye-off"><path d="M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49"></path><path d="M14.084 14.158a3 3 0 0 1-4.242-4.242"></path><path d="M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143"></path><path d="m2 2 20 20"></path></svg>');
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Override styling of Codemirror merge view "collapsed lines" indicator */
|
||||||
|
.git-split-diff-view .ͼ2 .cm-collapsedLines {
|
||||||
|
background: var(--interactive-normal);
|
||||||
|
border-radius: var(--radius-m);
|
||||||
|
color: var(--text-accent);
|
||||||
|
font-size: var(--font-small);
|
||||||
|
padding: var(--size-4-1) var(--size-4-1);
|
||||||
|
}
|
||||||
|
.git-split-diff-view .ͼ2 .cm-collapsedLines:hover {
|
||||||
|
background: var(--interactive-hover);
|
||||||
|
color: var(--text-accent-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-signs-gutter {
|
||||||
|
.cm-gutterElement {
|
||||||
|
display: grid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker:hover {
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.git-add {
|
||||||
|
background-color: var(--color-green);
|
||||||
|
justify-self: center;
|
||||||
|
height: inherit;
|
||||||
|
width: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.git-change {
|
||||||
|
background-color: var(--color-yellow);
|
||||||
|
justify-self: center;
|
||||||
|
height: inherit;
|
||||||
|
width: 0.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.git-changedelete {
|
||||||
|
color: var(--color-yellow);
|
||||||
|
font-weight: var(--font-bold);
|
||||||
|
font-size: 1rem;
|
||||||
|
justify-self: center;
|
||||||
|
height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.git-delete {
|
||||||
|
background-color: var(--color-red);
|
||||||
|
height: 0.2rem;
|
||||||
|
width: 0.8rem;
|
||||||
|
align-self: end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.git-topdelete {
|
||||||
|
background-color: var(--color-red);
|
||||||
|
height: 0.2rem;
|
||||||
|
width: 0.8rem;
|
||||||
|
align-self: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:hover > .git-gutter-marker.git-change {
|
||||||
|
width: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:hover > .git-gutter-marker.git-add {
|
||||||
|
width: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:hover > .git-gutter-marker.git-delete {
|
||||||
|
height: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:hover > .git-gutter-marker.git-topdelete {
|
||||||
|
height: 0.6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
div:hover > .git-gutter-marker.git-changedelete {
|
||||||
|
font-weight: var(--font-bold);
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-gutter-marker.staged {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-diff {
|
||||||
|
.cm-merge-revert {
|
||||||
|
width: 4em;
|
||||||
|
}
|
||||||
|
/* Ensure that merge revert markers are positioned correctly */
|
||||||
|
.cm-merge-revert > * {
|
||||||
|
position: absolute;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Prevent shifting of the editor when git signs gutter is the only gutter present */
|
||||||
|
.cm-gutters.cm-gutters-before:has(> .git-signs-gutter:only-child) {
|
||||||
|
margin-inline-end: 0;
|
||||||
|
.git-signs-gutter {
|
||||||
|
margin-inline-start: -1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-changes-status-bar-colored {
|
||||||
|
.git-add {
|
||||||
|
color: var(--color-green);
|
||||||
|
}
|
||||||
|
.git-change {
|
||||||
|
color: var(--color-yellow);
|
||||||
|
}
|
||||||
|
.git-delete {
|
||||||
|
color: var(--color-red);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-changes-status-bar .git-add {
|
||||||
|
margin-right: 0.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-changes-status-bar .git-change {
|
||||||
|
margin-right: 0.3em;
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"imageNamePattern": "{{fileName}}_{{DATE:YYYY-MM-DD}}",
|
||||||
|
"dupNumberAtStart": false,
|
||||||
|
"dupNumberDelimiter": "-",
|
||||||
|
"dupNumberAlways": false,
|
||||||
|
"autoRename": false,
|
||||||
|
"handleAllAttachments": false,
|
||||||
|
"excludeExtensionPattern": "",
|
||||||
|
"disableRenameNotice": false
|
||||||
|
}
|
||||||
@@ -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,5 @@
|
|||||||
|
{
|
||||||
|
"appliedMigrations": [
|
||||||
|
"tokens-to-secretstorage-v1"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
{
|
||||||
|
"pluginList": [
|
||||||
|
"mnaoumov/obsidian-nested-properties",
|
||||||
|
"davidvkimball/obsidian-property-over-file-name",
|
||||||
|
"davidvkimball/obsidian-file-name-history",
|
||||||
|
"davidvkimball/obsidian-explorer-focus",
|
||||||
|
"davidvkimball/obsidian-ui-tweaker",
|
||||||
|
"davidvkimball/obsidian-home-base",
|
||||||
|
"davidvkimball/obsidian-image-manager",
|
||||||
|
"davidvkimball/obsidian-vault-cms",
|
||||||
|
"davidvkimball/obsidian-bases-cms",
|
||||||
|
"davidvkimball/obsidian-oxygen-settings",
|
||||||
|
"davidvkimball/obsidian-seo",
|
||||||
|
"davidvkimball/obsidian-disable-tabs",
|
||||||
|
"davidvkimball/obsidian-astro-composer"
|
||||||
|
],
|
||||||
|
"pluginSubListFrozenVersion": [
|
||||||
|
{
|
||||||
|
"repo": "mnaoumov/obsidian-nested-properties",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-property-over-file-name",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-file-name-history",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-explorer-focus",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-ui-tweaker",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-home-base",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-image-manager",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-vault-cms",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-bases-cms",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-oxygen-settings",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-seo",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-disable-tabs",
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "davidvkimball/obsidian-astro-composer",
|
||||||
|
"version": "latest"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"themesList": [],
|
||||||
|
"updateAtStartup": true,
|
||||||
|
"updateThemesAtStartup": true,
|
||||||
|
"enableAfterInstall": true,
|
||||||
|
"loggingEnabled": false,
|
||||||
|
"loggingPath": "BRAT-log",
|
||||||
|
"loggingVerboseEnabled": false,
|
||||||
|
"debuggingMode": false,
|
||||||
|
"notificationsEnabled": true,
|
||||||
|
"globalTokenName": "",
|
||||||
|
"personalAccessToken": "",
|
||||||
|
"selectLatestPluginVersionByDefault": false,
|
||||||
|
"allowIncompatiblePlugins": false
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian42-brat",
|
||||||
|
"name": "BRAT",
|
||||||
|
"version": "2.0.2",
|
||||||
|
"minAppVersion": "1.11.4",
|
||||||
|
"description": "Easily install a beta version of a plugin for testing.",
|
||||||
|
"author": "TfTHacker",
|
||||||
|
"authorUrl": "https://github.com/TfTHacker/obsidian42-brat",
|
||||||
|
"helpUrl": "https://tfthacker.com/BRAT",
|
||||||
|
"isDesktopOnly": false,
|
||||||
|
"fundingUrl": {
|
||||||
|
"Visit my site": "https://tfthacker.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,152 @@
|
|||||||
|
.brat-modal .modal-button-container {
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-modal .disabled-setting {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-modal .disabled-setting:hover {
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Input validation styles */
|
||||||
|
.brat-settings .valid-input,
|
||||||
|
.brat-modal .valid-repository {
|
||||||
|
border-color: var(--color-green);
|
||||||
|
}
|
||||||
|
.brat-settings .invalid-input,
|
||||||
|
.brat-modal .invalid-repository {
|
||||||
|
border-color: var(--color-red);
|
||||||
|
}
|
||||||
|
.brat-settings .validation-error,
|
||||||
|
.brat-modal .validation-error {
|
||||||
|
border-color: var(--color-orange);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Version selector */
|
||||||
|
.brat-version-selector {
|
||||||
|
width: 100%;
|
||||||
|
max-width: 400px;
|
||||||
|
justify-content: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-token-input {
|
||||||
|
min-width: 33%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Token info container styles */
|
||||||
|
.brat-token-info {
|
||||||
|
margin-top: 8px;
|
||||||
|
font-size: 0.8em;
|
||||||
|
padding: 8px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Token status indicators */
|
||||||
|
.brat-token-info.valid,
|
||||||
|
.brat-token-status.valid {
|
||||||
|
color: var(--color-green);
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-token-info.invalid,
|
||||||
|
.brat-token-status.invalid {
|
||||||
|
color: var(--color-red);
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-token-info.valid {
|
||||||
|
border-left: 3px solid var(--color-green);
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-token-info.invalid {
|
||||||
|
border-left: 3px solid var(--color-red);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Token details and status */
|
||||||
|
.brat-token-status {
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-token-details {
|
||||||
|
margin-top: 4px;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Token warnings */
|
||||||
|
.brat-token-warning {
|
||||||
|
color: var(--color-orange);
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Token additional info */
|
||||||
|
.brat-token-scopes,
|
||||||
|
.brat-token-rate {
|
||||||
|
color: var(--text-muted);
|
||||||
|
margin-top: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Flex break utility */
|
||||||
|
.brat-modal .break {
|
||||||
|
flex-basis: 100%;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Validation status */
|
||||||
|
.brat-modal .validation-status-error {
|
||||||
|
color: var(--text-error);
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-modal .validation-status {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
font-size: 0.8em;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.confirm-modal .ok-button {
|
||||||
|
margin-right: 10px;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide filtered plugin items */
|
||||||
|
.brat-plugin-item[hidden] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide filtered theme items */
|
||||||
|
.brat-theme-item[hidden] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Filter and button layout */
|
||||||
|
.brat-filter-and-button {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 10px;
|
||||||
|
margin: 0.75em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-filter-input {
|
||||||
|
max-width: 300px;
|
||||||
|
padding: 4px 8px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-filter-input:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-filter-and-button .setting-item {
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brat-filter-and-button .setting-item-control {
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"useCache": true,
|
||||||
|
"hideExcluded": true,
|
||||||
|
"recencyBoost": "0",
|
||||||
|
"downrankedFoldersFilters": [],
|
||||||
|
"ignoreDiacritics": true,
|
||||||
|
"ignoreArabicDiacritics": false,
|
||||||
|
"indexedFileTypes": [],
|
||||||
|
"displayTitle": "title",
|
||||||
|
"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
|
||||||
|
}
|
||||||
+171
File diff suppressed because one or more lines are too long
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"id": "omnisearch",
|
||||||
|
"name": "Omnisearch",
|
||||||
|
"version": "1.28.2",
|
||||||
|
"minAppVersion": "1.7.2",
|
||||||
|
"description": "A search engine that just works",
|
||||||
|
"author": "Simon Cambier",
|
||||||
|
"authorUrl": "https://github.com/scambier/obsidian-omnisearch",
|
||||||
|
"fundingUrl": {
|
||||||
|
"Github": "https://github.com/sponsors/scambier",
|
||||||
|
"Ko-fi": "https://ko-fi.com/scambier"
|
||||||
|
},
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
+135
@@ -0,0 +1,135 @@
|
|||||||
|
.omnisearch-modal {
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result {
|
||||||
|
white-space: normal;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
/* justify-content: space-between; */
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__title-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
column-gap: 5px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__title {
|
||||||
|
white-space: pre-wrap;
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
gap: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__title > span {
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__folder-path {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
gap: 5px;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__extension {
|
||||||
|
font-size: 0.7rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__counter {
|
||||||
|
font-size: 0.7rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__body {
|
||||||
|
white-space: normal;
|
||||||
|
font-size: small;
|
||||||
|
word-wrap: normal;
|
||||||
|
|
||||||
|
overflow: hidden;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
|
||||||
|
color: var(--text-muted);
|
||||||
|
margin-inline-start: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__embed {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.omnisearch-result__image-container {
|
||||||
|
flex-basis: 20%;
|
||||||
|
text-align: end;
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-highlight {
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-default-highlight {
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration-color: var(--text-highlight-bg);
|
||||||
|
text-decoration-thickness: 3px;
|
||||||
|
text-underline-offset: -1px;
|
||||||
|
text-decoration-skip-ink: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-input-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-direction: row;
|
||||||
|
gap: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__icon {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__icon svg {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-result__icon--emoji {
|
||||||
|
font-size: 16px;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
.omnisearch-input-container {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-input-container__buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
width: 100%;
|
||||||
|
padding: 0 1em 0 1em;
|
||||||
|
gap: 1em;
|
||||||
|
}
|
||||||
|
.omnisearch-input-container__buttons > button {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 600px) {
|
||||||
|
.omnisearch-input-container__buttons {
|
||||||
|
margin-inline-end: 1em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.omnisearch-input-field {
|
||||||
|
position: relative;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
@@ -0,0 +1,553 @@
|
|||||||
|
{
|
||||||
|
"lightStyle": "oxygen-light",
|
||||||
|
"darkStyle": "oxygen-dark",
|
||||||
|
"lightScheme": "oxygen-oxygen-light",
|
||||||
|
"darkScheme": "oxygen-oxygen-dark",
|
||||||
|
"editorFont": "",
|
||||||
|
"lineHeight": 1.5,
|
||||||
|
"lineWidth": 40,
|
||||||
|
"lineWidthWide": 50,
|
||||||
|
"maxWidth": 88,
|
||||||
|
"textNormal": 16,
|
||||||
|
"textSmall": 13,
|
||||||
|
"imgGrid": true,
|
||||||
|
"imgWidth": "img-default-width",
|
||||||
|
"tableWidth": "table-default-width",
|
||||||
|
"iframeWidth": "iframe-default-width",
|
||||||
|
"mapWidth": "map-default-width",
|
||||||
|
"chartWidth": "chart-default-width",
|
||||||
|
"colorfulHeadings": false,
|
||||||
|
"colorfulFrame": false,
|
||||||
|
"colorfulActiveStates": false,
|
||||||
|
"trimNames": true,
|
||||||
|
"labeledNav": false,
|
||||||
|
"fullWidthMedia": true,
|
||||||
|
"workspaceBorders": "enhanced",
|
||||||
|
"minimalStatus": true,
|
||||||
|
"underlineInternal": true,
|
||||||
|
"underlineExternal": true,
|
||||||
|
"folding": true,
|
||||||
|
"lineNumbers": false,
|
||||||
|
"readableLineLength": true,
|
||||||
|
"devBlockWidth": false,
|
||||||
|
"customPresets": [
|
||||||
|
{
|
||||||
|
"id": "discord",
|
||||||
|
"name": "Discord",
|
||||||
|
"author": "David V. Kimball",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"light": {
|
||||||
|
"base": {
|
||||||
|
"h": 0,
|
||||||
|
"s": 0,
|
||||||
|
"l": 98
|
||||||
|
},
|
||||||
|
"accent": {
|
||||||
|
"h": 235,
|
||||||
|
"s": 86,
|
||||||
|
"l": 65
|
||||||
|
},
|
||||||
|
"colors": {
|
||||||
|
"bg1": "#fbfbfb",
|
||||||
|
"bg2": "#f3f3f4",
|
||||||
|
"bg3": "#ffffff"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dark": {
|
||||||
|
"base": {
|
||||||
|
"h": 240,
|
||||||
|
"s": 6,
|
||||||
|
"l": 7
|
||||||
|
},
|
||||||
|
"accent": {
|
||||||
|
"h": 235,
|
||||||
|
"s": 86,
|
||||||
|
"l": 65
|
||||||
|
},
|
||||||
|
"colors": {
|
||||||
|
"bg1": "#1a1a1e",
|
||||||
|
"bg2": "#121214",
|
||||||
|
"ui3": "#222327"
|
||||||
|
},
|
||||||
|
"frameLightnessOffset": -5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enableCustomPresets": true,
|
||||||
|
"navIndentationGuideWidth": "0px",
|
||||||
|
"navIndentationGuideColor": "rgba(var(--mono-rgb-100), 0.12)",
|
||||||
|
"animationPersonality": "default",
|
||||||
|
"animationSpeed": 0.7,
|
||||||
|
"enableBlur": false,
|
||||||
|
"useDefaultFolderIcon": false,
|
||||||
|
"focusMode": false,
|
||||||
|
"deemphasizeProperties": false,
|
||||||
|
"autoHideTabBarWhenSingleTab": false,
|
||||||
|
"hideTitleBarOnHover": false,
|
||||||
|
"hideTabs": false,
|
||||||
|
"hideStatus": false,
|
||||||
|
"hideScroll": false,
|
||||||
|
"hideSidebarButtons": false,
|
||||||
|
"hideLeftSidebarButton": false,
|
||||||
|
"hideRightSidebarButton": false,
|
||||||
|
"hideTooltips": false,
|
||||||
|
"hideFileNavButtons": false,
|
||||||
|
"hideSearchSuggestions": false,
|
||||||
|
"hideSearchCounts": false,
|
||||||
|
"hideInstructions": false,
|
||||||
|
"hidePropertiesReading": true,
|
||||||
|
"hideVault": false,
|
||||||
|
"hidePropertiesHeading": true,
|
||||||
|
"hideAddPropertyButton": true,
|
||||||
|
"autoHideVaultSwitcher": true,
|
||||||
|
"autoHideVaultSwitcherBgTransparency": 1,
|
||||||
|
"hideHelpButton": false,
|
||||||
|
"autoHideSettingsButton": false,
|
||||||
|
"collapseFileExplorerButtons": true,
|
||||||
|
"autoHideFileExplorerNavHeader": false,
|
||||||
|
"autoHideOtherNavHeaders": false,
|
||||||
|
"autoHideLeftTabHeaders": false,
|
||||||
|
"autoHideRightTabHeaders": false,
|
||||||
|
"collapseOtherNavHeaders": false,
|
||||||
|
"autoCollapseRibbon": false,
|
||||||
|
"hideButtonNewNote": false,
|
||||||
|
"hideButtonNewFolder": false,
|
||||||
|
"hideButtonSortOrder": false,
|
||||||
|
"hideButtonAutoReveal": false,
|
||||||
|
"hideButtonCollapseAll": false,
|
||||||
|
"hideButtonReadingMode": false,
|
||||||
|
"hideButtonSearchSettings": false,
|
||||||
|
"hideTabListIcon": false,
|
||||||
|
"hideNewTabIcon": false,
|
||||||
|
"hideTabCloseButton": false,
|
||||||
|
"hideIconMobileChevrons": false,
|
||||||
|
"hideButtonMobileNavbarActionBack": false,
|
||||||
|
"hideButtonMobileNavbarActionForward": false,
|
||||||
|
"hideButtonMobileNavbarActionQuickSwitcher": false,
|
||||||
|
"hideButtonMobileNavbarActionNewTab": false,
|
||||||
|
"hideButtonMobileNavbarActionTabs": false,
|
||||||
|
"hideButtonMobileNavbarActionMenu": false,
|
||||||
|
"swapMobileNewTabIcon": false,
|
||||||
|
"orderNavbarButton1": "order-navbar-button-nth-child-1-1",
|
||||||
|
"orderNavbarButton2": "order-navbar-button-nth-child-2-2",
|
||||||
|
"orderNavbarButton3": "order-navbar-button-nth-child-3-3",
|
||||||
|
"orderNavbarButton4": "order-navbar-button-nth-child-4-4",
|
||||||
|
"orderNavbarButton5": "order-navbar-button-nth-child-5-5",
|
||||||
|
"orderNavbarButton6": "order-navbar-button-nth-child-6-6",
|
||||||
|
"helpButtonReplacement": {
|
||||||
|
"enabled": false,
|
||||||
|
"commandId": "oxygen-settings:oxygen-settings:open-settings",
|
||||||
|
"iconId": "lucide-settings-2"
|
||||||
|
},
|
||||||
|
"autoHideVaultSwitcherTransparency": 0,
|
||||||
|
"zenMode": false,
|
||||||
|
"zenModeFullscreen": false,
|
||||||
|
"zenModeLeftSidebar": true,
|
||||||
|
"zenModeRightSidebar": true,
|
||||||
|
"bordersToggle": false,
|
||||||
|
"workspaceBordersEnhanced": true,
|
||||||
|
"keepTabBorders": false,
|
||||||
|
"autoHideScrollbars": false,
|
||||||
|
"statusBarStyle": "status-bar-default",
|
||||||
|
"uiHoverReveal": false,
|
||||||
|
"uiHoverRevealViewHeaderLeft": false,
|
||||||
|
"uiHoverRevealViewActions": false,
|
||||||
|
"uiHoverRevealSidebarToggleLeft": false,
|
||||||
|
"uiHoverRevealSidebarToggleRight": false,
|
||||||
|
"uiHoverRevealOpacity": 50,
|
||||||
|
"focusModeEnhanced": false,
|
||||||
|
"focusModeOpacity": 50,
|
||||||
|
"focusViewHeaderOpacity": 50,
|
||||||
|
"focusHideViewHeaderLeft": false,
|
||||||
|
"focusHideViewActions": false,
|
||||||
|
"focusHideSidebarToggleButtons": false,
|
||||||
|
"scrollbarHide": false,
|
||||||
|
"interfaceFont": "",
|
||||||
|
"densityModifier": 1,
|
||||||
|
"radiusModifier": 1,
|
||||||
|
"iconStrokeModifier": 1,
|
||||||
|
"layoutStyle": "minimal",
|
||||||
|
"elementStyle": "minimal",
|
||||||
|
"mobileStyle": "stable",
|
||||||
|
"tabTitleFontSize": "0.9em",
|
||||||
|
"tabTitleFontWeight": 400,
|
||||||
|
"tabTitleAlignment": "center",
|
||||||
|
"headerHeight": "40px",
|
||||||
|
"fileHeaderVisibility": "minimal-tab-title-hover",
|
||||||
|
"sidebarActiveFileStyle": "subtle",
|
||||||
|
"sidebarColorfulFolders": "none",
|
||||||
|
"sidebarItemNameSize": "13px",
|
||||||
|
"sidebarLargeNewNoteButton": false,
|
||||||
|
"sidebarFullItemName": false,
|
||||||
|
"sidebarBoldFolders": false,
|
||||||
|
"sidebarAlwaysShowVaultSwitcher": false,
|
||||||
|
"indentationGuidesThickness": "thin",
|
||||||
|
"indentationGuidesColor": "subtle",
|
||||||
|
"windowFrameOpacity": 100,
|
||||||
|
"windowFrameInvertColors": false,
|
||||||
|
"windowTitleOff": false,
|
||||||
|
"frameBackgroundLight": "",
|
||||||
|
"frameBackgroundDark": "",
|
||||||
|
"frameIconColorLight": "",
|
||||||
|
"frameIconColorDark": "",
|
||||||
|
"titlebarTextColorFocusedLight": "",
|
||||||
|
"titlebarTextColorFocusedDark": "",
|
||||||
|
"titlebarTextColorLight": "",
|
||||||
|
"titlebarTextColorDark": "",
|
||||||
|
"titlebarTextWeight": 600,
|
||||||
|
"tabletLeftSidebarWidth": "",
|
||||||
|
"tabletRightSidebarWidth": "",
|
||||||
|
"tabletLeftSidebarWidthPinned": "",
|
||||||
|
"tabletRightSidebarWidthPinned": "",
|
||||||
|
"monospaceFont": "",
|
||||||
|
"boldTextModifier": 200,
|
||||||
|
"focusView": false,
|
||||||
|
"disableQuickModeSwitcher": false,
|
||||||
|
"activeLineStyle": "none",
|
||||||
|
"activeLineColor": "monochrome",
|
||||||
|
"activeLineBackgroundColorLight": "",
|
||||||
|
"activeLineBackgroundColorDark": "",
|
||||||
|
"normalLineWidth": "",
|
||||||
|
"wideLineWidth": "",
|
||||||
|
"basesWidth": "default",
|
||||||
|
"imageWidth": "default",
|
||||||
|
"mapWidthNew": "default",
|
||||||
|
"chartWidthNew": "default",
|
||||||
|
"editorIndentationThickness": "none",
|
||||||
|
"editorIndentationColor": "subtle",
|
||||||
|
"editorIndentationGuideColorLight": "",
|
||||||
|
"editorIndentationGuideColorDark": "",
|
||||||
|
"editorIndentationGuideColorActiveLight": "",
|
||||||
|
"editorIndentationGuideColorActiveDark": "",
|
||||||
|
"propertiesStyle": "default",
|
||||||
|
"propertiesHideHeading": false,
|
||||||
|
"propertiesHideAddButton": false,
|
||||||
|
"propertiesHideIcons": false,
|
||||||
|
"propertiesDisableLinkWrap": false,
|
||||||
|
"propertiesNameWidth": 1,
|
||||||
|
"headingSpacing": "",
|
||||||
|
"paragraphSpacing": "",
|
||||||
|
"readableSpacing": false,
|
||||||
|
"readableSpacingModifier": 0.25,
|
||||||
|
"pSpacing": "",
|
||||||
|
"inlineTitleDisableBackground": false,
|
||||||
|
"inlineTitleFont": "",
|
||||||
|
"inlineTitleFontSize": "",
|
||||||
|
"inlineTitleFontWeight": 600,
|
||||||
|
"inlineTitleColorLight": "",
|
||||||
|
"inlineTitleColorDark": "",
|
||||||
|
"h1ColorLight": "",
|
||||||
|
"h1ColorDark": "",
|
||||||
|
"h1Font": "",
|
||||||
|
"h1Size": "",
|
||||||
|
"h1Weight": 600,
|
||||||
|
"h1Variant": "normal",
|
||||||
|
"h1Style": "normal",
|
||||||
|
"h1Transform": "normal",
|
||||||
|
"h1DividerLine": false,
|
||||||
|
"h2ColorLight": "",
|
||||||
|
"h2ColorDark": "",
|
||||||
|
"h2Font": "",
|
||||||
|
"h2Size": "",
|
||||||
|
"h2Weight": 600,
|
||||||
|
"h2Variant": "normal",
|
||||||
|
"h2Style": "normal",
|
||||||
|
"h2Transform": "normal",
|
||||||
|
"h2DividerLine": false,
|
||||||
|
"h3ColorLight": "",
|
||||||
|
"h3ColorDark": "",
|
||||||
|
"h3Font": "",
|
||||||
|
"h3Size": "",
|
||||||
|
"h3Weight": 600,
|
||||||
|
"h3Variant": "normal",
|
||||||
|
"h3Style": "normal",
|
||||||
|
"h3Transform": "normal",
|
||||||
|
"h3DividerLine": false,
|
||||||
|
"h4ColorLight": "",
|
||||||
|
"h4ColorDark": "",
|
||||||
|
"h4Font": "",
|
||||||
|
"h4Size": "",
|
||||||
|
"h4Weight": 500,
|
||||||
|
"h4Variant": "normal",
|
||||||
|
"h4Style": "normal",
|
||||||
|
"h4Transform": "normal",
|
||||||
|
"h4DividerLine": false,
|
||||||
|
"h5ColorLight": "",
|
||||||
|
"h5ColorDark": "",
|
||||||
|
"h5Font": "",
|
||||||
|
"h5Size": "",
|
||||||
|
"h5Weight": 500,
|
||||||
|
"h5Variant": "normal",
|
||||||
|
"h5Style": "normal",
|
||||||
|
"h5Transform": "normal",
|
||||||
|
"h5DividerLine": false,
|
||||||
|
"h6ColorLight": "",
|
||||||
|
"h6ColorDark": "",
|
||||||
|
"h6Font": "",
|
||||||
|
"h6Size": "",
|
||||||
|
"h6Weight": 400,
|
||||||
|
"h6Variant": "normal",
|
||||||
|
"h6Style": "normal",
|
||||||
|
"h6Transform": "normal",
|
||||||
|
"h6DividerLine": false,
|
||||||
|
"headingsColorfulText": false,
|
||||||
|
"headingsColorfulIndicator": false,
|
||||||
|
"headingsColorfulBackground": false,
|
||||||
|
"headingsColorfulFullWidth": false,
|
||||||
|
"horizontalRuleWidth": "",
|
||||||
|
"horizontalRuleThickness": 2,
|
||||||
|
"horizontalRuleAlignment": "start",
|
||||||
|
"horizontalRuleDashed": false,
|
||||||
|
"horizontalRuleDashedLineSize": "",
|
||||||
|
"horizontalRuleDashedLineSpacing": "",
|
||||||
|
"bannerDisabled": false,
|
||||||
|
"bannerImageHeight": "",
|
||||||
|
"bannerImageHeightSmall": "",
|
||||||
|
"bannerImageSideSpacing": "",
|
||||||
|
"bannerImageRadius": 8,
|
||||||
|
"bannerImageFit": "cover",
|
||||||
|
"bannerImageFadeOffset": "",
|
||||||
|
"bannerIconSize": "",
|
||||||
|
"bannerToContentOffset": "",
|
||||||
|
"blockquotesStyle": "default",
|
||||||
|
"blockquotesBorderThickness": 1,
|
||||||
|
"blockquotesFontSize": "",
|
||||||
|
"blockquotesTextColorLight": "",
|
||||||
|
"blockquotesTextColorDark": "",
|
||||||
|
"blockquotesBackgroundColorLight": "",
|
||||||
|
"blockquotesBackgroundColorDark": "",
|
||||||
|
"blockquotesBorderColorLight": "",
|
||||||
|
"blockquotesBorderColorDark": "",
|
||||||
|
"calloutsStyle": "filled",
|
||||||
|
"calloutsBlendMode": "normal",
|
||||||
|
"calloutsFontSize": "",
|
||||||
|
"codeBlocksStyle": "filled",
|
||||||
|
"codeBlocksFontSize": "",
|
||||||
|
"codeBlocksLineNumbers": false,
|
||||||
|
"codeBlocksScrollLongLines": false,
|
||||||
|
"codeBackgroundColorLight": "",
|
||||||
|
"codeBackgroundColorDark": "",
|
||||||
|
"codeTextColorLight": "",
|
||||||
|
"codeTextColorDark": "",
|
||||||
|
"codeCommentColorLight": "",
|
||||||
|
"codeCommentColorDark": "",
|
||||||
|
"codeFunctionColorLight": "",
|
||||||
|
"codeFunctionColorDark": "",
|
||||||
|
"codeKeywordColorLight": "",
|
||||||
|
"codeKeywordColorDark": "",
|
||||||
|
"codeImportantColorLight": "",
|
||||||
|
"codeImportantColorDark": "",
|
||||||
|
"codeOperatorColorLight": "",
|
||||||
|
"codeOperatorColorDark": "",
|
||||||
|
"codePropertyColorLight": "",
|
||||||
|
"codePropertyColorDark": "",
|
||||||
|
"codePunctuationColorLight": "",
|
||||||
|
"codePunctuationColorDark": "",
|
||||||
|
"codeStringColorLight": "",
|
||||||
|
"codeStringColorDark": "",
|
||||||
|
"codeTagColorLight": "",
|
||||||
|
"codeTagColorDark": "",
|
||||||
|
"codeValueColorLight": "",
|
||||||
|
"codeValueColorDark": "",
|
||||||
|
"embedsStyle": "clean",
|
||||||
|
"embedsBorderThickness": 2,
|
||||||
|
"embedsHideTitles": false,
|
||||||
|
"embedsMaxHeight": "",
|
||||||
|
"embedsStrict": false,
|
||||||
|
"embedsUnderline": false,
|
||||||
|
"embedsDecorationStyle": "solid",
|
||||||
|
"embedsDecorationColorLight": "",
|
||||||
|
"embedsDecorationColorDark": "",
|
||||||
|
"embedsBackgroundLight": "",
|
||||||
|
"embedsBackgroundDark": "",
|
||||||
|
"mediaRadius": 8,
|
||||||
|
"mediaOpacityDark": 1,
|
||||||
|
"mediaDisableMaximized": false,
|
||||||
|
"mediaDisableZoom": false,
|
||||||
|
"imageBlendLight": false,
|
||||||
|
"imageGridFit": "cover",
|
||||||
|
"imageGridBackgroundLight": "",
|
||||||
|
"imageGridBackgroundDark": "",
|
||||||
|
"pdfsPageStyle": "seamless",
|
||||||
|
"pdfsOpacityDark": 1,
|
||||||
|
"pdfsInvertDark": false,
|
||||||
|
"basesToolbarLabel": "visible",
|
||||||
|
"basesToolbarOpacity": 1,
|
||||||
|
"basesTableRowHeight": 30,
|
||||||
|
"basesStripedRows": false,
|
||||||
|
"basesStripedColumns": false,
|
||||||
|
"basesTableHeaderIcons": "visible",
|
||||||
|
"basesTableVerticalAlignment": "top",
|
||||||
|
"canvasBackgroundColor": "",
|
||||||
|
"canvasDotPatternColor": "",
|
||||||
|
"iconMuted": 0.5,
|
||||||
|
"iconColorLight": "",
|
||||||
|
"iconColorDark": "",
|
||||||
|
"iconColorHoverLight": "",
|
||||||
|
"iconColorHoverDark": "",
|
||||||
|
"iconColorActiveLight": "",
|
||||||
|
"iconColorActiveDark": "",
|
||||||
|
"iconColorFocusedLight": "",
|
||||||
|
"iconColorFocusedDark": "",
|
||||||
|
"graphLineColorLight": "",
|
||||||
|
"graphLineColorDark": "",
|
||||||
|
"graphNodeColorLight": "",
|
||||||
|
"graphNodeColorDark": "",
|
||||||
|
"graphNodeFocusedColorLight": "",
|
||||||
|
"graphNodeFocusedColorDark": "",
|
||||||
|
"graphNodeTagColorLight": "",
|
||||||
|
"graphNodeTagColorDark": "",
|
||||||
|
"graphNodeAttachmentColorLight": "",
|
||||||
|
"graphNodeAttachmentColorDark": "",
|
||||||
|
"graphNodeUnresolvedColorLight": "",
|
||||||
|
"graphNodeUnresolvedColorDark": "",
|
||||||
|
"dataviewTrimCols": false,
|
||||||
|
"dataviewInlineLists": false,
|
||||||
|
"dataviewMaxColWidth": "",
|
||||||
|
"linksInternalUnderline": "underline",
|
||||||
|
"linksExternalUnderline": "underline",
|
||||||
|
"linkColorLight": "",
|
||||||
|
"linkColorDark": "",
|
||||||
|
"linkColorHoverLight": "",
|
||||||
|
"linkColorHoverDark": "",
|
||||||
|
"linkUnresolvedColorLight": "",
|
||||||
|
"linkUnresolvedColorDark": "",
|
||||||
|
"linkUnresolvedDecorationColorLight": "",
|
||||||
|
"linkUnresolvedDecorationColorDark": "",
|
||||||
|
"linkUnresolvedOpacity": 0.5,
|
||||||
|
"linkExternalColorLight": "",
|
||||||
|
"linkExternalColorDark": "",
|
||||||
|
"linkExternalColorHoverLight": "",
|
||||||
|
"linkExternalColorHoverDark": "",
|
||||||
|
"listsSpacing": 0.075,
|
||||||
|
"listsIndent": 2,
|
||||||
|
"listsBulletColorLight": "",
|
||||||
|
"listsBulletColorDark": "",
|
||||||
|
"listsOrderedStyle": "decimal",
|
||||||
|
"listsDisableStrikeTasks": false,
|
||||||
|
"tablesFontSize": "",
|
||||||
|
"tablesRowLines": false,
|
||||||
|
"tablesColumnLines": false,
|
||||||
|
"tablesFrame": false,
|
||||||
|
"tablesStripedRows": false,
|
||||||
|
"tablesStripedColumns": false,
|
||||||
|
"tablesTabularFigures": false,
|
||||||
|
"tablesRowNumbers": false,
|
||||||
|
"tablesFitContentWidth": false,
|
||||||
|
"tablesDisableLineWrap": false,
|
||||||
|
"tablesHeaderAlignment": "start",
|
||||||
|
"tablesBodyAlignment": "start",
|
||||||
|
"tablesHighlightActiveRow": false,
|
||||||
|
"tableColumnMinWidth": "",
|
||||||
|
"tableColumnMaxWidth": "",
|
||||||
|
"maximizeTables": "maximize-tables-off",
|
||||||
|
"tableCenter": false,
|
||||||
|
"tableRowBackgroundHoverLight": "",
|
||||||
|
"tableRowBackgroundHoverDark": "",
|
||||||
|
"tagsPlain": false,
|
||||||
|
"tagsShape": "pill",
|
||||||
|
"tagsBorderWidth": 0,
|
||||||
|
"tagColorLight": "",
|
||||||
|
"tagColorDark": "",
|
||||||
|
"tagBackgroundColorLight": "",
|
||||||
|
"tagBackgroundColorDark": "",
|
||||||
|
"tagBorderColorLight": "",
|
||||||
|
"tagBorderColorDark": "",
|
||||||
|
"tasksCheckboxColorLight": "",
|
||||||
|
"tasksCheckboxColorDark": "",
|
||||||
|
"tasksCheckboxShape": "rounded",
|
||||||
|
"ribbonStyle": "ribbon-hidden",
|
||||||
|
"tabsStyle": "tabs-default",
|
||||||
|
"tabTextColorLight": "",
|
||||||
|
"tabTextColorDark": "",
|
||||||
|
"tabTextColorActiveLight": "",
|
||||||
|
"tabTextColorActiveDark": "",
|
||||||
|
"tabStackedPaneWidth": 700,
|
||||||
|
"tabStackedHeaderWidth": 40,
|
||||||
|
"tabStackedSpineOrientation": "tab-stack-top",
|
||||||
|
"tabStackedSpineOrder": "row",
|
||||||
|
"textFormattingColorLight": "",
|
||||||
|
"textFormattingColorDark": "",
|
||||||
|
"italicColorLight": "",
|
||||||
|
"italicColorDark": "",
|
||||||
|
"boldColorLight": "",
|
||||||
|
"boldColorDark": "",
|
||||||
|
"titleColorLight": "",
|
||||||
|
"titleColorDark": "",
|
||||||
|
"titleColorInactiveLight": "",
|
||||||
|
"titleColorInactiveDark": "",
|
||||||
|
"workspaceBackgroundTranslucentLight": "",
|
||||||
|
"workspaceBackgroundTranslucentDark": "",
|
||||||
|
"cardsMinWidth": "",
|
||||||
|
"cardsMaxWidth": "",
|
||||||
|
"cardsMobileWidth": "",
|
||||||
|
"cardsPadding": "",
|
||||||
|
"cardsImageHeight": "",
|
||||||
|
"cardsBorderWidth": "",
|
||||||
|
"cardsBackgroundLight": "",
|
||||||
|
"cardsBackgroundDark": "",
|
||||||
|
"cardsBackgroundHoverLight": "",
|
||||||
|
"cardsBackgroundHoverDark": "",
|
||||||
|
"hideMarkdown": false,
|
||||||
|
"hideSettingsDesc": false,
|
||||||
|
"cursor": "default",
|
||||||
|
"baseColorLight": "",
|
||||||
|
"baseColorDark": "",
|
||||||
|
"bg1Light": "",
|
||||||
|
"bg1Dark": "",
|
||||||
|
"bg2Light": "",
|
||||||
|
"bg2Dark": "",
|
||||||
|
"bg3Light": "",
|
||||||
|
"bg3Dark": "",
|
||||||
|
"ui1Light": "",
|
||||||
|
"ui1Dark": "",
|
||||||
|
"ui2Light": "",
|
||||||
|
"ui2Dark": "",
|
||||||
|
"ui3Light": "",
|
||||||
|
"ui3Dark": "",
|
||||||
|
"ax1Light": "",
|
||||||
|
"ax1Dark": "",
|
||||||
|
"ax2Light": "",
|
||||||
|
"ax2Dark": "",
|
||||||
|
"ax3Light": "",
|
||||||
|
"ax3Dark": "",
|
||||||
|
"sp1Light": "",
|
||||||
|
"sp1Dark": "",
|
||||||
|
"tx1Light": "",
|
||||||
|
"tx1Dark": "",
|
||||||
|
"tx2Light": "",
|
||||||
|
"tx2Dark": "",
|
||||||
|
"tx3Light": "",
|
||||||
|
"tx3Dark": "",
|
||||||
|
"hl1Light": "",
|
||||||
|
"hl1Dark": "",
|
||||||
|
"hl2Light": "",
|
||||||
|
"hl2Dark": "",
|
||||||
|
"colorRedLight": "",
|
||||||
|
"colorRedDark": "",
|
||||||
|
"colorOrangeLight": "",
|
||||||
|
"colorOrangeDark": "",
|
||||||
|
"colorYellowLight": "",
|
||||||
|
"colorYellowDark": "",
|
||||||
|
"colorGreenLight": "",
|
||||||
|
"colorGreenDark": "",
|
||||||
|
"colorCyanLight": "",
|
||||||
|
"colorCyanDark": "",
|
||||||
|
"colorBlueLight": "",
|
||||||
|
"colorBlueDark": "",
|
||||||
|
"colorPurpleLight": "",
|
||||||
|
"colorPurpleDark": "",
|
||||||
|
"colorPinkLight": "",
|
||||||
|
"colorPinkDark": "",
|
||||||
|
"foldingOffset": 32,
|
||||||
|
"gutterBackgroundLight": "",
|
||||||
|
"gutterBackgroundDark": "",
|
||||||
|
"lineNumberColorLight": "",
|
||||||
|
"lineNumberColorDark": "",
|
||||||
|
"lineNumberColorActiveLight": "",
|
||||||
|
"lineNumberColorActiveDark": "",
|
||||||
|
"dashedUnderlineInternal": false,
|
||||||
|
"_migrationVersions": [
|
||||||
|
"minimal-to-oxygen-prefix-v1"
|
||||||
|
]
|
||||||
|
}
|
||||||
+3611
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"id":"oxygen-settings","name":"Oxygen Theme Settings","version":"0.3.8","minAppVersion":"1.11.0","description":"Configure advanced customization options in Oxygen Theme.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false}
|
||||||
@@ -0,0 +1,764 @@
|
|||||||
|
/* ========================================
|
||||||
|
Oxygen Settings Plugin Styles
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Preset Editor Modal Styles
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
.preset-editor-modal .modal-content {
|
||||||
|
max-height: 70vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-section {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-section {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
padding-bottom: 1.5rem;
|
||||||
|
border-bottom: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-section:last-of-type {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-section h3 {
|
||||||
|
color: var(--text-normal);
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-section {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-editor-modal .color-section h3 {
|
||||||
|
color: var(--text-normal) !important;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
font-size: 0.95rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-group {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-group label {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapsible-item {
|
||||||
|
padding-left: 0;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-override {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
margin-bottom: 0.75rem;
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.override-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-input-wrapper {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-preview-swatch {
|
||||||
|
transition: opacity 0.2s ease, border-color 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-preview-swatch:hover {
|
||||||
|
border-color: var(--text-muted) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dim the color preview when the input is disabled */
|
||||||
|
.color-input-wrapper:has(input:disabled) .color-preview-swatch {
|
||||||
|
opacity: 0.5;
|
||||||
|
cursor: not-allowed !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-tabs {
|
||||||
|
display: flex;
|
||||||
|
border-bottom: 1px solid var(--background-modifier-border);
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-tab {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
cursor: pointer;
|
||||||
|
border-bottom: 2px solid transparent;
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
transition: color 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-tab:hover {
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-tab.active {
|
||||||
|
color: var(--text-normal);
|
||||||
|
border-bottom-color: var(--text-accent);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-content {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-content.active {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-section {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-group {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-group label {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hsl-controls {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr auto;
|
||||||
|
gap: 1rem;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hsl-control {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hsl-control label {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hsl-control input[type="range"] {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hsl-control span {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
min-width: 2rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-editor-modal .color-preview {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-preview-section {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-preview-section h4 {
|
||||||
|
margin: 0 0 1rem 0;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-details-section {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-details-section h4 {
|
||||||
|
margin: 0 0 1rem 0;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapsible-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
cursor: default;
|
||||||
|
padding: 0.5rem 0;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapsible-header h4 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-toggle {
|
||||||
|
background: none !important;
|
||||||
|
border: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
color: var(--text-muted);
|
||||||
|
cursor: default;
|
||||||
|
padding: 0 !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
width: 20px !important;
|
||||||
|
height: 20px !important;
|
||||||
|
outline: none !important;
|
||||||
|
font-family: inherit;
|
||||||
|
display: flex !important;
|
||||||
|
align-items: center !important;
|
||||||
|
justify-content: center !important;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-toggle:hover {
|
||||||
|
color: var(--text-normal);
|
||||||
|
box-shadow: none !important;
|
||||||
|
background: none !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-toggle:focus {
|
||||||
|
outline: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
background: none !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-toggle:active {
|
||||||
|
box-shadow: none !important;
|
||||||
|
background: none !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapse-toggle svg {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapsible-content {
|
||||||
|
transition: max-height 0.3s ease;
|
||||||
|
overflow: hidden;
|
||||||
|
max-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapsible-content:not(.collapsed) {
|
||||||
|
max-height: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.override-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-swatch {
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 1rem;
|
||||||
|
background: var(--background-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-row:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-label {
|
||||||
|
font-weight: 500;
|
||||||
|
min-width: 5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-colors {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-color {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-footer {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
gap: 1rem;
|
||||||
|
margin-top: 1.5rem;
|
||||||
|
padding-top: 1rem;
|
||||||
|
border-top: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-footer button {
|
||||||
|
min-width: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Preset Import Modal Styles
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
.preset-import-modal .modal-content {
|
||||||
|
max-height: 80vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-json-input {
|
||||||
|
height: 200px !important;
|
||||||
|
font-family: monospace !important;
|
||||||
|
font-size: 0.9rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-container {
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 1rem;
|
||||||
|
background: var(--background-primary);
|
||||||
|
min-height: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-placeholder,
|
||||||
|
.preview-error {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-style: italic;
|
||||||
|
text-align: center;
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-error {
|
||||||
|
color: var(--text-error);
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-section {
|
||||||
|
background: var(--background-modifier-error);
|
||||||
|
border: 1px solid var(--text-error);
|
||||||
|
border-radius: 6px;
|
||||||
|
padding: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error-message {
|
||||||
|
color: var(--text-error);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-info {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-row {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-id {
|
||||||
|
font-family: monospace;
|
||||||
|
background: var(--background-secondary);
|
||||||
|
padding: 0.2rem 0.4rem;
|
||||||
|
border-radius: 3px;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-toggle {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.5rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
border-bottom: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-btn {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
cursor: pointer;
|
||||||
|
border-bottom: 2px solid transparent;
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
transition: color 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-btn:hover {
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-btn.active {
|
||||||
|
color: var(--text-normal);
|
||||||
|
border-bottom-color: var(--text-accent);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.swatch-container {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-swatches {
|
||||||
|
display: none;
|
||||||
|
gap: 1rem;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-swatches.active {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-swatch {
|
||||||
|
width: 3rem;
|
||||||
|
height: 3rem;
|
||||||
|
border-radius: 6px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-swatch:hover {
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.mode-details {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mode-details h5 {
|
||||||
|
margin: 0 0 0.5rem 0;
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-detail {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-swatch {
|
||||||
|
width: 1.5rem;
|
||||||
|
height: 1.5rem;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-detail span:first-of-type {
|
||||||
|
color: var(--text-muted);
|
||||||
|
min-width: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.overrides-info {
|
||||||
|
margin-top: 1rem;
|
||||||
|
padding: 0.5rem;
|
||||||
|
background: var(--background-secondary);
|
||||||
|
border-radius: 3px;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Settings Tab Styles
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
.custom-preset-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 0.75rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
border-radius: 6px;
|
||||||
|
background: var(--background-primary);
|
||||||
|
transition: background-color 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-preset-item:hover {
|
||||||
|
background: var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-info {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.75rem;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-details {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-name {
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--text-normal);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preset-author {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-preset-item .setting-item {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-preset-item .setting-item-info {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-preset-item .setting-item-control {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.25rem;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-preset-item .clickable-icon {
|
||||||
|
padding: 0.25rem;
|
||||||
|
border-radius: 3px;
|
||||||
|
transition: background-color 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-preset-item .clickable-icon:hover {
|
||||||
|
background: var(--background-modifier-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Sidebar Indentation Guides
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
/* The theme already handles indentation guides using --nav-indentation-guide-width and --nav-indentation-guide-color */
|
||||||
|
/* We only need to override when "None" (0px) is selected - make it invisible but keep it for indentation */
|
||||||
|
body.oxygen-theme[style*="--nav-indentation-guide-width: 0px"] .nav-folder-children::before,
|
||||||
|
body.oxygen-theme[style*="--nav-indentation-guide-width:0px"] .nav-folder-children::before {
|
||||||
|
opacity: 0 !important;
|
||||||
|
visibility: hidden !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Workspace Borders Enhancements
|
||||||
|
======================================== */
|
||||||
|
/* REMOVED: All border CSS has been moved to the theme */
|
||||||
|
/* The plugin should ONLY toggle classes (borders-on, borders-none, oxygen-theme) */
|
||||||
|
/* The theme handles all CSS styling based on these classes */
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Inline Style Replacements
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
/* Preset Editor Modal - Form Input Styles */
|
||||||
|
.frame-label {
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frame-description {
|
||||||
|
font-size: 0.85em;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frame-input {
|
||||||
|
width: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Collapsible Sections */
|
||||||
|
.collapsible-content-item {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collapsible-content-item.expanded {
|
||||||
|
display: flex !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Preview Color Swatches - use CSS custom properties for dynamic colors */
|
||||||
|
.preview-color {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
background-color: var(--preview-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color Preview Wrapper */
|
||||||
|
.color-preview-wrapper {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-preview {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: var(--preview-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* HSL Color Input Overlay */
|
||||||
|
.hsl-color-input-overlay {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
opacity: 0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color Input Wrapper */
|
||||||
|
.color-input-wrapper {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.color-preview-swatch {
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: 2px solid var(--background-modifier-border);
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: var(--preview-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Custom Preset ID Display */
|
||||||
|
.preset-id-display {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Confirmation Modal Button Container */
|
||||||
|
.modal-button-container {
|
||||||
|
display: flex;
|
||||||
|
gap: 10px;
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-button-container .mod-cta.confirm-button {
|
||||||
|
background-color: var(--interactive-accent);
|
||||||
|
color: var(--text-on-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color Swatch with Dynamic Background */
|
||||||
|
.color-swatch {
|
||||||
|
background-color: hsl(var(--swatch-hsl));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Detail Swatch */
|
||||||
|
.detail-swatch {
|
||||||
|
background-color: hsl(var(--detail-hsl));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Custom Preset Swatch */
|
||||||
|
.custom-preset-swatch {
|
||||||
|
display: inline-block;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
border-radius: 3px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
margin-right: 8px;
|
||||||
|
vertical-align: middle;
|
||||||
|
background: linear-gradient(45deg,
|
||||||
|
var(--swatch-gradient-start) 0%,
|
||||||
|
var(--swatch-gradient-mid) 50%,
|
||||||
|
var(--swatch-gradient-end) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure cmdr buttons are treated the same as nav-action-button */
|
||||||
|
/* This makes cmdr buttons first-class citizens alongside regular nav-action-button elements */
|
||||||
|
body .mod-sidedock .workspace-leaf-content > .nav-header .cmdr.clickable-icon,
|
||||||
|
body .mod-sidedock .workspace-leaf-content > .view-content > .nav-header .cmdr.clickable-icon {
|
||||||
|
/* Inherit nav-action-button styling */
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure cmdr buttons in view-actions are treated the same as regular view-action buttons */
|
||||||
|
/* This makes cmdr buttons in view headers match the normal color of other view-action buttons */
|
||||||
|
/* Override inline styles and ensure they use the same color/opacity as default view-action buttons */
|
||||||
|
body .view-header .view-actions .cmdr.clickable-icon.view-action,
|
||||||
|
body .view-header .view-actions .cmdr-page-header.clickable-icon.view-action {
|
||||||
|
opacity: var(--icon-opacity) !important;
|
||||||
|
color: var(--icon-color) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Also target the SVG inside cmdr buttons to ensure stroke color matches */
|
||||||
|
body .view-header .view-actions .cmdr.clickable-icon.view-action svg,
|
||||||
|
body .view-header .view-actions .cmdr-page-header.clickable-icon.view-action svg {
|
||||||
|
color: var(--icon-color) !important;
|
||||||
|
stroke: currentColor !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Background Blur Effect
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
/* Base modal-bg styling - use theme's cover color for proper dimming */
|
||||||
|
/* Opacity is set inline by Obsidian (0.85), we just need to ensure background color is applied */
|
||||||
|
body.oxygen-theme:not(.is-mobile) .modal-bg {
|
||||||
|
background-color: var(--background-modifier-cover) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apply blur effect to modal background only */
|
||||||
|
/* Only applies on desktop (not mobile) and when Oxygen theme is active */
|
||||||
|
body.oxygen-theme:not(.is-mobile).enable-blur .modal-bg {
|
||||||
|
backdrop-filter: blur(1px) brightness(0.98);
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Scoped to only this plugin's settings container to avoid affecting other plugins */
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================
|
||||||
|
Colorful Frame Fixes
|
||||||
|
======================================== */
|
||||||
|
|
||||||
|
.colorful-frame .titlebar {
|
||||||
|
background-color: var(--frame-background) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure background applies even without border classes (Enhanced) */
|
||||||
|
body.colorful-frame:not(.borders-on):not(.borders-none) .titlebar {
|
||||||
|
background-color: var(--frame-background) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fix for "None" borders (removes weird line) */
|
||||||
|
body.colorful-frame.borders-none .workspace-tab-header-container {
|
||||||
|
border: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||||
|
if you want to view the source, please visit the github repository of this plugin
|
||||||
|
*/
|
||||||
|
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __export = (target, all) => {
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
var __copyProps = (to, from, except, desc) => {
|
||||||
|
if (from && typeof from === "object" || typeof from === "function") {
|
||||||
|
for (let key of __getOwnPropNames(from))
|
||||||
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||||
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
};
|
||||||
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||||
|
|
||||||
|
// main.ts
|
||||||
|
var main_exports = {};
|
||||||
|
__export(main_exports, {
|
||||||
|
default: () => PasteImageIntoProperty
|
||||||
|
});
|
||||||
|
module.exports = __toCommonJS(main_exports);
|
||||||
|
var import_obsidian = require("obsidian");
|
||||||
|
var PasteImageIntoProperty = class extends import_obsidian.Plugin {
|
||||||
|
async onload() {
|
||||||
|
this.registerDomEvent(document, "paste", (evt) => this.handlePaste(evt), true);
|
||||||
|
}
|
||||||
|
handlePaste(evt) {
|
||||||
|
var _a;
|
||||||
|
const activeEl = document.activeElement;
|
||||||
|
if (!evt.clipboardData || evt.clipboardData.types[0] != "Files")
|
||||||
|
return false;
|
||||||
|
const isFrontmatterFieldSupported = this.isSupportedFrontmatterField(activeEl);
|
||||||
|
if (isFrontmatterFieldSupported)
|
||||||
|
this.handleImagePaste(evt, activeEl);
|
||||||
|
else if (this.isFrontmatterField(activeEl.parentElement) || this.isFrontmatterField((_a = activeEl.parentElement) == null ? void 0 : _a.parentElement))
|
||||||
|
new import_obsidian.Notice(`Pasting images is only supported in property type "Text"!`);
|
||||||
|
}
|
||||||
|
isFrontmatterField(element) {
|
||||||
|
if (!element)
|
||||||
|
return false;
|
||||||
|
return element.matches(".metadata-property-value");
|
||||||
|
}
|
||||||
|
isSupportedFrontmatterField(element) {
|
||||||
|
if (!element)
|
||||||
|
return false;
|
||||||
|
return element.matches(".metadata-input-longtext");
|
||||||
|
}
|
||||||
|
async handleImagePaste(evt, target) {
|
||||||
|
const items = evt.clipboardData.items;
|
||||||
|
for (let i = 0; i < items.length; i++) {
|
||||||
|
const item = items[i];
|
||||||
|
if (item.kind === "file" && item.type.startsWith("image/")) {
|
||||||
|
const file = item.getAsFile();
|
||||||
|
if (file) {
|
||||||
|
await this.saveImageAndWriteLink(file, target);
|
||||||
|
evt.preventDefault();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
async saveImageAndWriteLink(file, target) {
|
||||||
|
var _a;
|
||||||
|
const arrayBuffer = await file.arrayBuffer();
|
||||||
|
const fileExtension = file.type.split("/")[1] || "png";
|
||||||
|
const fileName = `Pasted image ${Date.now()}.${fileExtension}`;
|
||||||
|
const activeFile = this.app.workspace.getActiveFile();
|
||||||
|
if (!activeFile) {
|
||||||
|
new import_obsidian.Notice(`No active file!`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const savePath = await this.app.fileManager.getAvailablePathForAttachment(fileName, activeFile.path);
|
||||||
|
const activeEl = document.activeElement;
|
||||||
|
const propertyName = (_a = activeEl.closest(".metadata-property")) == null ? void 0 : _a.getAttribute("data-property-key");
|
||||||
|
const newFile = await this.app.vault.createBinary(savePath, arrayBuffer);
|
||||||
|
const linkName = savePath.split("/").last();
|
||||||
|
await this.writeLinkIntoFrontmatter(activeFile, `[[${linkName}]]`, activeEl, propertyName, newFile);
|
||||||
|
}
|
||||||
|
async writeLinkIntoFrontmatter(activeFile, filePath, activeEl, propertyName, newFile) {
|
||||||
|
if (document.activeElement == activeEl)
|
||||||
|
activeEl.blur();
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 50));
|
||||||
|
try {
|
||||||
|
if (!propertyName)
|
||||||
|
throw new Error("data-property-key attribute not found on the expected element.");
|
||||||
|
await this.app.fileManager.processFrontMatter(activeFile, (frontmatter) => {
|
||||||
|
frontmatter[propertyName] = filePath;
|
||||||
|
});
|
||||||
|
new import_obsidian.Notice(`Image added to frontmatter: ${filePath}`);
|
||||||
|
} catch (error) {
|
||||||
|
await this.app.vault.delete(newFile);
|
||||||
|
new import_obsidian.Notice(`Failed to update frontmatter!
|
||||||
|
${error}`);
|
||||||
|
console.error("Error updating frontmatter:", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* nosourcemap */
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "paste-image-into-property",
|
||||||
|
"name": "Paste Image Into Property",
|
||||||
|
"version": "1.0.6",
|
||||||
|
"minAppVersion": "0.15.0",
|
||||||
|
"description": "Paste images from the clipboard into frontmatter properties in live preview.",
|
||||||
|
"author": "Nito",
|
||||||
|
"authorUrl": "https://github.com/Nitero",
|
||||||
|
"isDesktopOnly": true
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"propertyKey": "title",
|
||||||
|
"enableForLinking": true,
|
||||||
|
"enableForQuickSwitcher": true,
|
||||||
|
"includeFilenameInSearch": true,
|
||||||
|
"includeAliasesInSearch": true,
|
||||||
|
"enableForDragDrop": true,
|
||||||
|
"useSimpleSearch": false,
|
||||||
|
"enableForGraphView": true,
|
||||||
|
"enableForBacklinks": true,
|
||||||
|
"hideUnlinkedMentionsInBacklinks": false,
|
||||||
|
"enableForTabs": true,
|
||||||
|
"enableForExplorer": false,
|
||||||
|
"folderNoteFilename": "index",
|
||||||
|
"enableForWindowFrame": true,
|
||||||
|
"enableForBookmarks": true,
|
||||||
|
"enableMdxSupport": true,
|
||||||
|
"quickSwitcherExcludedBehavior": "deemphasize",
|
||||||
|
"linkSuggesterExcludedBehavior": "deemphasize",
|
||||||
|
"enableForWindowTitle": true
|
||||||
|
}
|
||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
|||||||
|
{"id":"property-over-file-name","name":"Property Over File Name","version":"0.7.4","minAppVersion":"1.11.0","description":"Search, display, and insert notes using a specified note property instead of the file name.","author":"David V. Kimball","authorUrl":"https://davidvkimball.com","fundingUrl":"https://patreon.com/davidvkimball","isDesktopOnly":false}
|
||||||
@@ -0,0 +1,318 @@
|
|||||||
|
/* Property Over Filename Plugin Styles */
|
||||||
|
|
||||||
|
/* Enhanced suggestion styling - SCOPED to plugin only */
|
||||||
|
.property-over-filename-suggestion .suggestion-content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-suggestion .suggestion-title {
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-suggestion .suggestion-note {
|
||||||
|
font-size: 0.85em;
|
||||||
|
color: var(--text-muted);
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Highlight matching text in suggestions - SCOPED to plugin only */
|
||||||
|
.property-over-filename-suggestion .suggestion-highlight {
|
||||||
|
background-color: var(--text-highlight-bg);
|
||||||
|
color: var(--text-highlight-bg-active);
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 2px;
|
||||||
|
padding: 0 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Property-based display indicator - SCOPED to plugin only */
|
||||||
|
.property-over-filename-suggestion .suggestion-content .suggestion-title[data-custom-display="true"] {
|
||||||
|
color: var(--interactive-accent);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Recent files styling - SCOPED to plugin only */
|
||||||
|
.property-over-filename-suggestion .suggestion-content[data-recent="true"] .suggestion-title {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* New note creation styling - SCOPED to plugin only */
|
||||||
|
.property-over-filename-suggestion .suggestion-content[data-new-note="true"] .suggestion-title {
|
||||||
|
color: var(--interactive-accent);
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-suggestion .suggestion-content[data-new-note="true"] .suggestion-title::before {
|
||||||
|
content: "📝 ";
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Remove duplicate prompt instructions - use the ones below */
|
||||||
|
|
||||||
|
/* Quick switcher enhancements - SCOPED to plugin only */
|
||||||
|
.property-over-filename-modal .suggestion-item {
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: background-color 0.1s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-modal .suggestion-item:hover {
|
||||||
|
background-color: var(--background-modifier-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-modal .suggestion-item.is-selected {
|
||||||
|
background-color: var(--background-modifier-hover);
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure selected item text has proper contrast */
|
||||||
|
.property-over-filename-modal .suggestion-item.is-selected .suggestion-title {
|
||||||
|
color: var(--text-normal);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-modal .suggestion-item.is-selected .suggestion-note {
|
||||||
|
color: var(--text-muted);
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure selected item icons have proper contrast */
|
||||||
|
.property-over-filename-modal .suggestion-item.is-selected .suggestion-flair {
|
||||||
|
color: var(--text-muted);
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Settings tab enhancements - SCOPED to plugin only */
|
||||||
|
.property-over-filename-settings .setting-item-description {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9em;
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-settings .setting-item-control {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Button styling for settings - SCOPED to plugin only */
|
||||||
|
.property-over-filename-settings .setting-item .setting-button {
|
||||||
|
background-color: var(--interactive-accent);
|
||||||
|
color: var(--text-on-accent);
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 6px 12px;
|
||||||
|
font-size: 0.9em;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background-color 0.1s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-settings .setting-item .setting-button:hover {
|
||||||
|
background-color: var(--interactive-accent-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-settings .setting-item .setting-button.setting-button-warning {
|
||||||
|
background-color: var(--text-error);
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-settings .setting-item .setting-button.setting-button-warning:hover {
|
||||||
|
background-color: var(--text-error-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hidden modal utility class - SCOPED to plugin only */
|
||||||
|
.property-over-filename-modal .modal.hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile-specific adjustments - SCOPED to plugin only */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.property-over-filename-suggestion .suggestion-content {
|
||||||
|
padding: 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-suggestion .suggestion-title {
|
||||||
|
font-size: 0.95em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-suggestion .suggestion-note {
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tab title styling - no dimming */
|
||||||
|
.workspace-tab-header .workspace-tab-header-inner-title {
|
||||||
|
transition: opacity 0.05s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide backlink elements until they're processed by the plugin to prevent flicker */
|
||||||
|
.embedded-backlinks [data-path]:not([data-pov-processed="true"]),
|
||||||
|
.backlinks-pane [data-path]:not([data-pov-processed="true"]),
|
||||||
|
.backlink-pane [data-path]:not([data-pov-processed="true"]),
|
||||||
|
.outgoing-link-pane [data-path]:not([data-pov-processed="true"]),
|
||||||
|
.outgoing-links [data-path]:not([data-pov-processed="true"]),
|
||||||
|
.backlink-container [data-path]:not([data-pov-processed="true"]),
|
||||||
|
.embedded-backlinks .tree-item-inner:not([data-pov-processed="true"]),
|
||||||
|
.backlinks-pane .tree-item-inner:not([data-pov-processed="true"]),
|
||||||
|
.backlink-pane .tree-item-inner:not([data-pov-processed="true"]),
|
||||||
|
.outgoing-link-pane .tree-item-inner:not([data-pov-processed="true"]),
|
||||||
|
.outgoing-links .tree-item-inner:not([data-pov-processed="true"]),
|
||||||
|
.backlink-container .tree-item-inner:not([data-pov-processed="true"]) {
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.1s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.embedded-backlinks [data-path][data-pov-processed="true"],
|
||||||
|
.backlinks-pane [data-path][data-pov-processed="true"],
|
||||||
|
.backlink-pane [data-path][data-pov-processed="true"],
|
||||||
|
.outgoing-link-pane [data-path][data-pov-processed="true"],
|
||||||
|
.outgoing-links [data-path][data-pov-processed="true"],
|
||||||
|
.backlink-container [data-path][data-pov-processed="true"],
|
||||||
|
.embedded-backlinks .tree-item-inner[data-pov-processed="true"],
|
||||||
|
.backlinks-pane .tree-item-inner[data-pov-processed="true"],
|
||||||
|
.backlink-pane .tree-item-inner[data-pov-processed="true"],
|
||||||
|
.outgoing-link-pane .tree-item-inner[data-pov-processed="true"],
|
||||||
|
.outgoing-links .tree-item-inner[data-pov-processed="true"],
|
||||||
|
.backlink-container .tree-item-inner[data-pov-processed="true"] {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dark mode adjustments - SCOPED to plugin only */
|
||||||
|
.theme-dark .property-over-filename-suggestion .suggestion-highlight {
|
||||||
|
background-color: rgba(255, 255, 0, 0.3);
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dark mode contrast improvements */
|
||||||
|
.theme-dark .property-over-filename-modal .suggestion-item.is-selected {
|
||||||
|
background-color: var(--background-modifier-hover);
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-dark .property-over-filename-modal .suggestion-item.is-selected .suggestion-title,
|
||||||
|
.theme-dark .property-over-filename-modal .suggestion-item.is-selected .suggestion-note {
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-dark .property-over-filename-modal .suggestion-item.is-selected .suggestion-flair {
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Let Obsidian handle dark theme footer styling */
|
||||||
|
|
||||||
|
/* Animation for smooth transitions - SCOPED to plugin only */
|
||||||
|
.property-over-filename-suggestion .suggestion-item {
|
||||||
|
transition: all 0.15s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Focus states for accessibility - SCOPED to plugin only */
|
||||||
|
.property-over-filename-suggestion .suggestion-item:focus-visible {
|
||||||
|
outline: 2px solid var(--interactive-accent);
|
||||||
|
outline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Quick Switcher specific styles to match Obsidian's exact structure */
|
||||||
|
|
||||||
|
/* Suggestion items with mod-complex class - SCOPED to plugin only */
|
||||||
|
.property-over-filename-suggestion .suggestion-item.mod-complex {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: background-color 0.1s ease;
|
||||||
|
min-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-suggestion .suggestion-item.mod-complex .suggestion-content {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-suggestion .suggestion-item.mod-complex .suggestion-aux {
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-left: 8px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-suggestion .suggestion-item.mod-complex .suggestion-flair {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
color: var(--text-muted);
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-suggestion .suggestion-item.mod-complex .suggestion-flair svg {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Excluded files styling */
|
||||||
|
.suggestion-item.mod-excluded {
|
||||||
|
opacity: 0.45;
|
||||||
|
filter: grayscale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Let Obsidian handle footer styling - don't override */
|
||||||
|
|
||||||
|
/* Remove incorrect modal flex layout */
|
||||||
|
|
||||||
|
/* Override any conflicting styles - SCOPED to plugin only */
|
||||||
|
.property-over-filename-modal .suggestion-item .suggestion-title {
|
||||||
|
font-weight: 500;
|
||||||
|
color: var(--text-normal);
|
||||||
|
font-size: 0.95em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-modal .suggestion-item .suggestion-note {
|
||||||
|
font-size: 0.8em;
|
||||||
|
color: var(--text-muted);
|
||||||
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Improve contrast for unselected items */
|
||||||
|
.property-over-filename-modal .suggestion-item:not(.is-selected) .suggestion-title {
|
||||||
|
color: var(--text-normal);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.property-over-filename-modal .suggestion-item:not(.is-selected) .suggestion-note {
|
||||||
|
color: var(--text-muted);
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Improve contrast for unselected item icons */
|
||||||
|
.property-over-filename-modal .suggestion-item:not(.is-selected) .suggestion-flair {
|
||||||
|
color: var(--text-muted);
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Group settings compatibility styling for older Obsidian builds (< 1.11.0) */
|
||||||
|
/* Base styling for setting-group-heading - drop default border */
|
||||||
|
.setting-group-heading h3 {
|
||||||
|
margin: 1.5rem 0 0.75rem;
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 600;
|
||||||
|
border-bottom: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.setting-group-heading:first-child h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Only reintroduce border-bottom if heading is NOT immediately followed by a setting-item */
|
||||||
|
/* This prevents double divider lines in older Obsidian builds where the first .setting-item */
|
||||||
|
/* already has a border-top, creating a double line with the heading's border-bottom */
|
||||||
|
.setting-group-heading:not(:has(+ .setting-item)) h3 {
|
||||||
|
border-bottom: 1px solid var(--background-modifier-border) !important;
|
||||||
|
}
|
||||||
+2147
File diff suppressed because it is too large
Load Diff
+5755
File diff suppressed because one or more lines are too long
+11
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "seo",
|
||||||
|
"name": "SEO",
|
||||||
|
"version": "0.4.3",
|
||||||
|
"minAppVersion": "1.11.0",
|
||||||
|
"description": "Ensure your public-facing notes are optimized for search engines and AI.",
|
||||||
|
"author": "David V. Kimball",
|
||||||
|
"authorUrl": "https://davidvkimball.com",
|
||||||
|
"fundingUrl": "https://patreon.com/davidvkimball",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
+783
@@ -0,0 +1,783 @@
|
|||||||
|
/* SEO Plugin Styles */
|
||||||
|
|
||||||
|
/* Center heading for "Files that pass" section */
|
||||||
|
.seo-heading-center {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Loading state styles */
|
||||||
|
.seo-loading-container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 2rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-loading-spinner {
|
||||||
|
font-size: 2rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
animation: spin 1s linear infinite;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 2rem;
|
||||||
|
height: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-loading-title {
|
||||||
|
margin: 0 0 0.5rem 0;
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-loading-message {
|
||||||
|
margin: 0;
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes spin {
|
||||||
|
from { transform: rotate(0deg); }
|
||||||
|
to { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header with flexbox layout */
|
||||||
|
.seo-issues-header-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Collapsible score section */
|
||||||
|
.seo-score-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
padding: 0.5rem 0;
|
||||||
|
border-bottom: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-score-text {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: var(--text-normal);
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-toggle-icon {
|
||||||
|
color: var(--text-muted);
|
||||||
|
padding: 0.25rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Stats container and audit button */
|
||||||
|
.seo-stats-container {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sort button styling */
|
||||||
|
.seo-sort-btn {
|
||||||
|
border: none !important;
|
||||||
|
background: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
cursor: default;
|
||||||
|
padding: 0 !important;
|
||||||
|
color: var(--text-muted);
|
||||||
|
transition: color 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-sort-btn:hover {
|
||||||
|
background: none !important;
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Right-align checkmark icons in menu */
|
||||||
|
.menu .menu-item {
|
||||||
|
display: flex !important;
|
||||||
|
justify-content: space-between !important;
|
||||||
|
align-items: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu .menu-item .menu-item-icon {
|
||||||
|
margin-left: auto !important;
|
||||||
|
order: 2 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Override any clickable-icon styling */
|
||||||
|
.seo-sort-btn.clickable-icon {
|
||||||
|
border: none !important;
|
||||||
|
background: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-audit-btn {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
padding: 0.25rem;
|
||||||
|
border-radius: 0.25rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
cursor: default;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-audit-btn:hover {
|
||||||
|
background: var(--background-modifier-hover);
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-panel {
|
||||||
|
padding: 1rem;
|
||||||
|
max-width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
|
scrollbar-gutter: stable;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-panel-header {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-panel-header-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-panel-header-row h2 {
|
||||||
|
margin: 0;
|
||||||
|
color: var(--text-normal);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-header-icon-wrap {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Header copy/download: match Obsidian's .clickable-icon (vault drawer / workspace icons).
|
||||||
|
* We use <button> for a11y; reset native button chrome so sizing matches span.clickable-icon.
|
||||||
|
*/
|
||||||
|
.seo-header-icon-wrap button.clickable-icon {
|
||||||
|
-webkit-app-region: no-drag;
|
||||||
|
appearance: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin: 0;
|
||||||
|
font: inherit;
|
||||||
|
line-height: 1;
|
||||||
|
border: none;
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: transparent;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: var(--size-2-2) var(--size-2-3);
|
||||||
|
cursor: var(--cursor);
|
||||||
|
border-radius: var(--clickable-icon-radius);
|
||||||
|
color: var(--icon-color);
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-header-icon-wrap button.clickable-icon:hover {
|
||||||
|
background-color: var(--background-modifier-hover);
|
||||||
|
cursor: var(--cursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-filename {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
margin-top: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-panel p {
|
||||||
|
font-size: 0.85rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-section {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
padding: 1rem;
|
||||||
|
background: var(--background-secondary);
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-section h3 {
|
||||||
|
margin: 0 0 1rem 0;
|
||||||
|
color: var(--text-normal);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-no-results {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-no-results p {
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-score {
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
padding: 0.5rem;
|
||||||
|
background: var(--background-secondary);
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-issues {
|
||||||
|
color: var(--text-error);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-success {
|
||||||
|
color: var(--text-success);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-checks {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-check {
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 1rem;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color-coded check blocks */
|
||||||
|
.seo-check.seo-passed {
|
||||||
|
background: var(--color-green-bg, rgba(34, 197, 94, 0.1));
|
||||||
|
border-left: 4px solid var(--color-green, #22c55e);
|
||||||
|
border-color: var(--color-green, #22c55e);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-check.seo-warning {
|
||||||
|
background: var(--color-yellow-bg, rgba(234, 179, 8, 0.1));
|
||||||
|
border-left: 4px solid var(--color-yellow, #eab308);
|
||||||
|
border-color: var(--color-yellow, #eab308);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-check.seo-notice {
|
||||||
|
background: var(--color-blue-bg, rgba(59, 130, 246, 0.1));
|
||||||
|
border-left: 4px solid var(--color-blue, #3b82f6);
|
||||||
|
border-color: var(--color-blue, #3b82f6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-check.seo-error {
|
||||||
|
background: var(--color-red-bg, rgba(239, 68, 68, 0.1));
|
||||||
|
border-left: 4px solid var(--color-red, #ef4444);
|
||||||
|
border-color: var(--color-red, #ef4444);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Status icon colors to match the blocks */
|
||||||
|
.seo-check.seo-passed .seo-status svg {
|
||||||
|
color: var(--color-green, #22c55e);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-check.seo-warning .seo-status svg {
|
||||||
|
color: var(--color-yellow, #eab308);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-check.seo-notice .seo-status svg {
|
||||||
|
color: var(--color-blue, #3b82f6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-check.seo-error .seo-status svg {
|
||||||
|
color: var(--color-red, #ef4444);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-check-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 0.85rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-status {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-status svg {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-results {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-result {
|
||||||
|
padding: 0.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-result:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-result.seo-error {
|
||||||
|
color: var(--text-error);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-result.seo-warning {
|
||||||
|
color: var(--text-warning);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-result.seo-info {
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-suggestion {
|
||||||
|
font-size: 0.9em;
|
||||||
|
color: var(--text-muted);
|
||||||
|
margin-top: 0.25rem;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-top-btn {
|
||||||
|
margin: 1rem 0;
|
||||||
|
width: 100%;
|
||||||
|
padding: 0.75rem 1rem;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
border: 1px solid var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-top-btn:hover:not(:disabled) {
|
||||||
|
background: var(--interactive-accent-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-top-btn:disabled {
|
||||||
|
opacity: 0.6;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-summary {
|
||||||
|
background: var(--background-secondary);
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Vault audit stats styling */
|
||||||
|
.seo-vault-summary {
|
||||||
|
background: var(--background-secondary);
|
||||||
|
padding: 1.5rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-stats-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
||||||
|
gap: 1.5rem;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-stat-item {
|
||||||
|
text-align: center;
|
||||||
|
padding: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-stat-number {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--text-normal);
|
||||||
|
margin-bottom: 0.25rem;
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-stat-label {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.5px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-file-count {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 1rem;
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Color coding for stats numbers */
|
||||||
|
.seo-score-excellent {
|
||||||
|
color: var(--color-green, #22c55e) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-score-good {
|
||||||
|
color: var(--color-lime, #84cc16) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-score-fair {
|
||||||
|
color: var(--color-yellow, #eab308) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-score-poor {
|
||||||
|
color: var(--color-red, #ef4444) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-issues-count {
|
||||||
|
color: var(--color-red, #ef4444) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-warnings-count {
|
||||||
|
color: var(--color-yellow, #eab308) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-notices-count {
|
||||||
|
color: var(--color-blue, #3b82f6) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Current note color coding */
|
||||||
|
.seo-issues-count-text {
|
||||||
|
color: var(--color-red, #ef4444) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-warnings-count-text {
|
||||||
|
color: var(--color-yellow, #eab308) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-notices-count-text {
|
||||||
|
color: var(--color-blue, #3b82f6) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-issues-list {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-issues-header-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-sort-buttons {
|
||||||
|
display: flex;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-file-issue {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0.5rem;
|
||||||
|
border-bottom: 1px solid var(--background-modifier-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-file-stats {
|
||||||
|
color: var(--text-muted);
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-file-link {
|
||||||
|
color: var(--text-accent);
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-file-link:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-issues-header {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-status-bar {
|
||||||
|
cursor: pointer;
|
||||||
|
transition: color 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-status-bar:hover {
|
||||||
|
color: var(--text-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Collapsible check sections */
|
||||||
|
.seo-collapsible-header {
|
||||||
|
cursor: pointer;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-collapse-icon {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-right: 0.5rem;
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-collapse-icon svg {
|
||||||
|
transition: transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Refresh button styling */
|
||||||
|
.seo-refresh-btn {
|
||||||
|
margin: 0.5rem 0 0.5rem 0;
|
||||||
|
width: 100%;
|
||||||
|
padding: 0.75rem 1rem;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
border: 1px solid var(--interactive-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-refresh-btn:hover:not(:disabled) {
|
||||||
|
background: var(--interactive-accent-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-refresh-btn:disabled {
|
||||||
|
opacity: 0.6;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Files list container for collapsible functionality */
|
||||||
|
.seo-files-list-container {
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Collapsible header for files with issues */
|
||||||
|
.seo-issues-header-container {
|
||||||
|
padding: 0.5rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Only the collapse icon should be clickable */
|
||||||
|
.seo-collapse-icon.seo-collapsible-header {
|
||||||
|
cursor: default;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Prevent layout shifts */
|
||||||
|
.seo-panel * {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure consistent spacing - removed problematic overflow hidden */
|
||||||
|
|
||||||
|
/* Text overflow handling for long strings */
|
||||||
|
.seo-result {
|
||||||
|
word-wrap: break-word;
|
||||||
|
word-break: break-word;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
hyphens: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-suggestion {
|
||||||
|
word-wrap: break-word;
|
||||||
|
word-break: break-word;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
hyphens: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Specific handling for long URLs and links */
|
||||||
|
.seo-result:has([href*="http"]) {
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Handle long text in check results */
|
||||||
|
.seo-check .seo-results {
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-check .seo-result {
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Ensure containers don't overflow */
|
||||||
|
.seo-panel {
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-section {
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-check {
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clickable navigation styles */
|
||||||
|
.seo-clickable {
|
||||||
|
cursor: pointer !important;
|
||||||
|
text-decoration: underline !important;
|
||||||
|
color: var(--text-accent) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-result-message {
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Navigation tooltip */
|
||||||
|
.seo-clickable[title] {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Highlight animation for navigation */
|
||||||
|
@keyframes seo-highlight {
|
||||||
|
0% { background-color: var(--color-yellow-bg, rgba(234, 179, 8, 0.3)); }
|
||||||
|
100% { background-color: transparent; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-navigation-highlight {
|
||||||
|
animation: seo-highlight 2s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Progress indicator styles */
|
||||||
|
.seo-progress-container {
|
||||||
|
display: none;
|
||||||
|
margin: 10px 0;
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid var(--background-modifier-border);
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-progress-text {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-progress-bar-container {
|
||||||
|
width: 100%;
|
||||||
|
height: 8px;
|
||||||
|
background-color: var(--background-modifier-border);
|
||||||
|
border-radius: 4px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-progress-bar {
|
||||||
|
height: 100%;
|
||||||
|
background-color: var(--interactive-accent);
|
||||||
|
width: var(--seo-progress-width, 0%);
|
||||||
|
transition: width 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-progress-cancel {
|
||||||
|
margin-top: 8px;
|
||||||
|
padding: 4px 8px;
|
||||||
|
font-size: 12px;
|
||||||
|
background-color: var(--background-modifier-error);
|
||||||
|
color: var(--text-on-accent);
|
||||||
|
border: none;
|
||||||
|
border-radius: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dynamic styles for results display */
|
||||||
|
.seo-results-list-expanded {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-results-list-collapsed {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-clickable-message {
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-collapse-icon-rotated {
|
||||||
|
transform: rotate(-90deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-collapse-icon-normal {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Button states */
|
||||||
|
.seo-btn-disabled {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-btn-enabled {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* File links in suggestions */
|
||||||
|
.seo-suggestion a.seo-file-link {
|
||||||
|
color: var(--text-accent);
|
||||||
|
text-decoration: underline;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-suggestion a.seo-file-link:hover {
|
||||||
|
color: var(--text-accent-hover);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Styles for dynamic elements that were previously set via JavaScript */
|
||||||
|
.seo-header-hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-header-visible {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-no-results-message {
|
||||||
|
margin-top: 10px;
|
||||||
|
padding: 8px;
|
||||||
|
background-color: var(--background-secondary);
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--text-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-progress-container-visible {
|
||||||
|
display: block !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-progress-container-hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-progress-bar-dynamic {
|
||||||
|
transition: width 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.seo-warning-message {
|
||||||
|
color: #ff6b6b;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Scoped to only this plugin's settings container to avoid affecting other plugins */
|
||||||
@@ -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 */
|
||||||
+165
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "tag-wrangler",
|
||||||
|
"name": "Tag Wrangler",
|
||||||
|
"author": "PJ Eby",
|
||||||
|
"authorUrl": "https://github.com/pjeby",
|
||||||
|
"version": "0.6.4",
|
||||||
|
"minAppVersion": "1.5.8",
|
||||||
|
"description": "Rename, merge, toggle, and search tags from the tags view",
|
||||||
|
"fundingUrl": "https://dirtsimple.org/tips/tag-wrangler",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user