[![Build Status](https://travis-ci.org/patternfly/patternfly.svg?branch=master)](https://travis-ci.org/patternfly/patternfly) [![Dependency Status](https://gemnasium.com/badges/github.com/patternfly/patternfly.svg)](https://gemnasium.com/github.com/patternfly/patternfly) [![Code Climate](https://codeclimate.com/github/patternfly/patternfly/badges/gpa.svg)](https://codeclimate.com/github/patternfly/patternfly) [![NSP Status](https://nodesecurity.io/orgs/patternfly/projects/d8289b24-4ec5-4f7c-86c1-02aa2e6cf73d/badge)](https://nodesecurity.io/orgs/patternfly/projects/d8289b24-4ec5-4f7c-86c1-02aa2e6cf73d) [![npm version](https://badge.fury.io/js/patternfly.svg)](https://badge.fury.io/js/patternfly) [![Gitter](https://badges.gitter.im/patternfly/patternfly.svg)](https://gitter.im/patternfly/patternfly?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) # [PatternFly](https://www.patternfly.org) reference implementation This reference implementation of PatternFly is based on [Bootstrap v3](http://getbootstrap.com/). Think of PatternFly as a "skinned" version of Bootstrap with additional components and customizations. For information on how to quickly get started using PatternFly, see the [Quick Start Guide](QUICKSTART.md). Looking for RCUE (Red Hat Common User Experience) information? See the [RCUE Quick Start Guide](RCUE-QUICKSTART.md). If you wish to contribute to PatternFly, please follow the instructions under "Contributing to PatternFly". # Installation ### Install with NPM PatternFly can be installed and managed through [NPM](https://www.npmjs.com/). To do so, either add `patternfly` as a dependency in your `package.json` or run the following: ```sh npm install patternfly --save ``` PatternFly stays up to date with the Node LTS [Release Schedule](https://github.com/nodejs/LTS#lts_schedule). If you're using PatternFly downstream, we suggest the use of an actively supported version of Node/NPM, although prior versions of Node may work. ### Install with Bower PatternFly can be installed and managed through [Bower](http://bower.io/). To do so, either add `patternfly` as a dependency in your `bower.json` or run the following: ```sh bower install patternfly --save ``` #### Using Wiredep? Are you using [Wiredep](https://github.com/taptapship/wiredep)? PatternFly's CSS includes the CSS of its dependencies. As a result, you'll want to add the following to your [Wiredep configuration](https://github.com/taptapship/wiredep#configuration) so you don't end up with duplicate CSS. ```javascript exclude: [ "node_modules/patternfly/node_modules/patternfly-bootstrap-combobox/css/bootstrap-combobox.css", "node_modules/patternfly/node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker.css", "node_modules/patternfly/node_modules/bootstrap-datepicker/dist/css/bootstrap-datepicker3.css", "node_modules/patternfly/node_modules/bootstrap-select/dist/css/bootstrap-select.css", "node_modules/patternfly/node_modules/bootstrap-switch/dist/css/bootstrap3/bootstrap-switch.css", "node_modules/patternfly/node_modules/patternfly-bootstrap-treeview/dist/bootstrap-treeview.min.css", "node_modules/patternfly/node_modules/c3/c3.css", "node_modules/patternfly/node_modules/datatables/media/css/jquery.dataTables.css", "node_modules/patternfly/node_modules/datatables.net-colreorder-bs/css/colReorder.bootstrap.css", "node_modules/patternfly/node_modules/drmonty-datatables-colvis/css/dataTables.colVis.css", "node_modules/patternfly/node_modules/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css", "node_modules/patternfly/node_modules/font-awesome/css/font-awesome.css", "node_modules/patternfly/node_modules/google-code-prettify/bin/prettify.min.css" ], ``` ### Sass and/or Rails **Patternfly now supports Sass natively!** Sass is included in the `dist/sass` directory. Just add `node_modules` to your build tool's Sass include paths then `@import 'patternfly/dist/sass/patternfly';` in your Sass to get started! #### Using Webpack? There are two touch points for integrating patternfly sass: one in your webpack config, and another in your sass. Below is an example module rule for loading patternfly .scss files using webpack. ```javascript module: { rules: [ { test: /\.scss$/, use: [ { loader: 'sass-loader', options: { includePaths: [ // teach webpack to resolve these references path.resolve(__dirname, 'node_modules', 'patternfly', 'dist', 'sass'), path.resolve(__dirname, 'node_modules', 'bootstrap-sass', 'assets', 'stylesheets'), path.resolve(__dirname, 'node_modules', 'font-awesome-sass', 'assets', 'stylesheets') ] } } ] } ] } ``` With webpack configured, just set the asset-path related variables and you're off! ```scss $img-path: '~patternfly/dist/img/'; $font-path: '~patternfly/dist/fonts/'; $icon-font-path: '~patternfly/dist/fonts/'; @import '~patternfly/dist/sass/patternfly'; ``` Please note that the [patternfly-sass](https://github.com/patternfly/patternfly-sass) is no longer supported and will not include any features or fixes introduced after Patternfly 3.23.2. However, the [patternfly-sass](https://rubygems.org/gems/patternfly-sass) Rubygem is maintained further and built from this repository. ### AngularJS A set of [common AngularJS directives](https://github.com/patternfly/angular-patternfly) for use with PatternFly is available. # Contributing to PatternFly The following sections provide information on how to get started as a developer or designer in the PatternFly codebase. In order to set up your environment, two different types of dependencies will need to be set up. Please follow the instructions under "Development - Build Dependencies" (Node.js/Ruby) and "Development - Code Dependencies" below. If you wish to use PatternFly in your project, please follow the [Quick Start Guide](QUICKSTART.md) instead. ## Development - Build Dependencies Development setup requires Node.js and Ruby. If you do not already have Node.js, npm, and Ruby installed on your system, see https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager and https://www.ruby-lang.org/en/downloads. ## Development - Code Dependencies The PatternFly code includes a number of dependencies that are not committed to this repository. To add them, follow the instructions below under "Install NPM Dependencies". Please make sure you keep them updated (see [Keeping NPM Dependencies Updated](#keeping-npm-dependencies-updated)). ## Development - Updating Dependencies The npm-check-updates tool is available and configured to apply dependency updates to the project by running the command `npm run ncu`. The package.json changes will have to be committed and a PR created. ## Autoprefixer Patternfly uses [Autoprefixer](https://github.com/postcss/autoprefixer) to auto add prefixes to its output CSS. Since Patternfly extends some of the core Bootstrap3 less which contains prefixes, we also explicitly add prefixes in these cases to ensure backwards compatibility with Bootstrap3. If consuming Patternfly LESS and compiling, you can define your own target prefixes using [browserlist](https://github.com/ai/browserslist). ### Install NPM Dependencies The development includes the use of a number of helpful tasks. In order to setup your development environment to allow running of these tasks, you need to install the local nodejs packages declared in `package.json`. To do this clone, and change directories into PatternFly: ```sh cd [PathToYourRepository] ``` then ```sh npm install ``` This should take care of the majority of dependencies. Since PatternFly is shrink wrapped, npm 3 will install all necessary development packages into `node_modules/patternfly/node_modules`. At this point, the gruntjs tasks are available for use such as starting a local development server or building the master CSS file. If you prefer a flat dependency structure, you can define your own dependencies explicitly. That will flatten out the node_modules structure and place dependencies in the root node_modules directory. Additionally you may need to install the grunt command line utility. To do this run: npm install -g grunt-cli Test pages are optionally generated using [Jekyll](http://jekyllrb.com/). To use jekyll to build the test pages, ensure Ruby is installed and available then run: ```sh npm run jekyll ``` or ```sh gem install bundle bundle install ``` During the install you may be asked for your password as part of the [Ruby](https://www.ruby-lang.org/en/documentation/installation/) installation process. Next, set the environment variable PF_PAGE_BUILDER=jekyll. eg.: PF_PAGE_BUILDER=jekyll grunt build #### Keeping NPM Dependencies Updated Anytime you pull a new version of PatternFly, make sure you also run ```sh npm update ``` so you get the latest version of the dependencies specified in package.json. ### Live Reload Server A local development server can be quickly fired up by using the Gruntjs serve task: ```sh npm start ``` or ```sh grunt serve # will build first by default grunt serve --skipRebuild # flag would allow you to skip the rebuild to save some time ``` This local static asset server (i.e., [http://localhost:9000](http://localhost:9000)) has the advantage of having livereload integration. Thus, if you start the Gruntjs server, any changes you make to `.html` or `.less` files will be automatically reloaded into your browser and the changes reflected almost immediately. This has the obvious benefit of not having to refresh your browser and still be able to see the changes as you add or remove them from your development files. Additionally, any changes made to Jekyll source files (`tests/pages/`) will trigger a Jekyll build. ### Coding Style See [http://codeguide.patternfly.org/](http://codeguide.patternfly.org/). ### Commiting changes PatternFly uses the [semantic-release tool](https://github.com/semantic-release/semantic-release) to provide a continuous release mechanism for PatternFly. In order for this tool to correctly increment the project version, and include your changes in the generated release notes, you will have to format your commit messages according to a well-defined commit message format. We have configured the [commitizen tool](https://github.com/commitizen/cz-cli) to assist you in formatting your commit messages corrctly. To use this tool run the following command instead of `git commit`: ```sh npm run commit ``` #### Git Commit Guidelines Alternatively, if you are familiar with the commititzen message format you can format the message manually. A summary of the commit message format is as follows: Each commit message consists of a **header**, a **body** and a **footer**. The header has a special format that includes a **type**, a **scope** and a **subject** ([full explanation](https://github.com/stevemao/conventional-changelog-angular/blob/master/convention.md)): ``` ():