= Gerrit Code Review - Settings admin customization API

This API is provided by link:pg-plugin-dev.html#plugin-settings[plugin.settings()]
and provides customization to settings page.

== title
`settingsApi.title(title)`

.Params
- `*string* title` Menu item and settings section title

.Returns
- `GrSettingsApi` for chaining.

== token
`settingsApi.token(token)`

.Params
- `*string* token` URL path fragment of the screen for direct link, e.g.
`settings/#x/some-plugin/*token*`

.Returns
- `GrSettingsApi` for chaining.

== module
`settingsApi.module(token)`

.Params
- `*string* module` Custom element name for instantiating in the settings plugin
area.

.Returns
- `GrSettingsApi` for chaining.

== build

.Params
- none

Apply all other configuration parameters and create required UI elements.
