From 0369abad4488e65ce55dd6e2ebb1c3f216fd3ca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20=C4=8Cech?= Date: Thu, 23 Jul 2026 17:06:35 +0200 Subject: [PATCH] docs: Rebranding --- .../hugo-build-versioned-action/action.yaml | 2 +- .github/workflows/netlify-deploy-v2.yaml | 2 +- docs/assets/icons/chevron-menu.svg | 1 - docs/assets/icons/chevron.svg | 1 - docs/assets/icons/docs-icon.svg | 13 - docs/assets/icons/slack.svg | 13 - docs/assets/js/base.js | 0 docs/assets/json/offline-search-index.json | 13 - docs/assets/scss/_local-overrides.scss | 227 ++++++++++++ docs/assets/scss/_styles_project.scss | 42 ++- docs/assets/scss/alert.scss | 120 ------ docs/assets/scss/content-select.scss | 62 ---- .../scss/functions/_functions.pxtorem.scss | 15 - docs/assets/scss/header.scss | 346 ------------------ docs/assets/scss/homepage.scss | 237 ------------ docs/assets/scss/homepage/box.scss | 41 --- docs/assets/scss/homepage/hosted.scss | 39 -- docs/assets/scss/homepage/icons.scss | 49 --- docs/assets/scss/homepage/learn.scss | 67 ---- docs/assets/scss/homepage/sections-list.scss | 77 ---- docs/assets/scss/homepage/slack.scss | 87 ----- .../scss/mixins/_mixins.media-queries.scss | 24 -- docs/assets/scss/prev-next-pages.scss | 44 --- docs/assets/scss/share-dialog.scss | 113 ------ docs/assets/scss/swagger.scss | 99 ----- docs/assets/scss/tables.scss | 59 --- docs/assets/scss/toc.scss | 97 ----- docs/assets/scss/tooltip.scss | 61 --- docs/assets/scss/typography.scss | 113 ------ .../scss/variables/_variables.colors.scss | 50 --- .../scss/variables/_variables.footer.scss | 11 - .../variables/_variables.media-queries.scss | 56 --- docs/assets/scss/variables/_variables.scss | 35 -- docs/config/_default/config.toml | 7 + docs/config/_default/menus.toml | 40 ++ docs/go.mod | 2 +- docs/go.sum | 4 + docs/layouts/404.html | 51 --- .../_default/_markup/render-image.html | 1 - .../layouts/_default/_markup/render-link.html | 12 - docs/layouts/_default/baseof.html | 21 -- docs/layouts/_default/content.html | 5 +- docs/layouts/docs/baseof.html | 50 --- docs/layouts/partials/article-label.html | 24 -- .../partials/custom-related-content.html | 39 -- docs/layouts/partials/favicons.html | 2 - docs/layouts/partials/footer.html | 104 ------ docs/layouts/partials/gtm-body.html | 1 - docs/layouts/partials/gtm.html | 18 - docs/layouts/partials/head-css.html | 14 - docs/layouts/partials/head.html | 41 --- docs/layouts/partials/header-menu.html | 38 -- docs/layouts/partials/hooks/body-end.html | 4 + docs/layouts/partials/hooks/head-end.html | 14 + docs/layouts/partials/navbar.html | 41 ++- docs/layouts/partials/prev-next-pages.html | 52 --- docs/layouts/partials/share-dialog.html | 1 - docs/layouts/partials/toc.html | 9 - docs/layouts/shortcodes/alert.html | 13 - docs/layouts/shortcodes/blocks/card.html | 42 --- .../shortcodes/blocks/cards-container.html | 3 - docs/layouts/shortcodes/blocks/feature.html | 14 - .../shortcodes/blocks/homepage-hosted.html | 13 - .../shortcodes/blocks/homepage-learn.html | 17 - .../shortcodes/blocks/homepage-slack.html | 14 - docs/layouts/shortcodes/blocks/section.html | 17 - .../shortcodes/blocks/sections-list.html | 52 --- docs/layouts/shortcodes/code-lang.html | 18 - docs/layouts/shortcodes/code-select.html | 17 - docs/layouts/shortcodes/content-block.html | 15 - docs/layouts/shortcodes/content-select.html | 13 - docs/layouts/shortcodes/inline-icon.html | 1 - docs/layouts/shortcodes/label.html | 3 - .../shortcodes/latest-doc-dirpath.html | 10 - docs/layouts/shortcodes/latesttag.html | 10 - docs/layouts/shortcodes/product.html | 8 - docs/layouts/shortcodes/swaggerui.html | 26 -- docs/layouts/swagger/baseof.html | 38 -- docs/static/figures/different-use-cases.png | Bin 41087 -> 0 bytes docs/static/figures/gd-relationship.png | Bin 292527 -> 0 bytes docs/static/figures/gd-use-cases.png | Bin 510006 -> 0 bytes docs/static/img/arrow-right.svg | 11 - docs/static/img/burger.svg | 7 - docs/static/img/close.svg | 9 - docs/static/img/copy.svg | 13 - docs/static/img/dropdown.svg | 9 - docs/static/img/icon-accelerator-toolkit.svg | 1 - docs/static/img/icon-community.svg | 1 - docs/static/img/icon-examples-gallery.svg | 1 - .../img/icon-gooddata-ui-documentation.svg | 1 - docs/static/img/icon-hosted.svg | 1 - .../img/icon-interactive-code-samples.svg | 1 - docs/static/img/icon-slack.svg | 15 - docs/static/img/icon-university.svg | 15 - docs/static/img/share.svg | 10 - docs/static/img/video-play.svg | 3 - docs/static/js/pactsafe.js | 91 ----- docs/static/js/prism.js | 22 -- docs/static/js/share.js | 29 -- docs/static/js/tables.js | 13 - 100 files changed, 376 insertions(+), 3032 deletions(-) delete mode 100644 docs/assets/icons/chevron-menu.svg delete mode 100644 docs/assets/icons/chevron.svg delete mode 100644 docs/assets/icons/docs-icon.svg delete mode 100644 docs/assets/icons/slack.svg delete mode 100644 docs/assets/js/base.js delete mode 100644 docs/assets/json/offline-search-index.json create mode 100644 docs/assets/scss/_local-overrides.scss delete mode 100644 docs/assets/scss/alert.scss delete mode 100644 docs/assets/scss/content-select.scss delete mode 100755 docs/assets/scss/functions/_functions.pxtorem.scss delete mode 100644 docs/assets/scss/header.scss delete mode 100644 docs/assets/scss/homepage.scss delete mode 100644 docs/assets/scss/homepage/box.scss delete mode 100644 docs/assets/scss/homepage/hosted.scss delete mode 100644 docs/assets/scss/homepage/icons.scss delete mode 100644 docs/assets/scss/homepage/learn.scss delete mode 100644 docs/assets/scss/homepage/sections-list.scss delete mode 100644 docs/assets/scss/homepage/slack.scss delete mode 100755 docs/assets/scss/mixins/_mixins.media-queries.scss delete mode 100644 docs/assets/scss/prev-next-pages.scss delete mode 100644 docs/assets/scss/share-dialog.scss delete mode 100644 docs/assets/scss/swagger.scss delete mode 100644 docs/assets/scss/tables.scss delete mode 100644 docs/assets/scss/toc.scss delete mode 100644 docs/assets/scss/tooltip.scss delete mode 100644 docs/assets/scss/typography.scss delete mode 100755 docs/assets/scss/variables/_variables.colors.scss delete mode 100644 docs/assets/scss/variables/_variables.footer.scss delete mode 100755 docs/assets/scss/variables/_variables.media-queries.scss delete mode 100644 docs/assets/scss/variables/_variables.scss create mode 100644 docs/config/_default/menus.toml delete mode 100644 docs/layouts/404.html delete mode 100644 docs/layouts/_default/_markup/render-image.html delete mode 100644 docs/layouts/_default/_markup/render-link.html delete mode 100644 docs/layouts/_default/baseof.html delete mode 100644 docs/layouts/docs/baseof.html delete mode 100644 docs/layouts/partials/article-label.html delete mode 100644 docs/layouts/partials/custom-related-content.html delete mode 100644 docs/layouts/partials/favicons.html delete mode 100644 docs/layouts/partials/footer.html delete mode 100644 docs/layouts/partials/gtm-body.html delete mode 100644 docs/layouts/partials/gtm.html delete mode 100644 docs/layouts/partials/head-css.html delete mode 100644 docs/layouts/partials/head.html delete mode 100644 docs/layouts/partials/header-menu.html create mode 100644 docs/layouts/partials/hooks/head-end.html delete mode 100644 docs/layouts/partials/prev-next-pages.html delete mode 100644 docs/layouts/partials/share-dialog.html delete mode 100644 docs/layouts/partials/toc.html delete mode 100644 docs/layouts/shortcodes/alert.html delete mode 100644 docs/layouts/shortcodes/blocks/card.html delete mode 100644 docs/layouts/shortcodes/blocks/cards-container.html delete mode 100644 docs/layouts/shortcodes/blocks/feature.html delete mode 100644 docs/layouts/shortcodes/blocks/homepage-hosted.html delete mode 100644 docs/layouts/shortcodes/blocks/homepage-learn.html delete mode 100644 docs/layouts/shortcodes/blocks/homepage-slack.html delete mode 100644 docs/layouts/shortcodes/blocks/section.html delete mode 100644 docs/layouts/shortcodes/blocks/sections-list.html delete mode 100644 docs/layouts/shortcodes/code-lang.html delete mode 100644 docs/layouts/shortcodes/code-select.html delete mode 100644 docs/layouts/shortcodes/content-block.html delete mode 100644 docs/layouts/shortcodes/content-select.html delete mode 100644 docs/layouts/shortcodes/inline-icon.html delete mode 100644 docs/layouts/shortcodes/label.html delete mode 100644 docs/layouts/shortcodes/latest-doc-dirpath.html delete mode 100644 docs/layouts/shortcodes/latesttag.html delete mode 100644 docs/layouts/shortcodes/product.html delete mode 100644 docs/layouts/shortcodes/swaggerui.html delete mode 100644 docs/layouts/swagger/baseof.html delete mode 100644 docs/static/figures/different-use-cases.png delete mode 100644 docs/static/figures/gd-relationship.png delete mode 100644 docs/static/figures/gd-use-cases.png delete mode 100755 docs/static/img/arrow-right.svg delete mode 100644 docs/static/img/burger.svg delete mode 100644 docs/static/img/close.svg delete mode 100644 docs/static/img/copy.svg delete mode 100644 docs/static/img/dropdown.svg delete mode 100644 docs/static/img/icon-accelerator-toolkit.svg delete mode 100644 docs/static/img/icon-community.svg delete mode 100644 docs/static/img/icon-examples-gallery.svg delete mode 100644 docs/static/img/icon-gooddata-ui-documentation.svg delete mode 100644 docs/static/img/icon-hosted.svg delete mode 100644 docs/static/img/icon-interactive-code-samples.svg delete mode 100644 docs/static/img/icon-slack.svg delete mode 100644 docs/static/img/icon-university.svg delete mode 100644 docs/static/img/share.svg delete mode 100644 docs/static/img/video-play.svg delete mode 100644 docs/static/js/pactsafe.js delete mode 100644 docs/static/js/prism.js delete mode 100644 docs/static/js/share.js delete mode 100644 docs/static/js/tables.js diff --git a/.github/actions/hugo-build-versioned-action/action.yaml b/.github/actions/hugo-build-versioned-action/action.yaml index 8f36cce2f..b815c19b3 100644 --- a/.github/actions/hugo-build-versioned-action/action.yaml +++ b/.github/actions/hugo-build-versioned-action/action.yaml @@ -80,4 +80,4 @@ runs: HUGO_ENV: ${{ inputs.hugo-env }} shell: bash run: | - hugo --minify ${BASE_URL:+--baseURL $BASE_URL} + hugo_env=public hugo --minify ${BASE_URL:+--baseURL $BASE_URL} diff --git a/.github/workflows/netlify-deploy-v2.yaml b/.github/workflows/netlify-deploy-v2.yaml index 07ebe55c7..d311945f1 100644 --- a/.github/workflows/netlify-deploy-v2.yaml +++ b/.github/workflows/netlify-deploy-v2.yaml @@ -126,7 +126,7 @@ jobs: working-directory: ./docs env: HUGO_ENV: production - run: hugo --minify + run: hugo_env=public hugo --minify - name: Publish (draft) uses: netlify/actions/cli@master with: diff --git a/docs/assets/icons/chevron-menu.svg b/docs/assets/icons/chevron-menu.svg deleted file mode 100644 index 94675f40b..000000000 --- a/docs/assets/icons/chevron-menu.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/assets/icons/chevron.svg b/docs/assets/icons/chevron.svg deleted file mode 100644 index 5ea1d731e..000000000 --- a/docs/assets/icons/chevron.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/assets/icons/docs-icon.svg b/docs/assets/icons/docs-icon.svg deleted file mode 100644 index e8a46bba6..000000000 --- a/docs/assets/icons/docs-icon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - Icon Docs & APIs 2 - - - - - - - - - - diff --git a/docs/assets/icons/slack.svg b/docs/assets/icons/slack.svg deleted file mode 100644 index 19ecf2b01..000000000 --- a/docs/assets/icons/slack.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/docs/assets/js/base.js b/docs/assets/js/base.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/assets/json/offline-search-index.json b/docs/assets/json/offline-search-index.json deleted file mode 100644 index c4d5e0e41..000000000 --- a/docs/assets/json/offline-search-index.json +++ /dev/null @@ -1,13 +0,0 @@ -{{- $.Scratch.Add "offline-search-index" slice -}} -{{- $pages := where .Site.AllPages ".Params.exclude_search" "!=" true -}} -{{- if eq hugo.Environment "public" -}} -{{- $.Scratch.Add "filtered" (where $pages "Section" "!=" "docs") -}} -{{- else -}} -{{- $.Scratch.Add "filtered" $pages -}} -{{- end -}} -{{- range $.Scratch.Get "filtered" -}} -{{/* We have to apply `htmlUnescape` again after `truncate` because `truncate` applies `html.EscapeString` if the argument is not HTML. */}} -{{/* Indvidual taxonomies can be added in the next line by add '"taxonomy-name" (.Params.taxonomy-name | default "")' to the dict (as seen for categories and tags). */}} -{{- $.Scratch.Add "offline-search-index" (dict "ref" .RelPermalink "title" .Title "categories" (.Params.categories | default "") "tags" (.Params.tags | default "") "description" (.Description | default "") "body" (.Plain | htmlUnescape) "excerpt" ((.Description | default .Plain) | htmlUnescape | truncate (.Site.Params.offlineSearchSummaryLength | default 70) | htmlUnescape)) -}} -{{- end -}} -{{- $.Scratch.Get "offline-search-index" | jsonify -}} diff --git a/docs/assets/scss/_local-overrides.scss b/docs/assets/scss/_local-overrides.scss new file mode 100644 index 000000000..5ab062715 --- /dev/null +++ b/docs/assets/scss/_local-overrides.scss @@ -0,0 +1,227 @@ +// Project-local overrides layered on top of gooddata-docs-theme. + +@import "variables/variables"; + +// --------------------------------------------------------------------------- +// Header — custom GitHub button + icon spacing (not provided by the theme) +// --------------------------------------------------------------------------- +.gd-docs-header-nav { + &__secondary, + &__slack { + svg { + margin-right: 10px; + } + } + + &__github { + align-self: center; + color: $color-black; + border-color: $color-black; + font-size: 14px; + line-height: 1; + height: 2rem; + padding: 0.5rem 0.8rem; + + &, + &:hover, + &:focus, + &:active { + background-color: $color-white; + } + + &:hover, + &:focus, + &:active { + color: $color-marlin-black; + border-color: $color-marlin-black; + } + + &:focus { + box-shadow: 0 0 0 0.2rem rgba($color-black, 0); + } + + svg { + margin-right: 10px; + } + } +} + +// Dark mode — outlined header buttons (GitHub + Ask AI, which share the +// __github class) match the theme's secondary/slack buttons: lime-green +// outline, filled lime-green on hover. +[data-theme="dark"] { + .gd-docs-header-nav__github, + .ask-ai-button { + color: $color-lime-green; + border-color: $color-lime-green; + background-color: transparent; + + &:hover, + &:focus, + &:active { + color: $color-black; + border-color: $color-lime-green; + background-color: $color-lime-green; + } + + svg path { + fill: currentColor; + } + } +} + +// --------------------------------------------------------------------------- +// Alert — tighter padding + custom warning label variant +// --------------------------------------------------------------------------- +.alert, +.td-content > blockquote { + padding: 10px 10px 10px 45px; +} + +// The icon is absolutely positioned by the theme for its larger 68px/24px +// padding; re-anchor it to match the tighter padding above. +.alert > svg { + top: 13px; + left: 15px; +} + +.alert-label-warning { + border-left-color: $color-alert-warning !important; + background-color: $color-alert-warning-bg; + color: black; + + a { + &, + &:hover, + &:focus, + &:active { + color: black; + text-decoration: underline; + } + } + + svg path { + fill: $color-alert-warning !important; + } + + &::before { + background-color: $color-alert-warning !important; + } +} + +// --------------------------------------------------------------------------- +// Tooltip — custom dark tooltip for all arrow directions. +// NOTE: kept deep-purple to preserve the previous look; swap to $color-tooltip +// to track the rebranded theme default. +// --------------------------------------------------------------------------- +.tooltip { + font-family: inherit; + + .tooltip-inner { + padding: 12px 15px; + max-width: 300px; + font-family: inherit; + color: $color-white; + text-align: center; + background-color: $color-deep-purple; + } + + &.bs-tooltip-top .tooltip-arrow::before, + &.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before { + border-top-color: $color-deep-purple; + } + + &.bs-tooltip-right .tooltip-arrow::before, + &.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before { + border-right-color: $color-deep-purple; + } + + &.bs-tooltip-bottom .tooltip-arrow::before, + &.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before { + border-bottom-color: $color-deep-purple; + } + + &.bs-tooltip-left .tooltip-arrow::before, + &.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before { + border-left-color: $color-deep-purple; + } +} + +// Fallback for older Bootstrap markup (non-nested arrow selectors) +.bs-tooltip-top .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before { + border-top-color: $color-deep-purple; +} +.bs-tooltip-right .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before { + border-right-color: $color-deep-purple; +} +.bs-tooltip-bottom .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before { + border-bottom-color: $color-deep-purple; +} +.bs-tooltip-left .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before { + border-left-color: $color-deep-purple; +} + +// --------------------------------------------------------------------------- +// Tables — custom table styling (compact, no row striping, scrollable wide) +// --------------------------------------------------------------------------- +.table-responsive, +.td-content { + table { + font-size: 14px; + + th, + td { + padding: 10px; + border: 1px solid $color-gray-bg; + } + + thead { + th { + border-bottom: 1px solid $color-gray-bg; + background-color: $color-gray-bg; + } + } + + tbody { + tr { + &:nth-child(even), + &:nth-child(odd) { + background: none; + } + } + } + } +} + +.table-responsive { + @include media-breakpoint-up(lg) { + max-width: 80%; + } + + &__inner { + overflow: auto; + display: flex; + } + + &__wide { + position: relative; + + &::after { + content: ""; + position: absolute; + top: 0; + right: 0; + bottom: 0; + width: 20px; + background: linear-gradient(90deg, rgba($color-white, 0) 0%, rgba($color-white, 1) 100%); + } + } + + &__wide &__inner { + padding-right: 20px; + } +} diff --git a/docs/assets/scss/_styles_project.scss b/docs/assets/scss/_styles_project.scss index 56029cb63..181787e9e 100644 --- a/docs/assets/scss/_styles_project.scss +++ b/docs/assets/scss/_styles_project.scss @@ -1,10 +1,12 @@ -// Import external styles TODO: link those directly from gooddata/gdc-website repository +// Functions, mixins and variables (resolved from the gooddata-docs-theme module) @import "functions/functions.pxtorem"; @import "mixins/mixins.media-queries"; @import "variables/variables.colors"; @import "variables/variables.media-queries"; -// Local styles +// Component styles (all resolved from the theme module; local shadow copies +// have been removed). Project-specific tweaks live in _local-overrides.scss, +// which is imported last so it layers on top of these. @import "typography"; @import "header"; @import "breadcrumbs"; @@ -31,6 +33,13 @@ @import "skip-links"; @import "heading-anchor"; @import "ask-ai-button"; +@import "theme-switcher"; + +// Project-local overrides — must come after all theme component imports above. +@import "local-overrides"; + +// Dark-mode overrides — must come last so [data-theme="dark"] rules win. +@import "dark-theme"; #print { display: none; // Hide print functionality for now @@ -44,4 +53,33 @@ &-buttons svg { vertical-align: top; } + + // Mirrored from the theme's _styles_project.scss (which this file shadows). + // Match the live www.gooddata.ai footer; selectors must outrank + // learn-assets Footer.css, which loads after the theme stylesheet. + .gd-footer-buttons { + gap: 12px; + } + + .gd-footer-buttons-item { + margin: 0; + } + + .gd-footer-buttons-item-icon-button { + width: 48px; + height: 48px; + } + + @media only screen and (min-width: 993px) { + .gd-footer-banner-links .gd-footer-banner-links-item { + padding: 80px 40px; + } + } + + .gd-footer-banner-links-item-wrap { + p { + margin: 32px 0 24px; + line-height: 24px; + } + } } diff --git a/docs/assets/scss/alert.scss b/docs/assets/scss/alert.scss deleted file mode 100644 index d7ee8ff53..000000000 --- a/docs/assets/scss/alert.scss +++ /dev/null @@ -1,120 +0,0 @@ -@import "variables/variables"; - -.alert, -.td-content > blockquote { - padding: 10px 10px 10px 45px; - border: none; - border-left: $alert-border-width solid $color-gray-tag; - border-radius: 0; - color: $color-alert; - background-color: $color-alert-bg; -} - -.alert { - position: relative; - - &-heading { - color: $color-gray-tag; - - .td-content & { - margin-top: 10px; - margin-bottom: 5px; - } - } - - &-primary { - border-left-color: $color-gray-tag; - color: $color-deep-purple; - } - - &-primary &-heading { - color: $color-deep-purple; - } - - &-info { - border-left-color: $color-alert-info; - color: $color-deep-purple; - background-color: $color-alert-info-bg; - } - - &-info &-heading { - color: $color-alert-info; - } - - &-warning { - border-left-color: $color-alert-warning; - background-color: $color-alert-warning-bg; - } - - &-warning &-heading { - color: $color-alert-warning; - } - - &-label { - padding-top: 8px; - padding-bottom: 8px; - border-left-color: transparent; - color: $color-white; - background-color: $color-deep-purple; - - &::before { - content: ""; - position: absolute; - top: 0; - left: -$alert-border-width; - bottom: 0; - width: $alert-border-width; - border-left: $alert-border-width solid rgba($color-deep-purple, 0.3); - background-color: $color-white; - } - - svg { - position: absolute; - top: 13px; - left: 15px; - } - - strong { - font-family: $gdfont-demibold; - } - - a { - &, - &:hover, - &:focus, - &:active { - color: $color-white; - text-decoration: underline; - } - } - - &-warning { - border-left-color: $color-alert-warning !important; - background-color: $color-alert-warning-bg; - color: black; - - a { - &, - &:hover, - &:focus, - &:active { - color: black; - text-decoration: underline; - } - } - svg path { - fill: $color-alert-warning !important; - } - - &::before{ - background-color: $color-alert-warning !important; - } - - } - } -} - -.td-content .alert.alert-label { - margin-top: 1.5rem; - margin-bottom: 1.5rem; -} diff --git a/docs/assets/scss/content-select.scss b/docs/assets/scss/content-select.scss deleted file mode 100644 index 5c381819d..000000000 --- a/docs/assets/scss/content-select.scss +++ /dev/null @@ -1,62 +0,0 @@ -@import "variables/variables"; - -.gd-docs-content-select, -.highlight { - @include mq(xxx-large) { - width: 80%; - } -} - -.gd-docs-content-select { - display: flex; - flex-direction: column; - margin-top: 45px; - - &__tabs { - width: 100%; - display: flex; - align-self: flex-start; - z-index: 1; - margin-bottom: -1px; - } - - &__tab { - padding: 10px 20px 11px; - border-top: 1px solid transparent; - border-left: 1px solid transparent; - border-right: 1px solid transparent; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - color: rgba($color-deep-purple, 0.5); - font-family: $gdfont-demibold; - font-size: 14px; - line-height: 1.25; - cursor: pointer; - - &:hover, - &:active, - &:focus, - &.active { - color: $color-deep-purple; - } - - &.active { - border-color: $color-dove-gray; - background-color: $color-white; - } - } -} - -.gd-docs-content__block { - display: none; - padding: 24px; - border: 1px solid $color-dove-gray; - - &.active { - display: block; - } - - .highlight { - width: 100%; - } -} diff --git a/docs/assets/scss/functions/_functions.pxtorem.scss b/docs/assets/scss/functions/_functions.pxtorem.scss deleted file mode 100755 index c94b4ec75..000000000 --- a/docs/assets/scss/functions/_functions.pxtorem.scss +++ /dev/null @@ -1,15 +0,0 @@ -// ------------------------------------- -// pixels to rems -// ------------------------------------- - -@function pxtorem($pixels) { - @if ($pixels == 0) { - @return 0; - } - - @if (unit($pixels) == "px") { - @return $pixels / 16px * 1rem; - } @else { - @error "passed value must be in pixels or equal to zero"; - } -} diff --git a/docs/assets/scss/header.scss b/docs/assets/scss/header.scss deleted file mode 100644 index 41ca0cf4f..000000000 --- a/docs/assets/scss/header.scss +++ /dev/null @@ -1,346 +0,0 @@ -// (C) 2023 GoodData Corporation -@import "variables/variables"; - -.gd-docs-header { - &-tag { - display: block; - margin-left: 30px; - padding: 4px 10px; - border-radius: 50px; - color: $color-white; - font-family: $gdfont-demibold; - font-size: 14px; - line-height: 19px; - background: #94A1AE; - } - - &-breadcrumb { - display: flex; - align-items: center; - color: #2F3336; - font-size: 14px; - line-height: 30px; - opacity: 0.8; - - svg { - margin-right: 10px; - } - } -} - -.gd-docs-header-nav { - position: fixed; - right: 0; - left: 0; - z-index: 32; - display: flex; - flex-wrap: nowrap; - justify-content: space-between; - align-items: center; - padding: 0 20px; - - &__menu { - overflow-y: auto; - } - - &__desktop { - display: flex; - min-width: 55px; - nav { - display: none; - @include mq(large) { - display: block; - } - } - } - - &__mobile { - display: block; - @include mq(large) { - display: none; - } - } - - &__first { - top: 0; - min-height: $header-first-nav-height; - background-color: $color-white; - z-index: 35; - - &.td-navbar-cover { - background-color: $color-white !important; - } - } - - &__second { - top: $header-first-nav-height; - height: $header-second-nav-height; - background: $color-mist-gray; - border-bottom: 1px solid transparentize($color-black, 0.8); - border-top: 1px solid transparentize($color-black, 0.8); - } - - &__first &__left, - &__first &__right { - @include mq(xxx-large) { - min-width: 380px; - } - } - - &__second &__left, - &__desktop, - &__second &__right { - flex: 0 0 auto; - - @include mq(x-large) { - flex: 1 0 0; - } - } - - &__second &__left { - min-width: 55px; - align-self: stretch; - } - - &__second &__center { - flex: 1 0 13%; - } - - &__left { - display: flex; - } - - &__right { - display: none; - text-align: right; - - @include mq(x-large) { - display: flex; - justify-content: flex-end; - } - } - - &__title { - display: none; - font-size: 14px; - - @include mq(medium) { - display: block; - } - - svg { - width: 24px; - height: 24px; - margin-right: 10px; - - g { - fill: $color-deep-purple; - } - } - } - - &__cta { - display: flex; - align-items: center; - height: 2.5rem; - padding: .56rem 1.06rem; - border: 1px solid transparent; - border-radius: 40px; - font-family: $gdfont-demibold; - font-size: 18px; - font-weight: normal; - line-height: 1.375; - background-color: $color-shocking-pink; - transition: $transition; - - &, - &:hover, - &:focus, - &:active { - color: $color-white; - text-decoration: none; - } - - &:hover, - &:focus, - &:active { - background-color: $color-shocking-pink-dark; - } - - & + & { - margin-left: 1rem; - } - - svg { - margin-right: 10px; - } - } - - &__secondary, - &__slack { - color: $color-deep-purple; - border-color: $color-deep-purple; - - &, - &:hover, - &:focus, - &:active { - background-color: $color-white; - } - - &:hover, - &:focus, - &:active { - color: desaturate(lighten($color-deep-purple, 30%), 40%); - border-color: desaturate(lighten($color-deep-purple, 30%), 40%); - } - - &:focus { - box-shadow: 0 0 0 0.2rem rgba($color-deep-purple, 0); - } - - svg { - margin-right: 10px; - } - } - - &__github { - align-self: center; - color: $color-deep-purple; - border-color: $color-deep-purple; - font-size: 14px; - line-height: 1; - height: 2rem; - padding: 0.5rem 0.8rem; - - &, - &:hover, - &:focus, - &:active { - background-color: $color-white; - } - - &:hover, - &:focus, - &:active { - color: desaturate(lighten($color-deep-purple, 30%), 40%); - border-color: desaturate(lighten($color-deep-purple, 30%), 40%); - } - - &:focus { - box-shadow: 0 0 0 0.2rem rgba($color-deep-purple, 0); - } - - svg { - margin-right: 10px; - } - } - - &__search { - position: relative; - align-items: center; - justify-content: center; - } - - .gd-docs-edition-switch, .gd-docs-language-switch { - @include mq(large) { - display: flex; - } - display: none; - } -} - -.td-search-input { - width: 100%; - max-width: 650px; - height: 36px; - margin: 0; - padding: 1px 15px; - border-radius: 20px; - color: $color-deep-purple; - font-size: 14px; - background: $color-white; - - &, - &.form-control:focus { - border: 1px solid transparentize($color-black, 0.8); - outline: none; - box-shadow: none; - } -} - -.gd-header-mobile-menu-trigger { - margin-bottom: 0; - border: none; - &:focus-visible { - border: 2px solid; - } -} - -.search-result-close-button { - margin-left: 10px; -} - -.nav-link { - display: inline-flex; - align-items: center; - height: $header-second-nav-height - 2px; - padding: 12px 10px; - color: transparentize($color-black, 0.3); - font-weight: bold; - font-size: 15px; - line-height: 32px; - - &::after { - content: url("../img/dropdown.svg"); - width: 12px; - height: 8px; - line-height: 8px; - margin-top: -1px; - margin-left: 8px; - border: none; - } - - &:hover, - &:focus, - &:active { - color: $color-black; - } - - .show & { - background-color: $color-gray-bg; - - &::after { - margin-top: 2px; - transform: rotate(180deg); - } - } -} - -.dropdown-menu { - margin-top: -1px; - padding: 10px 0; - border: none; - border-radius: 0 0 3px 3px; - box-shadow: 0 2px 3px 0 transparentize($color-black, 0.7); -} - -.dropdown-item { - padding: 2px 25px; - - &, - &.active { - color: $color-black; - } - - &:hover, - &:focus, - &:active { - text-decoration: underline; - background: transparent; - } - - &.active { - background: $color-gray-bg; - } -} diff --git a/docs/assets/scss/homepage.scss b/docs/assets/scss/homepage.scss deleted file mode 100644 index 47bcaecab..000000000 --- a/docs/assets/scss/homepage.scss +++ /dev/null @@ -1,237 +0,0 @@ -@import "variables/variables"; -@import "homepage/box"; -@import "homepage/hosted"; -@import "homepage/learn"; -@import "homepage/slack"; -@import "homepage/sections-list"; -@import "homepage/icons"; - -.container { - @include mq(x-large) { - max-width: 1400px; - } -} - -.td-box { - text-align: center; - - &--gray { - color: inherit; - background-color: $color-bg-gray; - } - - .row { - padding-left: 0; - padding-right: 0; - } - - .links { - max-width: 500px; - margin: auto; - - @include mq(medium) { - max-width: 1200px; - } - - h2 { - margin-bottom: 50px; - } - - p { - display: flex; - flex-wrap: wrap; - text-align: left; - - a { - flex: 1 1 auto; - width: 100%; - padding: 10px; - font-weight: bold; - text-decoration: underline; - - &::after { - content: url("../img/arrow-right.svg"); - position: relative; - top: 2px; - margin-left: 10px; - vertical-align: top; - } - - @include mq(medium) { - width: 50%; - } - } - } - } - - .gray-box { - padding: 25px 32px; - background-color: $color-bg-gray; - } -} - -.td-cover-block { - min-height: 280px; - margin-top: $header-height; - - &#td-cover-block-0 { - padding: 50px 15px; - background-image: url("../cover-background.svg"); - - @include mq(x-large) { - background-image: url("../cover-background.svg"); - } - } - - &, - h1 { - color: $color-white; - } - - p { - margin: 0; - font-size: 1.5rem; - } - - .lead { - padding: 2rem 0 !important; - } -} - -.gd-docs-button { - display: inline-block; - padding: .28125rem 1.25rem; - border: 2px solid $color-deep-purple; - border-radius: 50px; - color: $color-deep-purple; - font-size: 18px; - font-weight: bold; - line-height: 1.5; - white-space: nowrap; - background-color: transparent; - transition: $transition; - - &, - &:hover, - &:focus, - &:active { - text-decoration: none; - } - - &:hover, - &:focus, - &:active { - color: desaturate(lighten($color-deep-purple, 30%), 40%); - border-color: desaturate(lighten($color-deep-purple, 30%), 40%); - } -} - -.c-video-thumbnail { - picture { - //margin-top: 20px; - position: relative; - display: inline-block; - max-width: 842px; - - &:before { - content: ''; - position: absolute; - top: 50%; - left: 50%; - width: 64px; - height: 64px; - margin-top: -32px; - margin-left: -32px; - background: rgba(28, 13, 63, 0.6); - background-image: url('../img/video-play.svg'); - background-position: 23px center; - background-size: 23px 29px; - background-repeat: no-repeat; - backdrop-filter: blur(24px); - border-radius: 50%; - - @include mq(large) { - width: 138px; - height: 138px; - margin-top: -74px; - margin-left: -74px; - background-size: 54px 68px; - background-position: 47px center; - } - } - } -} - -.homepage-card { - width: 100%; - padding: 24px; - margin-bottom: 24px; - border-radius: 12px; - background-color: $color-mist-gray; - - &__hasIcon { - position: relative; - } - - &__iconLeft { - padding-left: 88px; - } - - &__icon { - display: block; - width: 48px; - height: 48px; - margin-bottom: 16px; - - svg { - max-width: 100%; - max-height: 100%; - } - } - - &__iconLeft &__icon { - position: absolute; - top: 24px; - left: 24px; - } - - &__sectionLink { - color: $color-deep-purple; - - &, - &:hover, - &:focus, - &:active { - text-decoration: none; - - p { - color: $color-deep-purple; - } - } - - &:hover, - &:focus, - &:active { - color: $color-shocking-pink; - - svg path { - fill: currentColor; - } - } - } - - a { - display: block; - } - - & p#{&}__title { - margin-top: 0; - font-size: 1.125em; - font-family: bca6d3310b5c9dae1dae416e8abc8405,helvetica,arial,sans-serif; - line-height: 1.2; - } - - p:last-child { - margin-bottom: 0; - } -} diff --git a/docs/assets/scss/homepage/box.scss b/docs/assets/scss/homepage/box.scss deleted file mode 100644 index de37be15e..000000000 --- a/docs/assets/scss/homepage/box.scss +++ /dev/null @@ -1,41 +0,0 @@ -@import "variables/variables"; - -.gd-docs-homepage-box { - &__inner { - position: relative; - display: flex; - flex-direction: column; - height: 100%; - padding-left: 106px; - - &.white { - margin-bottom: 40px; - padding: 30px; - border-radius: 4px; - box-shadow: 0 10px 30px 0 transparentize($color-black, 0.9); - background: $color-white; - } - } - - &__icon { - position: absolute; - top: 0; - left: 0; - } - - &__title { - flex: 0 0 auto; - height: 50px; - line-height: 25px; - } - - &__text { - flex: 1 0 auto; - } - - &__link { - color: $color-shocking-pink; - font-weight: bold; - text-decoration: underline; - } -} diff --git a/docs/assets/scss/homepage/hosted.scss b/docs/assets/scss/homepage/hosted.scss deleted file mode 100644 index dc20f70e6..000000000 --- a/docs/assets/scss/homepage/hosted.scss +++ /dev/null @@ -1,39 +0,0 @@ -.gd-docs-homepage-hosted { - &__inner { - flex-direction: column; - align-items: center; - width: 100%; - - @include mq(large) { - flex-direction: row; - align-items: flex-start; - } - } - - &__icon { - flex: 0 0 auto; - margin-right: 20px; - - @include mq(large) { - align-self: flex-start; - } - } - - &__content { - margin: 20px 0; - - @include mq(large) { - margin-top: 0; - margin-right: 50px; - } - } - - &__links { - align-self: center; - text-align: center; - } - - &__text { - margin-bottom: 0; - } -} diff --git a/docs/assets/scss/homepage/icons.scss b/docs/assets/scss/homepage/icons.scss deleted file mode 100644 index 99b3851ec..000000000 --- a/docs/assets/scss/homepage/icons.scss +++ /dev/null @@ -1,49 +0,0 @@ -i { - &.hosted, - &.gooddata-ui-documentation, - &.accelerator-toolkit, - &.examples-gallery, - &.interactive-code-samples, - &.slack, - &.community, - &.university { - display: inline-block; - width: 80px; - height: 80px; - min-width: 80px; - background-repeat: no-repeat; - background-position: center; - } - - &.hosted { - background-image: url("../img/icon-hosted.svg"); - } - - &.gooddata-ui-documentation { - background-image: url("../img/icon-gooddata-ui-documentation.svg"); - } - - &.accelerator-toolkit { - background-image: url("../img/icon-accelerator-toolkit.svg"); - } - - &.examples-gallery { - background-image: url("../img/icon-examples-gallery.svg"); - } - - &.interactive-code-samples { - background-image: url("../img/icon-interactive-code-samples.svg"); - } - - &.slack { - background-image: url("../img/icon-slack.svg"); - } - - &.community { - background-image: url("../img/icon-community.svg"); - } - - &.university { - background-image: url("../img/icon-university.svg"); - } -} diff --git a/docs/assets/scss/homepage/learn.scss b/docs/assets/scss/homepage/learn.scss deleted file mode 100644 index 08d4082b3..000000000 --- a/docs/assets/scss/homepage/learn.scss +++ /dev/null @@ -1,67 +0,0 @@ -.gd-docs-homepage-learn { - padding-bottom: 40px; - - &__inner { - &.white { - margin-bottom: 0; - } - } - - &__content { - padding-top: 20px; - display: flex; - flex-direction: column; - - @include mq(medium) { - height: 100%; - } - } - - &__icon { - margin-right: 20px; - } - - &__text { - flex: 1 1 auto; - - @include mq(medium) { - margin-bottom: 70px; - } - } - - &__links { - margin-top: 20px; - } - - &__button { - position: relative; - margin: 20px auto 0; - align-self: center; - - @include mq(medium) { - align-self: flex-start; - margin: -51px 15px 0; - - &.gd-docs-button { - padding-left: 30px; - padding-right: 30px; - } - } - } - - &__links { - p { - margin: 0; - line-height: 35px; - - a { - font-weight: bold; - text-decoration: underline; - } - } - } - - .row { - padding: 0; - } -} diff --git a/docs/assets/scss/homepage/sections-list.scss b/docs/assets/scss/homepage/sections-list.scss deleted file mode 100644 index c1816f189..000000000 --- a/docs/assets/scss/homepage/sections-list.scss +++ /dev/null @@ -1,77 +0,0 @@ -@import "variables/variables"; - -.gd-docs-homepage-sections-list { - margin-top: 50px; - - &__section { - display: flex; - height: 100%; - padding: 20px; - border-radius: 4px; - background-color: $color-white; - box-shadow: 0 0 15px 0 transparentize($color-black, 0.92); - } - - &__sectionLeft { - display: flex; - flex: 0 0 auto; - justify-content: center; - align-items: center; - width: 80px; - height: 80px; - margin-right: 20px; - } - - &__sectionRight { - display: flex; - flex-direction: column; - flex: 1 1 auto; - padding: 15px; - text-align: left; - } - - &__title { - flex: 0 0 auto; - min-height: 2.64rem; - } - - &__description { - flex: 1 1 auto; - } - - &__link { - line-height: 2; - font-weight: bold; - text-decoration: underline; - } - - &-promoted-links { - list-style-type: none; - margin: 0; - padding: 0; - - &__title { - &, - .td-home & { - margin-top: 20px; - margin-bottom: 0; - font-size: 1.1rem; - text-transform: none; - } - } - - &__item { - font-size: 0.9rem; - line-height: 2.1; - } - - &__link { - font-weight: bold; - text-decoration: underline; - } - } - - .col { - padding: 15px; - } -} diff --git a/docs/assets/scss/homepage/slack.scss b/docs/assets/scss/homepage/slack.scss deleted file mode 100644 index b091dd3c9..000000000 --- a/docs/assets/scss/homepage/slack.scss +++ /dev/null @@ -1,87 +0,0 @@ -@import "variables/variables"; - -.gd-docs-homepage-slack { - padding-bottom: 40px; - - &__inner { - display: flex; - align-items: flex-start; - - &.white { - margin-bottom: 0; - } - - @include mq(x-large) { - flex-direction: row; - } - } - - &__left { - flex: 1 1 auto; - - @include mq(x-large) { - max-width: 450px; - } - } - - &__icon { - margin-right: 20px; - } - - &__title { - max-width: 350px; - - @include mq(x-large) { - margin-right: 20px; - } - } - - &__text { - flex: 1 1 auto; - - @include mq(x-large) { - margin-right: 50px; - } - } - - &__buttonWrapper { - flex: 0; - align-self: center; - text-align: center; - - @include mq(x-large) { - align-self: flex-start; - text-align: left; - } - } - - &__button { - align-self: center; - margin-bottom: 8px; - } - - .row { - padding: 0; - } - - #pactsafe-container { - .ps-contract { - padding-bottom: 0; - color: transparentize($color-black, 0.3); - font-size: 12px; - - a { - font-weight: bold; - } - } - } - - [data-all-agreed="false"] ~ &__button { - cursor: not-allowed; - user-select: none; - } - - [data-all-agreed="true"] ~ &__button { - cursor: pointer; - } -} diff --git a/docs/assets/scss/mixins/_mixins.media-queries.scss b/docs/assets/scss/mixins/_mixins.media-queries.scss deleted file mode 100755 index 6458d50d9..000000000 --- a/docs/assets/scss/mixins/_mixins.media-queries.scss +++ /dev/null @@ -1,24 +0,0 @@ -// ------------------------------------- -// Mixin | Media Queries -// ------------------------------------- - -@mixin mq($breakpoint-name) { - // sanitize variable - $breakpoint-name: unquote($breakpoint-name); - - // check if passed name is in $breakpoints-map - @if map-has-key($breakpoints-map, $breakpoint-name) { - // get parameters and query - $breakpoint-params: map-get($breakpoints-map, $breakpoint-name); - $breakpoint-query: map-get($breakpoint-params, query); - - // write media query - @media #{$breakpoint-query} { - @content; - } - - // throw error if passed parameter is not a key in $breakpoints-map - } @else { - @error "#{$breakpoint-name} is not a key in $breakpoints-map"; - } -} diff --git a/docs/assets/scss/prev-next-pages.scss b/docs/assets/scss/prev-next-pages.scss deleted file mode 100644 index d2b992842..000000000 --- a/docs/assets/scss/prev-next-pages.scss +++ /dev/null @@ -1,44 +0,0 @@ -.gd-docs-prev-next-pages { - display: flex; - justify-content: space-between; - margin-top: 20px; - padding-top: 20px; - border-top: 1px solid #dde4eb; - - &__wrapper { - flex: 1 1 50%; - } - - &__link { - position: relative; - display: block; - max-width: 100%; - padding: 0 15px; - color: $color-shocking-pink; - font-size: 16px; - font-weight: bold; - } - - &__chevron { - position: absolute; - top: 4px; - width: 14px; - height: 14px; - line-height: 14px; - text-align: center; - } - - &__prev &__chevron { - top: 7px; - left: 0; - transform: rotate(180deg); - } - - &__next { - text-align: right; - } - - &__next &__chevron { - right: 0; - } -} diff --git a/docs/assets/scss/share-dialog.scss b/docs/assets/scss/share-dialog.scss deleted file mode 100644 index 9ba30429c..000000000 --- a/docs/assets/scss/share-dialog.scss +++ /dev/null @@ -1,113 +0,0 @@ -@import "variables/variables"; - -.gd-docs-share { - &__button { - height: 30px; - margin-bottom: 15px; - padding: 6px 12px; - font-size: 14px; - line-height: 1; - border: none; - border-radius: 3px; - color: $color-deep-purple; - font-weight: normal; - background: transparentize($color-share-button, 0.5); - transition: background 350ms ease; - - &, - &:hover, - &:focus, - &:active { - box-shadow: none !important; - } - - &:hover, - &:focus, - &:active { - background: rgba($color-share-button, .8); - } - - &::before { - position: relative; - top: 1px; - content: url("../img/share.svg"); - margin-right: 8px; - } - } - - &__dialog { - width: 250px; - margin: 0; - padding: 15px 20px; - border: none; - border-radius: 3px; - box-shadow: 0 1px 14px 0 transparentize($color-black, 0.8); - } - - &__arrow.arrow { - display: none; - } - - &__header, - &__body { - padding: 0; - } - - &__header { - margin-bottom: 10px; - border-bottom: none; - font-weight: bold; - font-size: 14px; - line-height: 1.4; - background-color: transparent; - } - - &__close { - position: absolute; - top: 13px; - right: 18px; - width: 20px; - height: 20px; - background-image: url("../img/close.svg"); - background-position: center; - background-repeat: repeat; - cursor: pointer; - } - - &__body { - margin-bottom: 10px; - color: $color-black; - font-size: 13px; - - textarea { - width: 100%; - height: 40px; - border: none; - outline: none; - resize: none; - color: $color-black; - font-family: inherit; - line-height: 18px; - word-break: break-all; - } - } - - &__copy { - text-decoration: underline; - cursor: pointer; - - &, - &:hover, - &:focus, - &:active { - color: $color-deep-purple; - } - - &::before { - position: relative; - top: 2px; - content: url("../img/copy.svg"); - margin-right: 8px; - } - } -} diff --git a/docs/assets/scss/swagger.scss b/docs/assets/scss/swagger.scss deleted file mode 100644 index 87f72ff97..000000000 --- a/docs/assets/scss/swagger.scss +++ /dev/null @@ -1,99 +0,0 @@ -// Fix swagger style broken by theme -pre.version { - background-color: initial; - overflow: hidden; -} - -#ohpen_swagger_ui { - margin-left: -35px; -} - -#ohpen_swagger_ui .swagger-ui { - &, - button, - input, - optgroup, - select, - textarea, - label, - .system-sans-serif, - .tab li, - .response-col_status, - .download-contents, - .scheme-container .schemes > label, - .loading-container .loading:after, - section h3, - .btn, - .btn.cancel, - .dialog-ux .modal-ux-content p, - .dialog-ux .modal-ux-content h4, - .dialog-ux .modal-ux-header h3, - section.models h4, - section.models h5, - .model-title, - .model-deprecated-warning, - .servers>label, - table thead tr td, - table thead tr th, - .parameter__name, - .topbar a, - .topbar .download-url-wrapper .download-url-button, - .scopes h2, - .errors-wrapper hgroup h4 { - font-family: inherit; - } - - - - .opblock { - &-tag { - &, - small { - font-family: inherit; - } - } - - .opblock-section-header { - > label, - h4 { - font-family: inherit; - } - } - - & &-summary-method, - & &-summary-description { - font-family: inherit; - } - - &-description-wrapper, - &-external-docs-wrapper, - &-title_normal { - &, - h4, - p { - font-family: inherit; - } - } - } - - .responses-inner { - h4, - h5 { - font-family: inherit; - } - } - - li, - p, - table, - h1, - h2, - h3, - h4, - h5, - a, - .title, - .title small pre { - font-family: inherit; - } -} diff --git a/docs/assets/scss/tables.scss b/docs/assets/scss/tables.scss deleted file mode 100644 index 0ed91c86b..000000000 --- a/docs/assets/scss/tables.scss +++ /dev/null @@ -1,59 +0,0 @@ -@import "variables/variables"; - -.table-responsive, -.td-content { - table { - font-size: 14px; - - th, - td { - padding: 10px; - border: 1px solid $color-gray-bg; - } - - thead { - th { - border-bottom: 1px solid $color-gray-bg; - background-color: $color-gray-bg; - } - } - - tbody { - tr { - &:nth-child(even), - &:nth-child(odd) { - background: none; - } - } - } - } -} - -.table-responsive { - @include media-breakpoint-up(lg) { - max-width: 80%; - } - - &__inner { - overflow: auto; - display: flex; - } - - &__wide { - position: relative; - - &::after { - content: ""; - position: absolute; - top: 0; - right: 0; - bottom: 0; - width: 20px; - background: linear-gradient(90deg, rgba($color-white, 0) 0%, rgba($color-white, 1) 100%); - } - } - - &__wide &__inner { - padding-right: 20px; - } -} diff --git a/docs/assets/scss/toc.scss b/docs/assets/scss/toc.scss deleted file mode 100644 index 283c19715..000000000 --- a/docs/assets/scss/toc.scss +++ /dev/null @@ -1,97 +0,0 @@ -@import "variables/variables"; - -$toc-top: 20px; - -.td-page-meta { - display: none; -} - -.td-toc { - position: sticky; - top: $header-height + $toc-top; - right: 0; - bottom: 0; - height: 100%; - padding: 0 20px; - border-left: none; - order: 2; - - @include mq(large) { - top: $header-height-desktop + $toc-top; - } - - @include mq(x-large) { - top: $header-height-x-big-desktop + $toc-top; - } - - #TableOfContents { - border-left: 1px solid $color-gray-divider; - - a { - &, - &:hover, - &:focus, - &:active { - color: #464e56; - } - - &:hover, - &:focus, - &:active { - text-decoration: underline; - } - } - - &:empty { - + h3 { - margin-top: 0; - } - } - } - - h3 { - margin: 35px 0 15px; - font-size: 21px; - font-weight: bold; - } -} - -.td-toc nav, -.gd-docs-learn-more { - border-left: 1px solid $color-gray-divider; - - ul { - padding-left: 20px; - } - - li { - margin: 3px 0; - } - - > ul > li:only-child > ul { - padding-left: 0; - } - - a { - padding-bottom: 5px; - font-size: 15px; - line-height: 26px; - } -} - -.gd-docs-learn-more { - a { - color: $color-shocking-pink; - font-weight: bold; - } -} - -.link-external { - &::after { - content: ""; - } -} - -.related-desc { - font-size: 12px; -} diff --git a/docs/assets/scss/tooltip.scss b/docs/assets/scss/tooltip.scss deleted file mode 100644 index 3a388229d..000000000 --- a/docs/assets/scss/tooltip.scss +++ /dev/null @@ -1,61 +0,0 @@ -// (C) 2023 GoodData Corporation -// Custom tooltip styles - -@import "variables/variables"; - -// Override Bootstrap tooltip background color -.tooltip { - font-family: inherit; - - .tooltip-inner { - padding: 12px 15px; - text-align: left; - max-width: 300px; - font-family: inherit; - color: $color-white; - text-align: center; - background-color: $color-deep-purple; - } - - // Override tooltip arrow colors for all directions - &.bs-tooltip-top .tooltip-arrow::before, - &.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before { - border-top-color: $color-deep-purple; - } - - &.bs-tooltip-right .tooltip-arrow::before, - &.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before { - border-right-color: $color-deep-purple; - } - - &.bs-tooltip-bottom .tooltip-arrow::before, - &.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before { - border-bottom-color: $color-deep-purple; - } - - &.bs-tooltip-left .tooltip-arrow::before, - &.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before { - border-left-color: $color-deep-purple; - } -} - -// Additional fallback for older Bootstrap versions -.bs-tooltip-top .tooltip-arrow::before, -.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before { - border-top-color: $color-deep-purple; -} - -.bs-tooltip-right .tooltip-arrow::before, -.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before { - border-right-color: $color-deep-purple; -} - -.bs-tooltip-bottom .tooltip-arrow::before, -.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before { - border-bottom-color: $color-deep-purple; -} - -.bs-tooltip-left .tooltip-arrow::before, -.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before { - border-left-color: $color-deep-purple; -} diff --git a/docs/assets/scss/typography.scss b/docs/assets/scss/typography.scss deleted file mode 100644 index d57ea3a94..000000000 --- a/docs/assets/scss/typography.scss +++ /dev/null @@ -1,113 +0,0 @@ -@import "variables/variables"; - -$font-path-base: "https://www.gooddata.ai"; - -@font-face { - font-family: "dc8ebcd096d8d65d80200bbe8e045d86"; - src: url($font-path-base + "/fonts/3b0b43206ff82b5e0ccd8bfb1bcaac76.woff2") format("woff2"), - url($font-path-base + "/fonts/dc8ebcd096d8d65d80200bbe8e045d86.woff") format("woff"); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: "bca6d3310b5c9dae1dae416e8abc8405"; - src: url($font-path-base + "/fonts/11c42aac24b0c1dea0b6c3fd9a9d359e.woff2") format("woff2"), - url($font-path-base + "/fonts/bca6d3310b5c9dae1dae416e8abc8405.woff") format("woff"); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: "ae2e11957f2c90bcba60dd109b5379f5"; - src: url($font-path-base + "/fonts/8072c81499658513a0f702db8a9ace34.woff2") format("woff2"), - url($font-path-base + "/fonts/ae2e11957f2c90bcba60dd109b5379f5.woff") format("woff"); - font-weight: normal; - font-style: normal; -} - -body { - color: $color-deep-purple; - font-family: $font-family; - font-size: 17px; - line-height: 1.5; -} - -.td-content, -.td-home { - h2, - h3, - h4 { - margin-top: 2em; - margin-bottom: 1em; - - &[id] { - scroll-margin-top: 179px; - } - - &[id]::before { - display: none; - } - - a { - text-decoration: none; - } - } - - h1 { - font-family: $gdfont-regular; - font-weight: normal; - font-size: 2.25em; - margin-bottom: 1.5rem; - } - - h2 { - font-family: $gdfont-regular; - font-weight: normal; - font-size: 1.75em; - } - - h3 { - font-family: $gdfont-demibold; - font-size: 1.375em; - } - - h4 { - font-family: $gdfont-demibold; - font-size: 1.125em; - } - - a { - font-weight: normal; - } - - strong { - font-family: $gdfont-extrabold; - font-weight: normal; - } -} - -a, -.td-box--gray p > a { - text-decoration: none; - color: $color-shocking-pink; - - &:hover, - &:focus, - &:active { - color: $color-shocking-pink-dark; - text-decoration: underline; - } - - .external-link { - svg { - position: relative; - top: -5px; - margin-left: 5px; - - path { - fill: currentColor; - } - } - } -} diff --git a/docs/assets/scss/variables/_variables.colors.scss b/docs/assets/scss/variables/_variables.colors.scss deleted file mode 100755 index 6aade7442..000000000 --- a/docs/assets/scss/variables/_variables.colors.scss +++ /dev/null @@ -1,50 +0,0 @@ -// ------------------------------------- -// Colors -// ------------------------------------- - -// Brand -$color-deep-purple: #1C0D3F; -$color-indigo: #1B127D; -$color-cobalt-blue: #2637EF; -$color-shocking-pink: #CF119C; -$color-violet: #8104CA; -$color-jade-green: #A3FFB0; -$color-emerald-green: #20CA8B; - -// Brand grays -$color-dove-gray: #BFC9D1; -$color-cloud-gray: #DFE4E8; -$color-mist-gray: #F2F4F6; - -// Old Brand -$color-blue-white: #E7F7FC; -$color-blue-light: #14B2E2; -$color-blue-dark: #1782BE; -$color-green: #00C18D; - -// Layout -$color-gray-background: #4f4f4f; -$color-gray-steel: #4A6172; -$color-gray-white: #F6F6F6; -$color-gray-bone: #F0F2F5; -$color-gray-chalk: #D7DFE5; -$color-gray-tag: #94A1AD; -$color-gray-divider: #979797; - -// Black & White -$color-black: #000000; -$color-white: #ffffff; - -// Gradients -$color-pink: #c86dd7; -$color-purple: #3023ae; -$color-blue-marine: #0dbfb6; -$color-blue-azure: #286dae; -$color-blue-dark: #2744a3; -$color-blue-ocean: #1f4162; -$color-blue-navy: #161e2b; -$color-blue-very-dark: #0a0d14; - -// Backgrounds -$color-bg-dark: #1C2027; -$color-bg-gray: #FAFAFA; diff --git a/docs/assets/scss/variables/_variables.footer.scss b/docs/assets/scss/variables/_variables.footer.scss deleted file mode 100644 index fb0dd9bd3..000000000 --- a/docs/assets/scss/variables/_variables.footer.scss +++ /dev/null @@ -1,11 +0,0 @@ -@if variable-exists("avenir-roman") { - $footer-font-family: $avenir-roman; -} @else { - $footer-font-family: inferit; -} -$footer-spacing: 1.25rem; -//$footer-max-width: map-get($container-max-widths, xxxl); -$footer-max-width: 1280px; -$footer-light-gray: #CACACA; -$footer-gray: $color-gray-tag; -$footer-dark-gray: #646464; diff --git a/docs/assets/scss/variables/_variables.media-queries.scss b/docs/assets/scss/variables/_variables.media-queries.scss deleted file mode 100755 index 1ad0db509..000000000 --- a/docs/assets/scss/variables/_variables.media-queries.scss +++ /dev/null @@ -1,56 +0,0 @@ -// ------------------------------------- -// Media queries -// ------------------------------------- - -$breakpoints-map: ( - under-small: ( - query: "all and (max-width: 575px)", - generate-grid: false, - generate-helpers: false - ), - under-medium: ( - query: "all and (max-width: 767px)", - generate-grid: false, - generate-helpers: false - ), - under-large: ( - query: "all and (max-width: 991px)", - generate-grid: false, - generate-helpers: false - ), - under-x-large: ( - query: "all and (max-width: 1199px)", - generate-grid: false, - generate-helpers: false - ), - x-small: ( - query: "all and (min-width: 320px)", - generate-grid: true, - generate-helpers: true - ), - small: ( - query: "all and (min-width: 576px)", - generate-grid: true, - generate-helpers: true - ), - medium: ( - query: "all and (min-width: 768px)", - generate-grid: true, - generate-helpers: true - ), - large: ( - query: "all and (min-width: 992px)", - generate-grid: true, - generate-helpers: true - ), - x-large: ( - query: "all and (min-width: 1200px)", - generate-grid: true, - generate-helpers: true - ), - xxx-large: ( - query: "all and (min-width: 1600px)", - generate-grid: true, - generate-helpers: true - ) -) !default; diff --git a/docs/assets/scss/variables/_variables.scss b/docs/assets/scss/variables/_variables.scss deleted file mode 100644 index 0a9f7dbc9..000000000 --- a/docs/assets/scss/variables/_variables.scss +++ /dev/null @@ -1,35 +0,0 @@ -// TODO: Change this variable for distributed version of docs to remove Avenir font. -$is-public: true; - -$gdfont-regular: ("dc8ebcd096d8d65d80200bbe8e045d86", "Helvetica", "Arial", sans-serif); -$gdfont-demibold: ("bca6d3310b5c9dae1dae416e8abc8405", "Helvetica", "Arial", sans-serif); -$gdfont-extrabold: ("ae2e11957f2c90bcba60dd109b5379f5", "Helvetica", "Arial", sans-serif); - -$font-family: $gdfont-regular; - -$header-first-nav-height: 64px; -$header-first-nav-height-desktop: 80px; -$header-first-nav-height-x-big-desktop: 100px; - -$header-second-nav-height: 59px; - -$header-height: $header-first-nav-height + $header-second-nav-height; -$header-height-desktop: $header-first-nav-height-desktop + $header-second-nav-height; -$header-height-x-big-desktop: $header-first-nav-height-x-big-desktop + $header-second-nav-height; - -$color-text: #1C0D3F; -$color-share-button: #CCD8E2; -$color-alert: #4D4A3D; -$color-alert-bg: #f5f6f8; -$color-alert-info: #1B127D; -$color-alert-info-bg: #e1defa; -$color-alert-warning: #CF4336; -$color-alert-warning-bg: #FDEEEC; -$color-tooltip: #e26300; -$color-gray-bg: #f2f2f2; - -$color-shocking-pink-dark: darken($color-shocking-pink, 10%); - -$alert-border-width: 5px; - -$transition: 0.15s ease-in-out; diff --git a/docs/config/_default/config.toml b/docs/config/_default/config.toml index 82052d363..92b98f9db 100644 --- a/docs/config/_default/config.toml +++ b/docs/config/_default/config.toml @@ -21,6 +21,13 @@ pygmentsUseClassic = false # See https://help.farbox.com/pygments.html pygmentsStyle = "tango" +# The theme's head.html reads the lowercase "hugo_env" variable as the +# search-engine indexing switch (HUGO_ENV itself must stay "production" in CI +# because it selects the config environment). Hugo's default getenv policy +# only allows ^HUGO_ and ^CI$, so allow it explicitly. +[security.funcs] + getenv = ['^HUGO_', '^CI$', '^hugo_env$'] + [module] proxy = "direct" [module.hugoVersion] diff --git a/docs/config/_default/menus.toml b/docs/config/_default/menus.toml new file mode 100644 index 000000000..864a8bf7a --- /dev/null +++ b/docs/config/_default/menus.toml @@ -0,0 +1,40 @@ +# Main header navigation. Consumed by the theme's partials/header-menu.html +# (data-driven menu). Mirrors the links that were previously hardcoded in the +# local header-menu.html override. + +[[main]] + name = "Learn" + url = "https://www.gooddata.ai/learn/" + weight = 10 + [main.params] + ismobiletitle = true + mobileonly = true + +[[main]] + name = "University" + url = "https://university.gooddata.com/" + weight = 20 + +[[main]] + name = "Community" + url = "https://community.gooddata.com/" + weight = 30 + +[[main]] + name = "Documentation" + url = "https://www.gooddata.ai/docs/" + weight = 40 + [main.params] + ishome = true + +[[main]] + name = "Support" + url = "https://support.gooddata.com/hc/en-us" + weight = 50 + +[[main]] + name = "Go to GoodData.com" + url = "https://www.gooddata.ai/" + weight = 60 + [main.params] + mobileonly = true diff --git a/docs/go.mod b/docs/go.mod index 31ea303c0..42e31f0fc 100644 --- a/docs/go.mod +++ b/docs/go.mod @@ -4,7 +4,7 @@ go 1.20 require ( github.com/FortAwesome/Font-Awesome v0.0.0-20230327165841-0698449d50f2 // indirect - github.com/gooddata/gooddata-docs-theme v0.0.0-20260429090800-815356762523 // indirect + github.com/gooddata/gooddata-docs-theme v0.0.0-20260723090151-e5bb4ddb25e4 // indirect github.com/google/docsy v0.7.1 // indirect github.com/google/docsy/dependencies v0.7.1 // indirect github.com/twbs/bootstrap v5.3.1+incompatible // indirect diff --git a/docs/go.sum b/docs/go.sum index a40ed7693..4848ee5b1 100644 --- a/docs/go.sum +++ b/docs/go.sum @@ -52,6 +52,10 @@ github.com/gooddata/gooddata-docs-theme v0.0.0-20260224092332-353448869720 h1:aJ github.com/gooddata/gooddata-docs-theme v0.0.0-20260224092332-353448869720/go.mod h1:VVNP6Cmo+vC37RD3T/YHjyU/QdqftGY5z4G513LYyrA= github.com/gooddata/gooddata-docs-theme v0.0.0-20260429090800-815356762523 h1:I2EGqqlIL+Z3pZlBhZW/lsk50pq0+jg1SfrX0wbXtTI= github.com/gooddata/gooddata-docs-theme v0.0.0-20260429090800-815356762523/go.mod h1:VVNP6Cmo+vC37RD3T/YHjyU/QdqftGY5z4G513LYyrA= +github.com/gooddata/gooddata-docs-theme v0.0.0-20260617212030-3203cf0e0a7c h1:6eiDmA9tpeblAc+MANszPYvSpFclLJ0DAWbhdzFrGIc= +github.com/gooddata/gooddata-docs-theme v0.0.0-20260617212030-3203cf0e0a7c/go.mod h1:VVNP6Cmo+vC37RD3T/YHjyU/QdqftGY5z4G513LYyrA= +github.com/gooddata/gooddata-docs-theme v0.0.0-20260723090151-e5bb4ddb25e4 h1:OCayu6LCEApIySjN/v3PLQ8kSgsOb+Giq3r9MJ67uNg= +github.com/gooddata/gooddata-docs-theme v0.0.0-20260723090151-e5bb4ddb25e4/go.mod h1:VVNP6Cmo+vC37RD3T/YHjyU/QdqftGY5z4G513LYyrA= github.com/google/docsy v0.7.1 h1:DUriA7Nr3lJjNi9Ulev1SfiG1sUYmvyDeU4nTp7uDxY= github.com/google/docsy v0.7.1/go.mod h1:JCmE+c+izhE0Rvzv3y+AzHhz1KdwlA9Oj5YBMklJcfc= github.com/google/docsy/dependencies v0.7.1 h1:NbzYKJYMin2q50xdWSUzR2c9gCp7zR/XHDBcxklEcTQ= diff --git a/docs/layouts/404.html b/docs/layouts/404.html deleted file mode 100644 index 8c932e12f..000000000 --- a/docs/layouts/404.html +++ /dev/null @@ -1,51 +0,0 @@ -{{ define "main" -}} -
-
-
-
-

