From 9882d957756d19c6afce0dec979bfea70b8c280d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= <76261501+zecakeh@users.noreply.github.com> Date: Tue, 19 Nov 2024 22:41:45 +0100 Subject: [PATCH] Improve the quality of the rendered diagrams (#1999) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The first commit allows to lazy-load the diagrams, which should improve the loading time of the CS API on mobile. In the process it also improves the alt text of the images. The second commit serves the diagrams as high-resolution WebPs. Encoding a high resolution diagram as WebP gives a file of approximately the same size as the lower resolution PNG. For maximum compatibility we also serve them as a lower resolution WebP and a fallback PNG. WebP was chosen because it is one of the export formats of draw.io/diagrams.net, and it is widely available in modern browsers. Signed-off-by: Kévin Commaille --- assets/diagrams/README.md | 18 ++++-- assets/diagrams/membership.png | Bin 32857 -> 0 bytes assets/diagrams/membership.webp | Bin 0 -> 34494 bytes assets/diagrams/threaded-dag-threads.png | Bin 18578 -> 0 bytes assets/diagrams/threaded-dag-threads.webp | Bin 0 -> 16398 bytes assets/diagrams/threaded-dag.png | Bin 11621 -> 0 bytes assets/diagrams/threaded-dag.webp | Bin 0 -> 15090 bytes .../internal/newsfragments/1999.clarification | 1 + content/client-server-api/_index.md | 2 +- content/client-server-api/modules/receipts.md | 4 +- layouts/shortcodes/diagram.html | 53 ++++++++++++++++++ 11 files changed, 69 insertions(+), 9 deletions(-) delete mode 100644 assets/diagrams/membership.png create mode 100644 assets/diagrams/membership.webp delete mode 100644 assets/diagrams/threaded-dag-threads.png create mode 100644 assets/diagrams/threaded-dag-threads.webp delete mode 100644 assets/diagrams/threaded-dag.png create mode 100644 assets/diagrams/threaded-dag.webp create mode 100644 changelogs/internal/newsfragments/1999.clarification create mode 100644 layouts/shortcodes/diagram.html diff --git a/assets/diagrams/README.md b/assets/diagrams/README.md index 0b74734c..85e4d295 100644 --- a/assets/diagrams/README.md +++ b/assets/diagrams/README.md @@ -7,11 +7,17 @@ https://www.diagrams.net/ is a great ([open source](https://github.com/jgraph/dr tool for these sorts of things - include your `.drawio` file next to your diagram. Suggested settings for diagrams.net: -* Export as PNG. -* 100% size. +* Export as WebP. +* 200% size. * `20` for a border width. -* No transparent background, shadow, or grid. -* Include a copy of the diagram. +* Light appearance. +* No shadow, or grid. -To reference a diagram, use the absolute path when compiled. For example, -`![membership-flow-diagram](/diagrams/membership.png)` +To reference a diagram, use the `diagram` shortcode. For example: + +``` +{{% diagram name="membership" alt="Diagram presenting the possible membership state transitions" %}} +``` + +Where `name` is the file name without extension, and `alt` is a textual +replacement for the image, useful for accessibility. diff --git a/assets/diagrams/membership.png b/assets/diagrams/membership.png deleted file mode 100644 index 7619801592ef9ee4fb801a6fdee133f4c7966b07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32857 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 S77#xKf0X6b<#I2YJ@`LdKe?;` diff --git a/assets/diagrams/membership.webp b/assets/diagrams/membership.webp new file mode 100644 index 0000000000000000000000000000000000000000..08404d1ab723f2c95f423b2296fd5c9dd1fb9d83 GIT binary patch literal 34494 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 literal 0 HcmV?d00001 diff --git a/assets/diagrams/threaded-dag-threads.png b/assets/diagrams/threaded-dag-threads.png deleted file mode 100644 index 4cf865edd5d3eeccf8a5cb3850a739f3847e84e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18578 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 diff --git a/assets/diagrams/threaded-dag-threads.webp b/assets/diagrams/threaded-dag-threads.webp new file mode 100644 index 0000000000000000000000000000000000000000..304ba9b7db492004696ac53d98b4db39e442977b GIT binary patch literal 16398 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 literal 0 HcmV?d00001 diff --git a/assets/diagrams/threaded-dag.png b/assets/diagrams/threaded-dag.png deleted file mode 100644 index 085d0f0915a41eb5279332cb6d7f83852d22e8b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11621 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 R!F$t82D+v?xmxEh{tuJ*8)^Um diff --git a/assets/diagrams/threaded-dag.webp b/assets/diagrams/threaded-dag.webp new file mode 100644 index 0000000000000000000000000000000000000000..c62873a5a178e14f2979b66ddfbfc24ad18c7d78 GIT binary patch literal 15090 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 BO>Y1I literal 0 HcmV?d00001 diff --git a/changelogs/internal/newsfragments/1999.clarification b/changelogs/internal/newsfragments/1999.clarification new file mode 100644 index 00000000..94017535 --- /dev/null +++ b/changelogs/internal/newsfragments/1999.clarification @@ -0,0 +1 @@ +Improve the quality of the rendered diagrams diff --git a/content/client-server-api/_index.md b/content/client-server-api/_index.md index 66ca6316..bfcbd031 100644 --- a/content/client-server-api/_index.md +++ b/content/client-server-api/_index.md @@ -2572,7 +2572,7 @@ Note that this rule is only expected to work in room versions The allowable state transitions of membership are: -![membership-flow-diagram](/diagrams/membership.png) +{{% diagram name="membership" alt="Diagram presenting the possible membership state transitions" %}} {{% http-api spec="client-server" api="list_joined_rooms" %}} diff --git a/content/client-server-api/modules/receipts.md b/content/client-server-api/modules/receipts.md index f4d87f25..877103fe 100644 --- a/content/client-server-api/modules/receipts.md +++ b/content/client-server-api/modules/receipts.md @@ -155,12 +155,12 @@ related to a thread root via non-thread relations. The following is an example DAG for a room, with dotted lines showing event relationships and solid lines showing topological ordering. -![threaded-dag](/diagrams/threaded-dag.png) +{{% diagram name="threaded-dag" alt="Diagram presenting a DAG with thread relationships as a single timeline" %}} This DAG can be represented as 3 threaded timelines, with `A` and `B` being thread roots: -![threaded-dag-threads](/diagrams/threaded-dag-threads.png) +{{% diagram name="threaded-dag-threads" alt="Diagram presenting a DAG with thread relationships as 3 related timelines" %}} With this, we can demonstrate that: * A threaded read receipt on `I` would mark `A`, `B`, and `I` as read. diff --git a/layouts/shortcodes/diagram.html b/layouts/shortcodes/diagram.html new file mode 100644 index 00000000..035dbdf1 --- /dev/null +++ b/layouts/shortcodes/diagram.html @@ -0,0 +1,53 @@ +{{- /* + + This template is used to render an image representing a diagram. + + It takes the following parameters: + + * `name` (required): the file name without extension. + * `alt` (required): a textual replacement for the image, useful for + accessibility. + + Other requirements for diagrams: + + * They must be located in `/assets/diagrams`. + * They must be WebP images, with a `.webp` file extension. + * They must be rendered at a 200% scale. + + Differences with loading a diagram as a regular markdown image: + + * The diagram is lazy-loaded, which should speed up the loading of the spec. + * The dimensions of the diagram are added to the HTML, allowing the browser + to pre-allocate space before it is loaded. + * The diagram supports devices with high pixel density screens and a WebP + image is generated for the default resolution. + * A PNG fallback image is generated, for maximum browser compatibility. + +*/ -}} + +{{- $name := .Params.name -}} +{{- $alt := .Params.alt -}} + +{{- $path := printf "/diagrams/%s.webp" $name -}} + +{{- with resources.Get $path -}} + {{- $highRes := . -}} + + {{- /* + The high resolution image has a scale of 200% so we need to divide the + dimensions by 2 to get the real one. + */ -}} + {{- $width := div $highRes.Width 2 | string -}} + {{- $height := div $highRes.Width 2 | string -}} + + {{- /* Generate a low resolution WebP and a fallback PNG. */ -}} + {{- $lowRes := $highRes.Resize (printf "%sx webp drawing" $width) -}} + {{- $fallback := $highRes.Resize (printf "%sx png" $width) -}} + + + + {{ $alt }} + +{{- else -}} + {{- errorf "diagram %s not found" $path -}} +{{- end -}}