lib/zen/src/slides/print.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 
 3 pub const stylesheet =
 4     "<style>\n" ++
 5     "@page{size:1280px 720px;margin:0}\n" ++
 6     "@media print{" ++
 7     ":root{print-color-adjust:exact;-webkit-print-color-adjust:exact}" ++
 8     "body{margin:0!important;padding:0!important}" ++
 9     ".zen-slide-toolbar,.zen-slide-notes-panel,.zen-slide-overview-panel,.zen-presenter-view{display:none!important}" ++
10     "body :not([data-zen-slides]):not([data-zen-slides] *):not(:has([data-zen-slides])){display:none!important}" ++
11     "body :has([data-zen-slides]){display:block!important;width:auto!important;max-width:none!important;margin:0!important;padding:0!important;border:0!important}" ++
12     "[data-zen-slides]{display:block!important;min-height:0!important;margin:0!important;padding:0!important;scroll-snap-type:none!important}" ++
13     "[data-zen-slides] .zen-slide{display:grid!important;place-items:center!important;width:100%!important;height:100vh!important;min-height:0!important;max-height:none!important;margin:0!important;padding:0!important;overflow:hidden!important;break-after:page;page-break-after:always;scroll-snap-align:none!important}" ++
14     "[data-zen-slides] .zen-slide:last-of-type{break-after:auto;page-break-after:auto}" ++
15     "[data-zen-slides] .zen-slide-frame{width:min(100%,177.7778vh)!important;height:min(100vh,56.25vw)!important;max-width:none!important;max-height:none!important;margin:0!important;overflow:hidden!important;box-shadow:none!important}" ++
16     "body.zen-print-notes [data-zen-slides] .zen-speaker-notes[hidden]{display:block!important;flex:0 0 auto!important;max-height:34%!important;margin:0!important;overflow:hidden!important;font-size:.9rem!important}" ++
17     "}\n" ++
18     "</style>\n";
19 
20 test "print stylesheet paginates one 16:9 page per slide" {
21     try std.testing.expect(std.mem.indexOf(u8, stylesheet, "@page{size:1280px 720px;margin:0}") != null);
22     try std.testing.expect(std.mem.indexOf(u8, stylesheet, "@media print{") != null);
23     try std.testing.expect(std.mem.indexOf(u8, stylesheet, "break-after:page") != null);
24     try std.testing.expect(std.mem.indexOf(u8, stylesheet, "print-color-adjust:exact") != null);
25     try std.testing.expect(std.mem.indexOf(u8, stylesheet, ".zen-slide:last-of-type{break-after:auto") != null);
26 }
27 
28 test "print stylesheet keeps deck ancestors and hides siblings" {
29     try std.testing.expect(std.mem.indexOf(u8, stylesheet, "body :not([data-zen-slides]):not([data-zen-slides] *):not(:has([data-zen-slides])){display:none!important}") != null);
30     try std.testing.expect(std.mem.indexOf(u8, stylesheet, "body :has([data-zen-slides])") != null);
31     try std.testing.expect(std.mem.indexOf(u8, stylesheet, ".zen-slide-toolbar,.zen-slide-notes-panel,.zen-slide-overview-panel,.zen-presenter-view{display:none!important}") != null);
32 }
33 
34 test "print stylesheet shows speaker notes in notes mode" {
35     try std.testing.expect(std.mem.indexOf(u8, stylesheet, "body.zen-print-notes [data-zen-slides] .zen-speaker-notes[hidden]{display:block!important") != null);
36 }