Skip to content

Commit e8d7234

Browse files
authored
CSS styles for pdf print (#30)
* Add tailwindcss media print modifier * Restructure layout during print * Wrap code blocks during print * Hide next/previous buttons on print * Fix next/prev pages bug for home page * Filter out draft pages for next/prev links
1 parent acd60c7 commit e8d7234

File tree

4 files changed

+19
-18
lines changed

4 files changed

+19
-18
lines changed

assets/css/prose.css

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@
1515
*/
1616

1717
.gevamu-prose {
18-
@apply prose
18+
@apply prose print:max-w-[100ch]
1919
prose-headings:no-underline
20+
print:prose-pre:whitespace-normal
2021
marker:prose-ul:text-accent-200 marker:prose-ol:text-accent-700;
2122
}
2223

layouts/docs.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818
<div class="grid min-h-screen grid-rows-[1fr_auto]">
1919
<EpLayoutHeader
2020
v-model:show-content-tree="showContentTree"
21-
class="fixed z-30"
21+
class="fixed z-30 print:hidden"
2222
/>
2323
<div
24-
class="pt-24 flex mx-auto w-fit flex-col-reverse md:grid md:max-w-screen-xl md:w-full md:grid-cols-[1fr_auto] lg:grid-cols-[auto_1fr_auto]"
24+
class="pt-24 print:pt-0 flex mx-auto w-fit print:w-full flex-col-reverse md:grid md:max-w-screen-xl md:w-full md:grid-cols-[1fr_auto] lg:grid-cols-[auto_1fr_auto] print:block"
2525
>
2626
<aside
27-
class="w-72 px-3 fixed z-20 h-full bg-neutral-50 top-0 transition-all lg:h-auto lg:relative lg:bg-inherit lg:left-0"
27+
class="w-72 px-3 fixed z-20 h-full bg-neutral-50 top-0 transition-all lg:h-auto lg:relative lg:bg-inherit lg:left-0 print:hidden"
2828
:class="{
2929
'-left-72': !showContentTree,
3030
'left-0': showContentTree
@@ -55,7 +55,7 @@
5555
</LazyClientOnly>
5656
<slot />
5757
</main>
58-
<aside class="px-4 md:px-0 md:w-72">
58+
<aside class="px-4 md:px-0 md:w-72 print:hidden">
5959
<nav v-if="toc" class="md:sticky md:z-0 md:top-32 md:overflow-hidden">
6060
<h1 v-if="toc.links.length" class="text-neutral-500 mb-2">
6161
On this page:
@@ -65,7 +65,7 @@
6565
<hr class="mt-5 md:hidden" />
6666
</aside>
6767
</div>
68-
<EpLayoutFooter />
68+
<EpLayoutFooter class="print:hidden" />
6969
</div>
7070
</template>
7171

pages/[...slug].vue

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
<template>
1818
<EpPageMeta :doc="doc" />
1919
<NuxtLayout>
20-
<div class="px-4 mt-10 mb-96">
20+
<div class="px-4 print:px-8 mt-10 mb-96 print:mb-0">
2121
<article class="mb-10">
2222
<ContentRenderer v-if="doc && doc._type === 'markdown'" :value="doc">
2323
<ContentRendererMarkdown :value="doc" class="gevamu-prose" />
2424
<nav
25-
class="justify-center grid sm:grid-cols-2 gap-8 items-start mt-32"
25+
class="justify-center grid sm:grid-cols-2 gap-8 items-start mt-32 print:hidden"
2626
>
2727
<EpLayoutSurroundDocCard
2828
v-if="doc.before"
@@ -41,7 +41,7 @@
4141
<!-- TODO: Generate index page -->
4242
</div>
4343
</article>
44-
<EpLayoutGithubActions v-if="doc" :doc="doc" />
44+
<EpLayoutGithubActions v-if="doc" :doc="doc" class="print:hidden" />
4545
</div>
4646
</NuxtLayout>
4747
</template>
@@ -52,16 +52,13 @@ import {
5252
MarkdownParsedContent
5353
} from '@nuxt/content/dist/runtime/types'
5454
55+
import { withoutTrailingSlash } from 'ufo'
56+
5557
// TODO: check how to use native type instead of DocParsedContent
5658
interface DocParsedContent extends MarkdownParsedContent {
5759
_dir: { title: string }
5860
}
59-
function removeTrailingSlash(path: string) {
60-
if (path.endsWith('/')) {
61-
return path.slice(0, -1)
62-
}
63-
return path
64-
}
61+
6562
export default defineComponent({
6663
name: 'ContentPage',
6764
setup() {
@@ -73,9 +70,9 @@ export default defineComponent({
7370
const { data: doc } = useAsyncData('page-data' + route.path, async () => {
7471
const docPromise = queryContent<DocParsedContent>(route.path).findOne()
7572
const surroundPromise = queryContent()
76-
.only(['_path', 'title', 'description', '_partial'])
77-
.where({ _partial: false })
78-
.findSurround(removeTrailingSlash(route.path), {
73+
.only(['_path', '_draft', 'title', 'description', '_partial'])
74+
.where({ _partial: false, _draft: false })
75+
.findSurround(withoutTrailingSlash(route.path), {
7976
before: 1,
8077
after: 1
8178
})

tailwind.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ module.exports = {
2323
darkMode: 'class',
2424
theme: {
2525
extend: {
26+
screens: {
27+
print: { raw: 'print' }
28+
},
2629
fontFamily: {
2730
sans: ['"Open Sans"', ...defaultTheme.fontFamily.sans]
2831
},

0 commit comments

Comments
 (0)