OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
openproject/frontend/doc/STYLING.md

3.9 KiB

Styling the frontend

Frontend styling is coupled to the Living Styleguide. The guide implements the same CSS that the application does. It takes the very same Sass files used in the Asset pipeline to build a second css file that is then used for diplaying the guide.

All styles for OpenProject are found in ./app/assets/stylesheets. The frontend folder contains no styling, besides rendered files and some styling for the styleguide itself.

Building

The guide is built via the the gulp stack.

The task involved is gulp styleguide, which is also part of gulp watch and can therefore be executed during gulp dev.

gulp dev will also start a static server delivering the assets for the styleguide (in contrast to gulp styleguide). As long as gulp dev runs, the styleguide will be available here:

http://localhost:8080/assets/css/styleguide.html

The static server will serve the whole ./frontend/public folder, however, styleguide.html is the index for the styleguide.

A note on the legacy styleguide

In the past, the Styleguide was built using the Rails stack - this was later changed to the gulp pipeline. The original version, at the time of writing, is still in the sources - it can be found here: ./app/assets/stylesheets/styleguide.html.lsg.

This does no longer work, as the main rails stack had the dependency removed, there is no need to update both dependencies.

Using the styleguide

The styleguide itself is just a long html page demonstrating the components. It can be modified by altering its base file styleguide.jade (see ./frontend/app/assets/styleguide.jade).

The general approach here is that for every partial of sass there is a Markdown file (*.lsg) describing it:

$ cd app/assets/stylesheets/content
$ ls -la _accounts*
_accounts.lsg
_accounts.sass

The lsg is simple markdown containing information on how to use the component described.

Ideally, this should be only one component per Sass partial, but this is not always possible, as seen in the case of ./app/assets/stylesheets/content/_work_packages.sass which describes an area of the application instead of a single component.

Getting JavaScript to work with the Styleguide

In an ideal world, the styleguide would convey only styling-related information. Unfortunately, for practical purposes such as styling ui.select which requires some JavaScript to be active, the styleguide introduces some custom JavaScript:

//from styleguide.jade
script(src='/assets/bundles/openproject-global.js')
script.
  angular.module('openproject-style-guide', ['ui.select', 'ngSanitize'])

The styleguide defines and initializes its own angular.module, which can be injected with various dependencies. The ng-app is present for all of the styleguide (attached to body).

Note on magic: The static server can actually serve /assets/bundles/openproject-global.js because of a line in ./frontend/server.js:

app.use('/assets', express.static(railsRoot + '/app/assets/javascripts'));
app.use('/assets', express.static(railsRoot + '/app/assets/images'));

This enables asset serving from the respective Rails directories.

If you want to add more JavaScript to it, you can directly include it in the styleguide.jade, but it is ill-advised. The styleguide should be used for the styling of the rendered output and not necessarily display functionality, mostly to avoid duplication of code (use a test to demonstrate functionality!).

A note on the css style used

Originally introduced by @myabc, Sass-Code should ideally follow a convention as described in Simple naming for CSS class names.

So far, mostly Sass partials have been used, grouped by their component. There is still a lot of legacy code in there, especially in the plugins. The legacy code for the core can be found within ./app/assets/stylesheets/_misc_legacy.sass