bootstrap-shoehorn 1.0.0
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 +9 -0
- data/.rspec +2 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/README.md +336 -0
- data/Rakefile +32 -0
- data/lib/shoehorn.rb +15 -0
- data/lib/shoehorn/components.rb +17 -0
- data/lib/shoehorn/components/alert.rb +69 -0
- data/lib/shoehorn/components/badge.rb +38 -0
- data/lib/shoehorn/components/base.rb +18 -0
- data/lib/shoehorn/components/button.rb +72 -0
- data/lib/shoehorn/components/dropdown.rb +55 -0
- data/lib/shoehorn/components/form.rb +14 -0
- data/lib/shoehorn/components/form/input_field.rb +53 -0
- data/lib/shoehorn/components/form/label.rb +8 -0
- data/lib/shoehorn/components/form_builder.rb +13 -0
- data/lib/shoehorn/components/icon.rb +40 -0
- data/lib/shoehorn/components/label.rb +39 -0
- data/lib/shoehorn/components/modal.rb +62 -0
- data/lib/shoehorn/components/navigation.rb +47 -0
- data/lib/shoehorn/components/progress_bar.rb +51 -0
- data/lib/shoehorn/engine.rb +19 -0
- data/lib/shoehorn/helper_collection.rb +58 -0
- data/lib/shoehorn/helper_collection_set.rb +18 -0
- data/lib/shoehorn/helpers.rb +14 -0
- data/lib/shoehorn/helpers/alert_helpers.rb +37 -0
- data/lib/shoehorn/helpers/badge_helpers.rb +38 -0
- data/lib/shoehorn/helpers/button_helpers.rb +122 -0
- data/lib/shoehorn/helpers/form_helpers.rb +11 -0
- data/lib/shoehorn/helpers/icon_helpers.rb +34 -0
- data/lib/shoehorn/helpers/label_helpers.rb +37 -0
- data/lib/shoehorn/helpers/modal_helpers.rb +43 -0
- data/lib/shoehorn/helpers/navigation_helpers.rb +32 -0
- data/lib/shoehorn/helpers/progress_bar_helpers.rb +25 -0
- data/lib/shoehorn/plugins.rb +6 -0
- data/lib/shoehorn/plugins/simple_navigation/renderer/bootstrap_topbar_list.rb +72 -0
- data/lib/shoehorn/version.rb +3 -0
- data/log/development.log +0 -0
- data/shoehorn.gemspec +33 -0
- data/spec/helpers/alert_helpers_spec.rb +138 -0
- data/spec/helpers/button_helpers_spec.rb +102 -0
- data/spec/helpers/form_helpers_spec.rb +136 -0
- data/spec/helpers/inline_label_helpers_spec.rb +50 -0
- data/spec/helpers/modal_helpers_spec.rb +60 -0
- data/spec/helpers/navigation_helpers_spec.rb +61 -0
- data/spec/helpers/progress_bar_helpers_spec.rb +34 -0
- data/spec/integration/action_view_spec.rb +23 -0
- data/spec/integration/readme_spec.rb +14 -0
- data/spec/plugins/bootstrap_topbar_list_spec.rb +11 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/bootstrap_button_macros.rb +8 -0
- data/spec/support/bootstrap_form_macros.rb +8 -0
- data/spec/support/bootstrap_modal_macros.rb +8 -0
- data/spec/support/bootstrap_navigation_macros.rb +8 -0
- data/spec/support/bootstrap_spec_helper.rb +50 -0
- data/spec/support/test_environment.rb +23 -0
- metadata +265 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,336 @@
|
|
1
|
+
# Shoehorn: a Twitter Bootstrap 2.0 helper library for Rails
|
2
|
+
|
3
|
+
This gem focuses on making it easier to use Twitter's Bootstrap 2.0.
|
4
|
+
It's a collection of helpers which should make it faster to use all the components provided by Twitter Bootstrap.
|
5
|
+
|
6
|
+
The gem started as a fork of pusewicz's twitter-bootstrap-markup-rails gem (https://github.com/pusewicz/twitter-bootstrap-markup-rails),
|
7
|
+
but I need more customization. So I borrowed the gem structure and some code for developing Shoehorn.
|
8
|
+
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add to your `Gemfile`:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem 'shoehorn'
|
16
|
+
```
|
17
|
+
|
18
|
+
## Currently Supported
|
19
|
+
|
20
|
+
* Alert messages
|
21
|
+
* Inline labels
|
22
|
+
* Buttons
|
23
|
+
* Button dropdowns
|
24
|
+
* link_to
|
25
|
+
* Badges
|
26
|
+
* Modal windows
|
27
|
+
* Navigation (tabs, pills)
|
28
|
+
* Progress bars
|
29
|
+
|
30
|
+
|
31
|
+
Examples
|
32
|
+
---
|
33
|
+
|
34
|
+
### Rendering Alert
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
bootstrap_alert("Hello!")
|
38
|
+
# => '<div class="alert"><a class="close">×</a>Hello!</div>'
|
39
|
+
```
|
40
|
+
|
41
|
+
Rendering Info Block Alert
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
bootstrap_alert("Hello!", type: 'info', block: true)
|
45
|
+
# => '<div class="alert alert-block alert-info"><a class="close">×</a>Hello!</div>'
|
46
|
+
```
|
47
|
+
|
48
|
+
Add Alert heading:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
bootstrap_alert("Content of alert", heading: "WARNING!", type: 'info')
|
52
|
+
# => '<div class="alert alert-info"><a class="close">×</a><h4 class="alert-heading">WARNING!</h4>Content of alert</div>'
|
53
|
+
```
|
54
|
+
|
55
|
+
Remove closing button
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
bootstrap_alert("Hello!", type: 'error', close: false)
|
59
|
+
# => '<div class="alert alert-error">Hello!</div>'
|
60
|
+
```
|
61
|
+
|
62
|
+
|
63
|
+
### Notice Inline Label
|
64
|
+
|
65
|
+
Normal label
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
bootstrap_label("Hello!")
|
69
|
+
# => '<span class="label">Hello!</span>'
|
70
|
+
```
|
71
|
+
|
72
|
+
Change type (available values are: info, success, warning, important or inverse)
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
bootstrap_label("Hello!", type: 'warning')
|
76
|
+
# => '<span class="label label-warning">Hello!</span>'
|
77
|
+
```
|
78
|
+
|
79
|
+
Add custom CSS class
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
bootstrap_label("Hello!", type: 'important', class: "my_awesome_class")
|
83
|
+
# => '<span class="my_awesome_class label label-important">Hello!</span>'
|
84
|
+
```
|
85
|
+
|
86
|
+
Customize Bootstrap CSS class prefix (really needed???)
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
bootstrap_label("Hello!", type: 'info', bootstrap_class_prefix: "my_label")
|
90
|
+
# => '<span class="my_label my_label-info">Hello!</span>'
|
91
|
+
```
|
92
|
+
|
93
|
+
### Notice Badge
|
94
|
+
|
95
|
+
Normal badge
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
bootstrap_badge("Hello!")
|
99
|
+
# => '<span class="badge">Hello!</span>'
|
100
|
+
```
|
101
|
+
|
102
|
+
Change type (available values are: info, success, warning, important or inverse)
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
bootstrap_badge("Hello!", type: 'success')
|
106
|
+
# => '<span class="badge badge-success">Hello!</span>'
|
107
|
+
```
|
108
|
+
|
109
|
+
Add custom CSS class
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
bootstrap_badge("Hello!", type: 'warning', class: "my_awesome_class")
|
113
|
+
# => '<span class="my_awesome_class badge badge-warning">Hello!</span>'
|
114
|
+
```
|
115
|
+
|
116
|
+
Customize Bootstrap CSS class prefix (really needed???)
|
117
|
+
|
118
|
+
```ruby
|
119
|
+
bootstrap_label("Hello!", type: 'info', bootstrap_class_prefix: "my_label")
|
120
|
+
# => '<span class="my_label my_label-info">Hello!</span>'
|
121
|
+
```
|
122
|
+
|
123
|
+
### Icon inline
|
124
|
+
|
125
|
+
```ruby
|
126
|
+
bootstrap_icon(name: 'user', icon_white: true)
|
127
|
+
# # => '<i class="icon-user icon-white"></i>'
|
128
|
+
```
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
bootstrap_icon(text: "Current time", name: 'time')
|
132
|
+
# => '<i class="icon-time"></i> Current time'
|
133
|
+
```
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
bootstrap_icon(class: "my_awesome_class", name: 'glass')
|
137
|
+
# => '<i class="icon-glass my_awesome_class"></i>'
|
138
|
+
```
|
139
|
+
|
140
|
+
### Buttons
|
141
|
+
|
142
|
+
```ruby
|
143
|
+
bootstrap_button("Button Text", "#")
|
144
|
+
# => '<a class="btn" href="#">Button Text</a>'
|
145
|
+
```
|
146
|
+
|
147
|
+
### Link_to, link_to_if, link_to_unless
|
148
|
+
|
149
|
+
They are a shortcut to bootstrap_button with bootstrap_class_prefix => nil .
|
150
|
+
In this way they are rendered as normal bootstrap_button, without being styled.
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
bootstrap_link_to 'Search', "#", type: 'primary', icon_name: 'search'
|
154
|
+
# => '<a href="#"><i class="icon-search"></i> Search</a>'
|
155
|
+
```
|
156
|
+
|
157
|
+
```ruby
|
158
|
+
bootstrap_link_to_if condition, 'Search', "#", type: 'primary', icon_name: 'search' { nil }
|
159
|
+
# => '<a href="#"><i class="icon-search"></i> Search</a>'
|
160
|
+
```
|
161
|
+
|
162
|
+
```ruby
|
163
|
+
bootstrap_link_to_unless !condition, 'Search', "#", type: 'primary', icon_name: 'search' { nil }
|
164
|
+
# => '<a href="#"><i class="icon-search"></i> Search</a>'
|
165
|
+
```
|
166
|
+
|
167
|
+
### Dropdown Buttons
|
168
|
+
|
169
|
+
```ruby
|
170
|
+
bootstrap_button_dropdown do |b|
|
171
|
+
b.bootstrap_button "Button Title", "#"
|
172
|
+
b.bootstrap_link_to "First Dropdown Item", item_path(@item)
|
173
|
+
b.link_to "Second Dropdown Item", @item2
|
174
|
+
end
|
175
|
+
# => '<div class="btn-group">
|
176
|
+
# <a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
|
177
|
+
# Button Title
|
178
|
+
# <span class="caret"></span>
|
179
|
+
# </a>
|
180
|
+
# <ul class="dropdown-menu">
|
181
|
+
# <!-- dropdown menu links -->
|
182
|
+
# </ul>
|
183
|
+
# </div>'
|
184
|
+
```
|
185
|
+
|
186
|
+
### Navigation lists
|
187
|
+
|
188
|
+
### Basic tabs example
|
189
|
+
|
190
|
+
```ruby
|
191
|
+
bootstrap_navigation do |nav|
|
192
|
+
nav.link_to "Nav1", "/link1", :active_nav => true
|
193
|
+
nav.link_to "Nav2", "/link2"
|
194
|
+
end
|
195
|
+
# => '<ul class="nav nav-tabs">
|
196
|
+
# <li class="active">
|
197
|
+
# <a href="/link1">Nav1</a>
|
198
|
+
# </li>
|
199
|
+
# <li>
|
200
|
+
# <a href="/link2">Nav2</a>
|
201
|
+
# </li>
|
202
|
+
# </ul>'
|
203
|
+
```
|
204
|
+
|
205
|
+
### Basic pills example
|
206
|
+
|
207
|
+
```ruby
|
208
|
+
bootstrap_navigation(:type => "pills") do |nav|
|
209
|
+
nav.link_to "Nav1", "/link1"
|
210
|
+
nav.link_to "Nav2", "/link2", :active_nav => true
|
211
|
+
end
|
212
|
+
# => '<ul class="nav nav-pills">
|
213
|
+
# <li>
|
214
|
+
# <a href="/link1">Nav1</a>
|
215
|
+
# </li>
|
216
|
+
# <li class="active">
|
217
|
+
# <a href="/link2">Nav2</a>
|
218
|
+
# </li>
|
219
|
+
# </ul>'
|
220
|
+
```
|
221
|
+
|
222
|
+
### Stacked tabs example
|
223
|
+
|
224
|
+
```ruby
|
225
|
+
bootstrap_navigation(:type => "tabs", :stacked => true) do |nav|
|
226
|
+
nav.link_to "Nav1", "/link1", :active_nav => true
|
227
|
+
nav.link_to "Nav2", "/link2"
|
228
|
+
end
|
229
|
+
# => '<ul class="nav nav-tabs nav-stacked">
|
230
|
+
# <li class="active">
|
231
|
+
# <a href="/link1">Nav1</a>
|
232
|
+
# </li>
|
233
|
+
# <li>
|
234
|
+
# <a href="/link2">Nav2</a>
|
235
|
+
# </li>
|
236
|
+
# </ul>'
|
237
|
+
```
|
238
|
+
|
239
|
+
### Stacked pills example
|
240
|
+
|
241
|
+
```ruby
|
242
|
+
bootstrap_navigation(:type => "pills", :stacked => true) do |nav|
|
243
|
+
nav.link_to "Nav1", "/link1"
|
244
|
+
nav.link_to "Nav2", "/link2", :active_nav => true
|
245
|
+
end
|
246
|
+
# => '<ul class="nav nav-pills nav-stacked">
|
247
|
+
# <li>
|
248
|
+
# <a href="/link1">Nav1</a>
|
249
|
+
# </li>
|
250
|
+
# <li class="active">
|
251
|
+
# <a href="/link2">Nav2</a>
|
252
|
+
# </li>
|
253
|
+
# </ul>'
|
254
|
+
```
|
255
|
+
|
256
|
+
### Modal popup example
|
257
|
+
|
258
|
+
```ruby
|
259
|
+
bootstrap_modal(id: "a_dom_id", fade: true, title: "Modal title!") do |modal|
|
260
|
+
modal.body do |c|
|
261
|
+
c.render partial: 'body'
|
262
|
+
end
|
263
|
+
modal.footer do |c|
|
264
|
+
c.bootstrap_button "Close", "#", type: 'danger', html_options: { data: { dismiss: "modal" } }
|
265
|
+
c.bootstrap_button "Accept", accept_request_path(@request),
|
266
|
+
icon_name: 'ok', type: 'success',
|
267
|
+
html_options: { data: { dismiss: "modal" }, method: :put }
|
268
|
+
end
|
269
|
+
end
|
270
|
+
# => '<div class="modal fade" id="a_dom_id">
|
271
|
+
# <div class="modal-header">
|
272
|
+
# <a class="close" data-dismiss="modal">×</a>
|
273
|
+
# <h3>Modal title!</h3>
|
274
|
+
# </div>
|
275
|
+
# <div class="modal-body">
|
276
|
+
# <div>partial content</div>
|
277
|
+
# </div>
|
278
|
+
# <div class="modal-footer">
|
279
|
+
# <a href="#" data-dismiss="modal" class=" btn btn-danger">Close</a>
|
280
|
+
# <a method="put" href="/request/1/accept" data-dismiss="modal" class=" btn btn-success"><i class=" icon icon-ok icon-white"></i> Accept</a>
|
281
|
+
# </div>
|
282
|
+
# </div>'
|
283
|
+
```
|
284
|
+
|
285
|
+
Plugins
|
286
|
+
---
|
287
|
+
|
288
|
+
### For [SimpleNavigation](https://github.com/andi/simple-navigation)
|
289
|
+
|
290
|
+
If you are using `simple-navigation` gem you can use the navigation renderer like this:
|
291
|
+
|
292
|
+
In your initializer:
|
293
|
+
|
294
|
+
```ruby
|
295
|
+
SimpleNavigation.register_renderer :bootstrap_topbar_list => SimpleNavigation::Renderer::BootstrapTopbarList
|
296
|
+
```
|
297
|
+
|
298
|
+
```ruby
|
299
|
+
render_navigation(level: 1..2, renderer: :bootstrap_topbar_list, expand_all: true)
|
300
|
+
```
|
301
|
+
|
302
|
+
Contributing
|
303
|
+
---
|
304
|
+
|
305
|
+
In the spirit of free software, everyone is encouraged to help improve this project.
|
306
|
+
|
307
|
+
Here are some ways you can contribute:
|
308
|
+
|
309
|
+
* by using alpha, beta, and prerelease versions
|
310
|
+
* by reporting bugs
|
311
|
+
* by suggesting new features
|
312
|
+
* by writing or editing documentation
|
313
|
+
* by writing specifications
|
314
|
+
* by writing code (no patch is too small: fix typos, add comments, clean up inconsistent whitespace)
|
315
|
+
* by writing tests
|
316
|
+
* by refactoring code
|
317
|
+
* by closing [issues](https://github.com/mcanato/shoehorn/issues)
|
318
|
+
* by reviewing patches
|
319
|
+
|
320
|
+
Submitting an Issue
|
321
|
+
---
|
322
|
+
|
323
|
+
We use the [GitHub issue tracker](https://github.com/mcanato/shoehorn/issues) to track bugs and features. Before submitting a bug report or feature request, check to make sure it hasn't already been submitted. You can indicate support for an existing issue by voting it up. When submitting a bug report, please include a [gist](https://gist.github.com/) that includes a stack trace and any details that may be necessary to reproduce the bug, including your gem version, Ruby version, and operating system. Ideally, a bug report should include a pull request with failing specs.
|
324
|
+
|
325
|
+
Submitting a Pull Request
|
326
|
+
---
|
327
|
+
|
328
|
+
1. Fork the project.
|
329
|
+
2. Create a topic branch.
|
330
|
+
3. Implement your feature or bug fix.
|
331
|
+
4. Add documentation for your feature or bug fix.
|
332
|
+
5. Run `bundle exec rake yard`. If your changes are not 100% documented, go back to step 4.
|
333
|
+
6. Add specs for your feature or bug fix.
|
334
|
+
7. Run `bundle exec rake spec`. If your changes are not 100% covered, go back to step 6.
|
335
|
+
8. Commit and push your changes.
|
336
|
+
9. Submit a pull request. Please do not include changes to the gemspec, version, or history file. (If you want to create your own version for some reason, please do so in a separate commit.)
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'yard'
|
6
|
+
require 'yard/rake/yardoc_task'
|
7
|
+
|
8
|
+
task :default => :spec
|
9
|
+
|
10
|
+
desc 'Test the plugin.'
|
11
|
+
RSpec::Core::RakeTask.new('spec') do |t|
|
12
|
+
t.pattern = FileList['spec/**/*_spec.rb']
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'Generate docs'
|
16
|
+
YARD::Rake::YardocTask.new do |t|
|
17
|
+
t.files = ['lib/**/*.rb']
|
18
|
+
#t.options = ['--plugin', 'yard-tomdoc']
|
19
|
+
end
|
20
|
+
|
21
|
+
if RUBY_VERSION =~ /^1\.9/
|
22
|
+
desc "Code coverage detail"
|
23
|
+
task :simplecov do
|
24
|
+
ENV['COVERAGE'] = "true"
|
25
|
+
Rake::Task['spec'].execute
|
26
|
+
end
|
27
|
+
else
|
28
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
29
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
30
|
+
spec.rcov = true
|
31
|
+
end
|
32
|
+
end
|
data/lib/shoehorn.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
module Shoehorn
|
4
|
+
require "shoehorn/version"
|
5
|
+
|
6
|
+
require "shoehorn/helper_collection"
|
7
|
+
require "shoehorn/helper_collection_set"
|
8
|
+
|
9
|
+
autoload :Helpers, "shoehorn/helpers"
|
10
|
+
autoload :Components, "shoehorn/components"
|
11
|
+
|
12
|
+
require "shoehorn/engine" if defined?(::Rails)
|
13
|
+
require "shoehorn/plugins"
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Shoehorn
|
2
|
+
module Components
|
3
|
+
autoload :Base, 'shoehorn/components/base'
|
4
|
+
autoload :Badge, 'shoehorn/components/badge'
|
5
|
+
autoload :Alert, 'shoehorn/components/alert'
|
6
|
+
autoload :Label, 'shoehorn/components/label'
|
7
|
+
autoload :Icon, 'shoehorn/components/icon'
|
8
|
+
#autoload :Form, 'shoehorn/components/form'
|
9
|
+
#autoload :FormBuilder, 'shoehorn/components/form_builder'
|
10
|
+
autoload :Button, 'shoehorn/components/button'
|
11
|
+
autoload :ButtonDropdown, 'shoehorn/components/button_dropdown'
|
12
|
+
autoload :Navigation, 'shoehorn/components/navigation'
|
13
|
+
autoload :Modal, 'shoehorn/components/modal'
|
14
|
+
autoload :ProgressBar, 'shoehorn/components/progress_bar'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Shoehorn::Components
|
2
|
+
class Alert < Base
|
3
|
+
attr_reader :message
|
4
|
+
|
5
|
+
def initialize(message, options = {})
|
6
|
+
super
|
7
|
+
@message = message
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
output_buffer << content_tag(:div, build_div_options) do
|
12
|
+
html = ""
|
13
|
+
html << build_close_tag.html_safe if options[:close]
|
14
|
+
html << build_heading_tag.html_safe if options[:heading]
|
15
|
+
html << message
|
16
|
+
html.html_safe
|
17
|
+
end.html_safe
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def default_options
|
23
|
+
{
|
24
|
+
:class => "alert",
|
25
|
+
:block => false,
|
26
|
+
:close => true,
|
27
|
+
:heading => nil,
|
28
|
+
:dismiss => true,
|
29
|
+
:type => nil,
|
30
|
+
:html_options => {}
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
def build_close_tag
|
35
|
+
content_tag(:a, "×".html_safe, close_tag_options)
|
36
|
+
end
|
37
|
+
|
38
|
+
def build_heading_tag
|
39
|
+
options[:block] ? build_block_heading : build_inline_heading
|
40
|
+
end
|
41
|
+
|
42
|
+
def build_block_heading
|
43
|
+
content_tag(:h4, options[:heading], :class => 'alert-heading')
|
44
|
+
end
|
45
|
+
|
46
|
+
def build_inline_heading
|
47
|
+
content_tag(:strong, options[:heading])
|
48
|
+
end
|
49
|
+
|
50
|
+
def close_tag_options
|
51
|
+
opts = { :class => "close" }
|
52
|
+
opts["data-dismiss"] = "alert" if options[:dismiss]
|
53
|
+
opts
|
54
|
+
end
|
55
|
+
|
56
|
+
def build_div_options
|
57
|
+
opts = { :class => build_class }
|
58
|
+
opts.reverse_merge(options[:html_options])
|
59
|
+
end
|
60
|
+
|
61
|
+
def build_class
|
62
|
+
classes = %w(alert)
|
63
|
+
classes << "alert-block" if options[:block]
|
64
|
+
classes << "alert-#{options[:type]}" if options[:type]
|
65
|
+
classes.join(" ")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|