twitter-bootstrap-markup-rails 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -0
- data/README.md +49 -7
- data/lib/twitter-bootstrap-markup-rails.rb +2 -0
- data/lib/twitter-bootstrap-markup-rails/components.rb +4 -0
- data/lib/twitter-bootstrap-markup-rails/components/button.rb +66 -0
- data/lib/twitter-bootstrap-markup-rails/components/button_dropdown.rb +44 -0
- data/lib/twitter-bootstrap-markup-rails/components/form.rb +14 -0
- data/lib/twitter-bootstrap-markup-rails/components/form/input_field.rb +53 -0
- data/lib/twitter-bootstrap-markup-rails/components/form/label.rb +8 -0
- data/lib/twitter-bootstrap-markup-rails/components/form_builder.rb +13 -0
- data/lib/twitter-bootstrap-markup-rails/engine.rb +2 -0
- data/lib/twitter-bootstrap-markup-rails/helper_collection.rb +56 -0
- data/lib/twitter-bootstrap-markup-rails/helpers.rb +2 -0
- data/lib/twitter-bootstrap-markup-rails/helpers/button_helpers.rb +57 -0
- data/lib/twitter-bootstrap-markup-rails/helpers/form_helpers.rb +11 -0
- data/lib/twitter-bootstrap-markup-rails/plugins/simple_navigation/renderer/bootstrap_topbar_list.rb +2 -0
- data/lib/twitter-bootstrap-markup-rails/version.rb +1 -1
- data/spec/helpers/button_helpers_spec.rb +79 -0
- data/spec/helpers/form_helpers_spec.rb +126 -0
- data/spec/integration/action_view_spec.rb +4 -0
- data/spec/integration/readme_spec.rb +14 -0
- data/spec/support/bootstrap_button_macros.rb +8 -0
- data/spec/support/bootstrap_form_macros.rb +8 -0
- metadata +92 -23
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,21 +1,39 @@
|
|
1
|
-
Twitter Bootstrap 2.0 Markup for Rails
|
2
|
-
|
1
|
+
# Twitter Bootstrap 2.0 Markup for Rails
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<th>Version</th>
|
6
|
+
<td>v0.2.1</td>
|
7
|
+
</tr>
|
8
|
+
<tr>
|
9
|
+
<th>Build Status</th>
|
10
|
+
<td><a href="http://travis-ci.org/pusewicz/twitter-bootstrap-markup-rails"><img src="https://secure.travis-ci.org/pusewicz/twitter-bootstrap-markup-rails.png"></a></td>
|
11
|
+
</tr>
|
12
|
+
<tr>
|
13
|
+
<th>Dependency Status</th>
|
14
|
+
<td><a href="https://gemnasium.com/pusewicz/twitter-bootstrap-markup-rails"><img src="https://gemnasium.com/pusewicz/twitter-bootstrap-markup-rails.png"></a></td>
|
15
|
+
</tr>
|
16
|
+
<tr>
|
17
|
+
<th>Changelog</th>
|
18
|
+
<td><a href="https://github.com/pusewicz/twitter-bootstrap-markup-rails/wiki/Changelog">Changelog</a></td>
|
19
|
+
</tr>
|
20
|
+
</table>
|
3
21
|
|
4
22
|
This gem focuses on making it easier to use Twitter's Bootstrap 2.0. It's a collection of helpers which should make it faster to use all the components provided by Twitter Bootstrap.
|
5
23
|
|
6
24
|
|
7
|
-
Installation
|
8
|
-
---
|
25
|
+
## Installation
|
9
26
|
|
10
27
|
Add to your `Gemfile`:
|
11
28
|
|
12
|
-
gem
|
29
|
+
gem 'twitter-bootstrap-markup-rails', '0.2.1'
|
13
30
|
|
14
|
-
Currently Supported
|
15
|
-
---
|
31
|
+
## Currently Supported
|
16
32
|
|
17
33
|
* Alert messages
|
18
34
|
* Inline labels
|
35
|
+
* Buttons
|
36
|
+
* Button dropdowns
|
19
37
|
|
20
38
|
Documentation
|
21
39
|
---
|
@@ -50,6 +68,30 @@ Notice Inline Label:
|
|
50
68
|
bootstrap_inline_label_notice_tag("Info")
|
51
69
|
# => '<span class="label notice">Info</span>'
|
52
70
|
|
71
|
+
Buttons:
|
72
|
+
|
73
|
+
bootstrap_button("Button Text", "#")
|
74
|
+
# => '<a class="btn" href="#">Button Text</a>'
|
75
|
+
|
76
|
+
Dropdown Buttons:
|
77
|
+
|
78
|
+
```
|
79
|
+
bootstrap_button_dropdown do |b|
|
80
|
+
b.bootstrap_button "Button Title", "#"
|
81
|
+
b.link_to "First Dropdown Item", @item
|
82
|
+
b.link_to "Second Dropdown Item", @item2
|
83
|
+
end
|
84
|
+
# => '<div class="btn-group">
|
85
|
+
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
|
86
|
+
Button Title
|
87
|
+
<span class="caret"></span>
|
88
|
+
</a>
|
89
|
+
<ul class="dropdown-menu">
|
90
|
+
<!-- dropdown menu links -->
|
91
|
+
</ul>
|
92
|
+
</div>'
|
93
|
+
```
|
94
|
+
|
53
95
|
Plugins
|
54
96
|
---
|
55
97
|
|
@@ -6,6 +6,8 @@ module Twitter
|
|
6
6
|
module Rails
|
7
7
|
require "twitter-bootstrap-markup-rails/version"
|
8
8
|
|
9
|
+
require "twitter-bootstrap-markup-rails/helper_collection"
|
10
|
+
|
9
11
|
autoload :Helpers, "twitter-bootstrap-markup-rails/helpers"
|
10
12
|
autoload :Components, "twitter-bootstrap-markup-rails/components"
|
11
13
|
|
@@ -3,6 +3,10 @@ module Twitter::Bootstrap::Markup::Rails
|
|
3
3
|
autoload :Base, 'twitter-bootstrap-markup-rails/components/base'
|
4
4
|
autoload :Alert, 'twitter-bootstrap-markup-rails/components/alert'
|
5
5
|
autoload :InlineLabel, 'twitter-bootstrap-markup-rails/components/inline_label'
|
6
|
+
autoload :Form, 'twitter-bootstrap-markup-rails/components/form'
|
7
|
+
autoload :FormBuilder, 'twitter-bootstrap-markup-rails/components/form_builder'
|
8
|
+
autoload :Button, 'twitter-bootstrap-markup-rails/components/button'
|
9
|
+
autoload :ButtonDropdown, 'twitter-bootstrap-markup-rails/components/button_dropdown'
|
6
10
|
end
|
7
11
|
end
|
8
12
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Twitter::Bootstrap::Markup::Rails::Components
|
2
|
+
class Button < Base
|
3
|
+
attr_reader :text
|
4
|
+
|
5
|
+
def initialize(text, link, options = {})
|
6
|
+
super
|
7
|
+
@text = text
|
8
|
+
@link = link
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
html_text = ""
|
13
|
+
html_text << build_icon.html_safe << ' ' if options[:icon]
|
14
|
+
html_text << text
|
15
|
+
html_text << ' ' << build_caret.html_safe if options[:dropdown]
|
16
|
+
|
17
|
+
output_buffer << content_tag(:a, html_text.html_safe, build_tag_options).html_safe
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def default_options
|
23
|
+
{
|
24
|
+
:class => "btn",
|
25
|
+
:type => [],
|
26
|
+
:disabled => false,
|
27
|
+
:icon_white => false,
|
28
|
+
:dropdown => false,
|
29
|
+
:id => nil
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_class
|
34
|
+
classes = [options[:class]]
|
35
|
+
|
36
|
+
if options[:type].is_a?(Array)
|
37
|
+
classes = classes | options[:type].map{|c| c.to_s}
|
38
|
+
else
|
39
|
+
classes << options[:type]
|
40
|
+
end
|
41
|
+
|
42
|
+
classes << 'dropdown-toggle' if options[:dropdown]
|
43
|
+
classes << 'disabled' if options[:disabled]
|
44
|
+
|
45
|
+
classes.join(" ")
|
46
|
+
end
|
47
|
+
|
48
|
+
def build_icon
|
49
|
+
klass = options[:icon]
|
50
|
+
klass << ' icon-white' if options[:icon_white]
|
51
|
+
content_tag(:i, nil, :class => klass)
|
52
|
+
end
|
53
|
+
|
54
|
+
def build_caret
|
55
|
+
content_tag(:span, nil, :class => 'caret')
|
56
|
+
end
|
57
|
+
|
58
|
+
def build_tag_options
|
59
|
+
ops = {:href => @link, :class => build_class}
|
60
|
+
ops[:"data-toggle"] = 'dropdown' if options[:dropdown]
|
61
|
+
ops[:id] = options[:id] if options[:id]
|
62
|
+
ops
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Twitter::Bootstrap::Markup::Rails::Components
|
2
|
+
class ButtonDropdown < Base
|
3
|
+
attr_reader :collection
|
4
|
+
|
5
|
+
def initialize(elements, options = {})
|
6
|
+
super
|
7
|
+
@elements = elements
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
output_buffer << content_tag(:div, :class => 'btn-group') do
|
12
|
+
html=''
|
13
|
+
html << build_dropdown
|
14
|
+
|
15
|
+
html << content_tag(:ul, :class => 'dropdown-menu') do
|
16
|
+
menu = ''
|
17
|
+
@elements.each do |e|
|
18
|
+
menu << content_tag(:li, e.to_s)
|
19
|
+
end
|
20
|
+
menu.html_safe
|
21
|
+
end
|
22
|
+
|
23
|
+
html.html_safe
|
24
|
+
end
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
def default_options
|
30
|
+
{}
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_dropdown
|
34
|
+
if @elements.size > 0
|
35
|
+
dropdown = @elements.shift
|
36
|
+
dropdown.options[:dropdown] = true
|
37
|
+
dropdown.to_s
|
38
|
+
else
|
39
|
+
''
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Twitter::Bootstrap::Markup::Rails::Components
|
2
|
+
class Form < Base
|
3
|
+
autoload :InputField, 'twitter-bootstrap-markup-rails/components/form/input_field'
|
4
|
+
autoload :Label, 'twitter-bootstrap-markup-rails/components/form/label'
|
5
|
+
|
6
|
+
include ActionView::Helpers::FormHelper
|
7
|
+
|
8
|
+
protected
|
9
|
+
|
10
|
+
def default_options
|
11
|
+
{}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Twitter::Bootstrap::Markup::Rails::Components
|
2
|
+
class Form::InputField < Form
|
3
|
+
attr_accessor :input_html, :label_html
|
4
|
+
|
5
|
+
def initialize(object_name, method, input_html, options = {})
|
6
|
+
super(options)
|
7
|
+
@input_html = input_html
|
8
|
+
@label_html = Label.new(object_name, method, options) if options[:label] || options[:label_text]
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
output_buffer << content_tag(:div, :class => 'control-group') do
|
13
|
+
html = ''
|
14
|
+
html << label_html.to_s
|
15
|
+
html << content_tag(:div, :class => 'controls') do
|
16
|
+
build_input_wrapper << build_help_text
|
17
|
+
end
|
18
|
+
html.html_safe
|
19
|
+
end
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def build_input_wrapper
|
26
|
+
if options[:add_on]
|
27
|
+
build_add_on_wrapper
|
28
|
+
else
|
29
|
+
input_html
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_help_text
|
34
|
+
html = ''
|
35
|
+
html = content_tag(:p, options[:help_text], :class => 'help-block') if options[:help_text]
|
36
|
+
html.html_safe
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_add_on_wrapper
|
40
|
+
content_tag(:div, :class => "input-#{options[:add_on][:position] || 'prepend'}") do
|
41
|
+
add_on = ''
|
42
|
+
add_on << input_html
|
43
|
+
add_on << content_tag(:span, :class => 'add-on') do
|
44
|
+
add_on_content = ''
|
45
|
+
add_on_content << content_tag(:i, '', :class => options[:add_on][:icon]) if options[:add_on][:icon]
|
46
|
+
add_on_content << options[:add_on][:text] if options[:add_on][:text]
|
47
|
+
add_on_content.html_safe
|
48
|
+
end
|
49
|
+
add_on.html_safe
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Twitter::Bootstrap::Markup::Rails::Components
|
2
|
+
class FormBuilder < ActionView::Helpers::FormBuilder
|
3
|
+
def text_field(method, options={})
|
4
|
+
input_html = super(method, options)
|
5
|
+
Form::InputField.new(object_name, method, input_html, options).to_s
|
6
|
+
end
|
7
|
+
|
8
|
+
def password_field(method, options={})
|
9
|
+
input_html = super(method, options)
|
10
|
+
Form::InputField.new(object_name, method, input_html, options).to_s
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -6,6 +6,8 @@ module Twitter::Bootstrap::Markup::Rails
|
|
6
6
|
ActiveSupport.on_load(:action_view) do
|
7
7
|
include Twitter::Bootstrap::Markup::Rails::Helpers::AlertHelpers
|
8
8
|
include Twitter::Bootstrap::Markup::Rails::Helpers::InlineLabelHelpers
|
9
|
+
include Twitter::Bootstrap::Markup::Rails::Helpers::FormHelpers
|
10
|
+
include Twitter::Bootstrap::Markup::Rails::Helpers::ButtonHelpers
|
9
11
|
end
|
10
12
|
end
|
11
13
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Twitter::Bootstrap::Markup::Rails
|
2
|
+
class HelperCollection
|
3
|
+
attr_accessor :calls, :view
|
4
|
+
|
5
|
+
def initialize(view)
|
6
|
+
@view = view
|
7
|
+
@calls = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(symbol, *args, &block)
|
11
|
+
@calls << HelperMethodCall.new(@view, symbol, args, block)
|
12
|
+
end
|
13
|
+
|
14
|
+
def each
|
15
|
+
@calls.each do |c|
|
16
|
+
yield c
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def [](x)
|
21
|
+
@calls[x]
|
22
|
+
end
|
23
|
+
|
24
|
+
def size
|
25
|
+
@calls.size
|
26
|
+
end
|
27
|
+
|
28
|
+
def shift
|
29
|
+
@calls.shift
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class HelperMethodCall
|
34
|
+
attr_accessor :method, :options, :args
|
35
|
+
|
36
|
+
def initialize(view, symbol, args, block)
|
37
|
+
@view = view
|
38
|
+
@method = symbol
|
39
|
+
@options = args.extract_options!
|
40
|
+
@args = args
|
41
|
+
@block = block
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_s
|
45
|
+
args = @args
|
46
|
+
args << @options
|
47
|
+
|
48
|
+
if @block
|
49
|
+
@view.send(@method, *args, &@block).html_safe
|
50
|
+
else
|
51
|
+
@view.send(@method, *args).html_safe
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -2,6 +2,8 @@ module Twitter::Bootstrap::Markup::Rails
|
|
2
2
|
module Helpers
|
3
3
|
autoload :AlertHelpers, 'twitter-bootstrap-markup-rails/helpers/alert_helpers'
|
4
4
|
autoload :InlineLabelHelpers, 'twitter-bootstrap-markup-rails/helpers/inline_label_helpers'
|
5
|
+
autoload :FormHelpers, 'twitter-bootstrap-markup-rails/helpers/form_helpers'
|
6
|
+
autoload :ButtonHelpers, 'twitter-bootstrap-markup-rails/helpers/button_helpers'
|
5
7
|
end
|
6
8
|
end
|
7
9
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Twitter::Bootstrap::Markup::Rails::Helpers
|
4
|
+
module ButtonHelpers
|
5
|
+
# Render a bootstrap button
|
6
|
+
#
|
7
|
+
# @param [String] text for the button face
|
8
|
+
# @param [String] link for the button href
|
9
|
+
# @param [Hash] options hash containing options (default: {}):
|
10
|
+
# :type - Additional button type(s). For one, just specify a string, but
|
11
|
+
# you can also pass an array (of sym or str) for multiple classes
|
12
|
+
# :disabled - Will disable the button if set to true
|
13
|
+
# :icon - Specify an icon class from bootstrap to prepend
|
14
|
+
# :icon_white - Specify true if you want the icon to be white
|
15
|
+
# :id - Assign an ID to the button
|
16
|
+
#
|
17
|
+
# Examples
|
18
|
+
#
|
19
|
+
# bootstrap_button 'Search', '#', :type => 'btn-primary', :icon => 'icon-search'
|
20
|
+
#
|
21
|
+
def bootstrap_button(text, link, options = {})
|
22
|
+
Twitter::Bootstrap::Markup::Rails::Components::Button.new(
|
23
|
+
text,
|
24
|
+
link,
|
25
|
+
options
|
26
|
+
).to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
# Render a dropdown button
|
30
|
+
#
|
31
|
+
# @param [Hash] options hash containing options (default: {}):
|
32
|
+
#
|
33
|
+
# Examples
|
34
|
+
#
|
35
|
+
# bootstrap_button_dropdown do |e|
|
36
|
+
# e.bootstrap_button "Button Title", "http://google.com"
|
37
|
+
# e.link_to "Blah", @blah
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# Returns HTML String for the dropdown
|
41
|
+
#
|
42
|
+
def bootstrap_button_dropdown(options = {})
|
43
|
+
# Elements will hold every call made to this block. Self is passed in so the
|
44
|
+
# elements can be sent to it in order to be evaluated
|
45
|
+
elements = Twitter::Bootstrap::Markup::Rails::HelperCollection.new(self)
|
46
|
+
|
47
|
+
yield elements
|
48
|
+
|
49
|
+
Twitter::Bootstrap::Markup::Rails::Components::ButtonDropdown.new(
|
50
|
+
elements,
|
51
|
+
options
|
52
|
+
).to_s
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Twitter::Bootstrap::Markup::Rails::Helpers
|
2
|
+
module FormHelpers
|
3
|
+
# Form builder
|
4
|
+
# TODO add documentation
|
5
|
+
def bootstrap_form_for(*args, &block)
|
6
|
+
options = args.extract_options!
|
7
|
+
options.reverse_merge!(:builder => Twitter::Bootstrap::Markup::Rails::Components::FormBuilder)
|
8
|
+
form_for(*(args + [options]), &block)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/twitter-bootstrap-markup-rails/plugins/simple_navigation/renderer/bootstrap_topbar_list.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Renders an ItemContainer as a <ul> element and its containing items as <li> elements.
|
2
2
|
# Prepared to use inside the topbar of Twitter Bootstrap http://twitter.github.com/bootstrap/#navigation
|
3
3
|
#
|
4
|
+
# Source: https://gist.github.com/1550309
|
5
|
+
#
|
4
6
|
# Examples
|
5
7
|
#
|
6
8
|
# render_navigation(level: 1..2, renderer: :bootstrap_topbar_list, expand_all: true)
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Twitter::Bootstrap::Markup::Rails::Helpers::ButtonHelpers do
|
5
|
+
include BootstrapSpecHelper
|
6
|
+
include BootstrapButtonMacros
|
7
|
+
|
8
|
+
describe "#bootstrap_button" do
|
9
|
+
before do
|
10
|
+
@output_buffer = ''
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should create a button with the btn class" do
|
14
|
+
concat bootstrap_button("Text", "#")
|
15
|
+
output_buffer.should have_tag('a.btn')
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should have text" do
|
19
|
+
concat bootstrap_button("Text", "#")
|
20
|
+
output_buffer.should have_tag('a', /Text/)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should link to the specified url" do
|
24
|
+
concat bootstrap_button("Text", "http://example.test")
|
25
|
+
output_buffer.should have_tag("a[href='http://example.test']")
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should have disabled class when :disabled is true" do
|
29
|
+
concat bootstrap_button("Text", "#", :disabled => true)
|
30
|
+
output_buffer.should have_tag("a.disabled")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should add an additional class when :type is a string" do
|
34
|
+
concat bootstrap_button("Text", "#", :type => 'test')
|
35
|
+
output_buffer.should have_tag("a.test")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should add additional classes when :type is an array" do
|
39
|
+
concat bootstrap_button("Text", "#", :type => ['test1', 'test2'])
|
40
|
+
output_buffer.should have_tag("a.test1")
|
41
|
+
output_buffer.should have_tag("a.test2")
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should add an icon when :icon is specified" do
|
45
|
+
concat bootstrap_button("Text", "#", :icon => 'icon-search')
|
46
|
+
output_buffer.should have_tag("a.btn i.icon-search")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should add a white icon when :icon_white is true" do
|
50
|
+
concat bootstrap_button("Text", "#", :icon => 'icon-search', :icon_white => true)
|
51
|
+
output_buffer.should have_tag("a.btn i.icon-search")
|
52
|
+
output_buffer.should have_tag("a.btn i.icon-white")
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should add an id when :id is specified" do
|
56
|
+
concat bootstrap_button("Text", "#", :id => "foo")
|
57
|
+
output_buffer.should have_tag("a#foo")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
describe "#bootstrap_button_dropdown" do
|
63
|
+
before do
|
64
|
+
@output_buffer = ''
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should create a dropdown button when called with a button and one (or more) links" do
|
68
|
+
build_bootstrap_button_dropdown do |d|
|
69
|
+
d.bootstrap_button "Button Text", "#"
|
70
|
+
d.link_to "Link Text", "#"
|
71
|
+
end
|
72
|
+
|
73
|
+
output_buffer.should have_tag('div.btn-group') do |div|
|
74
|
+
div.should have_tag('a.btn')
|
75
|
+
div.should have_tag('ul.dropdown-menu a')
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Twitter::Bootstrap::Markup::Rails::Helpers::FormHelpers do
|
5
|
+
include BootstrapSpecHelper
|
6
|
+
include BootstrapFormMacros
|
7
|
+
|
8
|
+
describe "#bootstrap_form_for" do
|
9
|
+
it "should create a form tag" do
|
10
|
+
block = Proc.new {}
|
11
|
+
concat bootstrap_form_for 'an_object', :url => 'a_url', &block
|
12
|
+
output_buffer.should have_tag('form')
|
13
|
+
end
|
14
|
+
|
15
|
+
context "text_field" do
|
16
|
+
it "should wrap a text input within the magical div tags" do
|
17
|
+
build_bootstrap_form do |f|
|
18
|
+
f.text_field 'method'
|
19
|
+
end
|
20
|
+
|
21
|
+
output_buffer.should have_tag('div.control-group div.controls input[type=text]')
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should add a label tag if :label is true" do
|
25
|
+
build_bootstrap_form do |f|
|
26
|
+
f.text_field 'method', :label => true
|
27
|
+
end
|
28
|
+
|
29
|
+
output_buffer.should have_tag('div.control-group') do |div|
|
30
|
+
div.should have_tag('label.control-label')
|
31
|
+
div.should have_tag('div.controls') do |div|
|
32
|
+
div.should have_tag('input')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should add a label tag with custom text if :label_text is specified" do
|
38
|
+
build_bootstrap_form do |f|
|
39
|
+
f.text_field 'method', :label_text => 'a custom label'
|
40
|
+
end
|
41
|
+
|
42
|
+
output_buffer.should have_tag('div.control-group') do |div|
|
43
|
+
div.should have_tag('label.control-label', :text => 'a custom label')
|
44
|
+
div.should have_tag('div.controls') do |div|
|
45
|
+
div.should have_tag('input')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "add_on" do
|
51
|
+
it "should wrap the input in div.input-prepend if :add_on hash is specified" do
|
52
|
+
build_bootstrap_form do |f|
|
53
|
+
f.text_field 'method', :add_on => {}
|
54
|
+
end
|
55
|
+
|
56
|
+
output_buffer.should have_tag('div.control-group') do |div|
|
57
|
+
div.should have_tag('div.controls') do |div|
|
58
|
+
div.should have_tag('div.input-prepend') do |div|
|
59
|
+
div.should have_tag('input')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should wrap the input in div.input-append if :position is :append" do
|
66
|
+
build_bootstrap_form do |f|
|
67
|
+
f.text_field 'method', :add_on => {:position => :append}
|
68
|
+
end
|
69
|
+
|
70
|
+
output_buffer.should have_tag('div.control-group') do |div|
|
71
|
+
div.should have_tag('div.controls') do |div|
|
72
|
+
div.should have_tag('div.input-append') do |div|
|
73
|
+
div.should have_tag('input')
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should add a span with text if :text is specified" do
|
80
|
+
build_bootstrap_form do |f|
|
81
|
+
f.text_field 'method', :add_on => {:text => 'a text'}
|
82
|
+
end
|
83
|
+
|
84
|
+
output_buffer.should have_tag('div.control-group') do |div|
|
85
|
+
div.should have_tag('div.controls') do |div|
|
86
|
+
div.should have_tag('div.input-prepend') do |div|
|
87
|
+
div.should have_tag('input')
|
88
|
+
div.should have_tag('span', :class => 'add-on', :text => 'a text')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should add a span with icon if :icon is specified" do
|
95
|
+
build_bootstrap_form do |f|
|
96
|
+
f.text_field 'method', :add_on => {:icon => 'icon-envelope'}
|
97
|
+
end
|
98
|
+
|
99
|
+
output_buffer.should have_tag('div.control-group') do |div|
|
100
|
+
div.should have_tag('div.controls') do |div|
|
101
|
+
div.should have_tag('div.input-prepend') do |div|
|
102
|
+
div.should have_tag('input')
|
103
|
+
div.should have_tag('span', :class => 'add-on') do |span|
|
104
|
+
span.should have_tag('i', :class => 'icon-envelope')
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should add a help-block with custom text if :html_text is specified" do
|
112
|
+
build_bootstrap_form do |f|
|
113
|
+
f.text_field 'method', :help_text => 'You need help!'
|
114
|
+
end
|
115
|
+
|
116
|
+
output_buffer.should have_tag('div.control-group') do |div|
|
117
|
+
div.should have_tag('div.controls') do |div|
|
118
|
+
div.should have_tag('p', :class => 'help-block', :text => 'You need help!')
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -12,4 +12,8 @@ describe ActionView::Base do
|
|
12
12
|
it "includes inline label helpers" do
|
13
13
|
@view.ancestors.should include(Twitter::Bootstrap::Markup::Rails::Helpers::InlineLabelHelpers)
|
14
14
|
end
|
15
|
+
|
16
|
+
it "includes inline form helpers" do
|
17
|
+
@view.ancestors.should include(Twitter::Bootstrap::Markup::Rails::Helpers::FormHelpers)
|
18
|
+
end
|
15
19
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
describe "README.md" do
|
2
|
+
let(:version) {
|
3
|
+
require File.expand_path("../../../lib/twitter-bootstrap-markup-rails/version",
|
4
|
+
__FILE__)
|
5
|
+
Twitter::Bootstrap::Markup::Rails::VERSION
|
6
|
+
}
|
7
|
+
|
8
|
+
subject { File.read(File.expand_path("../../../README.md", __FILE__)) }
|
9
|
+
|
10
|
+
it "contains correct version number in gem declaration" do
|
11
|
+
subject.should include("gem 'twitter-bootstrap-markup-rails', '#{version}'")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twitter-bootstrap-markup-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rails
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '3.0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '3.0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rspec-rails
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ~>
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '2.8'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.8'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: guard
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ~>
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '1.0'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: guard-rspec
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ~>
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '0.6'
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0.6'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: rspec_tag_matchers
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: '1.0'
|
77
102
|
type: :development
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '1.0'
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: rake
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :development
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: yard
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ! '>='
|
@@ -98,10 +133,15 @@ dependencies:
|
|
98
133
|
version: '0'
|
99
134
|
type: :development
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: yard-tomdoc
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
105
145
|
none: false
|
106
146
|
requirements:
|
107
147
|
- - ! '>='
|
@@ -109,10 +149,15 @@ dependencies:
|
|
109
149
|
version: '0'
|
110
150
|
type: :development
|
111
151
|
prerelease: false
|
112
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
113
158
|
- !ruby/object:Gem::Dependency
|
114
159
|
name: simple-navigation
|
115
|
-
requirement:
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
116
161
|
none: false
|
117
162
|
requirements:
|
118
163
|
- - ! '>='
|
@@ -120,7 +165,12 @@ dependencies:
|
|
120
165
|
version: '0'
|
121
166
|
type: :development
|
122
167
|
prerelease: false
|
123
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
124
174
|
description: Ruby on Rails helpers for Bootstrap 2.0 - HTML, CSS, and JS toolkit from
|
125
175
|
Twitter
|
126
176
|
email:
|
@@ -140,20 +190,34 @@ files:
|
|
140
190
|
- lib/twitter-bootstrap-markup-rails/components.rb
|
141
191
|
- lib/twitter-bootstrap-markup-rails/components/alert.rb
|
142
192
|
- lib/twitter-bootstrap-markup-rails/components/base.rb
|
193
|
+
- lib/twitter-bootstrap-markup-rails/components/button.rb
|
194
|
+
- lib/twitter-bootstrap-markup-rails/components/button_dropdown.rb
|
195
|
+
- lib/twitter-bootstrap-markup-rails/components/form.rb
|
196
|
+
- lib/twitter-bootstrap-markup-rails/components/form/input_field.rb
|
197
|
+
- lib/twitter-bootstrap-markup-rails/components/form/label.rb
|
198
|
+
- lib/twitter-bootstrap-markup-rails/components/form_builder.rb
|
143
199
|
- lib/twitter-bootstrap-markup-rails/components/inline_label.rb
|
144
200
|
- lib/twitter-bootstrap-markup-rails/engine.rb
|
201
|
+
- lib/twitter-bootstrap-markup-rails/helper_collection.rb
|
145
202
|
- lib/twitter-bootstrap-markup-rails/helpers.rb
|
146
203
|
- lib/twitter-bootstrap-markup-rails/helpers/alert_helpers.rb
|
204
|
+
- lib/twitter-bootstrap-markup-rails/helpers/button_helpers.rb
|
205
|
+
- lib/twitter-bootstrap-markup-rails/helpers/form_helpers.rb
|
147
206
|
- lib/twitter-bootstrap-markup-rails/helpers/inline_label_helpers.rb
|
148
207
|
- lib/twitter-bootstrap-markup-rails/plugins.rb
|
149
208
|
- lib/twitter-bootstrap-markup-rails/plugins/simple_navigation/renderer/bootstrap_topbar_list.rb
|
150
209
|
- lib/twitter-bootstrap-markup-rails/version.rb
|
151
210
|
- log/development.log
|
152
211
|
- spec/helpers/alert_helpers_spec.rb
|
212
|
+
- spec/helpers/button_helpers_spec.rb
|
213
|
+
- spec/helpers/form_helpers_spec.rb
|
153
214
|
- spec/helpers/inline_label_helpers_spec.rb
|
154
215
|
- spec/integration/action_view_spec.rb
|
216
|
+
- spec/integration/readme_spec.rb
|
155
217
|
- spec/plugins/bootstrap_topbar_list_spec.rb
|
156
218
|
- spec/spec_helper.rb
|
219
|
+
- spec/support/bootstrap_button_macros.rb
|
220
|
+
- spec/support/bootstrap_form_macros.rb
|
157
221
|
- spec/support/bootstrap_spec_helper.rb
|
158
222
|
- spec/support/test_environment.rb
|
159
223
|
- twitter-bootstrap-markup-rails.gemspec
|
@@ -177,17 +241,22 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
241
|
version: '0'
|
178
242
|
requirements: []
|
179
243
|
rubyforge_project:
|
180
|
-
rubygems_version: 1.8.
|
244
|
+
rubygems_version: 1.8.21
|
181
245
|
signing_key:
|
182
246
|
specification_version: 3
|
183
247
|
summary: Ruby on Rails helpers for Bootstrap 2.0 - HTML, CSS, and JS toolkit from
|
184
248
|
Twitter
|
185
249
|
test_files:
|
186
250
|
- spec/helpers/alert_helpers_spec.rb
|
251
|
+
- spec/helpers/button_helpers_spec.rb
|
252
|
+
- spec/helpers/form_helpers_spec.rb
|
187
253
|
- spec/helpers/inline_label_helpers_spec.rb
|
188
254
|
- spec/integration/action_view_spec.rb
|
255
|
+
- spec/integration/readme_spec.rb
|
189
256
|
- spec/plugins/bootstrap_topbar_list_spec.rb
|
190
257
|
- spec/spec_helper.rb
|
258
|
+
- spec/support/bootstrap_button_macros.rb
|
259
|
+
- spec/support/bootstrap_form_macros.rb
|
191
260
|
- spec/support/bootstrap_spec_helper.rb
|
192
261
|
- spec/support/test_environment.rb
|
193
262
|
has_rdoc:
|