bootstrap_it 0.1.1 → 0.1.2

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -1
  3. data/bootstrap_it.gemspec +9 -8
  4. data/lib/bootstrap_it/config.rb +1 -1
  5. data/lib/bootstrap_it/engine.rb +1 -1
  6. data/lib/bootstrap_it/version.rb +1 -1
  7. data/lib/bootstrap_it/view_helpers.rb +4 -1
  8. data/lib/bootstrap_it/view_helpers/breadcrumb.rb +3 -2
  9. data/lib/bootstrap_it/view_helpers/button.rb +47 -39
  10. data/lib/bootstrap_it/view_helpers/button_group.rb +23 -4
  11. data/lib/bootstrap_it/view_helpers/dropdown_menu.rb +6 -5
  12. data/lib/bootstrap_it/view_helpers/form.rb +40 -41
  13. data/lib/bootstrap_it/view_helpers/grid.rb +9 -5
  14. data/lib/bootstrap_it/view_helpers/icon.rb +4 -2
  15. data/lib/bootstrap_it/view_helpers/list.rb +5 -5
  16. data/lib/bootstrap_it/view_helpers/misc.rb +37 -36
  17. data/lib/bootstrap_it/view_helpers/mixin.rb +16 -24
  18. data/lib/bootstrap_it/view_helpers/nav.rb +23 -21
  19. data/lib/bootstrap_it/view_helpers/pagination.rb +8 -6
  20. data/lib/bootstrap_it/view_helpers/table.rb +6 -10
  21. data/lib/bootstrap_it/view_helpers/text.rb +10 -8
  22. data/spec/spec_helper.rb +5 -2
  23. data/spec/support/example_groups/view_helpers_example_group.rb +4 -5
  24. data/spec/view_helpers/breadcrumb_spec.rb +8 -4
  25. data/spec/view_helpers/button_group_spec.rb +4 -4
  26. data/spec/view_helpers/button_spec.rb +25 -23
  27. data/spec/view_helpers/button_toolbar_spec.rb +3 -3
  28. data/spec/view_helpers/dropdown_menu_spec.rb +9 -9
  29. data/spec/view_helpers/form_spec.rb +4 -4
  30. data/spec/view_helpers/grid_spec.rb +5 -5
  31. data/spec/view_helpers/icon_spec.rb +2 -2
  32. data/spec/view_helpers/list_spec.rb +9 -9
  33. data/spec/view_helpers/misc_spec.rb +11 -11
  34. data/spec/view_helpers/mixin_spec.rb +49 -38
  35. data/spec/view_helpers/nav_spec.rb +14 -10
  36. data/spec/view_helpers/pagination_spec.rb +6 -6
  37. data/spec/view_helpers/table_spec.rb +9 -10
  38. data/spec/view_helpers/text_spec.rb +3 -3
  39. data/spec/views/examples_spec.rb +49 -36
  40. metadata +31 -32
  41. data/lib/bootstrap_it/view_helpers/button_toolbar.rb +0 -21
@@ -4,8 +4,9 @@ module BootstrapIt
4
4
  #
5
5
  # Grid
6
6
  #
7
- # @author [alexiss]
7
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
8
8
  #
9
+ # @see http://getbootstrap.com/css/#grid Bootstrap docs
9
10
  class Grid < WrapIt::Container
10
11
  html_class 'container'
11
12
  child :row, 'BootstrapIt::ViewHelpers::GridRow'
@@ -14,14 +15,15 @@ module BootstrapIt
14
15
  #
15
16
  # GridRow
16
17
  #
17
- # @author [alexiss]
18
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
18
19
  #
19
20
  class GridRow < WrapIt::Container
20
21
  #
21
22
  # Clearfix
22
23
  #
23
- # @author [alexiss]
24
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
24
25
  #
26
+ # @see http://getbootstrap.com/css/#grid-responsive-resets Bootstrap docs
25
27
  class Clearfix < WrapIt::Base
26
28
  TYPES = %w(visible-xs visible-sm visible-md visible-lg
27
29
  hidden-xs hidden-sm hidden-md hidden-lg)
@@ -30,7 +32,9 @@ module BootstrapIt
30
32
  [-_]?
31
33
  (?:(?:extra[-_]?small)|xs|small|sm|medium|md|large|lg)
