Cheatsheet.cheatmd

# Cheatsheet Example

Cheatsheets are Markdown files with the `.cheatmd` extension which support a limited range of elements and formatting. Refer to the source of this document to see the relevant Markdown.

## H2 title
{: .col-2}

### H3 title

#### H4 title

A paragraph.

### Code

```elixir
# hello.exs
defmodule Greeter do
  def greet(name) do
    message = "Hello, " <> name <> "!"
    IO.puts message
  end
end

Greeter.greet("world")
```

### Paragraphs

Paragraphs are also supported and can quote `code`.

Paragraphs are visually distinct from one another.

### Lists

- Element 1
- Element 2
- `piece of code`

### Table

#### Date (H4 header)

| Example         | Output                 |
| ---             | ---                    |
| `%m/%d/%Y`      | `06/05/2013`           |
| `%A, %B %e, %Y` | `Sunday, June 5, 2013` |
| `%b %e %a`      | `Jun 5 Sun`            |

## Variants
{: .col-2}

### Adding variants

```
## H2
{: .col-2}

### H3
{: .list-6}

* example 1
* example 2
```

Variants change presentation via Markdown's inline attribute notation.

### Header variants

#### H2

| `.col-2` | two-columns |
| `.col-3` | three-columns |
| `.col-2-left` | two-columns (1/3 - 2/3) |

#### H3

| `.list-4` | four-columns for lists |
| `.list-6` | six-columns for lists |

## Code
{: .col-3}

### Code with headings

#### index.ex

```
Path.join(["~", "foo"])
"~/foo"
```

#### other.ex

```
Path.join(["foo"])
"foo"
```

Code blocks can have headings.

### Long lines

```elixir
defmodule MyTracer do
  def trace({:remote_function, _meta, module, name, arity}, env) do
    IO.puts "#{env.file}:#{env.line} #{inspect(module)}.#{name}/#{arity}"
    :ok
  end

  def trace(_event, _env) do
    :ok
  end
end
```

Long lines show scrollbars.

### Line wrapping

```elixir
defmodule MyTracer do
  def trace({:remote_function, _meta, module, name, arity}, env) do
    IO.puts "#{env.file}:#{env.line} #{inspect(module)}.#{name}/#{arity}"
    :ok
  end

  def trace(_event, _env) do
    :ok
  end
end
```
{: .wrap}

Add `wrap` to wrap long lines.

## Lists
{: .col-2}

### Bullet lists

- This is
- a list
- with a few items

### Ordered lists

1. First
2. Second
3. Third

An extra paragraph after the list.

### With headings and code links

#### Part 1

- `is_atom/1`
- `is_binary/1`
- `is_number/1`

#### Part 2

- `length/1`
- `elem/2`

## List columns

### Six columns
{: .list-6}

- One
- Two
- Three
- Four
- Five
- Six
- Seven
- Eight
- Nine
- Ten
- Eleven

Add `{: .list-6}` after the H3 title to make large lists.

### Four columns
{: .list-4}

- One
- Two
- Three
- Four
- Five
- Six
- Seven
- Eight
- Nine
- Ten
- Eleven

Add `{: .list-4}` after the H3 title to make large lists.

## Full page

The default.

## Half width
{: .width-50}

### Avoid overly long lines

#### Time

| Example         | Output                 |
| ---             | ---                    |
| `%H:%M`         | `23:05`                |
| `%I:%M %p`      | `11:05 PM`             |

Add `{: .width-50}` after the H2 title to use only half width.

## Column left example
{: .col-2-left}

### One

```elixir
# hello.exs
defmodule Greeter do
  def greet(name) do
    message = "Hello, " <> name <> "!"
    IO.puts message
  end
end

Greeter.greet("world")
```

### Two

```elixir
user = %{
  name: "John",
  city: "Melbourne"
}
```

```elixir
IO.puts "Hello, " <> user.name
```

### Three

* Yet
* Another
* List

### Four

A grid, with 1/3 - 2/3 widths.