New Theme Work Needs Better Documentation

A number of components of Horizon have been made theme-ready, but proper
documentation needs to follow to provide guidance of how to make use of
this new feature.

Change-Id: I8c95801eb0bfa6bd1692c794536e292c5478dd3d
Partially-Implements: blueprint horizon-theme-css-reorg
This commit is contained in:
Diana Whitten 2015-10-22 16:39:51 -07:00
parent 0d9feb2ee8
commit 0cf8d7ef94

View File

@ -21,6 +21,24 @@ Both the Dashboard custom variables and Bootstrap variables can be overridden.
For a full list of the Dashboard SCSS variables that can be changed, see the
variables file at ``openstack_dashboard/static/dashboard/scss/_variables.scss``.
In order to build a custom theme, both ``_variables.scss`` and ``_styles.scss``
are required and ``_variables.scss`` must provide all the default Bootstrap
variables.
Inherit from an Existing Theme
------------------------------
Custom themes must implement all of the Bootstrap variables required by
Horizon in ``_variables.scss`` and ``_styles.scss``. To make this easier, you
can inherit the variables needed in the default theme and only override those
that you need to customize. To inherit from the default theme, put this in your
theme's ``_variables.scss``::
@import "../themes/default/variables";
Once you have made your changes you must re-generate the static files with
``./run_tests.py -m collectstatic``.
Organizing Your Theme Directory
-------------------------------
@ -29,23 +47,23 @@ level of customization that is desired, as it can include static files
as well as Django templates. It can include special subdirectories that will
be used differently: ``static``, ``templates`` and ``img``.
The Static Folder
-----------------
The ``static`` Folder
~~~~~~~~~~~~~~~~~~~~~
If the theme folder contains a sub-folder called ``static``, then that sub
folder will be used as the **static root of the theme**. I.e., Horizon will
look in that sub-folder for the _variables.scss and _styles.scss files.
The contents of this folder will also be served up at ``/static/custom``.
The Templates Folder
--------------------
The ``templates`` Folder
~~~~~~~~~~~~~~~~~~~~~~~~
If the theme folder contains a sub-folder ``templates``, then the path
to that sub-folder will be prepended to the ``TEMPLATE_DIRS`` tuple to
allow for theme specific template customizations.
Using the Templates Folder
--------------------------
Using the ``templates`` Folder
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Any Django template that is used in Horizon can be overridden through a theme.
This allows highly customized user experiences to exist within the scope of
@ -57,8 +75,8 @@ to live at ``horizon/_sidebar.html``. You would need to duplicate that
directory structure under your templates directory, such that your override
would live at ``{CUSTOM_THEME_PATH}/templates/horizon/_sidebar.html``.
The Img Folder
--------------
The ``img`` Folder
~~~~~~~~~~~~~~~~~~
If the static root of the theme folder contains an ``img`` directory,
then all images contained within ``dashboard/img`` can be overridden by
@ -71,14 +89,14 @@ Customizing the Logo
--------------------
If you wish to customize the logo that is used on the splash screen or in the
top navigation bar, then you simply need to create an ``img`` directory under
your theme's static root directory and place your custom ``logo.png`` or
top navigation bar, then you need to create an ``img`` directory under your
theme's static root directory and place your custom ``logo.png`` or
``logo-splash.png`` within it.
If you wish to override the ``logo.png`` using the previous method, and if the
image used is larger than the height of the top navbar, then the image will be
image used is larger than the height of the top navigation, then the image will be
constrained to fit within the height of nav. You can customize the height of
the top navigation by customizing the SCSS variable: ``$navbar-height``.
the top navigation bar by customizing the SCSS variable: ``$navbar-height``.
If the image's height is smaller than the navbar height, then the image
will retain its original resolution and size, and simply be centered
vertically in the available space.
@ -87,6 +105,96 @@ Prior to the Kilo release the images files inside of Horizon needed to be
replaced by your images files or the Horizon stylesheets needed to be altered
to point to the location of your image.
Branding Horizon
================
As of the Liberty release, Horizon has begun to conform more strictly to
Bootstrap standards in an effort to embrace more responsive web design as well
as alleviate the future need to re-brand new functionality for every release.
Supported Components
--------------------
The following components, organized by release, are the only ones that make
full use of the Bootstrap theme architecture.
8.0.0 (Liberty)
~~~~~~~~~~~~~~~
* `Top Navbar`_
* `Side Nav`_
* `Pie Charts`_
Step 1
------
The first step needed to create a custom branded theme for Horizon is to create
a custom Bootstrap theme. There are several tools to aid in this. Some of the
more useful ones include:
- `Bootswatchr`_
- `Paintstrap`_
- `Bootstrap`_
.. note::
Bootstrap uses LESS by default, but we use SCSS. All of the above
tools will provide the ``variables.less`` file, which will need to be
converted to ``_variables.scss``
.. _Top Navbar:
The Top Navbar
--------------
The top navbar in Horizon now uses a native Bootstrap ``navbar``. There are a
number of variables that can be used to customize this element. Please see the
**Navbar** section of your variables file for specifics on what can be set: any
variables that use ``navbar-default``.
It is important to also note that the navbar now uses native Bootstrap
dropdowns, which are customizable with variables. Please see the **Dropdowns**
section of your variables file.
The top navbar is now responsive on smaller screens. When the window size hits
your ``$screen-sm`` value, the topbar will compress into a design that is
better suited for small screens.
.. _Side Nav:
The Side Nav
------------
The side navigation component has been refactored to use the native Stacked
Pills element from Bootstrap. See **Pills** section of your variables file
for specific variables to customize.
.. _Pie Charts:
Pie Charts
----------
Pie Charts, in Horizon, are SVG elements. SVG elements allow CSS
customizations for only a basic element's look and feel (i.e. colors, size).
Since there is no native element in Bootstrap specifically for pie charts,
the look and feel of the charts are inheriting from other elements of the
theme. Please see ``_pie_charts.scss`` for specifics.
Bootswatch and Material Design
------------------------------
`Bootswatch`_ is a collection of free themes for Bootstrap and is now
available for use in Horizon.
In order to showcase what can be done to enhance an existing Bootstrap theme,
Horizon now includes a secondary theme, roughly based on `Google's Material
Design`_ called ``material``. Bootswatch's **Paper** is a simple Bootstrap
implementation of Material Design and is used by ``material``.
Bootswatch provides a number of other themes, that once Horizon is fully theme
compliant, will allow easy toggling and customizations for darker or
accessibility driven experiences.
Changing the Site Title
=======================
@ -243,12 +351,11 @@ similar way, add the new column definition and then use the ``Meta``
WSGIDaemonProcess [... existing options ...] python-path=/opt/python
Button Icons
============
Icons
=====
Horizon uses font icons (glyphicons) from Twitter Bootstrap to add icons to buttons.
Please see http://bootstrapdocs.com/v3.1.1/docs/components/#glyphicons for instructions
how to use icons in the code.
Horizon uses font icons from Font Awesome. Please see `Font Awesome`_ for
instructions on how to use icons in the code.
To add icon to Table Action, use icon property. Example:
@ -353,3 +460,10 @@ Customizing Meta Attributes
To add custom metadata attributes to your project's base template, include
them in the ``horizon/_custom_meta.html`` file. The contents of this file will be
inserted into the page's <head> just after the default Horizon meta tags.
.. _Bootswatch: http://bootswatch.com
.. _Bootswatchr: http://bootswatchr.com/create#!
.. _Paintstrap: http://paintstrap.com
.. _Bootstrap: http://getbootstrap.com/customize/
.. _Google's Material Design: https://www.google.com/design/spec/material-design/introduction.html
.. _Font Awesome: https://fortawesome.github.io/Font-Awesome/