You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
An agent represing a navigation tree. The agent holds transformed configuration
state.
Provides convenience wrappers to generate Twitter/bootstrap-freindly
userrole-aware HTML out of this state through NavigationTree.Helper and
NavigationTree.Bootstrap.
Navigation tree nodes are to be configured as NavigationTree.Node structs.
Terminology
node: A configuration struct looking like this:
%NavigationTree.Node{
name: string, # the node's name, like "About Us"
url: nil or string, # will be set on startup, but may be overridden
controller: nil or string, # would be set to about-us, but may be overridden
children:, nil or list of child nodes
roles: nil or list of strings # role names a user must have to see this navigation item
}
path: A list of node names, e.g. ["Home", "Admin"]
url: Every node gets a url on start_link setup constructed out of its ancestors' url
concatenated with "/" whereas is either a safe_string version of
the node's name or the specified controller namde in this node's config
Basic usage
create a config module or just use NavigationTree.Example
Startup Agent possibly in your application setup
create you HTML generator or use the shipped NavigationTree.Bootstrap module
enjoy!
# startup
NavigationTree.Agent.start_link NavigationTree.Example.config
# getters
NavigationTree.Agent.get.tree
NavigationTree.Agent.get.paths
NavigationTree.Agent.get.root_node (initoal config)
# methods
NavigationTree.Agent.node_of ["Home","Admin"]
# same as
NavigationTree.Agent.node_of "/admin"
# the inverse of node_of is path_of
NavigationTree.Agent.path_of "/admin" # returns ["Home","Admin"]
# parent node
NavigationTree.Agent.parent of ["Home","Admin", "Users"]
# returns next/previous node after "Users" in "Amind"
NavigationTree.Agent.next_sibling ["Home","Admin", "Users"]
NavigationTree.Agent.previous_sibling ["Home","Admin", "Users"]
# HTML
NavigationTree.Agent.as_html [], :bootstrap
# returns HTML for unauthenticated user
NavigationTree.Agent.as_html ["admin", "customer"], :bootstrap
# returns HTML for user with admin and customer role
# or your tree_to_html implementation:
MyApp.NavigationTree.Sidenav.tree_to_html NavigationTree.Agent.get.tree