feat(test): add docs linter to PR workflow actions (#4321)

This commit is contained in:
silverwebb925 2020-10-11 07:02:47 -07:00 committed by GitHub
parent 277a1519be
commit 2146b3605f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
37 changed files with 23405 additions and 286 deletions

34
.github/workflows/docslint.yml vendored Normal file
View File

@ -0,0 +1,34 @@
name: 'Docs Linting:'
on:
push:
branches:
- master
tags:
- '*'
paths:
- '.github/workflows/docslint.yml'
- 'website/**'
pull_request:
types: [opened, synchronize, reopened]
paths:
- '.github/workflows/docslint.yml'
- 'website/**'
jobs:
Prose:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Vale Linter
uses: errata-ai/vale-action@v1.3.0
with:
# Optional
files: website/content/docs
env:
# Required
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}

6
.vale.ini Normal file
View File

@ -0,0 +1,6 @@
StylesPath = website/src/writing-guide/styles
Vocab = website/src/writing-guide/vocab
MinAlertLevel = warning
[*.md]
BasedOnStyles = Avoid, Replace

View File

@ -3,7 +3,6 @@ group: Intro
weight: 3
title: Add to Your Site
---
You can adapt Netlify CMS to a wide variety of projects. It works with any content written in markdown, JSON, YAML, or TOML files, stored in a repo on [GitHub](https://github.com/), [GitLab](https://about.gitlab.com/), or [Bitbucket](https://bitbucket.org). You can also create your own custom backend.
This tutorial guides you through the steps for adding Netlify CMS to a site that's built with a common [static site generator](https://www.staticgen.com/), like Jekyll, Hugo, Hexo, or Gatsby. Alternatively, you can [start from a template](../start-with-a-template) or dive right into [configuration options](../configuration-options).
@ -12,8 +11,8 @@ This tutorial guides you through the steps for adding Netlify CMS to a site that
A static `admin` folder contains all Netlify CMS files, stored at the root of your published site. Where you store this folder in the source files depends on your static site generator. Here's the static file location for a few of the most popular static site generators:
| These generators ... | store static files in |
| -------------------------------------------| --------------------- |
| These generators | store static files in |
| ------------------------------------------ | --------------------- |
| Jekyll, GitBook | `/` (project root) |
| Hugo, Gatsby, Nuxt, Gridsome, Zola, Sapper | `/static` |
| Next | `/public` |
@ -52,6 +51,7 @@ The first file, `admin/index.html`, is the entry point for the Netlify CMS admin
</body>
</html>
```
In the code above the `script` is loaded from the `unpkg` CDN. Should there be any issue, `jsDelivr` can be used as an alternative source. Simply set the `src` to `https://cdn.jsdelivr.net/npm/netlify-cms@^2.0.0/dist/netlify-cms.js`
The second file, `admin/config.yml`, is the heart of your Netlify CMS installation, and a bit more complex. The [Configuration](#configuration) section covers the details.
@ -90,7 +90,7 @@ backend:
branch: master # Branch to update (optional; defaults to master)
```
_(For Bitbucket repositories, use the [Bitbucket backend](/docs/bitbucket-backend) instructions instead.)_
*(For Bitbucket repositories, use the [Bitbucket backend](/docs/bitbucket-backend) instructions instead.)*
The configuration above specifies your backend protocol and your publication branch. Git Gateway is an open source API that acts as a proxy between authenticated users of your site and your site repo. (We'll get to the details of that in the [Authentication section](#authentication) below.) If you leave out the `branch` declaration, it defaults to `master`.
@ -277,4 +277,4 @@ If you left your site registration open, or for return visits after confirming a
**Note:** No matter where you access Netlify CMS — whether running locally, in a staging environment, or in your published site — it always fetches and commits files in your hosted repository (for example, on GitHub), on the branch you configured in your Netlify CMS config.yml file. This means that content fetched in the admin UI matches the content in the repository, which may be different from your locally running site. It also means that content saved using the admin UI saves directly to the hosted repository, even if you're running the UI locally or in staging.
Happy posting!
Happy posting!

View File

@ -1,9 +1,8 @@
---
title: Configuration Options
group: Configuration
weight: 10
title: Configuration Options
---
## Configuration File
All configuration options for Netlify CMS are specified in a `config.yml` file, in the folder where you access the editor UI (usually in the `/admin` folder).
@ -44,7 +43,7 @@ publish_mode: editorial_workflow
From a technical perspective, the workflow translates editor UI actions into common Git commands:
| Actions in Netlify UI ... | Perform these Git actions |
| Actions in Netlify UI | Perform these Git actions |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Save draft | Commits to a new branch (named according to the pattern `cms/collectionName/entrySlug`), and opens a pull request |
| Edit draft | Pushes another commit to the draft branch/pull request |
@ -420,4 +419,4 @@ Defaults to an empty list.
- label: Drafts
field: draft
pattern: true
```
```

View File

@ -1,9 +1,8 @@
---
title: Jekyll
group: Guides
weight: 30
title: Jekyll
---
## Introduction
This section will help you integrate Netlify CMS with a new or existing Jekyll project.
@ -87,13 +86,14 @@ collections:
A few things to note.
- We set the `slug` to `'{{year}}-{{month}}-{{day}}-{{slug}}'` because [Jekyll requires this format for blog posts](https://jekyllrb.com/docs/posts/#creating-posts). `year`, `month`, and `day` will be extracted from the `date` field, and `slug` will be generated from the `title` field.
- We added `editor` configuration with a field `preview: false`. This will eliminate the preview pane. Because Jekyll uses Liquid templates, there currently isn't a good way to provide a preview of pages as you update the content.
- The `layout` field default is set to `post` so Jekyll knows to use `_layouts/post.html` when it renders a post. This field is hidden because we want all posts to use the same layout.
- The `date` and `title` field will be used by the `slug` - as noted above, Jekyll relies on the filename to determine a post's publish date, but Netlify CMS does not pull date information from the filename and requires a frontmatter `date` field. **Note** Changing the `date` or `title` fields in Netlify CMS will not update the filename. This has a few implications...
- If you change the `date` or `title` fields in Netlify CMS, Jekyll won't notice
- You don't necessarily need to change the `date` and `title` fields for existing posts, but if you don't the filenames and frontmatter will disagree in a way that might be confusing
- If you want to avoid these issues, use a regular Jekyll collection instead of the special `_posts` directory
* We set the `slug` to `'{{year}}-{{month}}-{{day}}-{{slug}}'` because [Jekyll requires this format for blog posts](https://jekyllrb.com/docs/posts/#creating-posts). `year`, `month`, and `day` will be extracted from the `date` field, and `slug` will be generated from the `title` field.
* We added `editor` configuration with a field `preview: false`. This will eliminate the preview pane. Because Jekyll uses Liquid templates, there currently isn't a good way to provide a preview of pages as you update the content.
* The `layout` field default is set to `post` so Jekyll knows to use `_layouts/post.html` when it renders a post. This field is hidden because we want all posts to use the same layout.
* The `date` and `title` field will be used by the `slug` - as noted above, Jekyll relies on the filename to determine a post's publish date, but Netlify CMS does not pull date information from the filename and requires a frontmatter `date` field. **Note** Changing the `date` or `title` fields in Netlify CMS will not update the filename. This has a few implications:
* If you change the `date` or `title` fields in Netlify CMS, Jekyll won't notice
* You don't necessarily need to change the `date` and `title` fields for existing posts, but if you don't the filenames and frontmatter will disagree in a way that might be confusing
* If you want to avoid these issues, use a regular Jekyll collection instead of the special `_posts` directory
### Author Collection
@ -294,4 +294,4 @@ Finally, add the following to the collections array in `config.yml`
- {label: Link, name: link, widget: string}
```
Now you can add, rename, and rearrange the navigation items on your blog.
Now you can add, rename, and rearrange the navigation items on your blog.

View File

@ -1,27 +1,28 @@
---
label: "Image"
title: image
label: Image
---
The image widget allows editors to upload an image or select an existing one from the media library. The path to the image file will be saved to the field as a string.
- **Name:** `image`
- **UI:** file picker button opens media gallery allowing image files (jpg, jpeg, webp, gif, png, bmp, tiff, svg) only; displays selected image thumbnail
- **Data type:** file path string
- **Options:**
- `default`: accepts a file path string; defaults to null
- `media_library`: media library settings to apply when a media library is opened by the
* **Name:** `image`
* **UI:** file picker button opens media gallery allowing image files (jpg, jpeg, webp, gif, png, bmp, tiff, svg) only; displays selected image thumbnail
* **Data type:** file path string
* **Options:**
* `default`: accepts a file path string; defaults to null
* `media_library`: settings to apply when opening a media library is opened by the
current widget
- `allow_multiple`: _(default: `true`)_ when set to `false`, prevents multiple selection for any media library extension, but must be supported by the extension in use
- `config`: a configuration object that will be passed directly to the media library being
used - available options are determined by the library
- **Example:**
```yaml
- label: "Featured Image"
name: "thumbnail"
widget: "image"
default: "/uploads/chocolate-dogecoin.jpg"
media_library:
config:
multiple: true
```
* `allow_multiple`: *(default: `true`)* when set to `false`, if the media library extension supports it, multiple selection will be disabled
* `config`: a configuration object passed directly to the media library; check the documentation of your media library extension for available `config` options.
* **Example:**
```yaml
- label: "Featured Image"
name: "thumbnail"
widget: "image"
default: "/uploads/chocolate-dogecoin.jpg"
media_library:
config:
multiple: true
```

View File

@ -1,77 +1,83 @@
---
label: "List"
title: list
label: List
---
The list widget allows you to create a repeatable item in the UI which saves as a list of widget values. map a user-provided string with a comma delimiter into a list. You can choose any widget as a child of a list widget—even other lists.
- **Name:** `list`
- **UI:** if `fields` is specified, field containing a repeatable child widget, with controls for adding, deleting, and re-ordering the repeated widgets; if unspecified, a text input for entering comma-separated values
- **Data type:** list of widget values
- **Options:**
- `default`: if `fields` is specified, declare defaults on the child widgets; if not, you may specify a list of strings to populate the text field
- `allow_add`: if added and set to `false`, hides the button to add additional items
- `collapsed`: if added and set to `false`, the list widget's content does not collapse by default
- `summary`: allows customization of a collapsed list item object in a similar way to a [collection summary](/docs/configuration-options/?#summary)
- `minimize_collapsed`: if added and set to `true`, the list widget's content will be completely hidden instead of only collapsed if the list widget itself is collapsed
- `label_singular`: singular label to show as a part of the add button
- `field`: a single widget field to be repeated
- `fields`: a nested list of multiple widget fields to be included in each repeatable iteration
- **Example** (`field`/`fields` not specified):
```yaml
- label: "Tags"
name: "tags"
widget: "list"
default: ["news"]
```
- **Example** (`allow_add` marked `false`):
```yaml
- label: "Tags"
name: "tags"
widget: "list"
allow_add: false
default: ["news"]
```
- **Example** (with `field`):
```yaml
- label: "Gallery"
name: "galleryImages"
widget: "list"
summary: '{{fields.image}}'
field: {label: Image, name: image, widget: image}
```
- **Example** (with `fields`):
```yaml
- label: "Testimonials"
name: "testimonials"
widget: "list"
summary: '{{fields.quote}} - {{fields.author.name}}'
fields:
- {label: Quote, name: quote, widget: string, default: "Everything is awesome!"}
- label: Author
name: author
widget: object
fields:
- {label: Name, name: name, widget: string, default: "Emmet"}
- {label: Avatar, name: avatar, widget: image, default: "/img/emmet.jpg"}
```
- **Example** (`collapsed` marked `false`):
```yaml
- label: "Testimonials"
name: "testimonials"
collapsed: false
widget: "list"
fields:
- {label: Quote, name: quote, widget: string, default: "Everything is awesome!"}
- {label: Author, name: author, widget: string }
```
- **Example** (`minimize_collapsed` marked `true`):
```yaml
- label: "Testimonials"
name: "testimonials"
minimize_collapsed: true
widget: "list"
fields:
- {label: Quote, name: quote, widget: string, default: "Everything is awesome!"}
- {label: Author, name: author, widget: string }
```
* **Name:** `list`
* **UI:** without any `fields` specified, the list widget defaults to a text input for entering comma-separated values; with `fields` specified, the list widget contains a repeatable child widget, with controls for adding, deleting, and re-ordering the repeated widgets.
* **Data type:** list of widget values
* **Options:**
* `default`: you may specify a list of strings to populate the basic text field, but declare defaults on the child widgets if you are specifying `fields`;
* `allow_add`: `false` hides the button to add additional items
* `collapsed`: when `true`, the entries collapse by default
* `summary`: specify the label displayed on collapsed entries
* `minimize_collapsed`: when `true`, collapsing the list widget will hide all of it's entries instead of showing summaries
* `label_singular`: the text to show on the add button
* `field`: a single widget field to be repeated
* `fields`: a nested list of multiple widget fields to be included in each repeatable iteration
* **Example** (`field`/`fields` not specified):
```yaml
- label: "Tags"
name: "tags"
widget: "list"
default: ["news"]
```
* **Example** (`allow_add` marked `false`):
```yaml
- label: "Tags"
name: "tags"
widget: "list"
allow_add: false
default: ["news"]
```
* **Example** (with `field`):
```yaml
- label: "Gallery"
name: "galleryImages"
widget: "list"
summary: '{{fields.image}}'
field: {label: Image, name: image, widget: image}
```
* **Example** (with `fields`):
```yaml
- label: "Testimonials"
name: "testimonials"
widget: "list"
summary: '{{fields.quote}} - {{fields.author.name}}'
fields:
- {label: Quote, name: quote, widget: string, default: "Everything is awesome!"}
- label: Author
name: author
widget: object
fields:
- {label: Name, name: name, widget: string, default: "Emmet"}
- {label: Avatar, name: avatar, widget: image, default: "/img/emmet.jpg"}
```
* **Example** (`collapsed` marked `false`):
```yaml
- label: "Testimonials"
name: "testimonials"
collapsed: false
widget: "list"
fields:
- {label: Quote, name: quote, widget: string, default: "Everything is awesome!"}
- {label: Author, name: author, widget: string }
```
* **Example** (`minimize_collapsed` marked `true`):
```yaml
- label: "Testimonials"
name: "testimonials"
minimize_collapsed: true
widget: "list"
fields:
- {label: Quote, name: quote, widget: string, default: "Everything is awesome!"}
- {label: Author, name: author, widget: string }
```

View File

@ -1,18 +1,19 @@
---
title: map
label: "Map"
label: Map
---
The map widget allows you to edit spatial data using an interactive map. Spatial data for a single piece of geometry saves as a GeoJSON string in WGS84 projection.
The map widget allows you to edit spatial data using an interactive map. Spatial data is saved as a GeoJSON string in WGS84 projection and is limited to a single geometry.
* **Name:** `map`
* **UI:** interactive map
* **Data type:** GeoJSON string
* **Options:**
- **Name:** `map`
- **UI:** interactive map
- **Data type:** GeoJSON string
- **Options:**
- `decimals`: accepts a number to specify precision of saved coordinates; defaults to 7 decimals
- `default`: accepts a GeoJSON string containing a single geometry; defaults to an empty string
- `type`: accepts one string value of `Point`, `LineString` or `Polygon`; defaults to `Point`
- **Example:**
```yaml
- {label: "Location", name: "location", widget: "map" }
```
* `decimals`: accepts a number to specify precision of saved coordinates; defaults to 7 decimals
* `default`: accepts a GeoJSON string containing a single geometry; defaults to an empty string
* `type`: accepts one string value of `Point`, `LineString` or `Polygon`; defaults to `Point`
* **Example:**
```yaml
- {label: "Location", name: "location", widget: "map" }
```

View File

@ -1,22 +1,22 @@
---
label: 'Markdown'
title: markdown
label: Markdown
---
The markdown widget provides a full fledged text editor allowing users to format text with features such as headings and blockquotes. Users can change their editing view with a handy toggle button.
The markdown widget provides a full fledged text editor - which is based on [slate](https://github.com/ianstormtaylor/slate) - that allows users to format text with features such as headings and blockquotes. Users are also allowed to write in markdown by simply flipping a switch.
*Please note:* If you want to use your markdown editor to fill a markdown file contents after its frontmatter, you'll have to name the field `body` so the CMS recognizes it and saves the file accordingly.
_Please note:_ If you want to use your markdown editor to fill a markdown file contents after its frontmatter, you'll have to name the field `body` so the CMS recognizes it and saves the file accordingly.
* **Name:** `markdown`
* **UI:** full text editor
* **Data type:** markdown
* **Options:**
- **Name:** `markdown`
- **UI:** full text editor
- **Data type:** markdown
- **Options:**
- `default`: accepts markdown content
- `minimal`: accepts a boolean value, `false` by default. Sets the widget height to minimum possible.
- `buttons`: an array of strings representing the formatting buttons to display (all shown by default). Buttons include: `bold`, `italic`, `code`, `link`, `heading-one`, `heading-two`, `heading-three`, `heading-four`, `heading-five`, `heading-six`, `quote`, `bulleted-list`, and `numbered-list`.
- `editor_components`: an array of strings representing the names of editor components to display (all shown by default). The `image` and `code-block` editor components are included with Netlify CMS by default, but others may be [created and registered](/docs/custom-widgets/#registereditorcomponent).
- `modes`: an array of strings representing the names of allowed editor modes. Possible modes are `raw` and `rich_text`. If both modes are allowed, they can be toggled via a toggle button in the toolbar.
- **Example:**
* `default`: accepts markdown content
* `minimal`: accepts a boolean value, `false` by default. Sets the widget height to minimum possible.
* `buttons`: an array of strings representing the formatting buttons to display (all shown by default). Buttons include: `bold`, `italic`, `code`, `link`, `heading-one`, `heading-two`, `heading-three`, `heading-four`, `heading-five`, `heading-six`, `quote`, `bulleted-list`, and `numbered-list`.
* `editor_components`: an array of strings representing the names of editor components to display (all shown by default). Netlify CMS includes `image` and `code-block` editor components by default, and custom components may be [created and registered](/docs/custom-widgets/#registereditorcomponent).
* `modes`: an array of strings representing the names of allowed editor modes. Possible modes are `raw` and `rich_text`. A toggle button appears in the toolbar when more than one mode is available.
* **Example:**
```yaml
- { label: 'Blog post content', name: 'body', widget: 'markdown' }
@ -26,4 +26,4 @@ This would render as:
![Markdown widget example](/img/widgets-markdown.png)
_Please note:_ The markdown widget outputs a raw markdown string. Your static site generator may or may not render the markdown to HTML automatically. Consult with your static site generator's documentation for more information about rendering markdown.
*Please note:* The markdown widget outputs a raw markdown string. Your static site generator may or may not render the markdown to HTML automatically. Consult with your static site generator's documentation for more information about rendering markdown.

View File

@ -1,36 +1,37 @@
---
label: "Object"
title: object
label: Object
---
The object widget allows you to group multiple widgets together, nested under a single field. You can choose any widget as a child of an object widget—even other objects.
- **Name:** `object`
- **UI:** a field containing one or more child widgets
- **Data type:** list of child widget values
- **Options:**
- `default`: you can set defaults within each sub-field's configuration
- `collapsed`: if added and labeled `true`, the widget's content is collapsed by default
- `fields`: (**required**) a nested list of widget fields to include in your widget
- **Example:**
```yaml
- label: "Profile"
name: "profile"
widget: "object"
fields:
- {label: "Public", name: "public", widget: "boolean", default: true}
- {label: "Name", name: "name", widget: "string"}
- label: "Birthdate"
name: "birthdate"
widget: "date"
default: ""
format: "MM/DD/YYYY"
- label: "Address"
name: "address"
widget: "object"
collapsed: true
fields:
- {label: "Street Address", name: "street", widget: "string"}
- {label: "City", name: "city", widget: "string"}
- {label: "Postal Code", name: "post-code", widget: "string"}
```
* **Name:** `object`
* **UI:** a field containing one or more child widgets
* **Data type:** list of child widget values
* **Options:**
* `default`: you can set defaults within each sub-field's configuration
* `collapsed`: if added and labeled `true`, collapse the widget's content by default
* `fields`: (**required**) a nested list of widget fields to include in your widget
* **Example:**
```yaml
- label: "Profile"
name: "profile"
widget: "object"
fields:
- {label: "Public", name: "public", widget: "boolean", default: true}
- {label: "Name", name: "name", widget: "string"}
- label: "Birthdate"
name: "birthdate"
widget: "date"
default: ""
format: "MM/DD/YYYY"
- label: "Address"
name: "address"
widget: "object"
collapsed: true
fields:
- {label: "Street Address", name: "street", widget: "string"}
- {label: "City", name: "city", widget: "string"}
- {label: "Postal Code", name: "post-code", widget: "string"}
```

View File

@ -1,23 +1,23 @@
---
label: "Relation"
title: relation
label: Relation
---
The relation widget allows you to reference items from another collection. It provides a search input with a list of entries from the collection you're referencing, and the list automatically updates with matched entries based on what you've typed.
- **Name:** `relation`
- **UI:** text input with search result dropdown
- **Data type:** data type of the value pulled from the related collection item
- **Options:**
- `collection`: (**required**) name of the collection being referenced (string)
- `value_field`: (**required**) name of the field from the referenced collection whose value will be stored for the relation. For nested fields, separate each subfield with a `.` (e.g. `name.first`). For list fields use a wildcard `*` to target all list items (e.g. `categories.*`).
- `search_fields`: (**required**) list of one or more names of fields in the referenced collection to search for the typed value. Syntax to reference nested fields is similar to that of *value_field*.
- `file`: allows referencing a specific file when the collection being referenced is a files collection (string)
- `display_fields`: list of one or more names of fields in the referenced collection that will render in the autocomplete menu of the control. Defaults to `value_field`. Syntax to reference nested fields is similar to that of *value_field*.
- `default`: accepts any widget data type; defaults to an empty string
- `multiple` : accepts a boolean, defaults to `false`
- `options_length`: accepts integer to override number of options presented to user. Defaults to `20`.
- **Referencing a folder collection example** (assuming a separate "authors" collection with "name" and "twitterHandle" fields with subfields "first" and "last" for the "name" field):
* **Name:** `relation`
* **UI:** text input with search result dropdown
* **Data type:** data type of the value pulled from the related collection item
* **Options:**
* `collection`: (**required**) name of the referenced collection (string)
* `value_field`: (**required**) name of the field from the referenced collection whose value will be stored for the relation. For nested fields, separate each subfield with a `.` (e.g. `name.first`). For list fields use a wildcard `*` to target all list items (e.g. `categories.*`).
* `search_fields`: (**required**) list of one or more names of fields in the referenced collection to search for the typed value. Syntax to reference nested fields is similar to that of *value_field*.
* `file`: allows referencing a specific file when the referenced collection is a files collection (string)
* `display_fields`: list of one or more names of fields in the referenced collection that will render in the autocomplete menu of the control. Defaults to `value_field`. Syntax to reference nested fields is similar to that of *value_field*.
* `default`: accepts any widget data type; defaults to an empty string
* `multiple` : accepts a boolean, defaults to `false`
* `options_length`: accepts integer to override number of options presented to user. Defaults to `20`.
* **Referencing a folder collection example** (assuming a separate "authors" collection with "name" and "twitterHandle" fields with subfields "first" and "last" for the "name" field):
```yaml
- label: "Post Author"
@ -29,9 +29,9 @@ The relation widget allows you to reference items from another collection. It pr
display_fields: ["twitterHandle", "followerCount"]
```
The generated UI input will search the authors collection by name and twitterHandle, and display each author's handle and follower count. On selection, the author name will be saved for the field.
The generated UI input will search the authors collection by name and twitterHandle, and display each author's handle and follower count. On selection, the author's name is saved for the field.
- **String templates example** (assuming a separate "authors" collection with "name" and "twitterHandle" fields with subfields "first" and "last" for the "name" field):
* **String templates example** (assuming a separate "authors" collection with "name" and "twitterHandle" fields with subfields "first" and "last" for the "name" field):
```yaml
- label: "Post Author"
@ -43,9 +43,9 @@ The generated UI input will search the authors collection by name and twitterHan
display_fields: ["{{twitterHandle}} - {{followerCount}}"]
```
The generated UI input will search the authors collection by name, and display each author's handle and follower count. On selection, the author entry slug will be saved for the field.
The generated UI input will search the authors collection by name, and display each author's handle and follower count. On selection, the author entry slug is saved for the field.
- **Referencing a file collection list field example** (assuming a separate "relation_files" collection with a file named "cities" with a list field "cities" with subfields "name" and "id"):
* **Referencing a file collection list field example** (assuming a separate "relation_files" collection with a file named "cities" with a list field "cities" with subfields "name" and "id"):
```yaml
- label: "City"
@ -58,4 +58,4 @@ The generated UI input will search the authors collection by name, and display e
value_field: "cities.*.id"
```
The generated UI input will search the cities file by city name, and display each city's name. On selection, the city id will be saved for the field.
The generated UI input will search the cities file by city name, and display each city's name. On selection, the city id is saved for the field.

View File

@ -1,57 +1,75 @@
---
label: "Select"
title: select
label: Select
---
The select widget allows you to pick a string value from a dropdown menu.
- **Name:** `select`
- **UI:** select input
- **Data type:** string or array
- **Options:**
- `default`: default values must be contained in `options` and are ignored otherwise
- string values: accepts a string; defaults to an empty string. Accepts an array of strings and defaults to an empty array with `multiple: true` enabled.
- object with `label` and `value` fields: accepts an object with `label` and `value` field or an array of such objects when `multiple: true` is enable. Defaults to no value
- `options`: (**required**) a list of options for the dropdown menu; can be listed in two ways:
- string values: the label displayed in the dropdown is the value saved in the file
- object with `label` and `value` fields: the label displays in the dropdown; the value is saved in the file
- `multiple`: accepts a boolean; defaults to `false`
- `min`: minimum number of items; ignored if **multiple** is not `true`
- `max`: maximum number of items; ignored if **multiple** is not `true`
- **Example** (options as strings):
```yaml
- label: "Align Content"
name: "align"
widget: "select"
options: ["left", "center", "right"]
```
- **Example** (options as objects):
```yaml
- label: "City"
name: "airport-code"
widget: "select"
options:
- { label: "Chicago", value: "ORD" }
- { label: "Paris", value: "CDG" }
- { label: "Tokyo", value: "HND" }
```
- **Example** (multiple):
```yaml
- label: "Tags"
name: "tags"
widget: "select"
multiple: true
options: ["Design", "UX", "Dev"]
default: ["Design"]
```
- **Example** (min/max):
```yaml
- label: "Tags"
name: "tags"
widget: "select"
multiple: true
min: 1
max: 3
options: ["Design", "UX", "Dev"]
default: ["Design"]
```
* **Name:** `select`
* **UI:** select input
* **Data type:** string or array
* **Options:**
* `default`: `options` must contain any default values
* string values: accepts a string; defaults to an empty string. Accepts an array of strings and defaults to an empty array with `multiple: true` enabled.
* object with `label` and `value` fields: accepts an object with `label` and `value` field or an array of such objects when `multiple: true` is enable. Defaults to no value
* `options`: (**required**) there are two ways to list of options for the dropdown menu:
* string values: the dropdown displays the value directly
* object with `label` and `value` fields: the label displays in the dropdown; the value saves in the file
* `multiple`: accepts a boolean; defaults to `false`
* `min`: minimum number of items; ignored if **multiple** is `false`
* `max`: maximum number of items; ignored if **multiple** is `false`
* **Example** (options as strings):
```yaml
- label: "Align Content"
name: "align"
widget: "select"
options: ["left", "center", "right"]
```
Selecting the `center` option, will save the value as:
```yaml
align: "center"
```
* **Example** (options as objects):
```yaml
- label: "City"
name: "airport-code"
widget: "select"
options:
- { label: "Chicago", value: "ORD" }
- { label: "Paris", value: "CDG" }
- { label: "Tokyo", value: "HND" }
```
Selecting the `Chicago` option, will save the value as:
```yaml
airport-code: "ORD"
```
* **Example** (multiple):
```yaml
- label: "Tags"
name: "tags"
widget: "select"
multiple: true
options: ["Design", "UX", "Dev"]
default: ["Design"]
```
* **Example** (min/max):
```yaml
- label: "Tags"
name: "tags"
widget: "select"
multiple: true
min: 1
max: 3
options: ["Design", "UX", "Dev"]
default: ["Design"]
```

20909
website/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,32 @@
extends: existence
message: "'%s' is redundant."
ignorecase: true
level: error
action:
name: edit
params:
- split
- " "
- "0"
tokens:
- ABM missile
- ACT test
- ABM missiles
- ABS braking system
- ATM machine
- CD disc
- CPI Index
- GPS system
- GUI interface
- HIV virus
- ISBN number
- LCD display
- PDF format
- PIN number
- RAS syndrome
- RIP in peace
- please RSVP
- SALT talks
- SAT test
- UPC codes
- YAML language

View File

@ -0,0 +1,193 @@
extends: existence
message: "'%s' is not needed."
ignorecase: true
level: warning
tokens:
- absolutely
- accidentally
- additionally
- allegedly
- alternatively
- angrily
- anxiously
- approximately
- awkwardly
- badly
- barely
- beautifully
- blindly
- boldly
- bravely
- brightly
- briskly
- bristly
- busily
- calmly
- carefully
- carelessly
- cautiously
- cheerfully
- clearly
- closely
- coldly
- completely
- consequently
- correctly
- courageously
- crinkly
- cruelly
- crumbly
- cuddly
- currently
- daily
- daringly
- deadly
- deceptively
- definitely
- deliberately
- doubtfully
- eagerly
- early
- easily
- elegantly
- enormously
- enthusiastically
- equally
- especially
- eventually
- exactly
- exceedingly
- exclusively
- extremely
- fairly
- faithfully
- fatally
- fiercely
- finally
- fondly
- foolishly
- fortunately
- frankly
- frantically
- generously
- gently
- giggly
- gladly
- gracefully
- greedily
- happily
- hastily
- healthily
- heartily
- helpfully
- honestly
- hopefully
- hungrily
- hurriedly
- immediately
- impatiently
- innocently
- inquisitively
- interestingly
- irritably
- jiggly
- joyously
- justly
- kindly
- lately
- lazily
- likely
- lonely
- loosely
- loudly
- loudly
- luckily
- madly
- mentally
- monthly
- mortally
- mostly
- mysteriously
- neatly
- nervously
- nightly
- noisily
- normally
- obediently
- occasionally
- openly
- painfully
- particularly
- patiently
- perfectly
- politely
- poorly
- powerfully
- presumably
- previously
- promptly
- punctually
- quickly
- quietly
- rapidly
- rarely
- really
- recently
- recklessly
- regularly
- remarkably
- reluctantly
- repeatedly
- rightfully
- roughly
- rudely
- sadly
- safely
- selfishly
- seriously
- sharply
- shortly
- shyly
- significantly
- silently
- simply
- sleepily
- slowly
- smelly
- smoothly
- softly
- solemnly
- sparkly
- speedily
- stealthily
- sternly
- stupidly
- substantially
- successfully
- suddenly
- surprisingly
- suspiciously
- swiftly
- tenderly
- tensely
- thankfully
- thoughtfully
- tightly
- timely
- truthfully
- unexpectedly
- unfortunately
- usually
- very
- victoriously
- violently
- vivaciously
- warmly
- weakly
- wearily
- weekly
- wildly
- wisely
- worldly
- wrinkly
- yearly

View File

@ -0,0 +1,53 @@
extends: existence
message: "'%s' is archaic."
ignorecase: true
level: error
tokens:
- alack
- anent
- begat
- belike
- betimes
- boughten
- brocage
- brokage
- camarade
- chiefer
- chiefest
- Christiana
- completely obsolescent
- cozen
- divers
- deflexion
- fain
- forsooth
- foreclose from
- haply
- howbeit
- illumine
- in sooth
- maugre
- meseems
- methinks
- nigh
- peradventure
- perchance
- saith
- shew
- sistren
- spake
- to wit
- verily
- whilom
- withal
- wot
- enclosed please find
- please find enclosed
- enclosed herewith
- enclosed herein
- inforce
- ex postfacto
- foreclose from
- forewent
- for ever
- bona fides

View File

@ -0,0 +1,781 @@
extends: existence
message: Avoid cliches such as '%s'.
ignorecase: true
level: warning
tokens:
- a chip off the old block
- a clean slate
- a dark and stormy night
- a far cry
- a fate worse than death
- a fine kettle of fish
- a loose cannon
- a penny saved is a penny earned
- a tough row to hoe
- a word to the wise
- ace in the hole
- acid test
- add insult to injury
- against all odds
- air your dirty laundry
- alas and alack
- all fun and games
- all hell broke loose
- all in a day's work
- all talk, no action
- all thumbs
- all your eggs in one basket
- all's fair in love and war
- all's well that ends well
- almighty dollar
- American as apple pie
- an axe to grind
- another day, another dollar
- armed to the teeth
- as luck would have it
- as old as time
- as the crow flies
- at loose ends
- at my wits end
- at the end of the day
- avoid like the plague
- babe in the woods
- back against the wall
- back in the saddle
- back to square one
- back to the drawing board
- bad to the bone
- badge of honor
- bald faced liar
- bald-faced lie
- ballpark figure
- banging your head against a brick wall
- baptism by fire
- barking up the wrong tree
- bat out of hell
- be all and end all
- beat a dead horse
- beat around the bush
- been there, done that
- beggars can't be choosers
- behind the eight ball
- bend over backwards
- benefit of the doubt
- bent out of shape
- best thing since sliced bread
- bet your bottom dollar
- better half
- better late than never
- better mousetrap
- better safe than sorry
- between a rock and a hard place
- between a rock and a hard place
- between Scylla and Charybdis
- between the devil and the deep blue see
- betwixt and between
- beyond the pale
- bide your time
- big as life
- big cheese
- big fish in a small pond
- big man on campus
- bigger they are the harder they fall
- bird in the hand
- bird's eye view
- birds and the bees
- birds of a feather flock together
- bit the hand that feeds you
- bite the bullet
- bite the dust
- bitten off more than he can chew
- black as coal
- black as pitch
- black as the ace of spades
- blast from the past
- bleeding heart
- blessing in disguise
- blind ambition
- blind as a bat
- blind leading the blind
- blissful ignorance
- blood is thicker than water
- blood sweat and tears
- blow a fuse
- blow off steam
- blow your own horn
- blushing bride
- boils down to
- bolt from the blue
- bone to pick
- bored stiff
- bored to tears
- bottomless pit
- boys will be boys
- bright and early
- brings home the bacon
- broad across the beam
- broken record
- brought back to reality
- bulk large
- bull by the horns
- bull in a china shop
- burn the midnight oil
- burning question
- burning the candle at both ends
- burst your bubble
- bury the hatchet
- busy as a bee
- but that's another story
- by hook or by crook
- call a spade a spade
- called onto the carpet
- calm before the storm
- can of worms
- can't cut the mustard
- can't hold a candle to
- case of mistaken identity
- cast aspersions
- cat got your tongue
- cat's meow
- caught in the crossfire
- caught red-handed
- chase a red herring
- checkered past
- chomping at the bit
- cleanliness is next to godliness
- clear as a bell
- clear as mud
- close to the vest
- cock and bull story
- cold shoulder
- come hell or high water
- comparing apples and oranges
- compleat
- conspicuous by its absence
- cool as a cucumber
- cool, calm, and collected
- cost a king's ransom
- count your blessings
- crack of dawn
- crash course
- creature comforts
- cross that bridge when you come to it
- crushing blow
- cry like a baby
- cry me a river
- cry over spilt milk
- crystal clear
- crystal clear
- curiosity killed the cat
- cut and dried
- cut through the red tape
- cut to the chase
- cute as a bugs ear
- cute as a button
- cute as a puppy
- cuts to the quick
- cutting edge
- dark before the dawn
- day in, day out
- dead as a doornail
- decision-making process
- devil is in the details
- dime a dozen
- divide and conquer
- dog and pony show
- dog days
- dog eat dog
- dog tired
- don't burn your bridges
- don't count your chickens
- don't look a gift horse in the mouth
- don't rock the boat
- don't step on anyone's toes
- don't take any wooden nickels
- down and out
- down at the heels
- down in the dumps
- down the hatch
- down to earth
- draw the line
- dressed to kill
- dressed to the nines
- drives me up the wall
- dubious distinction
- dull as dishwater
- duly authorized
- dyed in the wool
- eagle eye
- ear to the ground
- early bird catches the worm
- easier said than done
- easy as pie
- eat your heart out
- eat your words
- eleventh hour
- even the playing field
- every dog has its day
- every fiber of my being
- everything but the kitchen sink
- eye for an eye
- eyes peeled
- face the music
- facts of life
- fair weather friend
- fall by the wayside
- fan the flames
- far be it from me
- fast and loose
- feast or famine
- feather your nest
- feathered friends
- few and far between
- fifteen minutes of fame
- fills the bill
- filthy vermin
- fine kettle of fish
- first and foremost
- fish out of water
- fishing for a compliment
- fit as a fiddle
- fit the bill
- fit to be tied
- flash in the pan
- flat as a pancake
- flip your lid
- flog a dead horse
- fly by night
- fly the coop
- follow your heart
- for all intents and purposes
- for free
- for the birds
- for what it's worth
- force of nature
- force to be reckoned with
- forgive and forget
- fox in the henhouse
- free and easy
- free as a bird
- fresh as a daisy
- full steam ahead
- fun in the sun
- garbage in, garbage out
- gentle as a lamb
- get a kick out of
- get a leg up
- get down and dirty
- get the lead out
- get to the bottom of
- get with the program
- get your feet wet
- gets my goat
- gilding the lily
- gilding the lily
- give and take
- go against the grain
- go at it tooth and nail
- go for broke
- go him one better
- go the extra mile
- go with the flow
- goes without saying
- good as gold
- good deed for the day
- good things come to those who wait
- good time was had by all
- good times were had by all
- greased lightning
- greek to me
- green thumb
- green-eyed monster
- grist for the mill
- growing like a weed
- hair of the dog
- hand to mouth
- happy as a clam
- happy as a lark
- hasn't a clue
- have a nice day
- have a short fuse
- have high hopes
- have the last laugh
- haven't got a row to hoe
- he's got his hands full
- head honcho
- head over heels
- hear a pin drop
- heard it through the grapevine
- heart's content
- heavy as lead
- hem and haw
- high and dry
- high and mighty
- high as a kite
- his own worst enemy
- his work cut out for him
- hit paydirt
- hither and yon
- Hobson's choice
- hold your head up high
- hold your horses
- hold your own
- hold your tongue
- honest as the day is long
- horns of a dilemma
- horns of a dilemma
- horse of a different color
- hot under the collar
- hour of need
- I beg to differ
- icing on the cake
- if the shoe fits
- if the shoe were on the other foot
- if you catch my drift
- in a jam
- in a jiffy
- in a nutshell
- in a pig's eye
- in a pinch
- in a word
- in hot water
- in light of
- in the final analysis
- in the gutter
- in the last analysis
- in the nick of time
- in the thick of it
- in your dreams
- innocent bystander
- it ain't over till the fat lady sings
- it goes without saying
- it takes all kinds
- it takes one to know one
- it's a small world
- it's not what you know, it's who you know
- it's only a matter of time
- ivory tower
- Jack of all trades
- jockey for position
- jog your memory
- joined at the hip
- judge a book by its cover
- jump down your throat
- jump in with both feet
- jump on the bandwagon
- jump the gun
- jump to conclusions
- just a hop, skip, and a jump
- just the ticket
- justice is blind
- keep a stiff upper lip
- keep an eye on
- keep it simple, stupid
- keep the home fires burning
- keep up with the Joneses
- keep your chin up
- keep your fingers crossed
- kick the bucket
- kick up your heels
- kick your feet up
- kid in a candy store
- kill two birds with one stone
- kiss of death
- knock it out of the park
- knock on wood
- knock your socks off
- know him from Adam
- know the ropes
- know the score
- knuckle down
- knuckle sandwich
- knuckle under
- labor of love
- ladder of success
- land on your feet
- lap of luxury
- last but not least
- last but not least
- last hurrah
- last-ditch effort
- law of the jungle
- law of the land
- lay down the law
- leaps and bounds
- let sleeping dogs lie
- let the cat out of the bag
- let the good times roll
- let your hair down
- let's talk turkey
- letter perfect
- lick your wounds
- lies like a rug
- life's a bitch
- life's a grind
- light at the end of the tunnel
- lighter than a feather
- lighter than air
- like clockwork
- like father like son
- like taking candy from a baby
- like there's no tomorrow
- lion's share
- live and learn
- live and let live
- long and short of it
- long lost love
- look before you leap
- look down your nose
- look what the cat dragged in
- looking a gift horse in the mouth
- looks like death warmed over
- loose cannon
- lose your head
- lose your temper
- loud as a horn
- lounge lizard
- loved and lost
- low man on the totem pole
- luck of the draw
- luck of the Irish
- make a mockery of
- make hay while the sun shines
- make money hand over fist
- make my day
- make the best of a bad situation
- make the best of it
- make your blood boil
- male chauvinism
- man of few words
- man's best friend
- mark my words
- meaningful dialogue
- missed the boat on that one
- moment in the sun
- moment of glory
- moment of truth
- moment of truth
- money to burn
- more in sorrow than in anger
- more power to you
- more sinned against than sinning
- more than one way to skin a cat
- movers and shakers
- moving experience
- my better half
- naked as a jaybird
- naked truth
- neat as a pin
- needle in a haystack
- needless to say
- neither here nor there
- never look back
- never say never
- nip and tuck
- nip in the bud
- nip it in the bud
- no guts, no glory
- no love lost
- no pain, no gain
- no skin off my back
- no stone unturned
- no time like the present
- no use crying over spilled milk
- nose to the grindstone
- not a hope in hell
- not a minute's peace
- not in my backyard
- not playing with a full deck
- not the end of the world
- not written in stone
- nothing to sneeze at
- nothing ventured nothing gained
- now we're cooking
- off the top of my head
- off the wagon
- off the wall
- old hat
- olden days
- older and wiser
- older than dirt
- older than Methuselah
- on a roll
- on cloud nine
- on pins and needles
- on the bandwagon
- on the money
- on the nose
- on the rocks
- on the same page
- on the spot
- on the tip of my tongue
- on the wagon
- on thin ice
- once bitten, twice shy
- one bad apple doesn't spoil the bushel
- one born every minute
- one brick short
- one foot in the grave
- one in a million
- one red cent
- only game in town
- open a can of worms
- open and shut case
- open the flood gates
- opportunity doesn't knock twice
- out of pocket
- out of sight, out of mind
- out of the frying pan into the fire
- out of the woods
- out on a limb
- over a barrel
- over the hump
- pain and suffering
- pain in the
- panic button
- par for the course
- part and parcel
- party pooper
- pass the buck
- patience is a virtue
- pay through the nose
- penny pincher
- perfect storm
- pig in a poke
- pile it on
- pillar of the community
- pin your hopes on
- pitter patter of little feet
- plain as day
- plain as the nose on your face
- play by the rules
- play your cards right
- playing the field
- playing with fire
- pleased as punch
- plenty of fish in the sea
- point with pride
- poor as a church mouse
- pot calling the kettle black
- presidential timber
- pretty as a picture
- pull a fast one
- pull your punches
- pulled no punches
- pulling your leg
- pure as the driven snow
- put it in a nutshell
- put one over on you
- put the cart before the horse
- put the pedal to the metal
- put your best foot forward
- put your foot down
- quantum jump
- quantum leap
- quick as a bunny
- quick as a lick
- quick as a wink
- quick as lightning
- quiet as a dormouse
- rags to riches
- raining buckets
- raining cats and dogs
- rank and file
- rat race
- reap what you sow
- red as a beet
- red herring
- redound to one's credit
- redound to the benefit of
- reinvent the wheel
- rich and famous
- rings a bell
- ripe old age
- ripped me off
- rise and shine
- road to hell is paved with good intentions
- rob Peter to pay Paul
- roll over in the grave
- rub the wrong way
- ruled the roost
- running in circles
- sad but true
- sadder but wiser
- salt of the earth
- scared stiff
- scared to death
- sea change
- sealed with a kiss
- second to none
- see eye to eye
- seen the light
- seize the day
- set the record straight
- set the world on fire
- set your teeth on edge
- sharp as a tack
- shirked his duties
- shoot for the moon
- shoot the breeze
- shot in the dark
- shoulder to the wheel
- sick as a dog
- sigh of relief
- signed, sealed, and delivered
- sink or swim
- six of one, half a dozen of another
- six of one, half a dozen of the other
- skating on thin ice
- slept like a log
- slinging mud
- slippery as an eel
- slow as molasses
- smart as a whip
- smooth as a baby's bottom
- sneaking suspicion
- snug as a bug in a rug
- sow wild oats
- spare the rod, spoil the child
- speak of the devil
- spilled the beans
- spinning your wheels
- spitting image of
- spoke with relish
- spread like wildfire
- spring to life
- squeaky wheel gets the grease
- stands out like a sore thumb
- start from scratch
- stick in the mud
- still waters run deep
- stitch in time
- stop and smell the roses
- straight as an arrow
- straw that broke the camel's back
- stretched to the breaking point
- strong as an ox
- stubborn as a mule
- stuff that dreams are made of
- stuffed shirt
- sweating blood
- sweating bullets
- take a load off
- take one for the team
- take the bait
- take the bull by the horns
- take the plunge
- takes one to know one
- takes two to tango
- than you can shake a stick at
- the cream of the crop
- the cream rises to the top
- the more the merrier
- the real deal
- the real McCoy
- the red carpet treatment
- the same old story
- the straw that broke the camel's back
- there is no accounting for taste
- thick as a brick
- thick as thieves
- thin as a rail
- think outside of the box
- thinking outside the box
- third time's the charm
- this day and age
- this hurts me worse than it hurts you
- this point in time
- thought leaders?
- three sheets to the wind
- through thick and thin
- throw in the towel
- throw the baby out with the bathwater
- tie one on
- tighter than a drum
- time and time again
- time is of the essence
- tip of the iceberg
- tired but happy
- to coin a phrase
- to each his own
- to make a long story short
- to the best of my knowledge
- toe the line
- tongue in cheek
- too good to be true
- too hot to handle
- too numerous to mention
- touch with a ten foot pole
- tough as nails
- trial and error
- trials and tribulations
- tried and true
- trip down memory lane
- twist of fate
- two cents worth
- two peas in a pod
- ugly as sin
- under the counter
- under the gun
- under the same roof
- under the weather
- until the cows come home
- unvarnished truth
- up the creek
- uphill battle
- upper crust
- upset the applecart
- vain attempt
- vain effort
- vanquish the enemy
- various and sundry
- vested interest
- viable alternative
- waiting for the other shoe to drop
- wakeup call
- warm welcome
- watch your p's and q's
- watch your tongue
- watching the clock
- water under the bridge
- wax eloquent
- wax poetic
- we've got a situation here
- weather the storm
- weed them out
- week of Sundays
- went belly up
- wet behind the ears
- what goes around comes around
- what you see is what you get
- when it rains, it pours
- when push comes to shove
- when the cat's away
- when the going gets tough, the tough get going
- whet (?:the|your) appetite
- white as a sheet
- whole ball of wax
- whole hog
- whole nine yards
- wild goose chase
- will wonders never cease?
- wisdom of the ages
- wise as an owl
- wolf at the door
- wool pulled over our eyes
- words fail me
- work like a dog
- world weary
- worst nightmare
- worth its weight in gold
- writ large
- wrong side of the bed
- yanking your chain
- yappy as a dog
- years young
- you are what you eat
- you can run but you can't hide
- you only live once
- you're the boss
- young and foolish
- young and vibrant

View File

@ -0,0 +1,6 @@
extends: existence
message: "'%s' is hyperbolic."
level: error
nonword: true
tokens:
- '[a-z]+[!?]{2,}'

View File

@ -0,0 +1,119 @@
extends: existence
message: "'%s' Use more direct language."
ignorecase: true
level: warning
tokens:
- a number of
- accede to
- adjacent to
- adversely impact
- all things considered
- along the lines of
- already existing
- as a matter of fact
- as a means of
- as far as I'm concerned
- as of yet
- as to
- as yet
- at the present time
- at this time
- because of the fact that
- by means of
- by virtue of
- by virtue of the fact that
- close proximity
- comply with
- due to the fact that
- each and every
- factual evidence
- first and foremost
- for all intents and purposes
- for the most part
- for the purpose of
- have a tendency to
- honest truth
- if and when
- in a manner of speaking
- in a timely manner
- in a very real sense
- in accordance with
- in addition
- in all likelihood
- in an effort to
- in between
- in excess of
- in lieu of
- in light of the fact that
- in many cases
- in my opinion
- in order to
- in regard to
- in some instances
- in terms of
- in the case of
- in the event that
- in the final analysis
- in the nature of
- in the near future
- in the process of
- incumbent upon
- is applicable to
- is responsible for
- it is essential
- it seems that
- it was
- not certain
- not many
- not often
- not unless
- not unlike
- null and void
- on the contrary
- on the other hand
- one particular
- owing to the fact that
- pass away
- pertaining to
- point in time
- portion
- prior to
- prioritize
- provided that
- put simply
- readily apparent
- refer back
- should you wish
- span across
- so to speak
- successfully complete
- the month of
- the point I am trying to make
- time period
- to a certain degree
- took advantage of
- until such time as
- utilization
- utilize
- various different
- what I mean to say is
- whether or not
- with respect to
- with the exception of
- would argue that
- increasingly less
- advancing backwards
- alludes explicitly to
- explicitly alludes to
- totally obsolete
- completely obsolete
- generally always
- usually always
- increasingly less
- build down
- conspicuous absence
- exact estimate
- found missing
- intense apathy
- mandatory choice
- organized mess

View File

@ -0,0 +1,37 @@
extends: existence
message: "'%s' is jargon."
ignorecase: true
level: error
description:
tokens:
- in the affirmative
- in the negative
- agendize
- per your order
- per your request
- disincentivize
- at the end of the day
- back to the drawing board
- hit the ground running
- get the ball rolling
- low-hanging fruit
- thrown under the bus
- think outside the box
- let's touch base
- get my manager's blessing
- it's on my radar
- ping me
- i don't have the bandwidth
- no brainer
- par for the course
- bang for your buck
- synergy
- move the goal post
- apples to apples
- win-win
- circle back around
- all hands on deck
- take this offline
- drill-down
- elephant in the room
- on my plate

View File

@ -0,0 +1,180 @@
extends: existence
message: "'%s' is passive voice. Use active voice."
ignorecase: true
level: warning
raw:
- \b(am|are|were|being|is|been|was|be)\b\s*
tokens:
- "[\\w]+ed"
- awoken
- beat
- become
- been
- begun
- bent
- beset
- bet
- bid
- bidden
- bitten
- bled
- blown
- born
- bought
- bound
- bred
- broadcast
- brought
- burnt
- burst
- cast
- chosen
- clung
- come
- cost
- crept
- cut
- dealt
- dived
- done
- drawn
- dreamt
- driven
- drunk
- dug
- eaten
- fallen
- fed
- felt
- fit
- fled
- flown
- flung
- forbidden
- foregone
- forgiven
- forgotten
- forsaken
- fought
- found
- frozen
- given
- gone
- gotten
- ground
- grown
- heard
- held
- hidden
- hit
- hung
- hurt
- kept
- knelt
- knit
- known
- laid
- lain
- leapt
- learnt
- led
- left
- lent
- let
- lighted
- lost
- made
- meant
- met
- misspelt
- mistaken
- mown
- overcome
- overdone
- overtaken
- overthrown
- paid
- pled
- proven
- put
- quit
- read
- rid
- ridden
- risen
- run
- rung
- said
- sat
- sawn
- seen
- sent
- set
- sewn
- shaken
- shaven
- shed
- shod
- shone
- shorn
- shot
- shown
- shrunk
- shut
- slain
- slept
- slid
- slit
- slung
- smitten
- sold
- sought
- sown
- sped
- spent
- spilt
- spit
- split
- spoken
- spread
- sprung
- spun
- stolen
- stood
- stridden
- striven
- struck
- strung
- stuck
- stung
- stunk
- sung
- sunk
- swept
- swollen
- sworn
- swum
- swung
- taken
- taught
- thought
- thrived
- thrown
- thrust
- told
- torn
- trodden
- understood
- upheld
- upset
- wed
- wept
- withheld
- withstood
- woken
- won
- worn
- wound
- woven
- written
- wrung

View File

@ -0,0 +1,111 @@
extends: existence
message: "Use simpler words instead of '%s'."
ignorecase: true
level: warning
tokens:
- abundance
- accelerate
- accentuate
- accompany
- accomplish
- accorded
- accrue
- acquiesce
- acquire
- adjustment
- admissible
- advantageous
- advise
- aforementioned
- aggregate
- alleviate
- allocate
- ameliorate
- anticipate
- apparent
- appreciable
- ascertain
- assistance
- attain
- authorize
- belated
- bestow
- cease
- commence
- concerning
- consequently
- constitutes
- demonstrate
- depart
- designate
- discontinue
- economical
- eliminate
- elucidate
- employ
- endeavor
- equitable
- equivalent
- evidenced
- exclusively
- expedite
- expend
- expiration
- facilitate
- feasible
- forfeit
- formulate
- however
- impacted
- implement
- inception
- indicate
- indication
- initiate
- irregardless
- magnitude
- methodology
- monitor
- necessitate
- nevertheless
- notwithstanding
- numerous
- objective
- obligate
- obtain
- optimum
- overall
- participate
- particulars
- portion
- possess
- preclude
- prioritize
- procure
- proficiency
- purchase
- regarding
- relocate
- remainder
- remuneration
- reside
- residence
- retain
- satisfy
- shall
- solicit
- strategize
- subsequent
- substantial
- sufficient
- terminate
- therefore
- transpire
- utilization
- utilize
- validate
- witnessed
- decimate
- effete
- fulsome
- impassionate

View File

@ -0,0 +1,27 @@
Based on [write-good](https://github.com/btford/write-good).
> Naive linter for English prose for developers who can't write good and wanna learn to do other stuff good too.
```
The MIT License (MIT)
Copyright (c) 2014 Brian Ford
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```

View File

@ -0,0 +1,12 @@
Copyright © 20142015, Jordan Suchow, Michael Pacer, and Lara A. Ross
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -0,0 +1,13 @@
extends: substitution
message: Consider using '%s' instead of '%s'.
ignorecase: true
level: error
action:
name: replace
swap:
my resume: my résumé
your resume: your résumé
his resume: his résumé
her resume: her résumé
a resume: a résumé
the resume: the résumé

View File

@ -0,0 +1,46 @@
extends: substitution
message: Avoid gender bias by using '%s' instead of '%s'.
ignorecase: true
level: error
action:
name: replace
swap:
(?:alumnae|alumni): graduates
(?:alumna|alumnus): graduate
air(?:m[ae]n|wom[ae]n): pilot(s)
anchor(?:m[ae]n|wom[ae]n): anchor(s)
authoress: author
camera(?:m[ae]n|wom[ae]n): camera operator(s)
chair(?:m[ae]n|wom[ae]n): chair(s)
congress(?:m[ae]n|wom[ae]n): member(s) of congress
door(?:m[ae]|wom[ae]n): concierge(s)
draft(?:m[ae]n|wom[ae]n): drafter(s)
fire(?:m[ae]n|wom[ae]n): firefighter(s)
fisher(?:m[ae]n|wom[ae]n): fisher(s)
fresh(?:m[ae]n|wom[ae]n): first-year student(s)
garbage(?:m[ae]n|wom[ae]n): waste collector(s)
ladylike: courteous
landlord: building manager
mail(?:m[ae]n|wom[ae]n): mail carriers
man and wife: husband and wife
man enough: strong enough
mankind: human kind
manmade: manufactured
men and women: people
news(?:m[ae]n|wom[ae]n): journalist(s)
ombuds(?:man|woman): ombuds
oneupmanship: upstaging
poetess: poet
police(?:m[ae]n|wom[ae]n): police officer(s)
repair(?:m[ae]n|wom[ae]n): technician(s)
sales(?:m[ae]n|wom[ae]n): salesperson or sales people
service(?:m[ae]n|wom[ae]n): soldier(s)
steward(?:ess)?: flight attendant
tribes(?:m[ae]n|wom[ae]n): tribe member(s)
waitress: waiter
woman doctor: doctor
woman scientist[s]?: scientist(s)
work(?:m[ae]n|wom[ae]n): worker(s)
(?:he|she): they
(?:him|her): them
(?:his/hers): their

View File

@ -0,0 +1,357 @@
extends: substitution
message: Prefer '%s' over '%s'
ignorecase: true
action:
name: replace
swap:
'(?:cell phone|cell-phone)': cellphone
'(?:cliquey|cliquy)': cliquish
'(?:pygmean|pygmaen)': pygmy
'(?:retributional|retributionary)': retributive
'(?:revokable|revokeable)': revocable
abolishment: abolition
accessary: accessory
accreditate: accredit
accruement: accrual
accusee: accused
acquaintanceship: acquaintance
acquitment: acquittal
administrate: administer
administrated: administered
administrating: administering
adulterate: adulterous
advisatory: advisory
advocator: advocate
aggrievance: grievance
allegator: alleger
allusory: allusive
amative: amorous
amortizement: amortization
amphiboly: amphibology
anecdotalist: anecdotist
anilinctus: anilingus
anticipative: anticipatory
antithetic: antithetical
applicative: applicable
applicatory: applicable
applier: applicator
approbative: approbatory
arbitrager: arbitrageur
arsenous: arsenious
ascendance: ascendancy
ascendence: ascendancy
ascendency: ascendancy
auctorial: authorial
averral: averment
barbwire: barbed wire
benefic: beneficent
benignant: benign
bestowment: bestowal
betrothment: betrothal
blamableness: blameworthiness
butt naked: buck naked
camarade: comrade
carta blanca: carte blanche
casualities: casualties
casuality: casualty
catch on fire: catch fire
catholicly: catholically
cease fire: ceasefire
channelize: channel
chaplainship: chaplaincy
chrysalid: chrysalis
chrysalids: chrysalises
cigaret: cigarette
coemployee: coworker
cognitional: cognitive
cohabitate: cohabit
cohabitor: cohabitant
collodium: collodion
collusory: collusive
commemoratory: commemorative
commonty: commonage
communicatory: communicative
compensative: compensatory
complacence: complacency
complicitous: complicit
computate: compute
conciliative: conciliatory
concomitancy: concomitance
condonance: condonation
confirmative: confirmatory
congruency: congruence
connotate: connote
consanguineal: consanguine
conspicuity: conspicuousness
conspiratorialist: conspirator
constitutionist: constitutionalist
contingence: contigency
contributary: contributory
contumacity: contumacy
conversible: convertible
conveyal: conveyance
copartner: partner
copartnership: partnership
corroboratory: corroborative
cotemporaneous: contemporaneous
cotemporary: contemporary
criminate: incriminate
culpatory: inculpatory
cumbrance: encumbrance
cumulate: accumulate
curatory: curative
daredeviltry: daredevilry
deceptious: deceptive
defamative: defamatory
defraudulent: fraudulent
degeneratory: degenerative
delimitate: delimit
delusory: delusive
denouncement: denunciation
depositee: depositary
depreciative: depreciatory
deprival: deprivation
derogative: derogatory
destroyable: destructible
detoxicate: detoxify
detractory: detractive
deviancy: deviance
deviationist: deviant
digamy: deuterogamy
digitalize: digitize
diminishment: diminution
diplomatist: diplomat
disassociate: dissociate
disciplinatory: disciplinary
discriminant: discriminating
disenthrone: dethrone
disintegratory: disintegrative
dismission: dismissal
disorientate: disorient
disorientated: disoriented
disquieten: disquiet
distraite: distrait
divergency: divergence
dividable: divisible
doctrinary: doctrinaire
documental: documentary
domesticize: domesticate
duplicatory: duplicative
duteous: dutiful
educationalist: educationist
educatory: educative
enigmatas: enigmas
enlargen: enlarge
enswathe: swathe
epical: epic
erotism: eroticism
ethician: ethicist
ex officiis: ex officio
exculpative: exculpatory
exigeant: exigent
exigence: exigency
exotism: exoticism
expedience: expediency
expediential: expedient
extensible: extendable
eying: eyeing
fiefdom: fief
flagrance: flagrancy
flatulency: flatulence
fraudful: fraudulent
funebrial: funereal
geographical: geographic
geometrical: geometric
gerry-rigged: jury-rigged
goatherder: goatherd
gustatorial: gustatory
habitude: habit
henceforward: henceforth
hesitance: hesitancy
heterogenous: heterogeneous
hierarchic: hierarchical
hindermost: hindmost
honorand: honoree
hypostasize: hypostatize
hysteric: hysterical
idolatrize: idolize
impanel: empanel
imperviable: impervious
importunacy: importunity
impotency: impotence
imprimatura: imprimatur
improprietous: improper
inalterable: unalterable
incitation: incitement
incommunicative: uncommunicative
inconsistence: inconsistency
incontrollable: uncontrollable
incurment: incurrence
indow: endow
indue: endue
inhibitive: inhibitory
innavigable: unnavigable
innovational: innovative
inquisitional: inquisitorial
insistment: insistence
insolvable: unsolvable
instillment: instillation
instinctual: instinctive
insuror: insurer
insurrectional: insurrectionary
interpretate: interpret
intervenience: intervention
ironical: ironic
jerry-rigged: jury-rigged
judgmatic: judgmental
labyrinthian: labyrinthine
laudative: laudatory
legitimatization: legitimation
legitimatize: legitimize
legitimization: legitimation
lengthways: lengthwise
life-sized: life-size
liquorice: licorice
lithesome: lithe
lollipop: lollypop
loth: loath
lubricous: lubricious
maihem: mayhem
medicinal marijuana: medical marijuana
meliorate: ameliorate
minimalize: minimize
mirk: murk
mirky: murky
misdoubt: doubt
monetarize: monetize
moveable: movable
narcism: narcissism
neglective: neglectful
negligency: negligence
neologizer: neologist
neurologic: neurological
nicknack: knickknack
nictate: nictitate
nonenforceable: unenforceable
normalcy: normality
numbedness: numbness
omittable: omissible
onomatopoetic: onomatopoeic
opinioned: opined
optimum advantage: optimal advantage
orientate: orient
outsized: outsize
oversized: oversize
overthrowal: overthrow
pacificist: pacifist
paederast: pederast
parachronism: anachronism
parti-color: parti-colored
participative: participatory
party-colored: parti-colored
pediatrist: pediatrician
penumbrous: penumbral
perjorative: pejorative
permissory: permissive
permutate: permute
personation: impersonation
pharmaceutic: pharmaceutical
pleuritis: pleurisy
policy holder: policyholder
policyowner: policyholder
politicalize: politicize
precedency: precedence
preceptoral: preceptorial
precipitance: precipitancy
precipitant: precipitate
preclusory: preclusive
precolumbian: pre-Columbian
prefectoral: prefectorial
preponderately: preponderantly
preserval: preservation
preventative: preventive
proconsulship: proconsulate
procreational: procreative
procurance: procurement
propelment: propulsion
propulsory: propulsive
prosecutive: prosecutory
protectory: protective
provocatory: provocative
pruriency: prurience
psychal: psychical
punitory: punitive
quantitate: quantify
questionary: questionnaire
quiescency: quiescence
rabbin: rabbi
reasonability: reasonableness
recidivistic: recidivous
recriminative: recriminatory
recruital: recruitment
recurrency: recurrence
recusance: recusancy
recusation: recusal
recusement: recusal
redemptory: redemptive
referrable: referable
referrible: referable
refutatory: refutative
remitment: remittance
remittal: remission
renouncement: renunciation
renunciable: renounceable
reparatory: reparative
repudiative: repudiatory
requitement: requital
rescindment: rescission
restoral: restoration
reticency: reticence
reviewal: review
revisal: revision
revisional: revisionary
revolute: revolt
saliency: salience
salutiferous: salutary
sensatory: sensory
sessionary: sessional
shareowner: shareholder
sicklily: sickly
signator: signatory
slanderize: slander
societary: societal
sodomist: sodomite
solicitate: solicit
speculatory: speculative
spiritous: spirituous
statutorial: statutory
submergeable: submersible
submittal: submission
subtile: subtle
succuba: succubus
sufficience: sufficiency
suppliant: supplicant
surmisal: surmise
suspendible: suspendable
synthetize: synthesize
systemize: systematize
tactual: tactile
tangental: tangential
tautologous: tautological
tee-shirt: T-shirt
thenceforward: thenceforth
transiency: transience
transposal: transposition
unfrequent: infrequent
unreasonability: unreasonableness
unrevokable: irrevocable
unsubstantial: insubstantial
usurpature: usurpation
variative: variational
vegetive: vegetative
vindicative: vindictive
vituperous: vituperative
vociferant: vociferous
volitive: volitional
wolverene: wolverine
wolvish: wolfish

View File

@ -0,0 +1,38 @@
extends: substitution
message: "Consider using '%s' instead of '%s'."
ignorecase: true
level: error
action:
name: replace
swap:
affrontery: effrontery
analyzation: analysis
annoyment: annoyance
confirmant: confirmand
confirmants: confirmands
conversate: converse
crained: cranded
discomforture: discomfort|discomfiture
dispersement: disbursement|dispersal
doubtlessly: doubtless|undoubtedly
forebearance: forbearance
improprietous: improper
inclimate: inclement
inimicable: inimical
irregardless: regardless
minimalize: minimize
minimalized: minimized
minimalizes: minimizes
minimalizing: minimizing
optimalize: optimize
paralyzation: paralysis
pettifogger: pettifog
proprietous: proper
relative inexpense: relatively low price|affordability
seldomly: seldom
thusly: thus
uncategorically: categorically
undoubtably: undoubtedly|indubitably
unequivocable: unequivocal
unmercilessly: mercilessly
unrelentlessly: unrelentingly|relentlessly

View File

@ -0,0 +1,27 @@
extends: substitution
message: "'%s' is offensive, and has been censored."
ignorecase: true
level: error
action:
name: replace
swap:
fag: [CENSORED]
faggot: [CENSORED]
dyke: [CENSORED]
sodomite: [CENSORED]
homosexual agenda: [CENSORED]
gay agenda: [CENSORED]
transvestite: [CENSORED]
homosexual lifestyle: [CENSORED]
gay lifestyle: [CENSORED]
shit: [CENSORED]
piss: [CENSORED]
fuck: [CENSORED]
cunt: [CENSORED]
cocksucker: [CENSORED]
motherfucker: [CENSORED]
tits: [CENSORED]
fart: [CENSORED]
turd: [CENSORED]
twat: [CENSORED]
damn: [CENSORED]

View File

@ -0,0 +1,11 @@
extends: substitution
message: Consider using the '%s' symbol instead of '%s'.
level: error
nonword: true
swap:
'\.\.\.':
'\([cC]\)': ©
'\(TM\)':
'\(tm\)':
'\([rR]\)': ®
'[0-9]+ ?x ?[0-9]+': ×

View File

@ -0,0 +1,19 @@
extends: substitution
message: "Inconsistent spelling of '%s'."
level: error
ignorecase: true
action:
name: replace
swap:
advisor: adviser
centre: center
colour: color
emphasise: emphasize
finalise: finalize
focussed: focused
labour: labor
learnt: learned
organise: organize
organised: organized
organising: organizing
recognise: recognize

View File

@ -0,0 +1,8 @@
extends: existence
message: "Do not start a paragraph with ''%s'."
level: error
scope: paragraph
action:
name: remove
tokens:
- ^But

View File

@ -0,0 +1,7 @@
extends: existence
message: "Do not start a sentence with '%s'."
ignorecase: false
level: error
raw:
- '(?:[;-]\s)There\s(is|are)|\bThere\s(is|are)\b'
- '(?:[;-]\s)so[\s,]|\bSo[\s,]'

View File

@ -0,0 +1,2 @@
Netlify
Middleman

View File

@ -15,7 +15,7 @@ Use angle brackets for placeholders. Tell the reader what a placeholder represen
1. Display information about a cli command:
```
```
npm install <package-name>
```
@ -35,12 +35,12 @@ _____
### Use italics to define or introduce new terms
Do: A _collection_ is a set of entries ...
Do: A _collection_ is a set of entries
Don't: A "collection" is a set of entries ...
Don't: A "collection" is a set of entries
_____
Do: These components form the _control pane_.
Do: These components form the _control pane_.
Don't: These components form the **control pane**.
_____
@ -52,24 +52,24 @@ Do: Open the `config.yaml` file.
Don't: Open the config.yaml file.
_____
Do: Go to the `/docs/guides` directory.
Do: Go to the `/docs/guides` directory.
Don't: Go to the /docs/guides directory.
_____
Do: Open the `/admin/index.html` file.
Do: Open the `/admin/index.html` file.
Don't: Open the /admin/index.html file.
_____
### Use the international standard for punctuation inside quotes
Do: Branch names begin with "cms".
Do: Branch names begin with "cms".
Don't: Branch names begin with "stage."
_____
Do: The copy is called a "fork".
Do: The copy is called a "fork".
Don't: The copy is called a "fork."
_____
@ -80,29 +80,29 @@ _____
For inline code in an HTML document, use the `<code>` tag. In a Markdown document, use the backtick (`).
Do: The `yarn start` command starts the development server.
Do: The `yarn start` command starts the development server.
Don't: The "yarn start" command starts the development server.
_____
Do: For a production build, use `yarn build`.
Do: For a production build, use `yarn build`.
Don't: For a production build, use "yarn build".
_____
Do: Enclose code samples with triple backticks. `(```)`
Do: Enclose code samples with triple backticks. `(```)`
Don't:Enclose code samples with any other syntax.
_____
### Use code style for object field names
Do: Set the value of the `media_folder` field in the configuration file.
Do: Set the value of the `media_folder` field in the configuration file.
Don't: Set the value of the "media_folder" field in the configuration file.
_____
Do: The value of the `name` field is a string.
Do: The value of the `name` field is a string.
Don't: The value of the "name" field is a string.
_____
@ -111,17 +111,17 @@ _____
For field values of type string or integer, use normal style without quotation marks.
Do: Set the value of `publish_mode` to editorial_workflow.
Do: Set the value of `publish_mode` to editorial_workflow.
Don't: Set the value of `imagePullPolicy` to "Always".
_____
Do: Set the value of `image` to nginx:1.8.
Do: Set the value of `image` to nginx:1.8.
Don't: Set the value of `image` to `nginx:1.8`.
_____
Do: Set the value of the `replicas` field to 2.
Do: Set the value of the `replicas` field to 2.
Don't: Set the value of the `replicas` field to 2.
_____
@ -130,7 +130,7 @@ _____
### Dont include the command prompt
Do: yarn start
Do: yarn start
Don't: $ yarn start
@ -140,7 +140,7 @@ This section contains suggested best practices for clear, concise, and consisten
### Use present tense
Do: This command starts a proxy.
Do: This command starts a proxy.
Don't: This command will start a proxy.
@ -148,7 +148,7 @@ Exception: Use future or past tense if it is required to convey the correct mean
### Use active voice
Do: You can explore the API using a browser.
Do: You can explore the API using a browser.
Don't: The API can be explored using a browser.
_____
@ -164,44 +164,44 @@ Exception: Use passive voice if active voice leads to an awkward construction.
Use simple and direct language. Avoid using unnecessary phrases, such as saying “please.”
Do: To create an entry, ...
Do: To create an entry,
Don't: In order to create an entry, ...
Don't: In order to create an entry,
_____
Do: See the configuration file.
Do: See the configuration file.
Don't: Please see the configuration file.
_____
Do: View the fields.
Do: View the fields.
Don't: With this next command, we'll view the fields.
_____
### Address the reader as “you”
Do: You can create a Deployment by ...
Do: You can create a Deployment by
Don't: We'll create a Deployment by ...
Don't: We'll create a Deployment by
_____
Do: In the preceding output, you can see...
Do: In the preceding output, you can see
Don't: In the preceding output, we can see ...
Don't: In the preceding output, we can see
### Avoid Latin phrases
Prefer English terms over Latin abbreviations.
Do: For example, ...
Do: For example,
Don't: e.g., ...
Don't: e.g.,
_____
Do: That is, ...
Do: That is,
Don't: i.e., ...
Don't: i.e.,
_____
Exception: Use “etc.” for et cetera.
@ -212,17 +212,17 @@ Exception: Use “etc.” for et cetera.
Using “we” in a sentence can be confusing, because the reader might not know whether theyre part of the “we” youre describing.
Do: Version 1.4 includes ...
Do: Version 1.4 includes
Don't: In version 1.4, we have added ...
Don't: In version 1.4, we have added
_____
Do: Netlify CMS provides a new feature for ...
Do: Netlify CMS provides a new feature for
Don't: We provide a new feature ...
Don't: We provide a new feature
_____
Do: This page teaches you how to use Widgets.
Do: This page teaches you how to use Widgets.
Don't: In this page, we are going to learn about Widgets.
_____
@ -233,10 +233,10 @@ Some readers speak English as a second language. Avoid jargon and idioms to help
Do: Internally
Don't: Under the hood, ...
Don't: Under the hood,
_____
Do: Create a new cluster.
Do: Create a new cluster.
Don't: Turn up a new cluster.
_____
@ -247,15 +247,14 @@ Avoid making promises or giving hints about the future. If you need to talk abou
### Avoid statements that will soon be out of date
Avoid words like “currently” and “new.” A feature that is new today might not be considered new in a few months.
Avoid words like “currently” and “new.” A feature that is new today will not be new in a few months.
Do: In version 1.4, ...
Do: In version 1.4,
Don't: In the current version, ...
Don't: In the current version,
_____
Do: The Federation feature provides ...
Do: The Federation feature provides
Don't: The new Federation feature provides ...
Don't: The new Federation feature provides
_____

View File

@ -32,6 +32,32 @@ docs_collection: &docs_collection
- { label: Title, name: title }
- { label: Body, name: body, widget: markdown }
word_list: &word_list
fields:
- label: Extends
name: extends
widget: hidden
default: "existence"
- label: Output message
name: message
widget: string
- label: Ignore Case
name: ignorecase
widget: boolean
default: true
required: false
- label: Notification Level
name: level
widget: select
default: suggestion
options:
- {label: "Suggestion", value: "suggestion"}
- {label: "Warning", value: "warning"}
- {label: "Error", value: "error"}
- label: Entries
name: tokens
widget: list
collections:
- label: Settings
name: settings
@ -53,6 +79,46 @@ collections:
fields:
- { label: 'Full Name', name: 'title', widget: 'string' }
- { label: 'Summary Name', name: 'name', widget: 'string' }
- label: Style & Usage Options
name: linter
hide: false
files:
- <<: *word_list
label: Acronyms
name: acronyms
file: website/src/writing-guide/styles/Avoid/Acronyms.yml
- <<: *word_list
label: Adverbs
name: adverbs
file: website/src/writing-guide/styles/Avoid/Adverbs.yml
- <<: *word_list
label: Archaisms
name: archaisms
file: website/src/writing-guide/styles/Avoid/Archaisms.yml
- <<: *word_list
label: Cliches
name: cliches
file: website/src/writing-guide/styles/Avoid/Cliches.yml
- <<: *word_list
label: Hyperbole
name: hyperbole
file: website/src/writing-guide/styles/Avoid/Hyperbole.yml
- <<: *word_list
label: Indirect Language
name: indirect
file: website/src/writing-guide/styles/Avoid/Indirect.yml
- <<: *word_list
label: Jargon
name: jargon
file: website/src/writing-guide/styles/Avoid/Jargon.yml
- <<: *word_list
label: Passive
name: passive
file: website/src/writing-guide/styles/Avoid/Passive.yml
- <<: *word_list
label: Simplify
name: simplify
file: website/src/writing-guide/styles/Avoid/Simplify.yml
- <<: *docs_collection
name: docs_intro