404 Page

-

Ohh, there is nothing in here!

- - {{ if and (isset .Site.Params "404") (isset (index .Site.Params "404") "links") }} -
-

But you can try:

-
    - {{ range index (index .Site.Params "404") "links" }} -
  • - {{ .title }} -
  • - {{ end }} -
-
- {{ end }} -
-
- Where did it go? -
-
-
-
- -
-
-
-
-

404 Page

-

This version is no longer live

- - {{ if and (isset .Site.Params "404") (isset (index .Site.Params "404") "links") }} -
-

But you can try:

- Latest version of Python SDK -

You can find past versions of the documentation in the Python SDK GitHub repository. To retrieve older version, follow the instructions in the README.

-
- {{ end }} - -
-
- Where did it go? -
-
-
-
-{{- end }} diff --git a/docs/layouts/_default/_markup/render-image.html b/docs/layouts/_default/_markup/render-image.html deleted file mode 100644 index 43547b87e..000000000 --- a/docs/layouts/_default/_markup/render-image.html +++ /dev/null @@ -1 +0,0 @@ -

{{ .Text }}

diff --git a/docs/layouts/_default/_markup/render-link.html b/docs/layouts/_default/_markup/render-link.html deleted file mode 100644 index eea8d5828..000000000 --- a/docs/layouts/_default/_markup/render-link.html +++ /dev/null @@ -1,12 +0,0 @@ -{{- $scratch := newScratch }} -{{- $scratch.Set "attrs" slice }} -{{- if ne .Title "" }} - {{- with .Title }} - {{- $options := transform.Unmarshal . }} - {{- range $key, $val := $options }} - {{- $scratch.Add "attrs" (printf `%s="%s"` $key $val) }} - {{- end }} - {{- end }} -{{- end -}} -{{ .Text | safeHTML }}{{ if strings.HasPrefix .Destination "http" }}{{ with resources.Get "icons/external-link.svg" }}{{ ( . | minify).Content | safeHTML }}{{ end }}{{ end }} -{{- /* This comment removes trailing newlines. */ -}} diff --git a/docs/layouts/_default/baseof.html b/docs/layouts/_default/baseof.html deleted file mode 100644 index 113febb9a..000000000 --- a/docs/layouts/_default/baseof.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - {{ partial "head.html" . }} - {{ partial "meta-version.html" . }} - - - {{ partial "gtm-body.html" }} -
- {{ partial "navbar.html" . }} -
-
-
- {{ block "main" . }}{{ end }} -
- {{ partialCached "footer.html" . }} -
- {{ partialCached "scripts.html" . }} - {{ partial "search.html" . }} - - diff --git a/docs/layouts/_default/content.html b/docs/layouts/_default/content.html index 58be716cd..5b3328b6c 100644 --- a/docs/layouts/_default/content.html +++ b/docs/layouts/_default/content.html @@ -8,7 +8,10 @@

