From 626ef7b67f3db613ba64c68052c657ea89ff2697 Mon Sep 17 00:00:00 2001 From: "julia.evseeva" Date: Thu, 18 Dec 2025 12:00:06 +0100 Subject: [PATCH 1/5] Extract the `external-link` to a component --- docs/assets/scss/docs-common.scss | 1 + .../scss/docs-common/_external-link.scss | 53 +++++++++++++++++++ .../scss/docs/modules/_article-text.scss | 28 ---------- 3 files changed, 54 insertions(+), 28 deletions(-) create mode 100644 docs/assets/scss/docs-common/_external-link.scss diff --git a/docs/assets/scss/docs-common.scss b/docs/assets/scss/docs-common.scss index cbc7e47..e50e466 100644 --- a/docs/assets/scss/docs-common.scss +++ b/docs/assets/scss/docs-common.scss @@ -33,4 +33,5 @@ @import "docs-common/code"; @import "docs-common/snackbar"; @import "docs-common/tooltip"; +@import "docs-common/external-link"; @import "docs-common/anchor-icon"; diff --git a/docs/assets/scss/docs-common/_external-link.scss b/docs/assets/scss/docs-common/_external-link.scss new file mode 100644 index 0000000..e1c9ccd --- /dev/null +++ b/docs/assets/scss/docs-common/_external-link.scss @@ -0,0 +1,53 @@ +/*! + * Copyright 2025, TeamDev. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Redistribution and use in source and/or binary forms, with or without + * modification, must retain the above copyright notice and the following + * disclaimer. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +.external-link { + white-space: nowrap; + + &:after { + content: '\2192'; + font-weight: 300; + width: 8px; + height: 8px; + overflow: hidden; + text-align: right; + line-height: 6px; + text-indent: -11px; + opacity: .8; + transform: rotate(-45deg); + transition: opacity .16s ease-in; + vertical-align: super; + font-size: smaller; + text-decoration: none; + display: inline-block; + } + + &:hover { + &:after { + color: inherit; + } + } +} diff --git a/docs/assets/scss/docs/modules/_article-text.scss b/docs/assets/scss/docs/modules/_article-text.scss index 0944597..95c53ba 100644 --- a/docs/assets/scss/docs/modules/_article-text.scss +++ b/docs/assets/scss/docs/modules/_article-text.scss @@ -38,34 +38,6 @@ color: $link-hover-color; text-decoration: underline; } - - &.external-link { - white-space: nowrap; - - &:after { - content: '\2192'; - font-weight: 300; - width: 8px; - height: 8px; - overflow: hidden; - text-align: right; - line-height: 6px; - text-indent: -11px; - opacity: .6; - transform: rotate(-45deg); - transition: opacity .16s ease-in; - vertical-align: super; - font-size: smaller; - text-decoration: none; - display: inline-block; - } - - &:hover { - &:after { - color: $second-brand-color; - } - } - } } ol, ul, li { From fdb0163d8c61be3a0469f2e40bffbb5b073de51a Mon Sep 17 00:00:00 2001 From: "julia.evseeva" Date: Thu, 18 Dec 2025 12:03:02 +0100 Subject: [PATCH 2/5] Add the diagram download PDF link --- docs/assets/scss/docs/modules/_diagram.scss | 63 ++++++++++++++---- .../docs/1/introduction/architecture.md | 13 ++-- .../diagrams/Spine-Architecture-Diagram.pdf | Bin 0 -> 54205 bytes ...pine-architecture-diagram-full-screen.html | 18 +++-- 4 files changed, 70 insertions(+), 24 deletions(-) create mode 100644 docs/content/docs/1/introduction/diagrams/Spine-Architecture-Diagram.pdf diff --git a/docs/assets/scss/docs/modules/_diagram.scss b/docs/assets/scss/docs/modules/_diagram.scss index 9668f0a..6426c42 100644 --- a/docs/assets/scss/docs/modules/_diagram.scss +++ b/docs/assets/scss/docs/modules/_diagram.scss @@ -43,6 +43,31 @@ } } +.diagram-link { + display: flex; + align-items: center; + width: max-content; + font-family: $main-serif-font; + margin-bottom: 32px; + + i { + font-size: 18px; + margin-right: 10px; + } + + span { + font-size: 15px; + } + + &:hover { + text-decoration: none !important; + + span { + text-decoration: underline; + } + } +} + .full-screen-preview { font-family: $main-font; @@ -50,6 +75,13 @@ padding: 24px 24px 16px; border-bottom: 1px solid rgba(0, 0, 0, .12); + .preview-text-container { + display: flex; + align-items: flex-end; + justify-content: space-between; + flex-wrap: wrap; + } + .preview-title { font-size: 1.25rem; font-weight: 700; @@ -67,6 +99,25 @@ max-width: 500px; } + .download-pdf-link { + font-family: $main-font; + font-size: 15px; + color: $main-brand-color; + margin: 0 0 16px; + + i { + font-size: 24px; + } + + &:hover { + color: $link-hover-color; + + span { + text-decoration: underline; + } + } + } + .close-btn-wrapper { float: right; @@ -100,15 +151,3 @@ } } } - -p.full-screen-link { - margin-bottom: 24px; - - i { - margin-right: 8px; - } - - span { - font-size: 15px; - } -} diff --git a/docs/content/docs/1/introduction/architecture.md b/docs/content/docs/1/introduction/architecture.md index fdff314..579bc94 100644 --- a/docs/content/docs/1/introduction/architecture.md +++ b/docs/content/docs/1/introduction/architecture.md @@ -15,14 +15,13 @@ with only some of them are not shaded on the diagram. The rest is handled by the framework. Click on a component to navigate to its definition from the -[Concepts](docs/introduction/concepts/) page. +[Concepts](docs/introduction/concepts/) page.
- + + + View full screen + {{< read-relative-asset "diagrams/spine-architecture-diagram.svg" >}}
diff --git a/docs/content/docs/1/introduction/diagrams/Spine-Architecture-Diagram.pdf b/docs/content/docs/1/introduction/diagrams/Spine-Architecture-Diagram.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6efcbe063923420d18091a23d9a5e636bbbda406 GIT binary patch literal 54205 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
-

Application Architecture

-

This diagram shows - all server-side components - of a cloud application. When developing with Spine, you will be interacting with - some of them.

+

Application Architecture

+
+

This diagram shows + all server-side components + of a cloud application. When developing with Spine, you will be interacting with + some of them.

+ + + Download PDF + +
From 3e8efc15c8816f54026d09a0ebbe9b160264b4e3 Mon Sep 17 00:00:00 2001 From: "julia.evseeva" Date: Thu, 18 Dec 2025 13:20:32 +0100 Subject: [PATCH 3/5] Extract the diagram link to a component --- docs/assets/scss/docs/modules/_diagram.scss | 77 ++++++++++--------- .../docs/1/introduction/architecture.md | 18 +++-- ...pine-architecture-diagram-full-screen.html | 12 +-- docs/layouts/_shortcodes/diagram-link.html | 19 +++++ 4 files changed, 78 insertions(+), 48 deletions(-) create mode 100644 docs/layouts/_shortcodes/diagram-link.html diff --git a/docs/assets/scss/docs/modules/_diagram.scss b/docs/assets/scss/docs/modules/_diagram.scss index 6426c42..78ac6b1 100644 --- a/docs/assets/scss/docs/modules/_diagram.scss +++ b/docs/assets/scss/docs/modules/_diagram.scss @@ -24,6 +24,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +$diagram-content-text-size: 15px; + .diagram-box { margin: 24px 0 32px; } @@ -43,29 +45,12 @@ } } -.diagram-link { +.diagram-actions { display: flex; align-items: center; - width: max-content; - font-family: $main-serif-font; + flex-wrap: wrap; + gap: 24px; margin-bottom: 32px; - - i { - font-size: 18px; - margin-right: 10px; - } - - span { - font-size: 15px; - } - - &:hover { - text-decoration: none !important; - - span { - text-decoration: underline; - } - } } .full-screen-preview { @@ -92,7 +77,7 @@ } .preview-subtitle { - font-size: 15px; + font-size: $diagram-content-text-size; color: $text-color; line-height: 1.6; margin: 8px 0 16px; @@ -100,22 +85,7 @@ } .download-pdf-link { - font-family: $main-font; - font-size: 15px; - color: $main-brand-color; - margin: 0 0 16px; - - i { - font-size: 24px; - } - - &:hover { - color: $link-hover-color; - - span { - text-decoration: underline; - } - } + margin-bottom: 16px; } .close-btn-wrapper { @@ -151,3 +121,36 @@ } } } + +.diagram-link { + display: flex; + align-items: center; + width: max-content; + font-family: $main-font; + font-size: $diagram-content-text-size; + color: $link-color; + + i { + font-size: 18px; + margin-right: 10px; + + &.icon-pdf { + margin-right: 8px; + + &:before { + font-size: 22px; + margin-left: -3px; + } + } + } + + &:hover, + &:focus { + color: $link-hover-color; + text-decoration: none !important; + + span { + text-decoration: underline; + } + } +} diff --git a/docs/content/docs/1/introduction/architecture.md b/docs/content/docs/1/introduction/architecture.md index 579bc94..a814443 100644 --- a/docs/content/docs/1/introduction/architecture.md +++ b/docs/content/docs/1/introduction/architecture.md @@ -18,10 +18,18 @@ Click on a component to navigate to its definition from the [Concepts](docs/introduction/concepts/) page.
- - - View full screen - +
+{{< diagram-link + label="View full screen" + icon_class="far fa-expand" + url="docs/introduction/diagrams/spine-architecture-diagram-full-screen" >}} + +{{< diagram-link + label="Download PDF" + icon_class="icon-pdf" + url="docs/introduction/diagrams/Spine-Architecture-Diagram.pdf" + is_external="true" + class="download-pdf-link" >}} +
{{< read-relative-asset "diagrams/spine-architecture-diagram.svg" >}}
diff --git a/docs/content/docs/1/introduction/diagrams/spine-architecture-diagram-full-screen.html b/docs/content/docs/1/introduction/diagrams/spine-architecture-diagram-full-screen.html index 16d5b57..bb636e4 100644 --- a/docs/content/docs/1/introduction/diagrams/spine-architecture-diagram-full-screen.html +++ b/docs/content/docs/1/introduction/diagrams/spine-architecture-diagram-full-screen.html @@ -19,12 +19,12 @@

Application Architecture

all server-side components of a cloud application. When developing with Spine, you will be interacting with some of them.

- - - Download PDF - + {{< diagram-link + label="Download PDF" + icon_class="icon-pdf" + url="docs/introduction/diagrams/Spine-Architecture-Diagram.pdf" + is_external="true" + class="download-pdf-link">}}
diff --git a/docs/layouts/_shortcodes/diagram-link.html b/docs/layouts/_shortcodes/diagram-link.html new file mode 100644 index 0000000..11398d0 --- /dev/null +++ b/docs/layouts/_shortcodes/diagram-link.html @@ -0,0 +1,19 @@ +{{- /* +Renders the diagram link with an icon. +*/ -}} + +{{ $label := .Get "label" }} +{{ $iconClass := .Get "icon_class" }} +{{ $url := .Get "url" }} +{{ $isExternal := .Get "is_external" | default false }} +{{ $class := .Get "class" }} + + + {{ with $iconClass }} + + {{ end }} + + {{ $label }} + From adb3d980999e29224343ff5b011072807c652ae3 Mon Sep 17 00:00:00 2001 From: "julia.evseeva" Date: Thu, 18 Dec 2025 13:31:43 +0100 Subject: [PATCH 4/5] Clean uo --- .../diagrams/spine-architecture-diagram-full-screen.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/docs/1/introduction/diagrams/spine-architecture-diagram-full-screen.html b/docs/content/docs/1/introduction/diagrams/spine-architecture-diagram-full-screen.html index bb636e4..0dd728a 100644 --- a/docs/content/docs/1/introduction/diagrams/spine-architecture-diagram-full-screen.html +++ b/docs/content/docs/1/introduction/diagrams/spine-architecture-diagram-full-screen.html @@ -24,7 +24,7 @@

Application Architecture

icon_class="icon-pdf" url="docs/introduction/diagrams/Spine-Architecture-Diagram.pdf" is_external="true" - class="download-pdf-link">}} + class="download-pdf-link" >}} From 6e788c489a15abe431f43d69cf062d05cfb38087 Mon Sep 17 00:00:00 2001 From: "julia.evseeva" Date: Thu, 18 Dec 2025 13:58:23 +0100 Subject: [PATCH 5/5] Add trailing slash --- docs/content/docs/1/introduction/architecture.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/docs/1/introduction/architecture.md b/docs/content/docs/1/introduction/architecture.md index a814443..8bf50a8 100644 --- a/docs/content/docs/1/introduction/architecture.md +++ b/docs/content/docs/1/introduction/architecture.md @@ -22,7 +22,7 @@ Click on a component to navigate to its definition from the {{< diagram-link label="View full screen" icon_class="far fa-expand" - url="docs/introduction/diagrams/spine-architecture-diagram-full-screen" >}} + url="docs/introduction/diagrams/spine-architecture-diagram-full-screen/" >}} {{< diagram-link label="Download PDF"