bootstrap3_helper 1.0.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,103 +1,89 @@
1
- # @root
2
- #
3
- #
4
- module Bootstrap3Helper
5
- # @description
6
- # - Used to rapidly generated Bootstrap Tabs Components.
1
+ module Bootstrap3Helper # :nodoc:
2
+ # Used to rapidly generated Bootstrap Tabs Components.
7
3
  #
8
- # @note
9
- # - On menu items - you can pass in either symbol or string for the link. If
10
- # you pass in a block, it will use the block for the title of the li. If no
11
- # block is present, then it will titleize the symbol or string.
4
+ # @note On menu items - you can pass in either symbol or string for the link. If
5
+ # you pass in a block, it will use the block for the title of the li. If no
6
+ # block is present, then it will titleize the symbol or string.
12
7
  #
13
- # Tabs::Menu will respond to <code>item</code> and <code>dropdown</code>
14
- # Each method will yield the corresponding component, either a Tabs::Menu
15
- # or a Tabs::Dropdown.
8
+ # Tabs::Menu will respond to <code>item</code> and <code>dropdown</code>
9
+ # Each method will yield the corresponding component, either a Tabs::Menu
10
+ # or a Tabs::Dropdown.
16
11
  #
17
- # <code>
18
- # <%= tabs_helper type: :pills do |menu, content| %>
19
- # <% menu.item(:testing1, class: 'active') { ' Testing 1' } %>
20
- # <% menu.item :testing2 %>
21
- # <% menu.item(:testing3) { ' Testing 3' } %>
22
- # <% menu.dropdown 'Testing Dropdown' do |dropdown| %>
23
- # <%= dropdown.item(:testing5 ) { 'Testing 5' } %>
24
- # <%= dropdown.item(:testing6 ) { 'Testing 6' } %>
25
- # <%= dropdown.item(:testing7 ) { 'Testing 7' } %>
26
- # <% end %>
12
+ # @example Rendering out a Bootstrap Tab components in a view:
13
+ # <%= tabs_helper type: :pills do |menu, content| %>
14
+ # <%= menu.item(:testing1, class: 'active') { ' Testing 1' } %>
15
+ # <%= menu.item :testing2 %>
16
+ # <%= menu.item(:testing3) { ' Testing 3' } %>
17
+ # <%= menu.dropdown 'Testing Dropdown' do |dropdown| %>
18
+ # <%= dropdown.item(:testing5 ) { 'Testing 5' } %>
19
+ # <%= dropdown.item(:testing6 ) { 'Testing 6' } %>
20
+ # <%= dropdown.item(:testing7 ) { 'Testing 7' } %>
21
+ # <% end %>
22
+ #
23
+ # <%= content.item :testing1, class: 'active' do %>
24
+ # Testing 1 content
25
+ # <% end %>
26
+ # <%= content.item :testing2 do %>
27
+ # Testing 2 content
28
+ # <% end %>
29
+ # <%= content.item :testing3 do %>
30
+ # Testing 3 content
31
+ # <% end %>
32
+ # <%= content.item :testing5 do %>
33
+ # Testing 5 content
34
+ # <% end %>
35
+ # <%= content.item :testing6 do %>
36
+ # Testing 6 content
37
+ # <% end %>
38
+ # <%= content.item :testing7 do %>
39
+ # Testing 7 content
40
+ # <% end %>
41
+ # <% end %>
27
42
  #
28
- # <% content.item :testing1, class: 'active' do %>
29
- # Testing 1 content
30
- # <% end %>
31
- # <% content.item :testing2 do %>
32
- # Testing 2 content
33
- # <% end %>
34
- # <% content.item :testing3 do %>
35
- # Testing 3 content
36
- # <% end %>
37
- # <% content.item :testing5 do %>
38
- # Testing 5 content
39
- # <% end %>
40
- # <% content.item :testing6 do %>
41
- # Testing 6 content
42
- # <% end %>
43
- # <% content.item :testing7 do %>
44
- # Testing 7 content
45
- # <% end %>
46
- # <% end %>
47
- # </code>
48
43
  class Tabs < Component
