From 138aa062ea5cd203d941e3694e68bbe5f29150fe Mon Sep 17 00:00:00 2001 From: Madelena Mak Date: Tue, 16 Jul 2024 07:40:34 -0400 Subject: [PATCH] A wider website and documentation navigation revamp (#33601) Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> Co-authored-by: Franck Nijhof --- _config.yml | 24 +- sass/homeassistant/_overrides.scss | 292 +++++++++++++++++- sass/homeassistant/_variables.scss | 4 +- sass/homeassistant/base/_global.scss | 4 + sass/homeassistant/base/_navigation.scss | 4 +- sass/homeassistant/base/_sidebar.scss | 4 +- sass/homeassistant/homepage/_hero_unit.scss | 1 + sass/homeassistant/pages/_component_page.scss | 22 +- sass/inuitcss/_defaults.scss | 4 +- source/_docs/scripts.markdown | 1 - source/_docs/scripts/conditions.markdown | 1 - source/_includes/asides/categories.html | 4 +- .../asides/dashboards_navigation.html | 24 +- source/_includes/asides/docs_navigation.html | 190 +----------- source/_includes/asides/docs_sitemap.html | 277 +++++++++++++++++ .../asides/getting_started_navigation.html | 42 ++- .../asides/organizing_navigation.html | 16 +- .../_includes/asides/recent_categories.html | 14 + source/_includes/asides/recent_posts.html | 6 +- source/_includes/asides/voice_navigation.html | 2 - source/_includes/blog/archive_post.html | 36 ++- source/_includes/blog/post/article.html | 2 +- source/_includes/site/header.html | 35 +-- source/_includes/site/hero_unit.html | 2 +- source/_includes/site/left_sidebar.html | 3 + source/_includes/site/sidebar.html | 59 +--- source/_includes/site/vertical_nav.html | 49 +++ source/_layouts/category_index.html | 15 +- source/_layouts/default.html | 37 ++- source/_layouts/page.html | 6 +- source/_layouts/post.html | 1 + source/blog/index.html | 34 +- source/docs/index.html | 17 + source/docs/index.markdown | 50 --- source/getting-started/index.markdown | 3 + source/help/reporting_issues.markdown | 1 - 36 files changed, 843 insertions(+), 443 deletions(-) create mode 100644 source/_includes/asides/docs_sitemap.html create mode 100644 source/_includes/asides/recent_categories.html create mode 100644 source/_includes/site/left_sidebar.html create mode 100644 source/_includes/site/vertical_nav.html create mode 100644 source/docs/index.html delete mode 100644 source/docs/index.markdown diff --git a/_config.yml b/_config.yml index 3a971b58e68..73a7bf69085 100644 --- a/_config.yml +++ b/_config.yml @@ -139,26 +139,48 @@ defaults: footer: true sharing: true sidebar: true + toc: true # Enable table of contents for integrations and installations # # To set toc as a default value, we need to set the scope with an empty path # and the collection as type # https://github.com/toshimaru/jekyll-toc/issues/116#issuecomment-644205770 # + - scope: + path: "" + type: dashboards + values: + toc: true - scope: path: "" type: integrations values: toc: true + - scope: + path: "" + type: docs + values: + toc: true - scope: path: "installation/*" values: toc: true - no_toc: true - scope: path: "common-tasks/*" values: toc: true + - scope: + path: "getting-started/*" + values: + toc: true + - scope: + path: "more-info/*" + values: + toc: true + - scope: + path: "voice_control/*" + values: + toc: true - scope: path: "hassio/*" values: diff --git a/sass/homeassistant/_overrides.scss b/sass/homeassistant/_overrides.scss index efa5eefd6e7..70e83439ab6 100644 --- a/sass/homeassistant/_overrides.scss +++ b/sass/homeassistant/_overrides.scss @@ -1,7 +1,7 @@ @charset "UTF-8"; -.page h1.title.indent { - font-size: 3.125em; +h1.title.indent { + font-size: 3.5rem; } .title.delta, .title.epsilon { border-bottom: none; @@ -19,15 +19,192 @@ } @media only screen and (max-width: $menu-collapse) { html { - font-size: .95em; + font-size: .95rem; } - .page h1.title.indent { - font-size: 2.875em; + h1.title.indent { + font-size: 3rem; overflow-wrap: break-word; hyphens: auto; } } + +// Wider page width +.grid-wrapper { + padding: 0 24px; + + @media only screen and (min-width: $desk-start) { + padding: 0 48px; + } +} + +@media only screen and (min-width: $desk-wide-start) { + .integration-page, .documentation-page, .blog-post { + .grid-wrapper>.grid.grid-center { + display: flex; + flex-direction: row-reverse; + justify-content: flex-end; + } + } + + #sidebar { + .vertical-nav, .recent-categories, .recent-posts, .categories { + background: none; + padding: 0 16px 0 0; + } + } + + .documentation-page, .blog-post { + #sidebar #toc-module { + display: none; + } + } +} + + +// Documentation index + +.docs-index { + margin: 0; + + &>li { + list-style-type: none; + font-size: 1.5rem; + font-weight: 600; + + &>iconify-icon { + margin: 2px 8px 0 0; + transform-origin: left; + transform: scale(1) translateY(10px); + background: #007fa8; + color: white; + padding: 10px; + border-radius: 32px; + } + + &>a { + text-decoration: none !important; + + &::after { + content: '▸'; + } + } + + &>ul { + font-family: $sans-serif; + font-size: 1rem; + font-weight: 500; + text-transform: none; + + display: grid; + grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + column-gap: 24px; + margin: 0 0 0 28px; + + margin: 16px 0 48px !important; + padding: 20px 24px; + background: rgba(0, 0, 0, .01); + border-radius: 16px; + border: 1px solid rgba(0, 0, 0, .1); + + a { + text-decoration: none !important; + } + + &>li { + list-style-type: none; + + &>ul { + margin-left: 20px; + font-size: .85rem; + font-weight: normal; + + &>li { + margin: 4px 0; + + &:first-child { + margin-top: 8px; + } + + &:nth-child(1n+7) { + display: none; + } + + &:nth-child(6) { + &::before { + content: 'More...'; + } + &>a { + display: none; + } + } + + &:last-child { + margin-bottom: 16px; + } + } + } + } + } + } +} + + +// Vertical Nav + +.vertical-nav { + .divided.sidebar-menu { + &>li { + iconify-icon { + margin-right: 8px; + } + + ul { + list-style-type: none; + margin: 16px 0 16px 28px; + + li { + margin: 8px 0; + } + } + + &>ul { + margin: 16px 0 8px 28px; + } + } + } +} + + +// Table of Contents + +#toc-bar { + display: none; + position: sticky; + top: 80px; + padding-left: 32px; + + .aside-module { + background: none; + padding: 0; + } +} + +@media only screen and (min-width: $desk-wide-start) { + .documentation-page #toc-bar, .integration-page #toc-bar, .blog-post #toc-bar { + display: inline-block; + } + #integration-sidebar #toc-module { + display: none; + } + .documentation-page #sidebar #toc-module { + background: none; + padding: 0; + } +} + + + // Rounded background for numbered lists article> { ol { @@ -109,6 +286,10 @@ ul, ol, dd { margin-bottom: 27px; } +.menu > li > a.active { + font-weight: bold; +} + .dark .menu > li > a:hover, .dark .menu > li > a:focus { box-shadow: inset 0px -5px rgba($white, .5); @@ -316,7 +497,65 @@ a.material-card:hover { } +// Blog archive material cards + +#archive-list { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 24px; + + h2 { + grid-column: 1/-1; + margin: 16px 0 0; + } + + a { + text-decoration: none; + } + + .material-card { + .img { + background-color: $grayLighter; + width: calc(100%-8px); + aspect-ratio: 120/63; + background-size: cover; + background-position: center; + border-radius: 8px; + margin: 4px; + } + + .caption { + padding: 8px 16px 12px; + + display: flex; + justify-content: space-between; + align-items: center; + + font-size: 1rem; + + .title { + font-weight: 500; + margin-bottom: 4px; + } + + .subtitle{ + font-size: .85em; + color: $gray; + } + } + + svg { + min-width: 24px; + height: 24px; + } + } + +} + + + .feedback { + margin-top: 64px; h4 { margin: 0 0 8px !important; @@ -544,9 +783,8 @@ a.material-card:hover { .seen-press { display: grid; - grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); - column-gap: 24px; - row-gap: 24px; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: 24px; margin: 48px 0; h2 { @@ -582,6 +820,16 @@ a.material-card:hover { .round { border-radius: 50%; } + + @media only screen and (max-width: $lap-end) { + grid-template-columns: repeat(auto-fill, minmax(144px, 1fr)); + gap: 16px; + + img { + max-height: 96px; + } + } + } .sponsored-by { @@ -597,7 +845,7 @@ a.material-card:hover { } } -@media screen and (max-width: 700px) { +@media screen and (max-width: $lap-end) { .frontpage .events .event { .caption { padding-top: 4px; @@ -672,7 +920,25 @@ article.listing { &>table, &>.entry-content>table { - background-color: #f3fcf5; + background-color: #fff; + table-layout: auto; + + &>thead { + background-color: rgba(0, 0, 0, .025); + // border: 1px solid rgba(0, 0, 0, .1); + border-radius: 16px 16px 0 0; + font-size: .85em; + } + + &>tbody { + tr { + border-bottom: 1px solid rgba(0, 0, 0, .1); + + &:last-of-type { + border-bottom: 0; + } + } + } } p.img { @@ -725,6 +991,7 @@ article.listing { h2 { margin-top: 1.75em; + line-height: 1.4; } h3 { @@ -858,6 +1125,9 @@ ul.sidebar-menu { a.active { color: #000; font-weight: bold; + border-left: 4px solid $primary-color; + padding: 0 8px; + display: inline-block; } ul { @@ -992,7 +1262,7 @@ div.config-vars { code { font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.8em; - color: $primary-color; + color: $link-color; word-spacing: normal; word-break: normal; word-wrap: normal; diff --git a/sass/homeassistant/_variables.scss b/sass/homeassistant/_variables.scss index 6cf7d601c65..251a148340a 100644 --- a/sass/homeassistant/_variables.scss +++ b/sass/homeassistant/_variables.scss @@ -1,5 +1,5 @@ $use-grids: true; -$site-width: 1100px; +$site-width: 1560px; $responsive: true; $use-gridfix: true; @@ -28,7 +28,7 @@ $white: #fff !default; // Accent colors // ------------------------- $blue: #1abcf2 !default; -$blueDark: #0064cd !default; +$blueDark: #007fa8 !default; $green: #46a546 !default; $red: #9d261d !default; $yellow: #ffc40d !default; diff --git a/sass/homeassistant/base/_global.scss b/sass/homeassistant/base/_global.scss index 2e08a90a454..7e65b7d48aa 100644 --- a/sass/homeassistant/base/_global.scss +++ b/sass/homeassistant/base/_global.scss @@ -16,6 +16,10 @@ body, html { margin-top: 0; padding-top: 88px; width: 100%; + + &>.grid-wrapper:last-of-type { + min-height: calc(100vh - 714px); + } } h1, h2, h3, h4, h5, h6 { diff --git a/sass/homeassistant/base/_navigation.scss b/sass/homeassistant/base/_navigation.scss index d1494a3e7d0..e179f2a21d7 100644 --- a/sass/homeassistant/base/_navigation.scss +++ b/sass/homeassistant/base/_navigation.scss @@ -107,7 +107,7 @@ ul.menu li { &:hover, &:focus { - background: $grayLighter; + background: rgba($primary-color, .1); } } } @@ -169,7 +169,7 @@ header .grid { .menu li a:hover, .menu li a:focus { - background: $grayLighter; + background: rgba($primary-color, .1); box-shadow: inset 5px 0px $primary-color; padding: 15px 15px 15px 25px; } diff --git a/sass/homeassistant/base/_sidebar.scss b/sass/homeassistant/base/_sidebar.scss index f0ad38166e1..0b376e2620f 100644 --- a/sass/homeassistant/base/_sidebar.scss +++ b/sass/homeassistant/base/_sidebar.scss @@ -20,7 +20,7 @@ } } -#sidebar { +#sidebar, #left-sidebar, #toc-bar, #integration-sidebar { position: sticky; top: 88px; max-height: calc(100vh - 104px); @@ -43,7 +43,7 @@ } @media only screen and (max-width: $lap-end) { - #sidebar { + #sidebar, #left-sidebar, #toc-bar, #integration-sidebar { max-height: fit-content; .grid { diff --git a/sass/homeassistant/homepage/_hero_unit.scss b/sass/homeassistant/homepage/_hero_unit.scss index 400531e805d..758a3622f8e 100644 --- a/sass/homeassistant/homepage/_hero_unit.scss +++ b/sass/homeassistant/homepage/_hero_unit.scss @@ -76,6 +76,7 @@ #HAdemo { width: 100%; + max-width: 400px; height: 800px; border-radius: 48px; border: 12px double white; diff --git a/sass/homeassistant/pages/_component_page.scss b/sass/homeassistant/pages/_component_page.scss index 073e559ff42..610f8420522 100644 --- a/sass/homeassistant/pages/_component_page.scss +++ b/sass/homeassistant/pages/_component_page.scss @@ -6,7 +6,6 @@ letter-spacing: .005em; color: $gray; text-transform: uppercase; - padding-top: 8px; } } .component-search { @@ -38,9 +37,8 @@ // styles for the cards .hass-option-cards { display: grid; - grid-template-columns: repeat(auto-fill, minmax(192px, 1fr)); - - margin: -10px; // grid trick, has to match option-card's margin + grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); + gap: 24px; div.alert, p.alert-content { width: 100%; @@ -48,11 +46,9 @@ .option-card { flex: 0 0 auto; - min-width: 192px; - height: 192px; + aspect-ratio: 1; display: inline-block; background-color: #f8f8f8; - margin: 10px; border-radius: 8px; border: 1px solid rgba(0, 0, 0, .12); padding: 8px; @@ -136,13 +132,14 @@ a.option-card:hover { @media only screen and (max-width: $palm-end) { .hass-option-cards { + grid-template-columns: 1fr; + .option-card { - width: calc(100% - 24px) !important; + width: 100% !important; flex-direction: row; display: flex; align-items: center; height: 80px; - margin: 8px; .img-container { margin: 8px; @@ -161,9 +158,8 @@ a.option-card:hover { } #components-page { .hass-option-cards { - grid-template-columns: 1fr; .option-card { - width: calc(50% - 24px); + } } .category_select { @@ -182,6 +178,7 @@ a.option-card:hover { flex-wrap: wrap; margin-bottom: 16px; align-items: flex-end; + gap: 8px; &>div { margin-right: 8px; @@ -232,12 +229,13 @@ a.option-card:hover { } .btn { + font-size: 1rem; display: block; background: 0; color: black; box-shadow: none; text-shadow: none; - padding: 2px; + padding: 4px 0; border-radius: 0; &.current { diff --git a/sass/inuitcss/_defaults.scss b/sass/inuitcss/_defaults.scss index 37b47eca3d4..611bb0b307d 100644 --- a/sass/inuitcss/_defaults.scss +++ b/sass/inuitcss/_defaults.scss @@ -72,7 +72,7 @@ $responsive: true!default; * Responsiveness for widescreen/high resolution desktop monitors and beyond? * Note: `$responsive` variable above must be set to true before enabling this. */ -$responsive-extra: false!default; +$responsive-extra: true!default; /** * Responsive push and pull produce a LOT of code, only turn them on if you @@ -103,7 +103,7 @@ $desk-pull: false!default; */ $lap-start: 481px!default; $desk-start: 1024px!default; -$desk-wide-start: 1200px!default; +$desk-wide-start: 1280px!default; diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 6771cf8d5ae..5ec95991b32 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -2,7 +2,6 @@ title: "Script Syntax" description: "Documentation for the Home Assistant Script Syntax." toc: true -no_toc: true --- Scripts are a sequence of {% term actions %} that Home Assistant will execute. Scripts are available as an entity through the standalone [Script integration] but can also be embedded in {% term automations %} and [Alexa/Amazon Echo] configurations. diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index 6d66417043e..34c89afb1d2 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -2,7 +2,6 @@ title: "Conditions" description: "Documentation about all available conditions." toc: true -no_toc: true --- Conditions can be used within a {% term script %} or {% term automation %} to prevent further execution. When a condition evaluates true, the script or automation will be executed. If any other value is returned, the script or automation stops executing. A condition will look at the system at that moment. For example, a condition can test if a switch is currently turned on or off. diff --git a/source/_includes/asides/categories.html b/source/_includes/asides/categories.html index fd4c789636f..94ff7d2fdc8 100644 --- a/source/_includes/asides/categories.html +++ b/source/_includes/asides/categories.html @@ -1,11 +1,11 @@ -
+

{% icon "mdi:category" %} Categories

diff --git a/source/_includes/asides/dashboards_navigation.html b/source/_includes/asides/dashboards_navigation.html index 5fe1de05479..6e4340a4e7e 100644 --- a/source/_includes/asides/dashboards_navigation.html +++ b/source/_includes/asides/dashboards_navigation.html @@ -1,22 +1,14 @@ -
+
{% assign elements = site.dashboards | sort_natural: 'title' %}

Dashboards

@@ -48,14 +40,12 @@
  • {% active_link /dashboards/features/ Features %}
  • {% active_link /dashboards/header-footer/ Headers & footers %}
  • {% active_link /dashboards/actions/ Actions %}
  • -
  • - Developing custom cards {% icon "tabler:external-link" %} - -
  • +
    diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index 81dcd8d61be..8dd89f3522f 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -1,190 +1,16 @@ -
    +
    -

    Topics

    +

    {% icon "mdi:bookshelf" %} Documentation

    \ No newline at end of file diff --git a/source/_includes/asides/docs_sitemap.html b/source/_includes/asides/docs_sitemap.html new file mode 100644 index 00000000000..4711a2941dc --- /dev/null +++ b/source/_includes/asides/docs_sitemap.html @@ -0,0 +1,277 @@ +
  • + {% active_link /docs/automation/ Automations %} + {% if doc == 'automation' or doc == 'blueprint' or doc == 'scripts' or doc == 'scene' or include.docs_index %} +
      +
    • + {% icon "mdi:robot-happy" %} {% active_link /docs/automation/basics/ Basic automations %} + {% if doc == 'automation' or include.docs_index %} +
        +
      • {% active_link /docs/automation/using_blueprints/ Using automation blueprints %}
      • +
      • {% active_link /docs/automation/editor/ Editor %}
      • +
      • {% active_link /docs/automation/trigger/ Triggers %}
      • +
      • {% active_link /docs/automation/condition/ Conditions %}
      • +
      • {% active_link /docs/automation/action/ Actions %}
      • +
      • {% active_link /docs/automation/modes/ Run modes %}
      • +
      • {% active_link /docs/automation/services/ Services %}
      • +
      • {% active_link /docs/automation/templating/ Templates %}
      • +
      • {% active_link /docs/automation/yaml/ YAML %}
      • +
      • {% active_link /docs/automation/troubleshooting/ Troubleshooting automation %}
      • +
      + {% endif %} +
    • +
    • + {% icon "mdi:palette" %} {% active_link /docs/scene/ Scenes %} + {% if doc == 'scene' or include.docs_index %} +
        +
      • {% active_link /docs/scene/editor/ Editor %}
      • +
      + {% endif %} +
    • +
    • + {% icon "mdi:palette-swatch" %} {% active_link /docs/blueprint/ Blueprints %} + {% if doc == 'blueprint' or include.docs_index %} +
        +
      • {% active_link /docs/blueprint/tutorial/ Tutorial %}
      • +
      • {% active_link /docs/blueprint/schema/ Blueprint schema %}
      • +
      • {% active_link /docs/blueprint/selectors/ Selectors %}
      • +
      + {% endif %} +
    • +
    • + {% icon "mdi:script-text" %} {% active_link /docs/scripts/ Scripts %} + {% if doc == 'scripts' or include.docs_index %} +
        +
      • {% active_link /docs/scripts/service-calls/ Service calls %}
      • +
      • {% active_link /docs/scripts/conditions/ Conditions %}
      • +
      + {% endif %} +
    • +
    + {% endif %} +
  • + +
  • + {% icon "mdi:gauge" %} {% active_link /dashboards Dashboards %} + {% if root == 'dashboards' or include.docs_index %} +
      + {% assign elements = site.dashboards | sort_natural: 'title' %} + +
    • + Dashboard basics +
        +
      • {% active_link /dashboards/ Introduction %}
      • +
      • {% active_link /dashboards/dashboards/ Multiple dashboards %}
      • +
      • {% active_link /dashboards/views/ Views %}
      • +
      • {% active_link /dashboards/cards/ Cards %}
      • +
      • {% active_link /dashboards/badges/ Badges %}
      • +
      +
    • + +
    • + View types +
        + {% for element in elements %} + {% if element.type == "view" %} +
      • {% active_link {{element.url}} {{element.sidebar_label}} %}
      • + {% endif %} + {% endfor %} +
      +
    • + +
    • + {% icon "mdi:card-multiple" %} Card types +
        + {% for element in elements %} + {% if element.type == "card" %} +
      • {% active_link {{element.url}} {{element.sidebar_label}} %}
      • + {% endif %} + {% endfor %} +
      +
    • + +
    • + {% icon "mdi:cog" %} Advanced + +
    • + +
    + {% endif %} +
  • + +
  • + {% icon "mdi:microphone" %} {% active_link /voice_control/ Voice assistants %} + {% if root == 'voice_control' or include.docs_index %} +
      +
    • Devices +
        +
      • {% active_link /voice_control/android/ Assist for Android %}
      • +
      • {% active_link /voice_control/apple/ Assist for Apple %}
      • +
      • {% active_link /voice_control/start_assist_from_dashboard/ Starting Assist from your dashboard %}
      • +
      +
    • +
    • {% icon "mdi:comment-processing-outline" %} {% active_link /voice_control/ Voice assistants %} +
        +
      • {% active_link /voice_control/voice_remote_local_assistant/ Configuring a local assistant %}
      • +
      • {% active_link /voice_control/voice_remote_cloud_assistant/ Configuring a cloud assistant %}
      • +
      • {% active_link /voice_control/voice_remote_expose_devices/ Exposing devices to voice assistant %}
      • +
      • {% active_link /voice_control/install_wake_word_add_on/ Enabling a wake word %}
      • +
      • {% active_link /voice_control/about_wake_word/ About wake words %}
      • +
      • {% active_link /voice_control/builtin_sentences/ Built-in sentences %}
      • +
      • {% active_link /voice_control/custom_sentences/ Custom sentences %}
      • +
      • {% active_link /voice_control/aliases/ Using aliases %}
      • +
      • {% active_link /voice_control/using_tts_in_automation/ Using Piper TTS in automations %}
      • +
      • {% active_link /voice_control/assist_create_open_ai_personality/ Creating a personality with AI %}
      • +
      +
    • +
    • {% icon "mdi:checkbox-marked" %} Projects +
        +
      • {% active_link /voice_control/s3_box_voice_assistant/ Tutorial: ESP32-S3-BOX voice assistant %}
      • +
      • {% active_link /voice_control/s3-box-customize/ Tutorial: Customize the S3-BOX %}
      • +
      • {% active_link /voice_control/thirteen-usd-voice-remote/ Tutorial: $13 voice assistant %}
      • +
      • {% active_link /voice_control/worlds-most-private-voice-assistant/ Tutorial: World's most private voice assistant %}
      • +
      • {% active_link /voice_control/create_wake_word/ Tutorial: Create your own wake word %}
      • +
      • {% active_link /voice_control/assist_daily_summary/ Tutorial: Your daily summary by Assist %}
      • +
      +
    • +
    • {% icon "mdi:account-help" %} Troubleshooting +
        +
      • {% active_link /voice_control/troubleshooting/ Troubleshooting Assist %}
      • +
      • {% active_link /voice_control/troubleshooting_the_s3_box/ Troubleshooting the ESP32-S3-BOX %}
      • +
      +
    • +
    + {% endif %} +
  • + +
  • + {% icon "mdi:category" %} {% active_link /docs/organizing/ Organization %} + {% if doc == 'organizing' or include.docs_index %} +
      +
    • {% active_link /docs/organizing/ Grouping your assets %}
    • +
    • {% active_link /docs/organizing/tables Working with tables %}
    • +
    • {% active_link /docs/organizing/areas/ Areas %}
    • +
    • {% active_link /docs/organizing/floors/ Floors %}
    • +
    • {% active_link /docs/organizing/labels/ Labels %}
    • +
    • {% active_link /docs/organizing/categories/ Categories %}
    • +
    • {% active_link /docs/frontend/icons/ Icons %}
    • +
    + {% endif %} +
  • + +
  • + {% icon "mdi:solar-power-variant" %} {% active_link /docs/energy/ Home energy management %} + {% if doc == 'energy' or include.docs_index %} +
      +
    • {% active_link /docs/energy/electricity-grid/ Electricity grid %}
    • +
    • {% active_link /docs/energy/solar-panels/ Solar panels %}
    • +
    • {% active_link /docs/energy/individual-devices/ Individual devices %}
    • +
    • {% active_link /docs/energy/faq/ FAQ %}
    • +
    + {% endif %} +
  • + +
  • + {% icon "mdi:update" %} {% active_link /common-tasks/os/ Common tasks %} + {% if root == 'common-tasks' or include.docs_index %} +
      +
    • {% active_link /common-tasks/os/ Home Assistant Operating System %}
    • +
    • {% active_link /common-tasks/container/ Home Assistant Container %}
    • +
    • {% active_link /common-tasks/core/ Home Assistant Core %}
    • +
    • {% active_link /common-tasks/supervised/ Home Assistant Supervised %}
    • +
    • {% active_link /common-tasks/general/ Installation independent %}
    • +
    • {% active_link /docs/troubleshooting_general/ General troubleshooting %}
    • +
    + {% endif %} +
  • + +
  • + {% icon "mdi:cogs" %} {% active_link /docs/configuration/ Advanced configuration %} + {% if doc == 'configuration' or include.docs_index %} +
      +
    • {% active_link /docs/configuration/yaml/ YAML syntax %}
    • +
    • {% active_link /docs/configuration/basic/ Basic information %}
    • +
    • {% active_link /docs/configuration/customizing-devices/ Customizing entities %}
    • +
    • {% active_link /docs/configuration/troubleshooting/ Troubleshooting configuration %}
    • +
    • {% active_link /docs/configuration/securing/ Security check points %}
    • +
    • {% active_link /docs/configuration/remote/ Remote access %}
    • +
    • {% active_link /docs/configuration/splitting_configuration/ Splitting up the configuration %}
    • +
    • {% active_link /docs/configuration/packages/ Packages %}
    • +
    • {% active_link /docs/configuration/secrets/ Storing secrets %}
    • +
    • {% active_link /docs/configuration/events/ Events %}
    • +
    • {% active_link /docs/configuration/state_object/ State objects %}
    • +
    • {% active_link /docs/configuration/templating/ Templating %}
    • +
    • {% active_link /docs/configuration/platform_options/ Entity component platform options %}
    • +
    + {% endif %} +
  • + +
  • + {% icon "mdi:account-security" %} {% active_link /docs/authentication/ Authentication %} + {% if doc == 'authentication' or include.docs_index %} +
      +
    • {% active_link /docs/authentication/providers/ Auth providers %}
    • +
    • {% active_link /docs/authentication/multi-factor-auth/ Multi-factor authentication %}
    • +
    • {% active_link /docs/locked_out/ I'm locked out %}
    • +
    + {% endif %} +
  • + +
  • + {% icon "mdi:database" %} {% active_link /docs/backend/ Backend %} + {% if doc == 'backend' or include.docs_index %} +
      +
    • {% active_link /docs/frontend/ User interface %}
    • +
    • {% active_link /docs/backend/database/ Database %}
    • +
    + {% endif %} +
  • + +
  • + {% icon "mdi:palette" %} {% active_link /docs/tools/ Tools and helpers %} + {% if doc == 'tools' or include.docs_index %} +
      +
    • {% active_link /docs/tools/dev-tools/ Developer tools %}
    • +
    • {% active_link /docs/tools/quick-bar/ Quick bar %}
    • +
    • {% active_link /docs/tools/hass/ hass %}
    • +
    • {% active_link /docs/tools/check_config/ check_config %}
    • +
    + {% endif %} +
  • + +
  • + {% icon "mdi:cellphone" %} iOS and Android apps {% icon "tabler:external-link" %} +
  • + +
  • + {% icon "simple-icons:mqtt" %} {% active_link /integrations/mqtt MQTT %} + {% if doc == 'mqtt' or include.docs_index %} +
      +
    • {% active_link /integrations/mqtt/#broker-configuration Broker %}
    • +
    • {% active_link /integrations/mqtt/#advanced-broker-configuration Certificate %}
    • +
    • {% active_link /integrations/mqtt/#mqtt-discovery Discovery %}
    • +
    • {% active_link /integrations/mqtt/#publish--dump-services Publish service %}
    • +
    • {% active_link /integrations/mqtt/#birth-and-last-will-messages Birth and last will messages %}
    • +
    • {% active_link /integrations/mqtt/#testing-your-setup Testing your setup %}
    • +
    • {% active_link /integrations/mqtt/#logging Logging %}
    • +
    + {% endif %} +
  • + +
  • + {% icon "bitcoin-icons:node-hardware-filled" %} Official hardware + +
  • diff --git a/source/_includes/asides/getting_started_navigation.html b/source/_includes/asides/getting_started_navigation.html index f7b18da8835..412959ce887 100644 --- a/source/_includes/asides/getting_started_navigation.html +++ b/source/_includes/asides/getting_started_navigation.html @@ -1,24 +1,34 @@ -
    +{% assign url_parts = page.url | split: '/' %} +{% assign root = url_parts[1] %} +{% assign doc = url_parts[2] %} + +

    {% icon "mdi:rocket-launch-outline" %} Getting started

    diff --git a/source/_includes/asides/organizing_navigation.html b/source/_includes/asides/organizing_navigation.html index 5297fad2faf..9cebcfcae7c 100644 --- a/source/_includes/asides/organizing_navigation.html +++ b/source/_includes/asides/organizing_navigation.html @@ -5,17 +5,9 @@ diff --git a/source/_includes/asides/recent_categories.html b/source/_includes/asides/recent_categories.html new file mode 100644 index 00000000000..644228190f7 --- /dev/null +++ b/source/_includes/asides/recent_categories.html @@ -0,0 +1,14 @@ +{% capture recent_categories %}{% for post in site.posts limit: 20 %}{{ post.categories | join: ", " }}, {% endfor %}{% endcapture %} +{% assign recent_categories = recent_categories | split: ", " | uniq | compact %} + +
    +

    {% icon "mdi:category" %} Recent categories

    + +
    diff --git a/source/_includes/asides/recent_posts.html b/source/_includes/asides/recent_posts.html index 447879aead4..587f98ea3c5 100644 --- a/source/_includes/asides/recent_posts.html +++ b/source/_includes/asides/recent_posts.html @@ -1,7 +1,9 @@ -
    +{% assign posts_to_show = include.posts | default: 5 %} + +

    {% icon "mdi:newspaper-variant-multiple" %} Recent Posts

      - {% for post in site.posts limit: site.recent_posts %} + {% for post in site.posts limit: posts_to_show %} {% if post.url != page.url %}
    • {{ post.title }} diff --git a/source/_includes/asides/voice_navigation.html b/source/_includes/asides/voice_navigation.html index 56a328ecbd0..9c7f7c35914 100644 --- a/source/_includes/asides/voice_navigation.html +++ b/source/_includes/asides/voice_navigation.html @@ -1,6 +1,4 @@
      - {% assign elements = site.dashboards | sort_natural: 'title' %} -

      Devices