# font_awesomex
[](https://travis-ci.org/tlux/font_awesomex)
A library to render [Font Awesome](http://fontawesome.io/) markup.
Integrates seamlessly with your [Phoenix](http://phoenixframework.org)
application.
:warning: **This repository does not contain any Font Awesome assets.** :warning:
## Prerequisites
* Elixir (>= 1.3)
* Font Awesome 4 (use your favorite package manager like [NPM](https://www.npmjs.com/package/font-awesome))
## Installation
Add `font_awesomex` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[{:font_awesomex, "~> 4.0.0"}]
end
```
## Usage
### Plain Ol' Elixir
```elixir
iex> icon = FontAwesome.icon(:stop_circle, outline: true, size: 3)
%FontAwesome{name: "stop-circle", outline: true, size: 3, ...}
iex> to_string(icon)
"<i class=\"fa fa-stop-circle-o fa-size-3x\"></i>"
```
Following options are available:
| Name | Description | Values | CSS Classes |
| -------------- | --------------------------------------------------|----------------------------|-----------------------|
| `:outline` | Renders the outline variant (only some icons) | `true`, `false` | name suffixed with `-o` |
| `:direction` | Defines the direction (only some icons) | `:left`, `:right`, `:up`, `:down` | name suffixed with `-left`, `-right`, ...
| `:fixed_width` | Fixes the icon width (may be configured globally) | `true`, `false` | `fa-fw` |
| `:size` | Scales the icon | `:lg`, `2`, `3`, `4` | `fa-lg`, `fa-2x` |
| `:rotate` | Rotates the icon | `0`, `90`, `180`, `270` | `fa-rotate-90` |
| `:flip` | Flips the icon horizontally or vertically | `:horizontal`, `:vertical` | `fa-flip-vertical` |
| `:animate` | Adds an animation to the icon | `:spin`, `:pulse` | `fa-spin`, `fa-pulse` |
| `:list` | Treats the icon as list bullet | `true`, `false` | `fa-li` |
| `:border` | Adds a border to the icon | `true`, `false` | `fa-border` |
| `:pull` | Aligns the icon `:left` or `:right` | `true`, `false` | `fa-pull-left` |
| `:stacked` | Indicates whether the icon is used in a stack | `true`, `false` | `fa-stack` |
### Phoenix Framework
To integrate the icon helpers with Phoenix views and templates you simply need
to use it on top of your file:
```elixir
defmodule MyApp.PageView do
use MyApp.Web, :view
use FontAwesome
def hello_world do
content_tag :div do
[
icon(:smile, outline: true, animate: :spin, size: 3),
"Hello World"
]
end
end
end
```
If you want to add the helper to all views and templates, you can use or import
it in the view/0 function of your web/web.ex file:
```elixir
defmodule MyProject.Web do
def view do
quote do
# Provides the icon/1 and icon/2 functions to all views and templates
use FontAwesome
end
end
end
```
There may be cases when the default name (icon) conflicts with your existing
implementation. In these cases you can define a name when using the module:
```elixir
defmodule MyApp.PageView do
use MyApp.Web, :view
use FontAwesome, as: :fa_icon
def scroll_down do
[
fa_icon(:arrow, direction: :down),
"Scroll Down"
]
end
end
```
### Global Configuration
Alternatively, the helper name may be defined globally right from the start.
So everytime you use FontAwesome, it generates a helper with the name you
defined. Add this line to your config/config.exs:
```elixir
config :font_awesome, helper_name: :fa_icon
```
To make all icons have a fixed width by default, add the following line.
```elixir
config :font_awesome, fixed_width: true
```
The value can still be overridden per-icon.
## What's missing
* Support for icon stacking
## Contribution
* Check out the latest master to make sure the feature hasn't been implemented
or the bug hasn't been fixed yet.
* Check out the issue tracker to make sure someone already hasn't requested it
and/or contributed it.
* Fork the project.
* Start a feature/bugfix branch.
* Commit and push until you are happy with your contribution. Make sure to add
tests for it. This is important so I don't break it in a future version
unintentionally.