tabulous 1.1.0 → 1.2.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/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ == 1.2.0 (February 8, 2012)
2
+ * Added support for Twitter Bootstrap (version 2).
3
+ * Noted in the documentation that tabulous works with Rails 3.2.
4
+
1
5
  == 1.1.0 (January 10, 2012)
2
6
  * Deprecated the raise_error_if_no_tab_found configuration setting. Replaced it with
3
7
  config.when_action_has_no_tab.
data/README.rdoc CHANGED
@@ -6,7 +6,7 @@ Tabulous provides an easy way to add tabs to your Rails application.
6
6
 
7
7
  == Requirements
8
8
 
9
- Tabulous only works with Rails 3.0 and 3.1. It has been tested on Ruby 1.8.7 and 1.9.2.
9
+ Tabulous works with Rails 3.0, 3.1 and 3.2. It has been tested on Ruby 1.8.7 and 1.9.2.
10
10
 
11
11
  == Usage
12
12
 
@@ -66,6 +66,23 @@ There is a tutorial at http://techiferous.com/2011/03/tutorial-for-adding-tabs-t
66
66
  Also, look in this gem's test/applications directory to find working example applications.
67
67
  Look at their app/tabs/tabulous.rb and app/layouts/application.html.erb files.
68
68
 
69
+ == Twitter Bootstrap
70
+
71
+ To get tabulous to work with Twitter Bootstrap version 2, make sure the
72
+ following values are set in app/tabs/tabulous.rb:
73
+
74
+ * config.css.scaffolding = false
75
+ * config.tabs_ul_class = "nav nav-pills" # or whatever Bootstrap class you want
76
+ * config.bootstrap_style_subtabs = true
77
+ * config.active_tab_clickable = true
78
+
79
+ When config.bootstrap_style_subtabs is set to true, the subtabs are rendered
80
+ inside the tab markup, so you only need to call the tabs helper in your
81
+ layout, not the subtabs helper.
82
+
83
+ Also note that if you use Twitter Bootstrap, you lose the ability to disable
84
+ individual subtabs.
85
+
69
86
  == Contributing
70
87
 
71
88
  Developers are encouraged to contribute ideas or code.
@@ -122,9 +122,9 @@ Tabulous.setup do |config|
122
122
  s << ' end'
123
123
  Tabulous::Formatter.format(s).join("\n") %>
124
124
 
125
- #-------------
126
- # OPTIONS
127
- #-------------
125
+ #---------------------
126
+ # GENERAL OPTIONS
127
+ #---------------------
128
128
 
129
129
  # By default, you cannot click on the active tab.
130
130
  config.active_tab_clickable = false
@@ -140,13 +140,28 @@ Tabulous.setup do |config|
140
140
  # config.when_action_has_no_tab = :render # the tab navigation HTML will be generated,
141
141
  # but no tab or subtab will be active
142
142
 
143
+ #--------------------
144
+ # MARKUP OPTIONS
145
+ #--------------------
146
+
143
147
  # By default, div elements are used in the tab markup. When html5 is
144
148
  # true, nav elements are used instead.
145
149
  config.html5 = false
146
150
 
147
- #------------
148
- # STYLES
149
- #------------
151
+ # This gives you control over what class the <ul> element that wraps the tabs
152
+ # will have. Good for interfacing with third-party code like Twitter
153
+ # Bootstrap.
154
+ # config.tabs_ul_class = "nav nav-pills"
155
+
156
+ # Set this to true to have subtabs rendered in markup that Twitter Bootstrap
157
+ # understands. If this is set to true, you don't need to call subtabs in
158
+ # your layout, just tabs.
159
+ # config.bootstrap_style_subtabs = true
160
+
161
+
162
+ #-------------------
163
+ # STYLE OPTIONS
164
+ #-------------------
150
165
  #
151
166
  # The markup that is generated has the following properties:
152
167
  #
@@ -161,7 +176,8 @@ Tabulous.setup do |config|
161
176
  # Some styles will be generated for you to get you off to a good start.
162
177
  # Scaffolded styles are not meant to be used in production as they
163
178
  # generate invalid HTML markup. They are merely meant to give you a
164
- # head start or an easy way to prototype quickly.
179
+ # head start or an easy way to prototype quickly. Set this to false if
180
+ # you are using Twitter Bootstrap.
165
181
  #
166
182
  config.css.scaffolding = true
167
183
 