{{ .Title }}

{{ if (and (not .Params.hide_readingtime) (.Site.Params.ui.readingtime.enable)) }} {{ partial "reading-time.html" . }} {{ end }} - {{ .Content }} + {{/* Drop Goldmark's role="doc-endnotes" from the footnotes wrapper: its + doc-endnote items sit inside an
    , so the wrapper owns no + doc-endnote children and fails aria-required-children. */}} + {{ .Content | replaceRE ` role="doc-endnotes"` "" | safeHTML }} {{ if and .Params.sectionIndex .Parent }} {{ partial "section-index.html" .Parent }} {{ end }} diff --git a/docs/layouts/docs/baseof.html b/docs/layouts/docs/baseof.html deleted file mode 100644 index 3191b5286..000000000 --- a/docs/layouts/docs/baseof.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - {{ partial "head.html" . }} - - {{ partial "meta-version.html" . }} - {{ if .Params.externalLink }} - - {{ end }} - - - - {{ partial "gtm-body.html" }} - {{ partial "skip-links.html" . }} -
    - {{ partial "navbar.html" . }} -
    -
    -
    -
    - {{ partial "navbar-breadcrumb.html" . }} -
    -
    -
    - {{ partial "sidebar.html" . }} -
    -
    - {{ partial "toc.html" . }} -
    -
    - {{ partial "version-banner.html" . }} - {{ if not .Site.Params.ui.breadcrumb_disable }}{{ partial "breadcrumb.html" . }}{{ end }} - {{ if .Draft }} - - {{ end }} - {{ block "main" . }}{{ end }} -
    -
    -
    - {{ partialCached "footer.html" . }} -
    - {{ partial "scripts.html" . }} - {{ partial "search.html" . }} - - diff --git a/docs/layouts/partials/article-label.html b/docs/layouts/partials/article-label.html deleted file mode 100644 index 848b92dc7..000000000 --- a/docs/layouts/partials/article-label.html +++ /dev/null @@ -1,24 +0,0 @@ -{{ $label := "" }} - -{{ if isset . "labelId" }} - {{ $label = .labelId }} -{{ else if .Params.articleLabel }} - {{ $label = .Params.articleLabel }} -{{ end }} - -{{ if and $label (gt (len $label) 0) }} - {{ $hasLabel := true }} - {{ range site.Data.articleLabels }} - {{ if and (eq (index . "labelId") $label) $hasLabel }} - - {{ end }} - {{ end }} - - {{ if $hasLabel }} - {{ warnf "Article label %q isn't specified in articleLabels.yml" $label }} - {{ end }} -{{ end }} diff --git a/docs/layouts/partials/custom-related-content.html b/docs/layouts/partials/custom-related-content.html deleted file mode 100644 index 3a9eaebd6..000000000 --- a/docs/layouts/partials/custom-related-content.html +++ /dev/null @@ -1,39 +0,0 @@ -{{ if .Params.related }} -

    Learn more:

    - -{{ end }} diff --git a/docs/layouts/partials/favicons.html b/docs/layouts/partials/favicons.html deleted file mode 100644 index ea04577c0..000000000 --- a/docs/layouts/partials/favicons.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/docs/layouts/partials/footer.html b/docs/layouts/partials/footer.html deleted file mode 100644 index d16320ffa..000000000 --- a/docs/layouts/partials/footer.html +++ /dev/null @@ -1,104 +0,0 @@ -{{ $footer := getJSON "https://www.gooddata.ai/learn-assets/js/footer-definition.json" }} - -
    - {{ if $footer.footer.bannerLinks }} - - {{ end }} - - - - -
    - -{{ define "absolute-link" }} - {{ $urlParse := urls.Parse .url }} - {{ $url := print (cond (and (gt (len $urlParse.Path) 0) (eq (len $urlParse.Host) 0)) "https://www.gooddata.ai" "") .url }} - {{ $id := replace (lower .text) " " "-" }} - {{ $content := cond (isset . "icon") .icon .text }} - - {{ $content }} -{{ end }} diff --git a/docs/layouts/partials/gtm-body.html b/docs/layouts/partials/gtm-body.html deleted file mode 100644 index 511b24979..000000000 --- a/docs/layouts/partials/gtm-body.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/layouts/partials/gtm.html b/docs/layouts/partials/gtm.html deleted file mode 100644 index c37c739c3..000000000 --- a/docs/layouts/partials/gtm.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - diff --git a/docs/layouts/partials/head-css.html b/docs/layouts/partials/head-css.html deleted file mode 100644 index 5c429c260..000000000 --- a/docs/layouts/partials/head-css.html +++ /dev/null @@ -1,14 +0,0 @@ - -{{ $scssMain := "scss/main.scss"}} -{{ if .IsServer }} -{{/* Note the missing postCSS. This makes it snappier to develop in Chrome, but makes it look sub-optimal in other browsers. */}} -{{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" true) }} - -{{ else }} -{{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" false) | postCSS | minify | fingerprint }} - - -{{ end }} - - -{{ partial "gtm.html" . }} diff --git a/docs/layouts/partials/head.html b/docs/layouts/partials/head.html deleted file mode 100644 index e6fe3a73f..000000000 --- a/docs/layouts/partials/head.html +++ /dev/null @@ -1,41 +0,0 @@ - - -{{ hugo.Generator }} -{{- $outputFormat := partial "outputformat.html" . -}} - -{{ range .AlternativeOutputFormats -}} - -{{ end -}} - -{{ if and (or (eq (getenv "HUGO_ENV") "public") (eq (getenv "HUGO_ENV") "production")) (ne $outputFormat "print") -}} - -{{ else -}} - -{{ end -}} - -{{ partialCached "favicons.html" . }} -{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} | {{ end }}{{ .Site.Title }}{{ end }} - -{{- template "_internal/opengraph.html" . -}} -{{- template "_internal/schema.html" . -}} -{{- template "_internal/twitter_cards.html" . -}} - -{{ partialCached "head-css.html" .Site "head-css" }} - -{{ if .Site.Params.offlineSearch }} - -{{end}} -{{ if .Site.Params.prism_syntax_highlighting }} - - - - -{{ end }} -{{ partialCached "custom-scripts.html" .}} -{{ partial "hooks/head-end.html" . }} diff --git a/docs/layouts/partials/header-menu.html b/docs/layouts/partials/header-menu.html deleted file mode 100644 index bb2d0164a..000000000 --- a/docs/layouts/partials/header-menu.html +++ /dev/null @@ -1,38 +0,0 @@ - diff --git a/docs/layouts/partials/hooks/body-end.html b/docs/layouts/partials/hooks/body-end.html index 245ff7410..231b922ed 100644 --- a/docs/layouts/partials/hooks/body-end.html +++ b/docs/layouts/partials/hooks/body-end.html @@ -25,3 +25,7 @@ data-modal-title-color="#1c0d3f" data-modal-title-font-family="bca6d3310b5c9dae1dae416e8abc8405,helvetica,arial,sans-serif" > + +{{/* Dark-mode theme switcher */}} +{{ $themeSwitcherJS := resources.Get "js/theme-switcher.js" | minify | fingerprint }} + diff --git a/docs/layouts/partials/hooks/head-end.html b/docs/layouts/partials/hooks/head-end.html new file mode 100644 index 000000000..ff0932b4f --- /dev/null +++ b/docs/layouts/partials/hooks/head-end.html @@ -0,0 +1,14 @@ +{{/* Project additions to the theme's (gooddata-docs-theme calls this + hook at the end of its head.html). Everything here used to live in local + shadow copies of head.html and docs/baseof.html. */}} + +{{ if .Site.Params.prism_syntax_highlighting }} + +{{ end }} + +{{/* The canonical link comes from the theme's meta-version.html. */}} +{{ if eq .Type "docs" }} + +{{ end }} diff --git a/docs/layouts/partials/navbar.html b/docs/layouts/partials/navbar.html index 32c7aaed2..2872363ae 100644 --- a/docs/layouts/partials/navbar.html +++ b/docs/layouts/partials/navbar.html @@ -1,13 +1,19 @@ {{/* (C) 2023 GoodData Corporation */}} +{{ $whitelabeled := .Site.Params.whitelabeled }} {{ $cover := .HasShortcode "blocks/cover" }} + +{{ if not $whitelabeled }}
    + {{/* Skip links render right after the logo so keyboard focus order is + logo → skip links → menu without using positive tabindex. */}} + {{ partial "skip-links.html" . }} {{ partial "header-menu.html" . }} {{ partial "header-right.html" . }}
    @@ -15,26 +21,45 @@
    {{ partial "navbar-breadcrumb.html" . }}
    + {{ if not .Params.no_search }}
    + {{ end }} {{ partial "ask-ai-button.html" . }} - {{ if .Site.Params.versions }} + {{ if .Site.Params.versions }} {{ else }}
    - {{ with .Site.GetPage "docs" }} {{ with resources.Get "icons/github.svg" }}{{ ( . | minify).Content | safeHTML }}{{ end }} GitHub - {{ end }} + {{ partial "theme-switcher.html" . }}
    {{ end }} + + {{ partial "edition-switch.html" . }} + {{ partial "lang-switch.html" . }} + +{{ else }} + +{{/* Whitelabeled header has no logo — keep skip links first here. */}} +{{ partial "skip-links.html" . }} +
    +
    +
    +
    +
    +
    +
    + +{{ end }} diff --git a/docs/layouts/partials/prev-next-pages.html b/docs/layouts/partials/prev-next-pages.html deleted file mode 100644 index 1b4dd4a35..000000000 --- a/docs/layouts/partials/prev-next-pages.html +++ /dev/null @@ -1,52 +0,0 @@ -
    -
    - {{ template "find-prev" (dict "currentPage" . ) }} -
    - -
    - {{ template "find-next" (dict "currentPage" . ) }} -
    -
    - -{{ define "find-prev" }} - {{ $currentPage := .currentPage }} - - {{ if $currentPage.IsSection }} - - {{ else }} - {{ if $currentPage.NextInSection }} - {{ with $currentPage.NextInSection }} - - {{ with resources.Get "icons/chevron.svg" }}{{ ( . | minify).Content | safeHTML }}{{ end }} - {{ .LinkTitle }} - - {{ end }} - {{ else }} - - {{ end }} - {{ end }} -{{ end }} - -{{ define "find-next" }} - {{ $currentPage := .currentPage }} - - {{ if $currentPage.IsSection }} - {{ with index $currentPage.Pages.ByWeight 0 }} - - {{ with resources.Get "icons/chevron.svg" }}{{ ( . | minify).Content | safeHTML }}{{ end }} - {{ .LinkTitle }} - - {{ end }} - {{ else }} - {{ if $currentPage.PrevInSection }} - {{ with $currentPage.PrevInSection }} - - {{ with resources.Get "icons/chevron.svg" }}{{ ( . | minify).Content | safeHTML }}{{ end }} - {{ $currentPage.PrevInSection.LinkTitle }} - - {{ end }} - {{ else }} - - {{ end }} - {{ end }} -{{ end }} diff --git a/docs/layouts/partials/share-dialog.html b/docs/layouts/partials/share-dialog.html deleted file mode 100644 index 01c0ab12e..000000000 --- a/docs/layouts/partials/share-dialog.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/layouts/partials/toc.html b/docs/layouts/partials/toc.html deleted file mode 100644 index 039a8a71b..000000000 --- a/docs/layouts/partials/toc.html +++ /dev/null @@ -1,9 +0,0 @@ -{{ partial "page-meta-links.html" . }} -{{ if not .Params.notoc }} -{{ with .TableOfContents }} -{{ if ge (len .) 1 }} -{{ . }} -{{ end }} -{{ end }} -{{ end }} -{{ partial "custom-related-content.html" . }} diff --git a/docs/layouts/shortcodes/alert.html b/docs/layouts/shortcodes/alert.html deleted file mode 100644 index f13c9365b..000000000 --- a/docs/layouts/shortcodes/alert.html +++ /dev/null @@ -1,13 +0,0 @@ -{{/* (C) 2023 GoodData Corporation */}} -{{ $_hugo_config := `{ "version": 1 }` }} -{{ $color := .Get "color" | default "primary" }} -{{ $icon := .Get "color" | default "default" }} - diff --git a/docs/layouts/shortcodes/blocks/card.html b/docs/layouts/shortcodes/blocks/card.html deleted file mode 100644 index eeca6e37d..000000000 --- a/docs/layouts/shortcodes/blocks/card.html +++ /dev/null @@ -1,42 +0,0 @@ -{{ $title := .Get "title" }} -{{ $sectionLink := .Get "sectionLink" }} -{{ $icon := .Get "icon" }} -{{ $iconPosition := default "left" (.Get "iconPosition") }} -{{ $maxRow := .Parent.Get "maxRow" }} - -{{ if ne .Page.FirstSection .Site.Home }} - {{ .Scratch.Set "docsRoot" (replaceRE "/$" "" .Page.FirstSection.RelPermalink) }} -{{ else if (and (isset .Site.Params "versions") (isset .Site.Params.versions 0)) }} - {{ .Scratch.Set "docsRoot" (replaceRE "/$" "" (index .Site.Params.versions 0).url) }} -{{ else }} - {{ .Scratch.Set "docsRoot" "/docs" }} -{{ end }} - -
    - {{ if $sectionLink }} - {{ with .Site.GetPage (printf "%s%s" (.Scratch.Get "docsRoot") $sectionLink) }} - -
    - {{ readFile (printf "%s%s" .RelPermalink .Params.icon) | safeHTML }} -
    -

    {{ .Title }}

    -

    {{ .Description }}

    -
    - {{ end }} - {{ else }} -
    - {{ if $icon }} -
    - {{ readFile $icon | safeHTML }} -
    - {{ end }} -

    {{ $title }}

    - - {{ if eq .Page.File.Ext "md" }} - {{ .Inner | .Page.RenderString }} - {{ else }} - {{ .Inner | htmlUnescape | safeHTML }} - {{ end }} -
    - {{ end }} -
    diff --git a/docs/layouts/shortcodes/blocks/cards-container.html b/docs/layouts/shortcodes/blocks/cards-container.html deleted file mode 100644 index 5a659a671..000000000 --- a/docs/layouts/shortcodes/blocks/cards-container.html +++ /dev/null @@ -1,3 +0,0 @@ -{{ $maxRow := .Get "maxRow" }} - -
    {{ .Inner }}
    diff --git a/docs/layouts/shortcodes/blocks/feature.html b/docs/layouts/shortcodes/blocks/feature.html deleted file mode 100644 index 341332671..000000000 --- a/docs/layouts/shortcodes/blocks/feature.html +++ /dev/null @@ -1,14 +0,0 @@ -{{ $icon := .Get "icon" | default "fa-lightbulb" }} -{{ $url_text := .Get "url_text" }} -{{ $grid := .Get "width" }} -{{ $align := .Get "align" | default "center" }} -{{ $color := .Get "color" }} - -
    -
    - -

    {{ .Get "title" | markdownify }}

    -
    {{ .Inner }}
    - {{ with .Get "url" }}

    {{ with $url_text }}{{ $url_text }}{{ else }}Learn more{{ end }}

    {{ end }} -
    -
    diff --git a/docs/layouts/shortcodes/blocks/homepage-hosted.html b/docs/layouts/shortcodes/blocks/homepage-hosted.html deleted file mode 100644 index cf86ee82d..000000000 --- a/docs/layouts/shortcodes/blocks/homepage-hosted.html +++ /dev/null @@ -1,13 +0,0 @@ -
    -
    - -
    -

    {{ .Get "title" }}

    -

    {{ .Get "text" }}

    - {{ .Inner }} -
    - -
    -
    diff --git a/docs/layouts/shortcodes/blocks/homepage-learn.html b/docs/layouts/shortcodes/blocks/homepage-learn.html deleted file mode 100644 index cf2f7f6a8..000000000 --- a/docs/layouts/shortcodes/blocks/homepage-learn.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -
    -
    -
    - -

    {{ .Get "title" }}

    -
    -
    -
    -
    -

    {{ .Get "text" }}

    -
    - - {{ .Get "buttonText" }} -
    -
    -
    diff --git a/docs/layouts/shortcodes/blocks/homepage-slack.html b/docs/layouts/shortcodes/blocks/homepage-slack.html deleted file mode 100644 index 57239bb6a..000000000 --- a/docs/layouts/shortcodes/blocks/homepage-slack.html +++ /dev/null @@ -1,14 +0,0 @@ -
    -
    -
    - -

    {{ .Get "title" }}

    -
    -
    {{ .Inner }}
    - -
    -
    diff --git a/docs/layouts/shortcodes/blocks/section.html b/docs/layouts/shortcodes/blocks/section.html deleted file mode 100644 index fb1ebcd3c..000000000 --- a/docs/layouts/shortcodes/blocks/section.html +++ /dev/null @@ -1,17 +0,0 @@ -{{ $_hugo_config := `{ "version": 1 }` }} -{{ $col_id := .Get "color" | default .Ordinal }} -{{ $height := .Get "height" | default "auto" }} -{{ $type := .Get "type" | default "" }} -{{ $customClasses := .Get "classes" | default "" }} - -
    -
    -
    - {{ if eq .Page.File.Ext "md" }} - {{ .Inner | markdownify }} - {{ else }} - {{ .Inner | htmlUnescape | safeHTML }} - {{ end }} -
    -
    -
    diff --git a/docs/layouts/shortcodes/blocks/sections-list.html b/docs/layouts/shortcodes/blocks/sections-list.html deleted file mode 100644 index 89ccf335f..000000000 --- a/docs/layouts/shortcodes/blocks/sections-list.html +++ /dev/null @@ -1,52 +0,0 @@ -{{- if (and (isset .Site.Params "versions") (isset .Site.Params.versions 0)) -}} -{{ .Scratch.Set "docsRoot" (index .Site.Params.versions 0).url }} -{{- else -}} -{{ .Scratch.Set "docsRoot" "/docs/" }} -{{- end -}} -{{- $sections := .Site.GetPage (.Scratch.Get "docsRoot") -}} -
    -
    -
    - {{ .Inner | markdownify }} -
    - -
    -
    - {{ range $sections.CurrentSection.Pages }} - {{ $site := .Page.Site }} - {{ $page := .Page }} - - {{ if and (not $page.Params.toc_hide) (not $page.Params.homepage_hide) (ne $page $site.Home) }} -
    -
    - {{ if $page.Params.icon }} -
    - {{ $page.LinkTitle }} -
    - {{ end }} -
    -

    {{ $page.LinkTitle }}

    -

    {{ $page.Description }}

    - Learn more - - {{ if $page.Params.promotedLinks }} - - - {{ end }} -
    -
    -
    - {{ end }} - {{ end }} -
    -
    -
    -
    diff --git a/docs/layouts/shortcodes/code-lang.html b/docs/layouts/shortcodes/code-lang.html deleted file mode 100644 index 8f96cb541..000000000 --- a/docs/layouts/shortcodes/code-lang.html +++ /dev/null @@ -1,18 +0,0 @@ -{{ $lang := .Get "lang" }} -{{ $userAgent := .Get "userAgent" | default $lang }} -{{ $index := .Ordinal }} -{{ $codeBlock := .Inner }} - -{{ with .Parent }} - {{ $selectId := .Get "id" }} - {{ $scratchIdLang := print "code-block-lang-" (string .Ordinal) }} - {{ .Scratch.SetInMap $scratchIdLang (string $index) $lang }} - {{ $scratchIdUserAgent := print "code-block-userAgent-" (string .Ordinal) }} - {{ .Scratch.SetInMap $scratchIdUserAgent (string $index) $userAgent }} - -
    - {{ $codeBlock }} -
    -{{ else }} - {{ $codeBlock }} -{{ end }} diff --git a/docs/layouts/shortcodes/code-select.html b/docs/layouts/shortcodes/code-select.html deleted file mode 100644 index 12e1033e2..000000000 --- a/docs/layouts/shortcodes/code-select.html +++ /dev/null @@ -1,17 +0,0 @@ -
    - {{ $enableOSDetection := .Get "enableOSDetection" }} - {{ $scratchIdLangs := print "code-block-lang-" (string .Ordinal) }} - {{ $langs := .Scratch.Get $scratchIdLangs }} - {{ $scratchIdUserAgent := print "code-block-userAgent-" (string .Ordinal) }} - {{ $userAgent := .Scratch.Get $scratchIdUserAgent }} - - {{ if $langs }} -
    - {{ range $index, $lang := $langs }} -
    {{ $lang }}
    - {{ end }} -
    - {{ end }} - - {{ .Inner }} -
    diff --git a/docs/layouts/shortcodes/content-block.html b/docs/layouts/shortcodes/content-block.html deleted file mode 100644 index c23841009..000000000 --- a/docs/layouts/shortcodes/content-block.html +++ /dev/null @@ -1,15 +0,0 @@ -{{ $title := .Get "title" }} -{{ $index := .Ordinal }} -{{ $block := .Inner }} - -{{ with .Parent }} -{{ $selectId := .Get "id" }} -{{ $scratchIdTitles := print "content-block-" (string .Ordinal) }} -{{ .Scratch.SetInMap $scratchIdTitles (string $index) $title }} - -
    - {{ $block }} -
    -{{ else }} -{{ $block }} -{{ end }} diff --git a/docs/layouts/shortcodes/content-select.html b/docs/layouts/shortcodes/content-select.html deleted file mode 100644 index 172f24f97..000000000 --- a/docs/layouts/shortcodes/content-select.html +++ /dev/null @@ -1,13 +0,0 @@ -
    - {{ $scratchIdTitles := print "content-block-" (string .Ordinal) }} - {{ $titles := .Scratch.Get $scratchIdTitles }} - - {{ if $titles }} -
    - {{ range $index, $title := $titles }} -
    {{ $title }}
    - {{ end }} -
    -{{ end }} -{{ .Inner }} -
    diff --git a/docs/layouts/shortcodes/inline-icon.html b/docs/layouts/shortcodes/inline-icon.html deleted file mode 100644 index a19601eec..000000000 --- a/docs/layouts/shortcodes/inline-icon.html +++ /dev/null @@ -1 +0,0 @@ -{{ printf "static/%s" (.Get 0) | readFile | safeHTML }} diff --git a/docs/layouts/shortcodes/label.html b/docs/layouts/shortcodes/label.html deleted file mode 100644 index fd1632aff..000000000 --- a/docs/layouts/shortcodes/label.html +++ /dev/null @@ -1,3 +0,0 @@ -{{ $labelId := .Get "id" }} - -{{ partial "article-label.html" (dict "labelId" $labelId) }} diff --git a/docs/layouts/shortcodes/latest-doc-dirpath.html b/docs/layouts/shortcodes/latest-doc-dirpath.html deleted file mode 100644 index 024b82de8..000000000 --- a/docs/layouts/shortcodes/latest-doc-dirpath.html +++ /dev/null @@ -1,10 +0,0 @@ -{{/* This shortcode can be handy if you need to provide a link to latest dirpath of the versioned documentation, defaults to "docs". */}} -{{- if .Site.Params.versions -}} - {{- if .Site.Params.devVersion }} - {{- (index .Site.Params.versions 1).dirpath -}} - {{- else -}} - {{- (index .Site.Params.versions 0).dirpath -}} - {{- end -}}} -{{- else -}} -docs -{{- end -}} diff --git a/docs/layouts/shortcodes/latesttag.html b/docs/layouts/shortcodes/latesttag.html deleted file mode 100644 index bfeacf167..000000000 --- a/docs/layouts/shortcodes/latesttag.html +++ /dev/null @@ -1,10 +0,0 @@ -{{- $curPage := .Page.Section -}} -{{- if .Site.Params.versions -}} - {{- range .Site.Params.versions -}} - {{- if eq $curPage .dirpath -}} - {{- .latestTag -}} - {{- end -}} - {{- end -}} -{{- else -}} - {{- .Site.Params.version -}} -{{- end -}} diff --git a/docs/layouts/shortcodes/product.html b/docs/layouts/shortcodes/product.html deleted file mode 100644 index e7fec09ca..000000000 --- a/docs/layouts/shortcodes/product.html +++ /dev/null @@ -1,8 +0,0 @@ -{{- $.Scratch.Set "productName" "GoodData.CN" -}} -{{- $curPage := $.Page.Section -}} -{{- range $.Site.Params.versions -}} - {{- if and (eq $curPage .dirpath) (isset . "productName") -}} - {{- $.Scratch.Set "productName" .productName -}} - {{- end -}} -{{- end -}} -{{- $.Scratch.Get "productName" -}} diff --git a/docs/layouts/shortcodes/swaggerui.html b/docs/layouts/shortcodes/swaggerui.html deleted file mode 100644 index 666d13588..000000000 --- a/docs/layouts/shortcodes/swaggerui.html +++ /dev/null @@ -1,26 +0,0 @@ -{{ $original := .Get "src" }} -
    - diff --git a/docs/layouts/swagger/baseof.html b/docs/layouts/swagger/baseof.html deleted file mode 100644 index 83563423a..000000000 --- a/docs/layouts/swagger/baseof.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - {{ partial "head.html" . }} - {{ $baseurl := urls.Parse site.BaseURL }} - {{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{ . }} | {{ end }}{{ .Site.Title }}{{ end }} - - - - {{ partial "gtm-body.html" }} -
    - {{ partial "navbar.html" . }} -
    -
    -
    -
    - {{ partial "navbar-breadcrumb.html" . }} -
    -
    -
    - {{ partial "sidebar.html" . }} -
    -
    - {{ partial "toc.html" . }} -
    -
    - {{ if not .Site.Params.ui.breadcrumb_disable }}{{ partial "breadcrumb.html" . }}{{ end }} - - - {{ block "main" . }}{{ end }} -
    -
    -
    - {{ partialCached "footer.html" . }} -
    - {{ partial "scripts.html" . }} - - diff --git a/docs/static/figures/different-use-cases.png b/docs/static/figures/different-use-cases.png deleted file mode 100644 index 9200f318cc232b8f65feb4146c19870a2f08a6b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41087 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 diff --git a/docs/static/figures/gd-relationship.png b/docs/static/figures/gd-relationship.png deleted file mode 100644 index c776569f7b7a985d4b3d7e747cd7d17203536631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292527 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≥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