32
34
  \z/xi
35
+
33
36
  html_class 'clearfix'
37
+
34
38
  after_initialize do
35
39
  type = @arguments.extract_first!(Symbol, String, and: [REGEXP]) ||
36
40
  'visible-md'
@@ -55,7 +59,7 @@ module BootstrapIt
55
59
  #
56
60
  # GridCell
57
61
  #
58
- # @author [alexiss]
62
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
59
63
  #
60
64
  class GridCell < WrapIt::Container
61
65
  include SizableColumn
@@ -70,6 +74,6 @@ module BootstrapIt
70
74
  end
71
75
  end
72
76
 
73
- WrapIt.register :grid, 'BootstrapIt::ViewHelpers::Grid'
77
+ register :grid, 'BootstrapIt::ViewHelpers::Grid'
74
78
  end
75
79
  end
@@ -4,8 +4,10 @@ module BootstrapIt
4
4
  #
5
5
  # Icon
6
6
  #
7
- # @author [alexiss]
7
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
8
8
  #
9
+ # @see http://getbootstrap.com/components/#glyphicons Bootstrap docs
10
+ # @see http://fontawesome.io/icons/ Font awesome icon list
9
11
  class Icon < WrapIt::Base
10
12
  omit_content
11
13
 
@@ -19,6 +21,6 @@ module BootstrapIt
19
21
  end
20
22
  end
21
23
 
22
- WrapIt.register :icon, 'BootstrapIt::ViewHelpers::Icon'
24
+ register :icon, 'BootstrapIt::ViewHelpers::Icon'
23
25
  end
24
26
  end
@@ -4,21 +4,21 @@ module BootstrapIt
4
4
  #
5
5
  # ListItem
6
6
  #
7
- # @author [alexiss]
7
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
8
8
  #
9
9
  class ListItem < WrapIt::Base
10
- default_tag 'li'
11
-
10
+ include WrapIt::TextContainer
12
11
  include Activable
13
12
  include Disableable
14
- include WrapIt::TextContainer
13
+
14
+ default_tag 'li'
15
15
  end
16
16
 
17
17
 
18
18
  #
19
19
  # ListLinkItem
20
20
  #
21
- # @author [alexiss]
21
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
22
22
  #
23
23
  class ListLinkItem < WrapIt::Link
24
24
  REGEXP = /\Ali_/
@@ -4,15 +4,16 @@ module BootstrapIt
4
4
  #
5
5
  # Jumbotron
6
6
  #
7
- # @author [alexiss]
7
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
8
8
  #
9
+ # @see http://getbootstrap.com/components/#jumbotron Bootstrap docs
9
10
  class Jumbotron < WrapIt::Base
10
11
  html_class 'jumbotron'
11
12
  switch :full_width
12
13
 
13
14
  after_capture do
