istio.io/CUSTOM_PAGES.md

134 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Custom Pages
Here are some instructions how you can customize pages of the [Istio website](https://www.istio.io).
## Pages
1. [Homepage](##homepage)
2. [About](##about)
3. [FAQ](##faq)
4. [Blog](##blog)
5. [Get involved](##get-involved)
6. [Documentation](##documentation)
7. [Info banner](##info-banner)
## Homepage
Homepage landing panels are created using the ```{{< content_panel >}}``` shortcode providing the `type` of the panel, `title`, `text`, `button` and `url` (example below).
```
{{< content_panel type="dark" title="service_mesh" text="You can find what you need to make Istio do exactly what you need it to do." button="learn_more" url="/about/service-mesh" >}}
```
### Concepts
Concept blocks reuse the ```{{< content_panel >}}``` shortcode with a small `type="transparent"` parameter difference.
### Solutions
Solutions is a dynamic carousel of the Solution pages listed in `content/en/solutions` rendered using the ```{{< solutions_carousel >}}``` shortcode.
### Case studies
Case studies is a dynamic carousel of the Case study pages listed in `content/en/case-studies` rendered using the ```{{< case_studies_carousel >}}``` shortcode.
## About
### Service mesh
Contains list of concepts rendered using the ```{{< feature_block >}}``` shortcode providing the `header` of the block, `image` path to an image located in the `assets/inline_images` directory and the inner content (example below).
```
{{< feature_block header="Traffic management" image="management.svg" >}}
Istios traffic routing rules let you easily control the flow of traffic and API calls between services.
{{< /feature_block >}}
```
The page also contains the Solutions carousel rendered using ```{{< solutions_carousel >}}``` shortcode.
### Solutions
To add a new Solution page, create a new directory in `content/en/about/solutions`, then create an .md file inside the new directory e.g. `content/en/about/solutions/new-solution-name/index.md`.
Make sure the markdown file contains a `title`, `opening_paragraph`, `image`, `type: solutions`, `doc_type: article` and `sidebar_force: sidebar_solution`.
Solutions are generated using a range of ```feature_block``` partials inside the `layouts/solutions/list.html` directory. Solutions lists are all the individual Solution pages.
Each solution contains ```{{ partial "case_study_suggestions" . }}``` which lists 3 case study panels at the bottom of the page.
### Case studies
To add a new Case study page, create a new directory in `content/en/about/case-studies`, then create an .md file inside the new directory e.g. `content/en/about/case-studies/case-study-name/index.md`.
Make sure the markdown file contains a `title`, `quote`, `author` object (with `name` and `image` if you wish to display the author in the Case study sidebar), `companyName`, `companyURL`, `type: case-studies`, `doc_type: article` and `sidebar_force: sidebar_case_study`.
Case studies are generated using a range of ```case_study_panel``` partials inside the `layouts/case-studies/list.html` directory. Case studies lists all the individual Case study pages.
Case studies contain the "Also used by" section rendered using the ```{{< companies >}}``` partial.
### Ecosystem
#### Providers
Providers uses the ```{{< companies >}}``` shortcode with ability to limit the number of visible items using `first` parameter e.g. ```{{< companies first=8 >}}``` will show the first 8 providers.
To create a new provider, amend the `data/companies.yml` and add a new entry in the `providers` list providing a `name` of the provider, `url` to their site and `logo` path to an image which needs to be pasted into the `static/logos` directory.
#### Pro services
To create a new Pro service, amend the `data/companies.yml` and add a new entry in the `pro_services` list providing a `name` of the pro service, `url`, `logo` path to an image which are also pulled from the `static/logos` directory, `description` to be displayed on the ```{{< interactive_panel >}}``` and `details` which is a list of paragraphs to be displayed in the modal window.
Pro services uses the ```{{< interactive_panels >}}``` shortcode with same ability to limit the number of visible items using `first` parameter e.g. ```{{< interactive_panels first=8 >}}``` will show first 8 interactive panels. An interactive panel reacts to a click event which opens up a modal window using the ```interactive_panel``` partial.
```interactive_panel``` accepts the `items` parameter which can be either the `integrations` or defaults to `pro_services`.
#### Integrations
Works in the same fashion as Pro services but is displayed using the ```{{< interactive_panels >}}``` with `items="integrations"` parameter.
### Deployment
To amend the deployment process page, change the contents of the `content/en/deployment/index.md` file.
## FAQ
To add new content to FAQ, create a new markdown file in `content/en/about/faq/` in one of the existing categories. To add new category, create a new directory with an `index.md` markdown file with a category name as the `linktitle` attribute. ```faq_block``` partial uses the `question` and `answer` parameters. `title` attribute of individual markdown files is used as a question and the content is used as an answer.
## Blog
To add a new blog post, go to the appropriate year folder in `content/en/blog` and create a new folder with `index.md` file similar to the existing ones in neighbouring folders (it should have publish date and title). New post will be displayed immediately after.
## Get Involved
To add new content, go to `content/en/get-involved/index.md` file. To add a new section, use `{{% involve_block %}}` with following parameters `title`, `subtitle` and `icon`. Icons in svg format are stored in `src/icons` directory. For description, use inner content (example below).
```
{{% involve_block title="This is title" subtitle="This is subtitle" icon="icon" %}}
Content
{{% /involve_block %}}
```
It is also possible to edit existing content and add more content to each section by typing next number, i.e. `4. New Content`.
## Documentation
To add a new documentation page, go to `content/en/docs`. Select appropriate section or create a new one if needed with `index.md` file, next add a new folder with `index.md` file where content of the page should exist. New page or/and new section will be displayed immediately after, also in the sidebar menu in documentation pages.
## Info banner
To create an event for an info banner, go to `content/en/events/banners` and create new .md file. In addition to the content, you can set parameters such as start date, end date, max impressions or timeout.
# List of new elements
## Components
### Shortcodes
- `{{< content_panel >}}` for displaying triple panels at the top of the homepage and Concepts section of the homepage
- `{{< centered_block >}}` for wrapping components in a centered component with a specific width
- `{{< involve_block >}}` for creating sections in “Get Involved” page
- `{{< multi_block >}}` for creating a component with a title, icon and description useful for describing groups of people. Used on a single Solution page but may be integrated into any markdown
- `{{< solutions_carousel >}}` for displaying the Solutions carousel
### Partials
- `{{ case_studies_carousel }}` for displaying the Case studies carousel
- `{{ case_studies_carousel_panel }}` for displaying a Case studies carousel panel
- `{{ companies }}` for displaying a grid of companies from `data/companies.yml` file
- `{{ faq_block }}` for creating FAQ block (answer and question)
- `{{ feature_block }}` for creating feature components on Service mesh and Solutions
- `{{ sidebar_case_study }}` for displaying a Case study sidebar
- `{{ sidebar_solutions }}` for displaying a Solution sidebar
- `{{ solutions_carousel_panel }}` for displaying the Solutions carousel panel
### Layouts
- `blog/list.html` for displaying list of blog posts which are filtered by publishdate
- `blog/single.html` for displaying single blog post
- `case-studies/list.html` for displaying list of case studies
- `get-involved` for creating “Get Involved” page
- `news/list.html` for displaying list of news which are filtered by section name
- `news/single.html` for displaying single news page
- `solutions/list.html`for displaying list of solutions
- `solutions/single.html` for displaying single solution
### Functions in .ts directory
- `handleFaqBlocks()` for expanding and collapsing FAQ blocks dynamically
- `getByTag()` returns an element whose tagname matches the specified string
- `getByClass()` returns an element whose class name matches the specified string
- `toggleActiveHeader()` for adding a shadow to the header once user scrolls past a specific point on the page
### Functions in static directory
- `categories-filter` window class with methods which enable filtering lists of objects