49
- # @description
50
- # - Creates a new Tabs object.
44
+ # Creates a new Tabs object.
51
45
  #
52
- # @param [Class] template - Template in which your are binding too.
46
+ # @param [ActionView] template - Template in which your are binding too.
53
47
  # @param [Hash] args
54
- # <code>
55
- # args = {
56
- # type: [String|Symbol] - Used to tell the helper which tab version - :tabs|:pills
57
- # id: [String|nilClass] - The ID, if you want one, for the parent container
58
- # class: [String|nilClass] - Custom class for the parent container
59
- # }
60
- # </code>
48
+ # @option args [String|Symbol] :type Used to tell the helper which tab version - :tabs|:pills
49
+ # @option args [String] :id The ID, if you want one, for the parent container
50
+ # @option args [String] :class Custom class for the parent container.
61
51
  #
62
- def initialize(template, args = {})
52
+ def initialize(template, args = {}, &block)
63
53
  super(template)
64
- @type = args.fetch(:type, :tabs)
65
- @id = args.fetch(:id, nil)
66
- @class = args.fetch(:class, '')
67
54
 
68
- @tab_menu = Tabs::Menu.new(@template, type: @type)
69
- @tab_content = Tabs::Content.new(@template)
55
+ @type = args.fetch(:type, :tabs)
56
+ @id = args.fetch(:id, nil)
57
+ @class = args.fetch(:class, '')
58
+ @content = block || proc { '' }
70
59
  end
71
60
 
72
- # @description
73
- # - Allows you access the Tabs::Menu object.
61
+ # Allows you access the Tabs::Menu object.
74
62
  #
63
+ # @see Tabs::Menu
75
64
  # @return [Tabs::Menu]
76
65
  #
77
- def menu
78
- @tab_menu
66
+ def menu(args = {}, &block)
67
+ Tabs::Menu.new(@template, args.merge(type: @type), &block)
79
68
  end
80
69
 
81
- # @description
82
- # - Allows you to access the Tabs::Content object
70
+ # Allows you to access the Tabs::Content object
83
71
  #
72
+ # @see Tabs::Content
84
73
  # @return [Tabs::Content]
85
74
  #
86
- def content
87
- @tab_content
75
+ def content(args = {}, &block)
76
+ Tabs::Content.new(@template, args, &block)
88
77
  end
89
78
 
90
- # @description
91
- # - Used to render out the HTML of the Tabs Object
79
+ # Used to render out the HTML of the Tabs Object
92
80
  #
93
81
  # @return [String]
94
82
  #
95
83
  def to_s
96
- html = content_tag :div, id: @id, class: @class do
97
- menu.to_s + content.to_s
84
+ content_tag :div, id: @id, class: @class do
85
+ @content.call(self)
98
86
  end
99
-
100
- html
101
87
  end
102
88
  end
103
89
  end
@@ -1,45 +1,35 @@
1
- # @description
2
- # - Root Object
3
- #
4
- module Bootstrap3Helper
1
+ module Bootstrap3Helper # :nodoc:
5
2
  class Tabs
6
- # @description
7
- # - Used to rapidly generated Bootstrap Tabs Content Components.
3
+ # Used to rapidly generated Bootstrap Tabs Content Components.
4
+ #
8
5
  #
9
6
  class Content < Component
10
- # @description
11
- # - Creates a new Tabs::Menu object.
7
+ # Creates a new Tabs::Menu object.
12
8
  #
13
- # @param [Class] template - Template in which your are binding too.
9
+ # @param [ActionView] template Template in which your are binding too.
14
10
  # @param [Hash] args
15
- # <code>
16
- # args = {
17
- # id: [String|nilClass] - The ID, if you want one, for the parent container
18
- # class: [String|nilClass] - Custom class for the parent container
19
- # }
20
- # </code>
11
+ # @option args [String] :id The ID, if you want one, for the parent container.
12
+ # @option args [String] :class Custom class for the parent container.
13
+ # @option args [Hash] :data Any data attributes you want on the parent element.
21
14
  #
