angular-cn/aio/content/guide/docs-style-guide.md

717 lines
20 KiB
Markdown
Raw Normal View History

2017-06-09 15:07:08 -04:00
@title
Authors Style Guide
@intro
Style Guide for Angular Authors
@description
This guide covers design and layout patterns for documentation for Angular. The patterns should be followed by Authors contributing to this documentation.
Throughout this guide, patterns are illustrated by first showing a working example and then presenting working code for that example.
## Basic Layout
You will use the following layouts throughout your documentation to specify sections and sub-sections of content.
## Main Section Title
2017-06-14 17:39:15 -04:00
Main section titles should preceeded by ##. This is equvalent to the h2 HTML tag. Content for this section can start on the next line.
2017-06-09 15:07:08 -04:00
## Sub Section Title
2017-06-14 17:39:15 -04:00
The content in any sub-section is related to the main section and _falls within_ the main section. Any sub-section title should preceeded by ###. This is equivalent to the h3 HTML tag. Content for this sub-section can start on the next line.
2017-06-09 15:07:08 -04:00
2017-06-14 17:39:15 -04:00
### Additional Sub Section Information
2017-06-09 15:07:08 -04:00
2017-06-14 17:39:15 -04:00
To present more detailed information to the user that may require redirection to other pages, internal or external to the docs, you can use class 'l-sub-section'. Here is an example of such a sub-section.
2017-06-09 15:07:08 -04:00
<div class="l-sub-section">
You'll learn about more styles for live examples in the [section below](guide/docs-style-guide#section-LiveExamples).
</div>
The code for this is here.
```html
<div class="l-sub-section">
You'll learn about more sytles for live examples in the [section below](guide/docs-style-guide#section-LiveExamples).
</div>
```
2017-06-14 17:39:15 -04:00
Note that blank lines have been left within the div tags. Blank lines within HTML tags is a cue to Markdown to process the tags and the content within these tags as HTML.
2017-06-09 15:07:08 -04:00
## Table of Contents
2017-06-14 17:39:15 -04:00
The table of contents (TOC) is automatically generated by fetching section titles and sub-section titles. By default the TOC is two levels deep, that is, it is limited to displaying only the section and sub-section titles.
2017-06-09 15:07:08 -04:00
2017-06-14 17:39:15 -04:00
To exclude a section or sub-section title from the TOC, use a class called 'no-toc'. This class must be used in conjunction with HTML heading tags. Titles displayed using Markdown heading hash tags cannot be excluded from the TOC.
2017-06-09 15:07:08 -04:00
### Example
```html
<h3 class="no-toc">
2017-06-14 17:39:15 -04:00
Heading not displated in the TOC
2017-06-09 15:07:08 -04:00
</h3>
```
## Left-hand Side Navigation
2017-06-14 17:39:15 -04:00
When you create the Markdown file for your guide, and include it at the appropriate location in navigation.json, you should see the title of your guide displayed in the navigation panel on the left hand side of the docs. You can make further modifications to navigation.json to include any sub-chapters you may have. The sub-chapter titles should be displayed in the navigation panel, indented below the title of the main chapter.
2017-06-09 15:07:08 -04:00
## Code Examples
2017-06-14 17:39:15 -04:00
Code examples can be used to display code on a page. This code can be displayed inline or displaying by extracting from files. Code examples allow you to display code with line numbers, code of various programming languages, display these in tabbed interfaces and such.
2017-06-09 15:07:08 -04:00
### Code-Example Attributes
* path: a file in the content/examples folder
2017-06-14 17:39:15 -04:00
* title: seen in the header of the code listing
* region: name of a docregion, a merked region in a source file and explained in a section later in this guide
* language: specify only for inline examples. Values can be javascript, html, css, typescript, json, sh or any other language that you will use in your Angular application
* linenums: true, false, for example linenums=4 to specify that the starting line is 4. When not specified, line numbers are automatically displayed when there are 10 or more lines of code
2017-06-09 15:07:08 -04:00
* class: no-box, code-shell, avoid
### Including a code example from the _examples_ folder
One of the design goals for this documentation was that any code samples that appear within the documentation be 'testable'. In practice this means that a set of standalone testable examples exist somewhere in the same repository as the rest of the documentation. These examples will each typically consist of a collection of Typescript, HTML, Javascript and CSS files.
Clearly there also needs to be some mechanism for including fragments of these files into the Markdown generated HTML. By convention all of the 'testable' examples within this repository should be created within the content/examples folder.
#### A Basic Code-example
Code-example displays code or content exactly as entered in a code-example.
<code-example>
localhost:3000/hero/15
localhost:3004/hero/again
</code-example>
```html
<code-example>
localhost:3000/hero/15
localhost:3004/hero/again
</code-example>
```
2017-06-14 17:39:15 -04:00
#### Code from an External File
Code-example will read the content/examples/toh-pt1/src/index.html file and include it with the heading 'src/index.html'. Note that the file will be properly escaped and color coded according to the extension on the file (html in this case). The code will be displayed as shown here.
2017-06-09 15:07:08 -04:00
<code-example path="toh-pt1/src/index.html" linenums="true" title="src/index.html"></code-example>
2017-06-14 17:39:15 -04:00
The code for the above example is displayed below.
2017-06-09 15:07:08 -04:00
```html
<code-example path="toh-pt1/src/index.html" linenums="true" title="src/index.html">
</code-example>
```
2017-06-14 17:39:15 -04:00
#### Commands in a Command Window
To display commands in a command window, you can use the code-shell class supported by code-examples.
2017-06-09 15:07:08 -04:00
<code-example language="sh" class="code-shell">
npm start
</code-example>
2017-06-14 17:39:15 -04:00
The code below uses the code-shell class to display the command terminal and code within the terminal.
2017-06-09 15:07:08 -04:00
```html
<code-example language="sh" class="code-shell">
npm start
</code-example>
```
2017-06-14 17:39:15 -04:00
#### Example of Code to be Avoided
To present code that users should avoid, you can use a class called avoid.
2017-06-09 15:07:08 -04:00
<code-example class="avoid" title="hero-details.component.ts (Avoid)">
&lt;hero-details <em>nghost-pmm-5&gt;
&lt;h2 </em>ngcontent-pmm-5&gt;Mister Fantastic&lt;/h2&gt;
&lt;hero-team <em>ngcontent-pmm-5 </em>nghost-pmm-6&gt;
&lt;h3 _ngcontent-pmm-6&gt;Losing Team&lt;/h3&gt;
&lt;/hero-team&gt;
&lt;/hero-details&gt;
</code-example>
2017-06-14 17:39:15 -04:00
The code to create this display is below.
2017-06-09 15:07:08 -04:00
```html
<code-example class="avoid" title="hero-details.component.ts (Avoid)">
<hero-details <em>nghost-pmm-5>
<h2> </em>ngcontent-pmm-5>Mister Fantastic</h2>
<hero-team> <em>ngcontent-pmm-5 </em>nghost-pmm-6>
<h3> _ngcontent-pmm-6>Losing Team</h3>
</hero-team>
</hero-details>
</code-example>
```
2017-06-14 17:39:15 -04:00
#### Example of HTML code
2017-06-09 15:07:08 -04:00
Backticked code blocks can be used to enclose HTML code without using escape characters.
```html
<hero-details>
<h2>Mister Fantastic</h2>
<hero-team>
<h3>Losing Team</h3>
</hero-team>
</hero-details>
```
2017-06-14 17:39:15 -04:00
You can use the syntax below to enclose HTML within a backticked code block.
2017-06-09 15:07:08 -04:00
<code-example language="html">
```html
&lt;hero-details&gt;
&lt;h2&gt;Mister Fantastic&lt;/h2&gt;
&lt;hero-team&gt;
&lt;h3&gt;Losing Team&lt;/h3&gt;
&lt;/hero-team&gt;
&lt;/hero-details&gt;
```
</code-example>
2017-06-14 17:39:15 -04:00
#### Marking up a Source File
2017-06-09 15:07:08 -04:00
To mark any part of a file, add a single comment line in the line above the area to be marked. The comment should contain the string #docregion. Optionally, a second string can follow. The second string is the 'name' of the region. A file may have any number of #docregion comments with the only requirement being that the names of each region within a single file be unique. This also means that there can only be one blank docregion. Further, docregions can be nested.
<div class="alert is-important">
Docregions are not supported in JSON
</div>
#### Example of a nested docregion:
<code-example language="html">
// #docregion export-AppComponent
export class AppComponent {
title = 'Tour of Heroes';
heroes = HEROES;
// #docregion selected-hero
selectedHero: Hero;
// #enddocregion selected-hero
// #docregion on-select, onSelect-parameters
onSelect(hero: Hero): void {
this.selectedHero = hero;
}
// #enddocregion on-select
}
// #enddocregion export-AppComponent
&lt;code-example path="docs-style-guide/app.component.ts" linenums="false" title="a docregion" region="selected-hero"&gt;
&lt;/code-example&gt;
&lt;code-example path="docs-style-guide/app.component.ts" linenums="false" title="Multiple docregions" region="onSelect-parameters"&gt;
&lt;/code-example&gt;
</code-example>
2017-06-14 17:39:15 -04:00
Here is code for the above code-examples that use docregions.
<code-example path="docs-style-guide/app.component.ts" linenums="false" title="A docregion" region="selected-hero">
2017-06-09 15:07:08 -04:00
</code-example>
<code-example path="docs-style-guide/app.component.ts" linenums="false" title="Multiple docregions" region="onSelect-parameters">
</code-example>
HTML files can also contain docregions:
```html
<!-- #docregion -->
...
<script src="app.js"></script>
...
```
as can CSS files:
```html
/* #docregion center-global */
.center-global {
max-width: 1020px;
margin: 0 auto;
}
```
2017-06-14 17:39:15 -04:00
## Code Tabs
2017-06-09 15:07:08 -04:00
2017-06-14 17:39:15 -04:00
Code tabs display code much like Code examples do. The added advantage is that they can display mutiple code samples within a tabbed interface. Each tab is displayed using Code-pane.
2017-06-09 15:07:08 -04:00
2017-06-14 17:39:15 -04:00
### Code-tabs Attributes
* linenums: true, false, display line numbers in the code in all tabs when the number of code statements are 10 or more
### Code-pane Attributes
* path: a file in the content/examples folder
* title: seen in the header of a tab
* linenums: true, false, display line numbers for the code in this tab when the number of code statements are 10 or more
The example below uses the source code for a small application that bundles with Webpack techniques. This will create multiple tabs, each with its own title and be appropriately color coded. By default, line numbers are shown. Line number display can be specified using the linenums attribute at the code tab or code pane level. The example below shows us how to display line numbers in just one code pane.
<code-tabs>
<code-pane title="src/index.html" path="webpack/src/index.html">
</code-pane>
<code-pane title="src/tsconfig.json" path="webpack/src/tsconfig.1.json" linenums="false">
</code-pane>
<code-pane title="src/main.ts" path="webpack/src/main.ts">
</code-pane>
<code-pane title="src/assets/css/styles.css" path="webpack/src/assets/css/styles.css">
</code-pane>
</code-tabs>
The code below will create multiple tabs, each with its own title and be appropriately color coded.
2017-06-09 15:07:08 -04:00
```html
2017-06-14 17:39:15 -04:00
<code-tabs linenums="false">
<code-pane title="src/index.html" path="webpack/src/index.html">
</code-pane>
<code-pane title="src/tsconfig.json" path="webpack/src/tsconfig.json" linenums="false">
</code-pane>
<code-pane title="src/main.ts" path="webpack/src/main.ts">
</code-pane>
<code-pane title="src/assets/css/styles.css" path="webpack/src/assets/css/styles.css">
</code-pane>
</code-tabs>
2017-06-09 15:07:08 -04:00
```
{@a section-LiveExamples}
## Live Examples
2017-06-14 17:39:15 -04:00
Here is how we do live examples. All examples here will point to other guides such as TOH-6 for convenience.
2017-06-09 15:07:08 -04:00
### Plain Live Example
2017-06-14 17:39:15 -04:00
When a live example is included in a guide, it allows readers to run the example and download the code that the Author has placed in the content/examples folder for their respective guide. A plain live example looks like this: <live-example name="toh-pt6"></live-example>
The code is shown here.
2017-06-09 15:07:08 -04:00
```html
<live-example></live-example>
```
### Live Example with Title Attribute
2017-06-14 17:39:15 -04:00
To replace 'live-example' with a title, you can provide a title as shown here.
2017-06-09 15:07:08 -04:00
```html
<live-example title="Live Example with User Desired Title"></live-example>
```
2017-06-14 17:39:15 -04:00
### Live Example with Body
Another way to display aletrnative text for 'live-example' is to include it in the body of the live-example. The effect is the same as when you use the title attribute.
2017-06-09 15:07:08 -04:00
```html
<live-example>Live Example Flesh & Blood</live-example>
```
### Live Example from Another Guide
2017-06-14 17:39:15 -04:00
Example of live-example from the router guide <live-example name="router">Live Example from the Router guide</live-example>.
2017-06-09 15:07:08 -04:00
```html
<live-example name="router">Live Example from the Router guide</live-example>
```
### Live Example other than Default for Guide
```html
<live-example plnkr="second-live-example"></live-example>
```
### Live Example Without Download
```html
<live-example noDownload></live-example>
```
### Live Example with only Download
```html
<live-example downloadOnly></live-example>
```
### Live Example with Embedded Plunkers
2017-06-14 17:39:15 -04:00
Embedded Plunkrs have default image. img allows you to override the default image.
2017-06-09 15:07:08 -04:00
```html
<live-example embedded img="guide/router/img1.png"></live-example>
```
{@a section-Anchors}
## Anchors
2017-06-14 17:39:15 -04:00
To mark a location that a reader should reach when they click an anchor link, insert the anchor tag shown below at that location.
2017-06-09 15:07:08 -04:00
<code-example language="html">
2017-06-14 17:39:15 -04:00
My location has been marked using {@ section-Anchors}
2017-06-09 15:07:08 -04:00
</code-example>
2017-06-14 17:39:15 -04:00
To use this anchor, replace alternative text below with text that will be visible to the reader and that the reader will click on. Replace path-to-page/dir-of-page with the relative path to the page that has the location that the reader should reach.
2017-06-09 15:07:08 -04:00
```html
[alternative text] (path-to-page/dir-of-page/#section-Anchors)
```
## Alerts
2017-06-14 17:39:15 -04:00
Please use alerts sparingly throughout the docs. They are meant to draw attention to important occasions. Alerts should not be used for multi-line content (use callouts insteads) or stacked on top of each other. Note that the content of an alert is indented to the right by two spaces.
2017-06-09 15:07:08 -04:00
<div class="l-sub-section">
<div class="alert is-critical">
2017-06-14 17:39:15 -04:00
A very critical alert.
2017-06-09 15:07:08 -04:00
</div>
<div class="alert is-important">
2017-06-14 17:39:15 -04:00
A very important alert.
2017-06-09 15:07:08 -04:00
</div>
<div class="alert is-helpful">
2017-06-14 17:39:15 -04:00
A very helpful alert.
2017-06-09 15:07:08 -04:00
</div>
</div>
Here is sample code to generate alerts.
```html
<div class="alert is-critical">
2017-06-14 17:39:15 -04:00
A very critical alert.
2017-06-09 15:07:08 -04:00
</div>
<div class="alert is-important">
2017-06-14 17:39:15 -04:00
A very important alert.
2017-06-09 15:07:08 -04:00
</div>
<div class="alert is-helpful">
2017-06-14 17:39:15 -04:00
A very helpful alert.
2017-06-09 15:07:08 -04:00
</div>
```
## Callouts
2017-06-14 17:39:15 -04:00
Please use callouts sparingly throughout the docs. Callouts (like alerts) are meant to draw attention to important occasions. Unlike alerts, callouts are designed to display multi-line content.
2017-06-09 15:07:08 -04:00
<div class="l-sub-section">
<div class="callout is-critical">
<header>
A CRITICAL TITLE
</header>
Pitchfork hoodie semiotics, roof party pop-up paleo messenger bag cred Carles tousled Truffaut yr. Semiotics viral freegan VHS, Shoreditch disrupt McSweeney's. Intelligentsia kale chips Vice four dollar toast, Schlitz crucifix
</div>
<div class="callout is-important">
<header>
A VERY IMPORTANT TITLE
</header>
Pitchfork hoodie semiotics, roof party pop-up paleo messenger bag cred Carles tousled Truffaut yr. Semiotics viral freegan VHS, Shoreditch disrupt McSweeney's. Intelligentsia kale chips Vice four dollar toast, Schlitz crucifix
</div>
<div class="callout is-helpful">
<header>
A VERY HELPFUL TITLE
</header>
Pitchfork hoodie semiotics, roof party pop-up paleo messenger bag cred Carles tousled Truffaut yr. Semiotics viral freegan VHS, Shoreditch disrupt McSweeney's. Intelligentsia kale chips Vice four dollar toast, Schlitz crucifix
</div>
</div>
Here is sample code to generate important callouts.
```html
<div class="callout is-important">
<header>
A VERY IMPORTANT TITLE
</header>
Pitchfork hoodie semiotics, roof party pop-up paleo messenger bag cred Carles tousled Truffaut yr. Semiotics viral freegan VHS, Shoreditch disrupt McSweeney's. Intelligentsia kale chips Vice four dollar toast, Schlitz crucifix
</div>
```
## Trees
Trees can be used to represent heirarchial data. Here is an example.
<div class='filetree'>
<div class='file'>
sample-dir
</div>
<div class='children'>
<div class='file'>
src
</div>
<div class='children'>
<div class='file'>
app
</div>
<div class='children'>
<div class='file'>
app.component.ts
</div>
<div class='file'>
app.module.ts
</div>
</div>
<div class='file'>
styles.css
</div>
<div class='file'>
tsconfig.json
</div>
</div>
<div class='file'>
node_modules ...
</div>
<div class='file'>
package.json
</div>
</div>
</div>
2017-06-14 17:39:15 -04:00
Here is the code for this tree.
2017-06-09 15:07:08 -04:00
```html
<div class='filetree'>
<div class='file'>
sample-dir
</div>
<div class='children'>
<div class='file'>
src
</div>
<div class='children'>
<div class='file'>
app
</div>
<div class='children'>
<div class='file'>
app.component.ts
</div>
<div class='file'>
app.module.ts
</div>
</div>
<div class='file'>
styles.css
</div>
<div class='file'>
tsconfig.json
</div>
</div>
<div class='file'>
node_modules ...
</div>
<div class='file'>
package.json
</div>
</div>
</div>
```
## Tables
Tables can be used to present tabular data as it relates to each other.
<style>
td, th {vertical-align: top}
</style>
<table>
<tr>
<th>
Framework
</th>
<th>
Task
</th>
<th>
Speed
</th>
</tr>
<tr>
<td>
<code>AngularJS</code>
</td>
<td>
Routing
</td>
<td>
<code>Fast</code>
</td>
</tr>
<tr>
<td>
<code>Angular 2</code>
</td>
<td>
Routing
</td>
<td>
<code>Faster</code>
</td>
</tr>
<tr>
<td>
<code>Angular 4</code>
</td>
<td>
Routing
</td>
<td>
<code>Fastest :)</code>
</td>
</tr>
</table>
2017-06-14 17:39:15 -04:00
Here is code for this table.
2017-06-09 15:07:08 -04:00
```html
table
tr
th Framework
th Task
th Speed
tr
td AngularJS
td Routing
td fast
2017-06-14 17:39:15 -04:00
tr
td Angular 2
td Routing
td faster
2017-06-09 15:07:08 -04:00
```
## Images
### Using Images
HTML should be used to declare images in the docs. Do not use the markdown \!\[\.\.\.\]\(\.\.\.\) shorthand.
The HTML to use is an &lt;img src="..." alt="..."&gt; tag. You must supply a src attribute that is relative to the base path; and you should provide an alt attribute describing the image for accessibility. _Note that Image tags do not have a closing tag._
### Image Size
The doc generation process will read the image dimensions and automatically add width and height attributes to the img tag. If you want to control the size of the image then you should supply your own width and height images.
Images should not be wider than 700px otherwise they may overflow the width of the document in certain viewports. If you wish to have a larger image then provide a link to the actual image that the user can click on to see the larger images separately.
### Image Formatting
There are three types of images that you can put in docs: inline, floating and standalone.
#### Inline Images
To create an inline image, simply place the img tag in the content where you want the image to appear. For example:
```html
The image here <img src="..." alt="..."> is visible inline in the text.
```
#### Floating Images
You can cause an image to float to the left or right of the text by applying the class="left" or class="right" attributes respectively.
```html
<img src="..." alt="..." class="left">This text will wrap around the to the right of this floating image.
```
All headings and code-examples will automatically clear a floating image. If you need to force a piece of text to clear a floating image then you can use the following snippet:
```html
<br class="clear">
```
Finally, if you have floating images inside alerts or sub-sections then it is a good idea to apply the clear-fix class to the div to ensure that the image doesn't overflow its container. For example:
```html
<div class="l-sub-section clear-fix">
<img class="right" src="..." alt="...">
Some **markdown** formatted text.
</div>
```
#### Standalone Images
Some images should stand alone from the text. You do this by wrapping the img tag in a figure tag. This causes the image to get additional styling, such as a rounded border and shadow. The text will not flow around this image but will stop before the image and start again afterword. For example:
```html
Some paragraph preceding the image.
<figure>
<img src="" alt="">
</figure>
```