Created
July 25, 2012 17:21
-
-
Save sunny/3177367 to your computer and use it in GitHub Desktop.
li_nav : Utilitaire pour faire des liens dans des <li> qui appliquent des classe "current" automatiquement
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# encoding: UTF-8 | |
module ApplicationHelper | |
# Utilitaire pour faire un lien dans un li qui applique des classe "current" | |
# automatiquement. | |
# | |
# Arguments : | |
# - nom : nom du lien | |
# - url : chemin vers la page | |
# - options : options html à passer au li | |
# - block : html supplémentaire à insérer après le lien | |
# | |
# Se sert également de la variable `@nav_parents`. | |
# | |
# Exemple: | |
# <ul> | |
# <%= li_nav "Accueil", root_url, :id => "accueil" %> | |
# <%= li_nav "Catégories", categories_url do %> | |
# <ul> | |
# <%= li_nav "Enfants", enfants_url %> | |
# </ul> | |
# <% end %> | |
# </ul> | |
# | |
# Dans cet exemple si on se trouve sur la page "Enfants", on aura l'html suivant : | |
# <ul> | |
# <li><a href="/" id="accueil">Accueil</a></li> | |
# <li class="has-current"><a href="/categories">Catégories</a> | |
# <ul> | |
# <li class="current"><a href="/enfants">Enfants</a></li> | |
# </ul> | |
# </li> | |
# </ul> | |
def li_nav(nom, url, options = {}, &block) | |
url = url_for(url) | |
# Récupère le contenu du block donné | |
content = block ? capture(&block) : "" | |
# Ajoute classes au <li> : | |
# - "current" si la page est la page actuelle. | |
# - "has-current" si dans le bloc donné on trouve class="current" | |
# - "has-current" si @nav_parents contient la page actuelle | |
classes = Array(options[:class]) | |
classes << "current" if request.path == url | |
classes << "has-current" if content =~ / class=".*current"/ or \ | |
Array(@nav_parents).include?(url) | |
classes = classes.flatten.compact.join(' ').strip | |
options[:class] = classes unless classes.empty? | |
# Retourne html | |
content_tag(:li, options) do | |
link_to(nom, url) + content | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment