This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch 4.15
in repository https://gitbox.apache.org/repos/asf/cloudstack-documentation.git
The following commit(s) were added to refs/heads/4.15 by this push:
new e6bcd71 ui: added customization details (#199)
e6bcd71 is described below
commit e6bcd71f6ee79404fc790fc11c3bc589d5b8465d
Author: Abhishek Kumar <[email protected]>
AuthorDate: Mon May 24 16:20:32 2021 +0530
ui: added customization details (#199)
Signed-off-by: Abhishek Kumar <[email protected]>
(cherry picked from commit 98a17e8dec84f414cf0922739b0da33c311c7d36)
Signed-off-by: Rohit Yadav <[email protected]>
---
source/_static/images/ui-custom-plugin.png | Bin 0 -> 53558 bytes
source/adminguide/ui.rst | 272 ++++++++++++++++++++++++-----
2 files changed, 232 insertions(+), 40 deletions(-)
diff --git a/source/_static/images/ui-custom-plugin.png
b/source/_static/images/ui-custom-plugin.png
new file mode 100644
index 0000000..3e59b59
Binary files /dev/null and b/source/_static/images/ui-custom-plugin.png differ
diff --git a/source/adminguide/ui.rst b/source/adminguide/ui.rst
index b47e53c..5f8594b 100644
--- a/source/adminguide/ui.rst
+++ b/source/adminguide/ui.rst
@@ -181,12 +181,30 @@ new, unique value.
Basic UI Customization
~~~~~~~~~~~~~~~~~~~~~~
-Users can now customize the CloudStack's user interface by means of a
configuration file at /usr/share/cloudstack-management/webapp/config.json which
can be used to modify the theme, logos, etc. to align to one's requirement.
+Users can customize the CloudStack's user interface by means of a
configuration file at /etc/cloudstack/management/config.json which can be used
to modify the theme, logos, etc. to align to one's requirement.
To change the logo, login banner, error page icon, etc. the following details
can be edited in config.json:
+========== ==================================================
+Property Description
+========== ==================================================
+apiBase Changes the suffix for the API endpoint
+docBase Changes the base URL for the documentation
+appTitle Changes the title of the portal
+footer Changes the footer text
+logo Changes the logo top-left side image
+banner Changes the login banner image
+error.404 Changes the image of error Page not found
+error.403 Changes the image of error Forbidden
+error.500 Changes the image of error Internal Server Error.
+========== ==================================================
+
.. parsed-literal::
+ "apiBase": "/client/api",
+ "docBase": "http://docs.cloudstack.apache.org/en/latest",
+ "appTitle": "CloudStack",
+ "footer": "Licensed under the <a href='http://www.apache.org/licenses/'
target='_blank'>Apache License</a>, Version 2.0.",
"logo": "assets/logo.svg",
"banner": "assets/banner.svg",
"error": {
@@ -195,15 +213,36 @@ To change the logo, login banner, error page icon, etc.
the following details ca
"500": "assets/500.png"
}
-where,
-
-- logo: changes the logo top-left side image.
-- banner: changes the login banner image.
-- error.404: changes the image of error Page not found.
-- error.403: changes the image of error Forbidden.
-- error.500: changes the image of error Internal Server Error.
-Customization of themes is also possible, such as, modifying banner width,
general color, etc. This can be done by editing the "theme" section of the
config.json file:
+Customization of themes is also possible, such as, modifying banner width,
general color, etc. This can be done by editing the "theme" section of the
config.json file. Theme section provides following properties for customization:
+
+=============================
================================================================
+Property Description
+=============================
================================================================
+@logo-background-color Changes the logo background color
+@project-nav-text-color Changes the navigation menu background color of
the project
+@project-nav-text-color Changes the navigation menu background color of
the project view.
+@navigation-background-color Changes the navigation menu background color
+@primary-color Changes the major background color of the page
(background button, icon hover, etc).
+@link-color Changes the link color
+@link-hover-color Changes the link hover color
+@loading-color Changes the message loading color and page
loading bar at the top page
+@success-color Changes success state color
+@processing-color Changes processing state color. Exp: progress
status
+@warning-color Changes warning state color
+@error-color Changes error state color
+@heading-color Changes table header color
+@text-color Change in major text color
+@text-color-secondary Change of secondary text color (breadcrumb icon)
+@disabled-color Disable state color (disabled button, switch,
etc)
+@border-color-base Change in major border color
+@logo-width Change the width of the logo top-left side
+@logo-height Change the height of the logo top-left side
+@banner-width Changes the width of the login banner
+@banner-height Changes the height of the login banner
+@error-width Changes the width of the error image
+@error-height Changes the height of the error image
+=============================
================================================================
.. parsed-literal::
@@ -237,33 +276,6 @@ Customization of themes is also possible, such as,
modifying banner width, gener
"@error-height": "256px"
}
-where,
-
-- @logo-background-color changes the logo background color.
-- @project-nav-background-color changes the navigation menu background color
of the project.
-- @project-nav-text-color changes the navigation menu background color of the
project view.
-- @navigation-background-color changes the navigation menu background color.
-- @navigation-text-color changes the navigation text color.
-- @primary-color: changes the major background color of the page (background
button, icon hover, etc).
-- @link-color changes the link color.
-- @link-hover-color changes the link hover color.
-- @loading-color changes the message loading color and page loading bar at the
top page.
-- @success-color: changes success state color.
-- @processing-color: changes processing state color. Exp: progress status.
-- @warning-color: changes warning state color.
-- @error-color: changes error state color.
-- @heading-color: changes table header color.
-- @text-color: change in major text color.
-- @text-color-secondary: change of secondary text color (breadcrumb icon).
-- @disabled-color: disable state color (disabled button, switch, etc).
-- @border-color-base: change in major border color.
-- @logo-width: change the width of the logo top-left side.
-- @logo-height: change the height of the logo top-left side.
-- @banner-width: changes the width of the login banner.
-- @banner-height: changes the height of the login banner.
-- @error-width: changes the width of the error image.
-- @error-height: changes the height of the error image.
-
Some assorted primary theme colours:
- Blue: #1890FF
@@ -273,8 +285,177 @@ Some assorted primary theme colours:
- Green: #52C41A
- Purple: #722ED1
-Advanced Customisation
-~~~~~~~~~~~~~~~~~~~~~~
+Contextual help documentation URLs can be customized with the help of
`docBase` and `docHelpMappings` properties.
+To override a particular documentation URL, a mapping can be added for the URL
path in the config. A documentation URL is formed by combining the `docBase`
URL base and a path set in the source code. Adding a mapping for any particular
path in the configuration will result in generating documetation URL with
overridden path.
+By default, `docHelpMappings` lists all existing documentation URL suffixes,
mapped to themselves, in the configuration file that are used in the code.
+
+.. parsed-literal::
+
+ {
+ ...
+ "docHelpMappings": {
+ "adminguide/accounts.html": "adminguide/accounts.html",
+ "adminguide/accounts.html#domains": "adminguide/accounts.html#domains",
+ "adminguide/accounts.html#roles": "adminguide/accounts.html#roles",
+ "adminguide/accounts.html#users": "adminguide/accounts.html#users",
+
"adminguide/accounts.html#using-an-ldap-server-for-user-authentication":
"adminguide/accounts.html#using-an-ldap-server-for-user-authentication",
+ "adminguide/events.html": "adminguide/events.html",
+ "adminguide/events.html#deleting-and-archiving-events-and-alerts":
"adminguide/events.html#deleting-and-archiving-events-and-alerts",
+
"adminguide/hosts.html#disabling-and-enabling-zones-pods-and-clusters":
"adminguide/hosts.html#disabling-and-enabling-zones-pods-and-clusters",
+ "adminguide/hosts.html#kvm-rolling-maintenance":
"adminguide/hosts.html#kvm-rolling-maintenance",
+ "adminguide/hosts.html#maintaining-hypervisors-on-hosts":
"adminguide/hosts.html#maintaining-hypervisors-on-hosts",
+ "adminguide/hosts.html#out-of-band-management":
"adminguide/hosts.html#out-of-band-management",
+ "adminguide/hosts.html#removing-hosts":
"adminguide/hosts.html#removing-hosts",
+ "adminguide/installguide/configuration.html#adding-a-cluster":
"adminguide/installguide/configuration.html#adding-a-cluster",
+ "adminguide/installguide/configuration.html#adding-a-host":
"adminguide/installguide/configuration.html#adding-a-host",
+
"adminguide/installguide/hosts.html#disabling-and-enabling-zones-pods-and-clusters":
"adminguide/installguide/hosts.html#disabling-and-enabling-zones-pods-and-clusters",
+ "adminguide/management.html#administrator-alerts":
"adminguide/management.html#administrator-alerts",
+ "adminguide/management.html#reporting-cpu-sockets":
"adminguide/management.html#reporting-cpu-sockets",
+ "adminguide/networking_and_traffic.html#acl-on-private-gateway":
"adminguide/networking_and_traffic.html#acl-on-private-gateway",
+
"adminguide/networking_and_traffic.html#adding-a-private-gateway-to-a-vpc":
"adminguide/networking_and_traffic.html#adding-a-private-gateway-to-a-vpc",
+ "adminguide/networking_and_traffic.html#adding-a-security-group":
"adminguide/networking_and_traffic.html#adding-a-security-group",
+
"adminguide/networking_and_traffic.html#adding-a-virtual-private-cloud":
"adminguide/networking_and_traffic.html#adding-a-virtual-private-cloud",
+
"adminguide/networking_and_traffic.html#advanced-zone-physical-network-configuration":
"adminguide/networking_and_traffic.html#advanced-zone-physical-network-configuration",
+
"adminguide/networking_and_traffic.html#basic-zone-physical-network-configuration":
"adminguide/networking_and_traffic.html#basic-zone-physical-network-configuration",
+
"adminguide/networking_and_traffic.html#configure-guest-traffic-in-an-advanced-zone":
"adminguide/networking_and_traffic.html#configure-guest-traffic-in-an-advanced-zone",
+
"adminguide/networking_and_traffic.html#configuring-a-virtual-private-cloud":
"adminguide/networking_and_traffic.html#configuring-a-virtual-private-cloud",
+
"adminguide/networking_and_traffic.html#configuring-network-access-control-list":
"adminguide/networking_and_traffic.html#configuring-network-access-control-list",
+ "adminguide/networking_and_traffic.html#creating-acl-lists":
"adminguide/networking_and_traffic.html#creating-acl-lists",
+
"adminguide/networking_and_traffic.html#creating-and-updating-a-vpn-customer-gateway":
"adminguide/networking_and_traffic.html#creating-and-updating-a-vpn-customer-gateway",
+ "adminguide/networking_and_traffic.html#creating-an-internal-lb-rule":
"adminguide/networking_and_traffic.html#creating-an-internal-lb-rule",
+ "adminguide/networking_and_traffic.html#creating-a-vpn-connection":
"adminguide/networking_and_traffic.html#creating-a-vpn-connection",
+
"adminguide/networking_and_traffic.html#creating-a-vpn-gateway-for-the-vpc":
"adminguide/networking_and_traffic.html#creating-a-vpn-gateway-for-the-vpc",
+
"adminguide/networking_and_traffic.html#enabling-or-disabling-static-nat":
"adminguide/networking_and_traffic.html#enabling-or-disabling-static-nat",
+ "adminguide/networking_and_traffic.html#load-balancing-across-tiers":
"adminguide/networking_and_traffic.html#load-balancing-across-tiers",
+
"adminguide/networking_and_traffic.html#releasing-an-ip-address-alloted-to-a-vpc":
"adminguide/networking_and_traffic.html#releasing-an-ip-address-alloted-to-a-vpc",
+
"adminguide/networking_and_traffic.html#reserving-public-ip-addresses-and-vlans-for-accounts":
"adminguide/networking_and_traffic.html#reserving-public-ip-addresses-and-vlans-for-accounts",
+
"adminguide/networking_and_traffic.html#restarting-and-removing-a-vpn-connection":
"adminguide/networking_and_traffic.html#restarting-and-removing-a-vpn-connection",
+ "adminguide/networking_and_traffic.html#security-groups":
"adminguide/networking_and_traffic.html#security-groups",
+
"adminguide/networking_and_traffic.html#setting-up-a-site-to-site-vpn-connection":
"adminguide/networking_and_traffic.html#setting-up-a-site-to-site-vpn-connection",
+
"adminguide/networking_and_traffic.html#updating-and-removing-a-vpn-customer-gateway":
"adminguide/networking_and_traffic.html#updating-and-removing-a-vpn-customer-gateway",
+ "adminguide/networking.html#creating-a-new-network-offering":
"adminguide/networking.html#creating-a-new-network-offering",
+ "adminguide/networking.html#network-offerings":
"adminguide/networking.html#network-offerings",
+ "adminguide/networking.html#network-service-providers":
"adminguide/networking.html#network-service-providers",
+ "adminguide/projects.html": "adminguide/projects.html",
+ "adminguide/projects.html#accepting-a-membership-invitation":
"adminguide/projects.html#accepting-a-membership-invitation",
+ "adminguide/projects.html#adding-project-members-from-the-ui":
"adminguide/projects.html#adding-project-members-from-the-ui",
+ "adminguide/projects.html#creating-a-new-project":
"adminguide/projects.html#creating-a-new-project",
+ "adminguide/projects.html#sending-project-membership-invitations":
"adminguide/projects.html#sending-project-membership-invitations",
+ "adminguide/projects.html#suspending-or-deleting-a-project":
"adminguide/projects.html#suspending-or-deleting-a-project",
+ "adminguide/reliability.html#ha-for-hosts":
"adminguide/reliability.html#ha-for-hosts",
+
"adminguide/service_offerings.html#compute-and-disk-service-offerings":
"adminguide/service_offerings.html#compute-and-disk-service-offerings",
+ "adminguide/service_offerings.html#creating-a-new-compute-offering":
"adminguide/service_offerings.html#creating-a-new-compute-offering",
+ "adminguide/service_offerings.html#creating-a-new-disk-offering":
"adminguide/service_offerings.html#creating-a-new-disk-offering",
+
"adminguide/service_offerings.html#creating-a-new-system-service-offering":
"adminguide/service_offerings.html#creating-a-new-system-service-offering",
+
"adminguide/service_offerings.html#modifying-or-deleting-a-service-offering":
"adminguide/service_offerings.html#modifying-or-deleting-a-service-offering",
+ "adminguide/service_offerings.html#system-service-offerings":
"adminguide/service_offerings.html#system-service-offerings",
+ "adminguide/storage.html#creating-a-new-volume":
"adminguide/storage.html#creating-a-new-volume",
+ "adminguide/storage.html#id2": "adminguide/storage.html#id2",
+ "adminguide/storage.html#primary-storage":
"adminguide/storage.html#primary-storage",
+ "adminguide/storage.html#resizing-volumes":
"adminguide/storage.html#resizing-volumes",
+ "adminguide/storage.html#secondary-storage":
"adminguide/storage.html#secondary-storage",
+
"adminguide/storage.html#uploading-an-existing-volume-to-a-virtual-machine":
"adminguide/storage.html#uploading-an-existing-volume-to-a-virtual-machine",
+ "adminguide/storage.html#working-with-volumes":
"adminguide/storage.html#working-with-volumes",
+ "adminguide/storage.html#working-with-volume-snapshots":
"adminguide/storage.html#working-with-volume-snapshots",
+ "adminguide/systemvm.html": "adminguide/systemvm.html",
+ "adminguide/systemvm.html#upgrading-virtual-routers":
"adminguide/systemvm.html#upgrading-virtual-routers",
+ "adminguide/systemvm.html#virtual-router":
"adminguide/systemvm.html#virtual-router",
+ "adminguide/templates.html": "adminguide/templates.html",
+ "adminguide/templates.html#attaching-an-iso-to-a-vm":
"adminguide/templates.html#attaching-an-iso-to-a-vm",
+ "adminguide/templates.html#exporting-templates":
"adminguide/templates.html#exporting-templates",
+ "adminguide/templates.html#id10": "adminguide/templates.html#id10",
+
"adminguide/templates.html#sharing-templates-with-other-accounts-projects":
"adminguide/templates.html#sharing-templates-with-other-accounts-projects",
+
"adminguide/templates.html#uploading-templates-and-isos-from-a-local-computer":
"adminguide/templates.html#uploading-templates-and-isos-from-a-local-computer",
+
"adminguide/templates.html#uploading-templates-from-a-remote-http-server":
"adminguide/templates.html#uploading-templates-from-a-remote-http-server",
+ "adminguide/templates.html#working-with-isos":
"adminguide/templates.html#working-with-isos",
+ "adminguide/virtual_machines.html": "adminguide/virtual_machines.html",
+ "adminguide/virtual_machines.html#affinity-groups":
"adminguide/virtual_machines.html#affinity-groups",
+ "adminguide/virtual_machines.html#backup-offerings":
"adminguide/virtual_machines.html#backup-offerings",
+
"adminguide/virtual_machines.html#change-affinity-group-for-an-existing-vm":
"adminguide/virtual_machines.html#change-affinity-group-for-an-existing-vm",
+ "adminguide/virtual_machines.html#changing-the-vm-name-os-or-group":
"adminguide/virtual_machines.html#changing-the-vm-name-os-or-group",
+ "adminguide/virtual_machines.html#creating-a-new-affinity-group":
"adminguide/virtual_machines.html#creating-a-new-affinity-group",
+ "adminguide/virtual_machines.html#creating-the-ssh-keypair":
"adminguide/virtual_machines.html#creating-the-ssh-keypair",
+ "adminguide/virtual_machines.html#creating-vm-backups":
"adminguide/virtual_machines.html#creating-vm-backups",
+ "adminguide/virtual_machines.html#creating-vms":
"adminguide/virtual_machines.html#creating-vms",
+ "adminguide/virtual_machines.html#delete-an-affinity-group":
"adminguide/virtual_machines.html#delete-an-affinity-group",
+ "adminguide/virtual_machines.html#deleting-vms":
"adminguide/virtual_machines.html#deleting-vms",
+
"adminguide/virtual_machines.html#how-to-dynamically-scale-cpu-and-ram":
"adminguide/virtual_machines.html#how-to-dynamically-scale-cpu-and-ram",
+ "adminguide/virtual_machines.html#importing-backup-offerings":
"adminguide/virtual_machines.html#importing-backup-offerings",
+
"adminguide/virtual_machines.html#moving-vms-between-hosts-manual-live-migration":
"adminguide/virtual_machines.html#moving-vms-between-hosts-manual-live-migration",
+ "adminguide/virtual_machines.html#resetting-ssh-keys":
"adminguide/virtual_machines.html#resetting-ssh-keys",
+ "adminguide/virtual_machines.html#restoring-vm-backups":
"adminguide/virtual_machines.html#restoring-vm-backups",
+ "adminguide/virtual_machines.html#stopping-and-starting-vms":
"adminguide/virtual_machines.html#stopping-and-starting-vms",
+ "adminguide/virtual_machines.html#using-ssh-keys-for-authentication":
"adminguide/virtual_machines.html#using-ssh-keys-for-authentication",
+ "adminguide/virtual_machines.html#virtual-machine-snapshots":
"adminguide/virtual_machines.html#virtual-machine-snapshots",
+ "installguide/configuration.html#adding-a-pod":
"installguide/configuration.html#adding-a-pod",
+ "installguide/configuration.html#adding-a-zone":
"installguide/configuration.html#adding-a-zone",
+ "installguide/configuration.html#add-primary-storage":
"installguide/configuration.html#add-primary-storage",
+ "installguide/configuration.html#add-secondary-storage":
"installguide/configuration.html#add-secondary-storage",
+ "plugins/cloudian-connector.html": "plugins/cloudian-connector.html",
+ "plugins/cloudstack-kubernetes-service.html":
"plugins/cloudstack-kubernetes-service.html",
+
"plugins/cloudstack-kubernetes-service.html#creating-a-new-kubernetes-cluster":
"plugins/cloudstack-kubernetes-service.html#creating-a-new-kubernetes-cluster",
+
"plugins/cloudstack-kubernetes-service.html#deleting-kubernetes-cluster":
"plugins/cloudstack-kubernetes-service.html#deleting-kubernetes-cluster",
+
"plugins/cloudstack-kubernetes-service.html#kubernetes-supported-versions":
"plugins/cloudstack-kubernetes-service.html#kubernetes-supported-versions",
+
"plugins/cloudstack-kubernetes-service.html#scaling-kubernetes-cluster":
"plugins/cloudstack-kubernetes-service.html#scaling-kubernetes-cluster",
+
"plugins/cloudstack-kubernetes-service.html#starting-a-stopped-kubernetes-cluster":
"plugins/cloudstack-kubernetes-service.html#starting-a-stopped-kubernetes-cluster",
+
"plugins/cloudstack-kubernetes-service.html#stopping-kubernetes-cluster":
"plugins/cloudstack-kubernetes-service.html#stopping-kubernetes-cluster",
+
"plugins/cloudstack-kubernetes-service.html#upgrading-kubernetes-cluster":
"plugins/cloudstack-kubernetes-service.html#upgrading-kubernetes-cluster",
+ "plugins/nuage-plugin.html?#optional-create-and-enable-vpc-offering":
"plugins/nuage-plugin.html?#optional-create-and-enable-vpc-offering",
+ "plugins/nuage-plugin.html?#vpc-offerings":
"plugins/nuage-plugin.html?#vpc-offerings",
+ "plugins/quota.html": "plugins/quota.html",
+ "plugins/quota.html#quota-credits": "plugins/quota.html#quota-credits",
+ "plugins/quota.html#quota-tariff": "plugins/quota.html#quota-tariff"
+ },
+ ...
+ }
+
+Below example shows configuration changes for custom documentation help URLs:
+
+By default, docBase is set to `http://docs.cloudstack.apache.org/en/latest`
and contextual help on Instances page links to
`http://docs.cloudstack.apache.org/en/latest/adminguide/virtual_machines.html`.
+To make Instances page link to
`http://mycustomwebsite.com/custom_vm_page.html`, docBase can be set to
`http://mycustomwebsite.com` and a docHelpMapping can be added for
`adminguide/virtual_machines.html` as `custom_vm_page.html`.
+
+.. parsed-literal::
+
+ {
+ ...
+ "docBase": http://mycustomwebsite.com,
+ ...
+ "docHelpMappings": {
+ "adminguide/virtual_machines.html": "custom_vm_page.html",
+ "adminguide/templates.html": "custom_templates_page.html"
+ },
+ ...
+ }
+
+UI also provides option to show custom plugins for displaying custom HTML
pages or HTTP services in an iframe. Such plugins can be listed in the config
file using `plugins` property.
+Example for adding custom plugins:
+
+.. parsed-literal::
+
+ {
+ ...
+ plugins: [
+ {
+ "name": "ExamplePlugin",
+ "icon": "appstore",
+ "path": "example.html"
+ },
+ {
+ "name": "ExamplePlugin1",
+ "icon": "appstore",
+ "path": "https://cloudstack.apache.org/"
+ }
+ ]
+ ...
+ }
+
+`icon` for the plugin can be chosen from Ant Design icons listed at `Icon -
Ant Design Vue https://www.antdv.com/components/icon/`_.
+For displaying a custom HTML in the plugin, HTML file can be stored in the
CloudStack management server's web application directory on the server, i.e.,
*/usr/share/cloudstack-management/webapp* and `path` can be set to the name of
the file. For displaying a service or a web page, URL can be set as the `path`
of the plugin.
+
+|ui-custom-plugin.png|
+
+Advanced UI Customisation
+~~~~~~~~~~~~~~~~~~~~~~~~~
The advanced UI customisation is possible only by changing JavaScript based
config
files which define rules for sections, names, icons, actions and components
and by
@@ -283,12 +464,20 @@ building the UI from the source available on
`github.com/apache/cloudstack
require some experience in JavaScript and VueJS, a development and
customisation
guide in the source repository.
+Useful documentations:
+
+- `VueJS Guide <https://vuejs.org/v2/guide/>`_
+- `Vue Ant Design <https://www.antdv.com/docs/vue/introduce/>`_
+- `UI Developer <https://github.com/apache/cloudstack/blob/master/ui/docs>`_
+- `JavaScript ES6 Reference <https://www.tutorialspoint.com/es6/>`_
+- `Introduction to ES6 <https://scrimba.com/g/gintrotoes6>`_
+
+
Known Limitations
~~~~~~~~~~~~~~~~~
-The following features are no longer supported or available:
+The following features are no longer supported or available in the UI but are
still supported at the API level and in the legacy UI:
-- Deployment of a basic zone is not supported. However, existing basic zones
will continue to be supported as well as all the actions and views of various
resources within the existing basic zone.
- Support for S3 based secondary storage.
- NFS secondary staging storage list/resource view and add/update actions.
- SSL certificate for Guest network LB rule.
@@ -296,3 +485,6 @@ The following features are no longer supported or available:
.. |change-password.png| image:: /_static/images/change-password.png
:alt: button to change a user's password
+
+.. |ui-custom-plugin.png| image:: /_static/images/ui-custom-plugin.png
+ :alt: Custom plugin shown in UI with navigation