@@ -34,6 +34,12 @@ module Tabulous
34
34
  mattr_accessor :html5
35
35
  @@html5 = false
36
36
 
37
+ mattr_accessor :tabs_ul_class
38
+ @@tabs_ul_class = nil
39
+
40
+ mattr_accessor :bootstrap_style_subtabs
41
+ @@bootstrap_style_subtabs = false
42
+
37
43
  def self.raise_error_if_no_tab_found=(value)
38
44
  msg = "DEPRECATION WARNING: Tabulous's config.raise_error_if_no_tab_found "
39
45
  msg << "has been replaced by config.when_action_has_no_tab. "
@@ -20,13 +20,29 @@ module Tabulous
20
20
  active_tab = active_tab(view)
21
21
  active_tab_name = (active_tab ? active_tab.name : nil);
22
22
  html << (@@html5 ? '<nav id="tabs">' : '<div id="tabs">')
23
- html << '<ul>'
23
+ if @@tabs_ul_class
24
+ html << %Q{<ul class="#{@@tabs_ul_class}">}
25
+ else
26
+ html << '<ul>'
27
+ end
24
28
  for tab in main_tabs
25
29
  next if !tab.visible?(view)
26
- html << render_tab(:text => tab.text(view),
27
- :path => tab.path(view),
28
- :active => (active_tab_name && tab.name == active_tab_name),
29
- :enabled => tab.enabled?(view))
30
+ if @@bootstrap_style_subtabs
31
+ subtabs = tab.subtabs.select{|subtab| subtab.visible?(view)}
32
+ end
33
+ if @@bootstrap_style_subtabs && !subtabs.empty?
34
+ html << render_dropdown_tab(view,
35
+ :text => tab.text(view),
36
+ :path => tab.path(view),
37
+ :active => (active_tab_name && tab.name == active_tab_name),
38
+ :enabled => tab.enabled?(view),
39
+ :subtabs => subtabs)
40
+ else
41
+ html << render_tab(:text => tab.text(view),
42
+ :path => tab.path(view),
43
+ :active => (active_tab_name && tab.name == active_tab_name),
44
+ :enabled => tab.enabled?(view))
45
+ end
30
46
  end
31
47
  html << '</ul>'
32
48
  html << (@@html5 ? '</nav>' : '</div>')
@@ -34,6 +50,12 @@ module Tabulous
34
50
  end
35
51
 
36
52
  def self.render_subtabs(view)
53
+ if @@bootstrap_style_subtabs
54
+ raise TabulousError,
55
+ "You should not call the subtabs view helper when config.bootstrap_style_subtabs " +
56
+ "is set to true. Simply call the tabs helper and the subtabs will be " +
57
+ "automatically rendered."
58
+ end
37
59
  initialize_tabs(view)
38
60
  return if !tab_defined?(view) && @@when_action_has_no_tab == :do_not_render
39
61
  controller = view.controller_name.to_sym
@@ -73,6 +95,36 @@ module Tabulous
73
95
  html
74
96
  end
75
97
 