22
- def initialize(template, args = {})
15
+ def initialize(template, args = {}, &block)
23
16
  super(template)
24
17
 
25
- @id = args.fetch(:id, nil)
26
- @class = args.fetch(:class, '')
27
- @items = []
18
+ @id = args.fetch(:id, nil)
19
+ @class = args.fetch(:class, '')
20
+ @data = args.fetch(:data, {})
21
+ @content = block || proc { '' }
28
22
  end
29
23
 
30
- # @description
31
- # - Adds a new tabe-pane item to the object.
24
+ # Adds a new tabe pane item to the object.
32
25
  #
33
26
  # @param [String|Symbol] name - Used to link to the nav menu item.
34
27
  # @param [Hash] args
35
- # <code>
36
- # args = {
37
- # class: [String|nilClass] - Custom class for the div element
38
- # data: [Hash] - Any data attributes you wish to assign to div element.
39
- # }
40
- # </code>
28
+ # @option args [String] :class Custom class for the pane.
29
+ # @option args [Hash] :data Any data attributes you want on the pane element.
30
+ # @yieldreturn [String]
41
31
  #
42
- def item(name, args = {})
32
+ def pane(name, args = {})
43
33
  data = args.fetch(:data, nil)
44
34
  klass = args.fetch(:class, '')
45
35
  active = klass.include? 'active'
@@ -55,21 +45,16 @@ module Bootstrap3Helper
55
45
  ) do
56
46
  yield if block_given?
57
47
  end
58
-
59
- @items.push(content)
60
48
  end
61
49
 
62
- # @description
63
- # - Used to render out the object as HTML
50
+ # Used to render out the object as HTML
64
51
  #
65
52
  # @return [String]
66
53
  #
67
54
  def to_s
68
- html = content_tag :div, id: @id, class: 'tab-content' + @class do
69
- @items.collect(&:to_s).join.html_safe
55
+ content_tag :div, id: @id, class: 'tab-content' + @class do
56
+ @content.call(self)
70
57
  end
71
-
72
- html
73
58
  end
74
59
  end
75
60
  end
@@ -1,57 +1,50 @@
1
- # @description
2
- # - Root Object
3
- #
4
- module Bootstrap3Helper
1
+ module Bootstrap3Helper # :nodoc:
5
2
  class Tabs
6
- # @description
7
- # - Used to rapidly build dropdown menus for Bootstrap tabs.
3
+ # Used to rapidly build dropdown menus for Bootstrap tabs.
8
4
  #
9
- # <code>
10
- # <% menu.dropdown 'Testing Dropdown' do |dropdown| %>
11
- # <%= dropdown.item(:testing5 ) { 'Testing 5' } %>
12
- # <%= dropdown.item(:testing6 ) { 'Testing 6' } %>
13
- # <%= dropdown.item(:testing7 ) { 'Testing 7' } %>
14
- # <% end %>
15
- # </code>
5
+ # @example Rendering a Dropdown menu component:
6
+ # <code>
7
+ # <%= menu.dropdown 'Testing Dropdown' do |dropdown| %>
8
+ # <%= dropdown.item(:testing5 ) { 'Testing 5' } %>
9
+ # <%= dropdown.item(:testing6 ) { 'Testing 6' } %>
10
+ # <%= dropdown.item(:testing7 ) { 'Testing 7' } %>
11
+ # <% end %>
12
+ # </code>
16
13
  #
17
14
  class Dropdown < Component
18
- # @description
19
- # - Creates a new Tabs::Dropdown object.
15
+ # Creates a new Tabs::Dropdown object.
20
16
  #
21
- # @param [Class] template - Template in which your are binding too.
17
+ # @param [ActionView] template Template in which your are binding too.
18
+ # @param [String] name
22
19
  #
23
- def initialize(template, name = '')
20
+ def initialize(template, name = '', &block)
24
21
  super(template)
25
22
 
26
- @name = name
27
- @items = []
23
+ @name = name
24
+ @content = block || proc { '' }
28
25
  end
29
26
 
30
- # @description
31
- # - Adds a new item to the dropdown object.
27
+ # rubocop:disable Metrics/MethodLength
28
+
29
+ # Adds a new item to the dropdown object.
32
30
  #