14
- full_width? && @content = content_tag(
15
- 'div', @content, class: 'container'
15
+ full_width? && self[:content] = content_tag(
16
+ 'div', render_sections, class: 'container'
16
17
  )
17
18
  end
18
19
  end
@@ -20,8 +21,9 @@ module BootstrapIt
20
21
  #
21
22
  # PageHeader
22
23
  #
23
- # @author [alexiss]
24
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
24
25
  #
26
+ # @see http://getbootstrap.com/components/#page-header Bootstrap docs
25
27
  class PageHeader < WrapIt::Base
26
28
  html_class 'page-header'
27
29
  end
@@ -29,8 +31,9 @@ module BootstrapIt
29
31
  #
30
32
  # Alert
31
33
  #
32
- # @author [alexiss]
34
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
33
35
  #
36
+ # @see http://getbootstrap.com/components/#alerts Bootstrap docs
34
37
  class Alert < WrapIt::Container
35
38
  include WrapIt::TextContainer
36
39
 
@@ -40,18 +43,20 @@ module BootstrapIt
40
43
  enum :appearence, %i(success info warning danger),
41
44
  default: :success, html_class: true
42
45
  switch :dismissable, html_class: true
43
- child :link, 'WrapIt::Link', [class: 'alert-link']
46
+ child :link, 'WrapIt::Link', class: 'alert-link'
47
+ section :dismissable
48
+ place :dismissable, before: :content
44
49
 
45
- before_render do
50
+ after_capture do
46
51
  if dismissable?
47
- @content = content_tag(
52
+ self[:dismissable] = content_tag(
48
53
  'button',
49
54
  html_safe('&times;'),
50
55
  type: 'button',
51
56
  class: 'close',
52
57
  data: {dismiss: 'alert'},
53
58
  'aria-hidden' => true
54
- ) + @content
59
+ )
55
60
  end
56
61
  end
57
62
  end
@@ -59,8 +64,9 @@ module BootstrapIt
59
64
  #
60
65
  # ProgressBar
61
66
  #
62
- # @author [alexiss]
67
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
63
68
  #
69
+ # @see http://getbootstrap.com/components/#progress Bootstrap docs
64
70
  class ProgressBar < WrapIt::Base
65
71
  include WrapIt::TextContainer
66
72
 
@@ -85,24 +91,27 @@ module BootstrapIt
85
91
  @options[:style] = "width: #{@completed}%"
86
92
  end
87
93
 
88
- before_render do
94
+ after_capture do
95
+ rendered = render_sections
89
96
  text =
90
- if @content.empty?
97
+ if rendered.empty?
91
98
  I18n.translate(
92
99
  'bootstrap_it.progress_bar.text', completed: @completed
93
100
  )
94
101
  else
95
- @content
102
+ rendered
96
103
  end
97
- @content = content_tag('span', text, class: 'sr-only')
104
+ # TODO: do it with wrap when simple wrapping will be coded
105
+ self[:content] = content_tag('span', text, class: 'sr-only')
98
106
  end
99
107
  end
100
108
 
101
109
  #
102
110
  # Progress
103
111
  #
104
- # @author [alexiss]
112
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
105
113
  #
114
+ # @see http://getbootstrap.com/components/#progress Bootstrap docs
106
115
  class Progress < WrapIt::Container
107
116
  include Activable
108
117
 
@@ -110,35 +119,27 @@ module BootstrapIt
110
119
  html_class_prefix 'progress-'
111
120
 
112
121
  child :bar, 'BootstrapIt::ViewHelpers::ProgressBar'
113
-
114
122
  switch :striped, html_class: true
123
+ section :first_bar
124
+ place :first_bar, before: :content
115
125
 
116
126
  after_initialize do
117
- @first_bar_args = @arguments.clone
127
+ self.deffered_render = true
128
+ args = @arguments.clone
118
129
  # TODO: PORTABILITY: replace deep_dup (Rails)
119
130
  opts = @options.deep_dup
120
131
  opts[:class].select! { |o| o != 'progress' && o != 'progress-striped' }
121
- @first_bar_args.push(opts)
132
+ opts[:section] = :first_bar
133
+ args.push(opts)
134
+ bar(*args)
122
135
  end
123
-
124
- after_capture do
125
- @content = capture do
126
- ProgressBar.new(@template, *@first_bar_args).render
127
- end + @content
128
- end
129
-
130
- # after_capture do
131
- # @content = capture do
132
- # @bars.reduce(empty_html) { |a, e| a += e.render }
133
- # end + @content
134
- # end
135
136
  end
136
137
 
137
- WrapIt.register :jumbotron, 'BootstrapIt::ViewHelpers::Jumbotron'
138
- WrapIt.register :jumbo, 'BootstrapIt::ViewHelpers::Jumbotron'
139
- WrapIt.register :page_header, 'BootstrapIt::ViewHelpers::PageHeader'
140
- WrapIt.register :alert_box, 'BootstrapIt::ViewHelpers::Alert'
141
- WrapIt.register :progress_bar, 'BootstrapIt::ViewHelpers::Progress'
142
- WrapIt.register :progress, 'BootstrapIt::ViewHelpers::Progress'
138
+ register :jumbotron, 'BootstrapIt::ViewHelpers::Jumbotron'
139
+ register :jumbo, 'BootstrapIt::ViewHelpers::Jumbotron'
140
+ register :page_header, 'BootstrapIt::ViewHelpers::PageHeader'
141
+ register :alert_box, 'BootstrapIt::ViewHelpers::Alert'
142
+ register :progress_bar, 'BootstrapIt::ViewHelpers::Progress'
143
+ register :progress, 'BootstrapIt::ViewHelpers::Progress'
143
144
  end
144
145
  end
@@ -4,7 +4,7 @@ module BootstrapIt
4
4
  #
5
5
  # SizableColumn
6
6
  #
7
- # @author [alexiss]
7
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
8
8
  #
9
9
  module SizableColumn
10
10
  extend ActiveSupport::Concern
@@ -56,7 +56,7 @@ module BootstrapIt
56
56
  #
57
57
  # PlacableColumn
58
58
  #
59
- # @author [alexiss]
59
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
60
60
  #
61
61
  module PlacableColumn
62
62
  extend ActiveSupport::Concern
@@ -122,7 +122,7 @@ module BootstrapIt
122
122
  #
123
123
  # Contextual
124
124
  #
125
- # @author [alexiss]
125
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
126
126
  #
127
127
  module Contextual
128
128
  extend ActiveSupport::Concern
@@ -134,7 +134,7 @@ module BootstrapIt
134
134
  #
135
135
  # Activable
136
136
  #
137
- # @author [alexiss]
137
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
138
138
  #
139
139
  module Activable
140
140
  extend ActiveSupport::Concern
@@ -146,7 +146,7 @@ module BootstrapIt
146
146
  #
147
147
  # Disablable
148
148
  #
149
- # @author [alexiss]
149
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
150
150
  #
151
151
  module Disableable
152
152
  extend ActiveSupport::Concern
@@ -172,7 +172,7 @@ module BootstrapIt
172
172
  #
173
173
  # Sizable
174
174
  #
175
- # @author [alexiss]
175
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
176
176
  #
177
177
  module Sizable
178
178
  extend ActiveSupport::Concern
@@ -219,7 +219,7 @@ module BootstrapIt
219
219
  #
220
220
  # Justifable
221
221
  #
222
- # @author [alexiss]
222
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
223
223
  #
224
224
  module Justifable
225
225
  extend ActiveSupport::Concern
@@ -231,43 +231,35 @@ module BootstrapIt
231
231
  #
232
232
  # DropdownMenuWrapper
233
233
  #
234
- # @author [alexiss]
234
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
235
235
  #
236
236
  module DropdownMenuWrapper
237
237
  extend ActiveSupport::Concern
238
238
 
239
239
  included do |base|
240
- # puts "--- #{base.name}"
241
240
  base <= WrapIt::Container || fail(
242
241
  TypeError, 'Can be included only into WrapIt::Container subclasses'
243
242
  )
244
- # delegate :divider, :header, :link_item, to: :dropdown_menu
243
+
245
244
  child :dropdown_menu, 'BootstrapIt::ViewHelpers::DropdownMenu'
245
+
246
246
  after_initialize do
247
- @dropdown_items = []
248
- end
249
- after_render do
250
- unless @dropdown_items.empty?
251
- @content += capture do
252
- items = @dropdown_items
253
- dropdown_menu do |menu|
254
- items.each { |item| menu.send(item[0], *item[1], &item[2]) }
255
- end
256
- end
257
- end
247
+ self.deffered_render = true
248
+ dropdown_menu deffered_render: true
249
+ @dropdown_menu = children.first
258
250
  end
259
251
  end
260
252
 
261
253
  def header(*args, &block)
262
- @dropdown_items << [:header, args, block]
254
+ @dropdown_menu.header(*args, &block)
263
255
  end
264
256
 
265
257
  def divider(*args, &block)
266
- @dropdown_items << [:divider, args, block]
258
+ @dropdown_menu.divider(*args, &block)
267
259
  end
268
260
 
269
261
  def link_item(*args, &block)
270
- @dropdown_items << [:link_item, args, block]
262
+ @dropdown_menu.link_item(*args, &block)
271
263
  end
272
264
  end
273
265
 
@@ -4,7 +4,7 @@ module BootstrapIt
4
4
  #
5
5
  # DropdownNavItem
6
6
  #
7
- # @author [alexiss]
7
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
8
8
  #
9
9
  class DropdownNavItem < WrapIt::Container
10
10
  include WrapIt::TextContainer
@@ -14,16 +14,14 @@ module BootstrapIt
14
14
 
15
15
  default_tag 'li'
16
16
  html_class 'dropdown'
17
+ place :children, before: :end
17
18
 
18
19
  after_capture do
19
- # TODO: TextContainer should include body into content, but content
20
- # empty at this point
21
- @content += @body.html_safe unless @body.nil?
22
- body = @content + html_safe(' ') +
23
- content_tag('span', '', class: 'caret')
24
- # TODO: Replace 'link_to'
25
- @content = @template.link_to(
26
- body, '#', class: 'dropdown-toggle', data: {toggle: 'dropdown'}
20
+ rendered = render_sections(except: :children)
21
+ rendered << html_safe(' ') << content_tag('span', '', class: 'caret')
22
+ self[:content] = @template.content_tag(
23
+ 'a', rendered, href: '#', class: 'dropdown-toggle',
24
+ data: {toggle: 'dropdown'}
27
25
  )
28
26
  end
29
27
  end
@@ -31,8 +29,9 @@ module BootstrapIt
31
29
  #
32
30
  # Nav
33
31
  #
34
- # @author [alexiss]
32
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
35
33
  #
34
+ # @see http://getbootstrap.com/components/#nav Bootstrap docs
36
35
  class Nav < WrapIt::Container
37
36
  include Justifable
38
37
 
@@ -46,8 +45,9 @@ module BootstrapIt
46
45
  #
47
46
  # NavPills
48
47
  #
49
- # @author [alexiss]
48
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
50
49
  #
50
+ # @see http://getbootstrap.com/components/#nav-pills Bootstrap docs
51
51
  class NavPills < Nav
52
52
  default_tag 'ul'
53
53
  switch :stacked, html_class: 'nav-stacked'
@@ -57,8 +57,9 @@ module BootstrapIt
57
57
  #
58
58
  # NavTabs
59
59
  #
60
- # @author [alexiss]
60
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
61
61
  #
62
+ # @see http://getbootstrap.com/components/#nav-tabs Bootstrap docs
62
63
  class NavTabs < Nav
63
64
  default_tag 'ul'
64
65
  html_class 'nav-tabs'
@@ -67,8 +68,9 @@ module BootstrapIt
67
68
  #
68
69
  # NavBar
69
70
  #
70
- # @author [alexiss]
71
+ # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
71
72
  #
73
+ # @see http://getbootstrap.com/components/#navbar Bootstrap docs
72
74
  class NavBar < WrapIt::Container
73
75
  default_tag 'nav'
74
76
  html_class 'navbar'
@@ -81,16 +83,16 @@ module BootstrapIt
81
83
  @options[:role] = 'navigation'
82
84
  end
83
85
 
84
- child :button, 'BootstrapIt::ViewHelpers::Button', [class: 'navbar-btn']
85
- child :text, 'BootstrapIt::ViewHelpers::Text', [class: 'navbar-text']
86
+ child :button, 'BootstrapIt::ViewHelpers::Button', class: 'navbar-btn'
87
+ child :text, 'BootstrapIt::ViewHelpers::Text', class: 'navbar-text'
86
88
  alias_method :p, :text
87
- child :span, 'BootstrapIt::ViewHelpers::Text', [class: 'navbar-text']
89
+ child :span, 'BootstrapIt::ViewHelpers::Text', class: 'navbar-text'
88
90
  end
89
91
 
90
- WrapIt.register :nav_pills, 'BootstrapIt::ViewHelpers::NavPills'
91
- WrapIt.register :pills, 'BootstrapIt::ViewHelpers::NavPills'
92
- WrapIt.register :nav_tabs, 'BootstrapIt::ViewHelpers::NavTabs'
93
- WrapIt.register :tabs, 'BootstrapIt::ViewHelpers::NavTabs'
94
- WrapIt.register :navbar, 'BootstrapIt::ViewHelpers::NavBar'
92
+ register :nav_pills, 'BootstrapIt::ViewHelpers::NavPills'
93
+ register :pills, 'BootstrapIt::ViewHelpers::NavPills'
94
+ register :nav_tabs, 'BootstrapIt::ViewHelpers::NavTabs'
95
+ register :tabs, 'BootstrapIt::ViewHelpers::NavTabs'
96
+ register :navbar, 'BootstrapIt::ViewHelpers::NavBar'
95
97
  end
96
98
  end