Skip to content

Commit c992d69

Browse files
authored
Merge pull request #32 from zernonia/28-toggle-with-heading-bug
28 toggle with heading bug
2 parents 6afd6f3 + b5e5ef6 commit c992d69

File tree

4 files changed

+68
-43
lines changed

4 files changed

+68
-43
lines changed

src/blocks/header.vue

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,32 @@
11
<script setup lang="ts">
2-
import { useNotionBlock, defineNotionProps } from "@/lib/blockable"
3-
import NotionTextRenderer from "@/blocks/helpers/text-renderer.vue"
2+
import { useNotionBlock, defineNotionProps } from "@/lib/blockable";
3+
import NotionHeaderRenderer from "@/blocks/helpers/header-renderer.vue";
4+
import NotionRenderer from "@/components/notion-renderer.vue";
45
5-
const props = defineProps({ ...defineNotionProps })
6+
const props = defineProps({ ...defineNotionProps });
67
//@ts-ignore
7-
const { type, title, pass, block } = useNotionBlock(props)
8+
const { type, title, pass, block, format } = useNotionBlock(props);
89
</script>
910

1011
<script lang="ts">
1112
export default {
1213
name: "NotionHeader",
13-
}
14+
};
1415
</script>
1516

1617
<template>
17-
<h1 class="notion-h1" :id="block.value.id" v-if="type === 'header'">
18-
<NotionTextRenderer :text="title" v-bind="pass" />
19-
</h1>
20-
<h2 class="notion-h2" :id="block.value.id" v-else-if="type === 'sub_header'">
21-
<NotionTextRenderer :text="title" v-bind="pass" />
22-
</h2>
23-
<h3 class="notion-h3" :id="block.value.id" v-else-if="type === 'sub_sub_header'">
24-
<NotionTextRenderer :text="title" v-bind="pass" />
25-
</h3>
18+
<details v-if="format?.toggleable" class="notion-toggle">
19+
<summary><NotionHeaderRenderer class="notion-h" v-bind="pass"></NotionHeaderRenderer></summary>
20+
<div>
21+
<NotionRenderer
22+
v-for="(contentId, contentIndex) in block.value.content"
23+
v-bind="pass"
24+
:key="contentId"
25+
:level="pass.level + 1"
26+
:content-id="contentId"
27+
:content-index="contentIndex"
28+
></NotionRenderer>
29+
</div>
30+
</details>
31+
<NotionHeaderRenderer v-else v-bind="pass"></NotionHeaderRenderer>
2632
</template>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<script setup lang="ts">
2+
import { useNotionBlock, defineNotionProps } from "@/lib/blockable";
3+
import NotionTextRenderer from "@/blocks/helpers/text-renderer.vue";
4+
5+
const props = defineProps({ ...defineNotionProps });
6+
//@ts-ignore
7+
const { type, title, pass, block } = useNotionBlock(props);
8+
</script>
9+
10+
<script lang="ts">
11+
export default {
12+
name: "NotionHeaderRenderer",
13+
};
14+
</script>
15+
16+
<template>
17+
<h1 class="notion-h1" :id="block.value.id" v-if="type === 'header'">
18+
<NotionTextRenderer :text="title" v-bind="pass" />
19+
</h1>
20+
<h2 class="notion-h2" :id="block.value.id" v-else-if="type === 'sub_header'">
21+
<NotionTextRenderer :text="title" v-bind="pass" />
22+
</h2>
23+
<h3 class="notion-h3" :id="block.value.id" v-else-if="type === 'sub_sub_header'">
24+
<NotionTextRenderer :text="title" v-bind="pass" />
25+
</h3>
26+
</template>

src/blocks/helpers/page-icon.vue

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,30 @@
11
<script setup lang="ts">
2-
import { useNotionBlock, defineNotionProps } from "@/lib/blockable"
3-
import { getTextContent } from "@/lib/utils"
4-
import DefaultPageIcon from "./default-page-icon.vue"
2+
import { useNotionBlock, defineNotionProps } from "@/lib/blockable";
3+
import { getTextContent } from "@/lib/utils";
4+
import DefaultPageIcon from "./default-page-icon.vue";
55
6-
const props = defineProps({ big: Boolean, ...defineNotionProps })
6+
const props = defineProps({ big: Boolean, ...defineNotionProps });
77
//@ts-ignore
8-
const { icon, format, block, title } = useNotionBlock(props)
8+
const { icon, format, block, title } = useNotionBlock(props);
99
</script>
1010

1111
<script lang="ts">
1212
export default {
1313
name: "NotionPageIcon",
14-
}
14+
};
1515
</script>
1616

1717
<template>
18-
<img
19-
v-if="icon?.includes('http')"
20-
:class="[format.page_cover && 'notion-page-icon-offset', big ? 'notion-page-icon-cover' : 'notion-page-icon']"
21-
:src="props.mapImageUrl(icon, block)"
22-
:alt="title ? getTextContent(title) : 'Icon'"
23-
/>
24-
<span
25-
v-else-if="icon"
26-
role="img"
27-
:aria-label="icon"
28-
:class="[
29-
'notion-emoji',
30-
format.page_cover && 'notion-page-icon-offset',
31-
big ? 'notion-page-icon-cover' : 'notion-page-icon',
32-
]"
33-
>
34-
{{ icon }}
35-
</span>
36-
<DefaultPageIcon class="notion-page-icon" v-else-if="!big"></DefaultPageIcon>
18+
<div :class="[format.page_cover && 'notion-page-icon-offset', big ? 'notion-page-icon-cover' : 'notion-page-icon']">
19+
<img
20+
v-if="icon?.includes('http')"
21+
:src="props.mapImageUrl(icon, block)"
22+
:alt="title ? getTextContent(title) : 'Icon'"
23+
class="notion-page-icon"
24+
/>
25+
<span v-else-if="icon" role="img" :aria-label="icon" class="notion-page-icon">
26+
{{ icon }}
27+
</span>
28+
<DefaultPageIcon class="notion-page-icon" v-else-if="!big"></DefaultPageIcon>
29+
</div>
3730
</template>

src/style.css

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@
573573
max-height: 124px;
574574
}
575575

576-
span.notion-page-icon-cover {
576+
.notion-page-icon-cover span {
577577
height: 78px;
578578
width: 78px;
579579
font-size: 78px;
@@ -582,18 +582,18 @@ span.notion-page-icon-cover {
582582
margin-left: 0px;
583583
}
584584

585-
span.notion-page-icon-offset {
585+
.notion-page-icon-offset span {
586586
margin-top: -42px;
587587
}
588588

589-
img.notion-page-icon-cover {
589+
.notion-page-icon-cover img {
590590
border-radius: 3px;
591591
width: 124px;
592592
height: 124px;
593593
margin: 8px;
594594
}
595595

596-
img.notion-page-icon-offset {
596+
.notion-page-icon-offset img {
597597
margin-top: -80px;
598598
}
599599

0 commit comments

Comments
 (0)