# TreeHtml
Generate plain css tree structure.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'tree_html'
```
And then execute:
$ bundle
Or install it yourself as:
$ gem install tree_html
## Usage
In Node class, `include TreeHtml`.
Then implement `label_for_tree_html` and `children_for_tree_html` for Branch class, and `label_for_tree_html` for Leaf class.
Finally, call `tree_html` on node object to get ul/li fragment, or `tree_html_full` to get a html file with pre-defined style.
By Default, any object can be leaf, and renders as `to_s`.
You may overwrite `data_for_tree_html`, `head_js_for_tree_html`, `body_js_for_tree_html`, `css_for_tree_html` to specify your own style.
In generated html, hover a branch and press `f`/`u` to fold/unfold it's children, press `p`/`n` to jump to it's previous/next sibling branch. You may change these function keys in `body_js_for_tree_html`.
Or checkout [test/tree_html_test.rb](https://github.com/turnon/tree_html/blob/master/test/tree_html_test.rb) to see how to use.
## Extending
You may register more handlers for responsing key press. For example, to do something when hovering on any `li` and pressing `r`
```javascript
TreeHtml.hover_press('r', function(li){
// actions
})
```
You may also group `li`s with same key under additional `ul`:
```javascript
var switch = TreeHtmlGroup({
name: 'by_whatever_key',
key: function get_path(li) {
var p = li.querySelector('a').innerText.replace(/* key calculation here */)
return '' + p + ''
}
})
switch('by_whatever_key')
switch('') // switch back
```