33
- # @note
34
- # - You can opt out of passing in a block and the li will use the name attribute
35
- # for the menu item.
31
+ # @note You can opt out of passing in a block and the li will use the name attribute
32
+ # for the menu item.
36
33
  #
37
34
  # @param [String|Symbol] name - Used to link nav li to tab-content
38
35
  # @param [Hash] args
39
- # <code>
40
- # args = {
41
- # id: [String|Symbol] - Custom ID for li element.
42
- # class: [String|nilClass] - Custom class for the li element
43
- # data: [Hash] - Any data attributes you wish to assign to li element.
44
- # }
45
- # </code>
36
+ # @option args [String] :id The ID, if you want one, for the li element.
37
+ # @option args [String] :class Custom class for the li element.
38
+ # @option args [Hash] :data Any data attributes you want on the li element.
39
+ # @yieldreturn [String]
46
40
  #
47
- # rubocop:disable Metrics/MethodLength
48
41
  def item(name, args = {})
49
42
  id = args.fetch(:id, nil)
50
43
  klass = args.fetch(:class, '')
51
44
  data = args.fetch(:data, nil)
52
45
  active = klass.include? 'active'
53
46
 
54
- li = content_tag(
47
+ content_tag(
55
48
  :li,
56
49
  id: id,
57
50
  class: klass,
@@ -67,24 +60,25 @@ module Bootstrap3Helper
67
60
  block_given? ? yield : name.to_s.titleize
68
61
  end
69
62
  end
70
-
71
- @items.push(li)
72
63
  end
73
64
  # rubocop:enable Metrics/MethodLength
74
65
 
75
- # @description
76
- # - Used to render out the object and get the HTML representation.
66
+ # Used to render out the object and get the HTML representation.
77
67
  #
78
68
  # @return [String]
79
69
  #
80
70
  def to_s
81
- content = content_tag :a, @name, href: '#', class: 'dropdown-toggle', data: { toggle: 'dropdown' }, aria: { expanded: false }
71
+ content = content_tag(
72
+ :a,
73
+ @name,
74
+ href: '#',
75
+ class: 'dropdown-toggle',
76
+ data: { toggle: 'dropdown' }, aria: { expanded: false }
77
+ )
82
78
 
83
79
  content += content_tag :ul, id: @id, class: 'dropdown-menu ' do
84
- @items.collect(&:to_s).join.html_safe
80
+ @content.call(self)
85
81
  end
86
-
87
- content
88
82
  end
89
83
  end
90
84
  end
@@ -1,56 +1,44 @@
1
- # @description
2
- # - Root Object
3
- #
4
- module Bootstrap3Helper
1
+ module Bootstrap3Helper # :nodoc:
5
2
  class Tabs
6
- # @description
7
- # - Used to rapidly generated Bootstrap Tabs Menu Components.
3
+ # Used to rapidly generated Bootstrap Tabs Menu Components.
8
4
  #
9
- # <code>
10
- # <% menu.item(:testing3) { ' Testing 3' } %>
11
- # </code>
5
+ # @example Rendering out a Tabs::Menu component:
6
+ # <code>
7
+ # <% menu.item(:testing3) { ' Testing 3' } %>
8
+ # </code>
12
9
  #
13
10
  class Menu < Component
14
- # @description
15
- # - Creates a new Tabs::Menu object.
11
+ # Creates a new Tabs::Menu object.
16
12
  #
17
- # @param [Class] template - Template in which your are binding too.
13
+ # @param [ActionView] template - Template in which your are binding too.
18
14
  # @param [Hash] args
19
- # <code>
20
- # args = {
21
- # type: [String|Symbol] - Used to tell the helper which tab version - :tabs|:pills
22
- # id: [String|nilClass] - The ID, if you want one, for the parent container
23
- # class: [String|nilClass] - Custom class for the parent container
24
- # }
25
- # </code>
15
+ # @option args [Symbol] type Used to tell the helper which tab version :tabs|:pills
16
+ # @option args [String] id The ID, if you want one, for the parent container
17
+ # @option args [String] class Custom class for the parent container
26
18
  #
27
- def initialize(template, args = {})
19
+ def initialize(template, args = {}, &block)
28
20
  super(template)
29
21
 
30
- @id = args.fetch(:id, nil)
31
- @class = args.fetch(:class, '')
32
- @type = args.fetch(:type, :tabs)
33
- @items = []
22
+ @id = args.fetch(:id, nil)
23
+ @class = args.fetch(:class, '')
24
+ @type = args.fetch(:type, :tabs)
25
+ @content = block || proc { '' }
34
26
  end
35
27
 
36
- # @description
37
- # - Adds a new menu item to the object.
28
+ # rubocop:disable Metrics/MethodLength
29
+
30
+ # Adds a new menu item to the object.
38
31
  #
39
- # @note
40
- # - You can opt out of passing in a block and the li will use the name attribute
41
- # for the menu item.
32
+ # @note You can opt out of passing in a block and the li will use
33
+ # the name attribute for the menu item.
42
34
  #
43
- # @param [String|Symbol] name - Used to link nav li to tab-content
35
+ # @param [String|Symbol] name Used to link nav li to tab-content
44
36
  # @param [Hash] args
45
- # <code>
46
- # args = {
47
- # id: [String|Symbol] - Custom ID for li element.
48
- # class: [String|nilClass] - Custom class for the li element
49
- # data: [Hash] - Any data attributes you wish to assign to li element.
50
- # }
51
- # </code>
37
+ # @option args [String] :id
38
+ # @option args [String] :class
39
+ # @option args [Hash] :data
40
+ # @yieldreturn [String]
52
41
  #
53
- # rubocop:disable Metrics/MethodLength
54
42
  def item(name, args = {})
55
43
  id = args.fetch(:id, nil)
56
44
  data = args.fetch(:data, nil)
@@ -75,42 +63,37 @@ module Bootstrap3Helper
75
63
  block_given? ? yield : name.to_s.titleize
76
64
  end
77
65
  end
78
-
79
- @items.push(li)
80
66
  end
81
67
  # rubocop:enable Metrics/MethodLength
82
68
 
83
- # @description
84
- # - Used to create menu items that are Dropdowns
69
+ # Used to create menu items that are Dropdowns
85
70
  #
86
- # @param [String|Symbol] name -
71
+ # @param [String|Symbol] name
72
+ # @param [Hash] args
73
+ # @option args [String] :id
74
+ # @option args [String] :class
75
+ # @option args [Hash] :data
76
+ # @yieldparam dropdown [Tabs::Dropdown]
87
77
  #
88
- def dropdown(name, args = {})
89
- id = args.fetch(:id, nil)
90
- data = args.fetch(:data, nil)
91
- klass = args.fetch(:class, '')
92
-
93
- dropdown = Tabs::Dropdown.new(@template, name)
94
- yield dropdown if block_given?
78
+ def dropdown(name, args = {}, &block)
79
+ id = args.fetch(:id, nil)
80
+ data = args.fetch(:data, nil)
81
+ klass = args.fetch(:class, '')
82
+ dropdown = Tabs::Dropdown.new(@template, name, &block)
95
83
 
96
84
  content = content_tag :li, id: id, class: 'dropdown' + klass, data: data do
97
- dropdown.to_s
85
+ dropdown.to_s.html_safe
98
86
  end
99
-
100
- @items.push(content)
101
87
  end
102
88
 
103
- # @description
104
- # - Used to render out the contents of the menu.
89
+ # Used to render out the contents of the menu.
105
90
  #
106
91
  # @return [String]
107
92
  #
108
93
  def to_s
109
- html = content_tag :ul, id: @id, class: "nav nav-#{@type} " + @class, role: 'tablist' do
110
- @items.collect(&:to_s).join.html_safe
94
+ content_tag :ul, id: @id, class: "nav nav-#{@type} " + @class, role: 'tablist' do
95
+ @content.call(self)
111
96
  end
112
-
113
- html
114
97
  end
115
98
  end
116
99
  end