98
+ # markup spefically tailored for Twitter Bootstrap
99
+ def self.render_dropdown_tab(view, options)
100
+ html = ''
101
+ klass = 'dropdown'
102
+ klass << (options[:active] ? ' active' : ' inactive')
103
+ klass << (options[:enabled] ? ' enabled' : ' disabled')
104
+ html << %Q{<li class="#{klass}">}
105
+ if (options[:active] && !@@active_tab_clickable) || options[:enabled] == false
106
+ html << %Q{<span class="tab">#{options[:text]}</span>}
107
+ else
108
+ html << %Q{<a class="dropdown-toggle tab"}
109
+ html << %Q{ data-toggle="dropdown"}
110
+ html << %Q{ href="#">}
111
+ html << %Q{#{options[:text]}<b class="caret"></b></a>}
112
+ end
113
+ html << '<ul class="dropdown-menu">'
114
+ for subtab in options[:subtabs]
115
+ if subtab.enabled?(view)
116
+ html << '<li class="enabled">'
117
+ else
118
+ html << '<li class="disabled">'
119
+ end
120
+ html << %Q{<a href="#{subtab.path(view)}">#{subtab.text(view)}</a>}
121
+ html << '</li>'
122
+ end
123
+ html << '</ul>'
124
+ html << '</li>'
125
+ html
126
+ end
127
+
76
128
  def self.initialize_tabs(view)
77
129
  if view.respond_to? :instance_exec # for Ruby 1.9
78
130
  self.tabs = view.instance_exec(&@@tabs_block)
@@ -1,3 +1,3 @@
1
1
  module Tabulous
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: tabulous
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.1.0
5
+ version: 1.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Wyatt Greene
@@ -10,10 +10,11 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-01-11 00:00:00 Z
13
+ date: 2012-02-07 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: colored
17
+ prerelease: false
17
18
  requirement: &id001 !ruby/object:Gem::Requirement
18
19
  none: false
19
20
  requirements:
@@ -21,10 +22,10 @@ dependencies:
21
22
  - !ruby/object:Gem::Version
22
23
  version: 1.2.0
23
24
  type: :runtime
24
- prerelease: false
25
25
  version_requirements: *id001
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rails
28
+ prerelease: false
28
29
  requirement: &id002 !ruby/object:Gem::Requirement
29
30
  none: false
30
31
  requirements:
@@ -32,10 +33,10 @@ dependencies:
32
33
  - !ruby/object:Gem::Version
33
34
  version: "3.0"
34
35
  type: :runtime
35
- prerelease: false
36
36
  version_requirements: *id002
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bundler
39
+ prerelease: false
39
40
  requirement: &id003 !ruby/object:Gem::Requirement
40
41
  none: false
41
42
  requirements:
@@ -43,10 +44,10 @@ dependencies:
43
44
  - !ruby/object:Gem::Version
44
45
  version: 1.0.10
45
46
  type: :development
46
- prerelease: false
47
47
  version_requirements: *id003
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: capybara
50
+ prerelease: false
50
51
  requirement: &id004 !ruby/object:Gem::Requirement
51
52
  none: false
52
53
  requirements:
@@ -54,10 +55,10 @@ dependencies:
54
55
  - !ruby/object:Gem::Version
55
56
  version: 1.1.2
56
57
  type: :development
57
- prerelease: false
58
58
  version_requirements: *id004
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: rake
61
+ prerelease: false
61
62
  requirement: &id005 !ruby/object:Gem::Requirement
62
63
  none: false
63
64
  requirements:
@@ -65,10 +66,10 @@ dependencies:
65
66
  - !ruby/object:Gem::Version
66
67
  version: 0.8.7
67
68
  type: :development
68
- prerelease: false
69
69
  version_requirements: *id005
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: launchy
72
+ prerelease: false
72
73
  requirement: &id006 !ruby/object:Gem::Requirement
73
74
  none: false
74
75
  requirements:
@@ -76,10 +77,10 @@ dependencies:
76
77
  - !ruby/object:Gem::Version
77
78
  version: "0"
78
79
  type: :development
79
- prerelease: false
80
80
  version_requirements: *id006
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: diffy
83
+ prerelease: false
83
84
  requirement: &id007 !ruby/object:Gem::Requirement
84
85
  none: false
85
86
  requirements:
@@ -87,10 +88,10 @@ dependencies:
87
88
  - !ruby/object:Gem::Version
88
89
  version: "0"
89
90
  type: :development
90
- prerelease: false
91
91
  version_requirements: *id007
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: sqlite3-ruby
94
+ prerelease: false
94
95
  requirement: &id008 !ruby/object:Gem::Requirement
95
96
  none: false
96
97
  requirements:
@@ -98,10 +99,10 @@ dependencies:
98
99
  - !ruby/object:Gem::Version
99
100
  version: 1.3.3
100
101
  type: :development
101
- prerelease: false
102
102
  version_requirements: *id008
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: sqlite3
105
+ prerelease: false
105
106
  requirement: &id009 !ruby/object:Gem::Requirement
106
107
  none: false
107
108
  requirements:
@@ -109,7 +110,6 @@ dependencies:
109
110
  - !ruby/object:Gem::Version
110
111
  version: 1.3.4
111
112
  type: :development
112
- prerelease: false
113
113
  version_requirements: *id009
114
114
  description: Tabulous provides an easy way to add tabs to your Rails application.
115
115
  email:
@@ -715,9 +715,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
715
715
  requirements:
716
716
  - - ">="
717
717
  - !ruby/object:Gem::Version
718
- hash: 3134524414411715253
719
- segments:
720
- - 0
721
718
  version: "0"
722
719
  required_rubygems_version: !ruby/object:Gem::Requirement
723
720
  none: false