Skip to content

Commit

Permalink
added responsive layout
Browse files Browse the repository at this point in the history
  • Loading branch information
julescopeland committed Mar 20, 2012
1 parent c312758 commit fb52c91
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 26 deletions.
2 changes: 1 addition & 1 deletion lib/rails_bootstrap_navbar/version.rb
@@ -1,3 +1,3 @@
module RailsBootstrapNavbar
VERSION = "0.0.3.alpha"
VERSION = "0.0.4.alpha"
end
74 changes: 49 additions & 25 deletions lib/rails_bootstrap_navbar/view_helpers.rb
Expand Up @@ -3,52 +3,76 @@
module RailsBootstrapNavbar
module ViewHelpers

def nav_bar(*args)
nav_bar_div(args) do
navbar_inner_div(args) do
container_div(args)
def nav_bar(*args, &block)
options = args.flatten.extract_options!

nav_bar_div(options[:fixed]) do
navbar_inner_div do
container_div(options[:brand], options[:responsive]) do
yield if block_given?
end
end
end
end

private

def nav_bar_div(*args, &block)
content_tag :div, :class => nav_bar_css_class(args) do
def nav_bar_div(fixed, &block)
content_tag :div, :class => nav_bar_css_class(fixed) do
yield
end
end

def navbar_inner_div(*args, &block)
def navbar_inner_div(&block)
content_tag :div, :class => "navbar-inner" do
yield
end
end

def container_div(*args, &block)
options = args.flatten.extract_options!

if options[:brand].present?
brand_link = link_to(options[:brand], "/", :class => "brand")
def container_div(brand, responsive, &block)
content_tag :div, :class => "container" do
container_div_with_block(brand, responsive) {yield}
end
end

content_tag :div, :class => "container" do
if block_given?
brand_link + yield
else
brand_link
end
def container_div_with_block(brand, responsive, &block)
output = []
if responsive
output << responsive_button
output << responsive_div(brand) {yield}
else
output << brand_link(brand)
output << yield
end
output.join("\n").html_safe
end

def nav_bar_css_class(*args)
options = args.flatten.extract_options!
fixed_pos = options[:fixed]
def nav_bar_css_class(fixed_pos)
css_class = ["navbar"]
if fixed_pos.present?
css_class << "navbar-fixed-#{fixed_pos.to_s}"
end
css_class << "navbar-fixed-#{fixed_pos.to_s}" if fixed_pos.present?
css_class.join(" ")
end

def brand_link(name)
return "" if name.blank?
link_to(name, "/", :class => "brand")
end

def responsive_button
%{<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>}
end

def responsive_div(brand, &block)
output = []
output << brand_link(brand)
output << yield
content_tag(:div, :class => "nav-collapse") do
output.join("\n").html_safe
end
end
end
end
end
43 changes: 43 additions & 0 deletions spec/lib/rails_bootstrap_navbar/view_helpers_spec.rb
Expand Up @@ -24,6 +24,16 @@
it "should add the brand name and link it to the home page" do
nav_bar(:brand => "Ninety Ten").gsub(/\s/,'').downcase.should eql(NAVBAR_WITH_BRAND.gsub(/\s/,'').downcase)
end

it "should add the buttons etc for a responsive layout with no block passed" do
nav_bar(:responsive => true).gsub(/\s/,'').downcase.should eql(RESPONSIVE_NAVBAR.gsub(/\s/,'').downcase)
end

it "should add the buttons etc for a responsive layout with block passed" do
nav_bar(:responsive => true) do
"<p>Passing a block</p>"
end.gsub(/\s/,'').downcase.should eql(RESPONSIVE_NAVBAR_WITH_BLOCK.gsub(/\s/,'').downcase)
end
end
end

Expand Down Expand Up @@ -66,4 +76,37 @@
</div>
</div>
</div>
HTML

RESPONSIVE_NAVBAR = <<-HTML
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<div class="nav-collapse">
</div>
</div>
</div>
</div>
HTML

RESPONSIVE_NAVBAR_WITH_BLOCK = <<-HTML
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<div class="nav-collapse">
<p>Passing a block</p>
</div>
</div>
</div>
</div>
HTML

0 comments on commit fb52c91

Please sign in to comment.