diff --git a/components/MarkdownRenderer.vue b/components/MarkdownRenderer.vue
index 0a0cf14..a249d17 100644
--- a/components/MarkdownRenderer.vue
+++ b/components/MarkdownRenderer.vue
@@ -5,6 +5,7 @@ import { Text, Comment } from 'vue';
import ProseP from '~/components/prose/ProseP.vue';
import ProseA from '~/components/prose/ProseA.vue';
import ProseBlockquote from '~/components/prose/ProseBlockquote.vue';
+import ProseCallout from './prose/ProseCallout.vue';
import ProseCode from '~/components/prose/ProseCode.vue';
import ProsePre from '~/components/prose/ProsePre.vue';
import ProseEm from '~/components/prose/ProseEm.vue';
@@ -33,6 +34,7 @@ const proseList = {
"p": ProseP,
"a": ProseA,
"blockquote": ProseBlockquote,
+ "callout": ProseCallout,
"code": ProseCode,
"pre": ProsePre,
"em": ProseEm,
diff --git a/components/prose/ProseBlockquote.vue b/components/prose/ProseBlockquote.vue
index 7087710..8c4bd0d 100644
--- a/components/prose/ProseBlockquote.vue
+++ b/components/prose/ProseBlockquote.vue
@@ -1,179 +1,5 @@
-
+
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/components/prose/ProseCallout.vue b/components/prose/ProseCallout.vue
new file mode 100644
index 0000000..dc34a8d
--- /dev/null
+++ b/components/prose/ProseCallout.vue
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/prose/ProseHr.vue b/components/prose/ProseHr.vue
index 0925e19..3eda3e0 100644
--- a/components/prose/ProseHr.vue
+++ b/components/prose/ProseHr.vue
@@ -1,3 +1,3 @@
-
+
diff --git a/composables/useMarkdown.ts b/composables/useMarkdown.ts
index 69b5178..6b8fed6 100644
--- a/composables/useMarkdown.ts
+++ b/composables/useMarkdown.ts
@@ -4,10 +4,8 @@ import RemarkParse from "remark-parse";
import RemarkRehype from 'remark-rehype';
import RemarkOfm from 'remark-ofm';
-import RemarkBreaks from 'remark-breaks'
import RemarkGfm from 'remark-gfm';
import RemarkFrontmatter from 'remark-frontmatter';
-import RehypeRaw from 'rehype-raw';
export default function useMarkdown(): (md: string) => Root
{
@@ -16,9 +14,8 @@ export default function useMarkdown(): (md: string) => Root
const parse = (markdown: string) => {
if (!processor)
{
- processor = unified().use([RemarkParse, RemarkGfm , RemarkOfm , RemarkBreaks, RemarkFrontmatter]);
- processor.use(RemarkRehype, { allowDangerousHtml: true });
- processor.use(RehypeRaw);
+ processor = unified().use([RemarkParse, RemarkGfm, RemarkOfm, RemarkFrontmatter]);
+ processor.use(RemarkRehype);
}
const processed = processor.runSync(processor.parse(markdown)) as Root;
diff --git a/package.json b/package.json
index 39d2097..b84cbd6 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
"private": true,
"type": "module",
"scripts": {
- "predev": "bun i && bunx nuxi cleanup",
+ "predev": "bun i",
"dev": "bunx --bun nuxi dev"
},
"dependencies": {
diff --git a/pages/admin/index.vue b/pages/admin/index.vue
index fca8639..49729e3 100644
--- a/pages/admin/index.vue
+++ b/pages/admin/index.vue
@@ -263,7 +263,7 @@ async function logout(user: User)
{{ textualFileSize(page.size) }} |
{{ page.visit }} |
-
|
+
|
diff --git a/pages/editor.vue b/pages/editor.vue
deleted file mode 100644
index 78a64ed..0000000
--- a/pages/editor.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
- d[any] - Editeur
-
-
-
-
-
\ No newline at end of file
diff --git a/schemas/project.ts b/schemas/project.ts
index 7e7416f..c02a7fd 100644
--- a/schemas/project.ts
+++ b/schemas/project.ts
@@ -10,6 +10,7 @@ const baseItem = z.object({
navigable: z.boolean(),
private: z.boolean(),
order: z.number().finite(),
+ content: z.string().optional(),
});
export const item: z.ZodType = baseItem.extend({
children: z.lazy(() => item.array().optional()),
diff --git a/server/api/__sitemap__/urls.ts b/server/api/__sitemap__/urls.ts
index 6f21900..549b952 100644
--- a/server/api/__sitemap__/urls.ts
+++ b/server/api/__sitemap__/urls.ts
@@ -1,13 +1,12 @@
import type { SitemapUrlInput } from '#sitemap/types'
-import { and, eq } from 'drizzle-orm';
import { explorerContentTable } from '~/db/schema';
import useDatabase from '~/composables/useDatabase';
export default defineSitemapEventHandler(() => {
const db = useDatabase();
- const pages = db.select({ path: explorerContentTable.path, lastMod: explorerContentTable.timestamp }).from(explorerContentTable).where(and(eq(explorerContentTable.private, false), eq(explorerContentTable.navigable, true))).all();
+ const pages = db.select({ path: explorerContentTable.path, lastMod: explorerContentTable.timestamp, navigable: explorerContentTable.navigable, private: explorerContentTable.private }).from(explorerContentTable).all();
- return pages.map(e => ({
+ return pages.filter(e => e.navigable && !e.private && e.path.split('/').map((_, i, a) => a.slice(0, i).join('/')).every(p => !pages.find(_p => _p.path === p)?.private)).map(e => ({
loc: `/explore/${e.path}`,
lastmod: e.lastMod,
})) satisfies SitemapUrlInput[];
diff --git a/server/api/project.post.ts b/server/api/project.post.ts
index 3f9ef73..4490cfb 100644
--- a/server/api/project.post.ts
+++ b/server/api/project.post.ts
@@ -20,7 +20,7 @@ export default defineEventHandler(async (e) => {
throw body.error;
}
- const items = buildOrder(body.data.items) as Array;
+ const items = buildOrder(body.data.items) as Array;
const db = useDatabase();
const { ...cols } = getTableColumns(explorerContentTable);