bettertabs 1.4.1 → 1.4.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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +4 -0
- data/MIT-LICENSE +1 -1
- data/README.md +13 -7
- data/app/assets/javascripts/jquery.bettertabs.js +2 -2
- data/app/assets/javascripts/jquery.bettertabs.js.coffee +2 -2
- data/app/assets/javascripts/jquery.bettertabs.min.js +2 -2
- data/app/helpers/bettertabs_helper.rb +3 -1
- data/bettertabs.gemspec +3 -2
- data/lib/bettertabs/bettertabs_builder.rb +29 -15
- data/lib/bettertabs/version.rb +1 -1
- data/spec/requests/bettertabs_spec.rb +11 -2
- metadata +18 -33
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d5e79ce335fbcdf9f066d26895489c7ba7a9a618
|
4
|
+
data.tar.gz: 66ffe69bc3cce378572156a6387f36bdc4c0bd45
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0df7a14d5b0ab4499619abca8ebb0e104ab229947caf5c6dfadc3769f83fc39366b04ef78c64a4f04d0ba1548fd9b6279f95118234f40ce2f6916ff01ff07041
|
7
|
+
data.tar.gz: 42f2ed91ee5c4b6ecc215c9f54edb1c7c3aed6e1655d6f5078b1fb71f84ecc3df646147ca73e418f69731c60c45e44f0d5fce81c272efa5217950310a17b7878
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
Bettertabs Changelog
|
2
2
|
====================
|
3
3
|
|
4
|
+
### v1.4.2 (2014-11-10)
|
5
|
+
|
6
|
+
* Add option :list_item_html_options to specify the attributes on the rendered li elements for tabs. Thanks (@jskinner-arpc).
|
7
|
+
|
4
8
|
### v1.4.1 (2013-02-27)
|
5
9
|
|
6
10
|
* Ensure BettertabsHelper is included even if config.action_controller.include_all_helpers is false, https://github.com/agoragames/bettertabs/pull/13
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,24 +1,30 @@
|
|
1
1
|
Bettertabs for Rails
|
2
2
|
====================
|
3
3
|
|
4
|
-
We know that splitting content into several tabs is easy, but doing well, clean, DRY, accessible, usable,
|
4
|
+
We know that splitting content into several tabs is easy, but doing it well, clean, DRY, accessible, usable, testable and fast is not so simple after all.
|
5
5
|
|
6
|
-
Bettertabs is a
|
6
|
+
Bettertabs is a `Rails 3.1+ Engine` that includes a **helper** and a **jquery plugin** to render the needed markup and javascript for a section with tabs in a declarative way, forcing you to [KISS](http://en.wikipedia.org/wiki/KISS_principle), ensuring accessibility and usability, whether the content is loaded statically or via ajax.
|
7
7
|
|
8
|
+
[Try demo app online](http://bettertabs-demo.herokuapp.com)
|
8
9
|
|
9
10
|
## Features ##
|
10
11
|
|
11
|
-
|
12
|
+
Bettertabs allows for a site with tabs that:
|
12
13
|
|
13
14
|
* Works with tabs for static, links or ajax loaded content
|
14
|
-
* Works without javascript
|
15
|
-
|
15
|
+
* Works without javascript
|
16
|
+
* SEO-friendly, specially good for ajax loaded tabs, because search engines can access and index the content anyway
|
17
|
+
* Progressive enhancement, obviously it works in devices without JavaScript
|
18
|
+
* Click on a tab before the whole page was loaded and it still works
|
19
|
+
* Allows to open the content in a new window if neccessary
|
20
|
+
* Easy to test
|
21
|
+
* It changes the URL (in HTML5 browsers, using [history.replaceState()](https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history)), so when you use the browser's back button, you'll land in the last selected tab, and selected tabs can be permalinked.
|
16
22
|
* Declarative code, that helps you to have your view code more readable and DRY
|
17
23
|
* It has some basic error handling (like for example if the ajax loaded content returns an error, it redirects to the error page)
|
18
24
|
* If you need more control in the javascript behavior, you can use some predefined jQuery events (for example: `$('#tabs').bind('bettertabs-before-ajax-loading', show_loading_clock);`)
|
19
25
|
* The gem does not include any stylesheet, because each project has a different way of showing the tabs styles. Anyway the generated HTML is easy to style (see the [CSS Reference Guide](https://github.com/agoragames/bettertabs/blob/master/doc/STYLESHEETS-GUIDE.md))
|
20
26
|
|
21
|
-
##
|
27
|
+
## Demo Test app ##
|
22
28
|
|
23
29
|
The bettertabs gem includes a dummy test app, that is used for development (to execute rspec tests) and that can be easily launched to play with.
|
24
30
|
|
@@ -32,7 +38,7 @@ The bettertabs gem includes a dummy test app, that is used for development (to e
|
|
32
38
|
|
33
39
|
|
34
40
|
## Requirements: ##
|
35
|
-
* Ruby 1.9
|
41
|
+
* Ruby 1.9 or higher
|
36
42
|
* Rails 3.1 or higher
|
37
43
|
* jQuery 1.3 or higher (but bettertabs also works without javascript)
|
38
44
|
|
@@ -1,12 +1,12 @@
|
|
1
1
|
(function() {
|
2
2
|
/*!
|
3
3
|
jQuery Bettertabs Plugin
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2 (Nov-10-2014)
|
5
5
|
@requires jQuery v1.3 or later
|
6
6
|
|
7
7
|
Examples and documentation at: https://github.com/agoragames/bettertabs
|
8
8
|
|
9
|
-
Copyright (c) 2011 Mario Izquierdo (tothemario@gmail.com)
|
9
|
+
Copyright (c) 2011-2014 Mario Izquierdo (tothemario@gmail.com)
|
10
10
|
Dual licensed under the MIT and GPL licenses:
|
11
11
|
http://www.opensource.org/licenses/mit-license.php
|
12
12
|
http://www.gnu.org/licenses/gpl.html
|
@@ -1,11 +1,11 @@
|
|
1
1
|
###!
|
2
2
|
jQuery Bettertabs Plugin
|
3
|
-
version: 1.4.
|
3
|
+
version: 1.4.2 (Nov-10-2014)
|
4
4
|
@requires jQuery v1.3 or later
|
5
5
|
|
6
6
|
Examples and documentation at: https://github.com/agoragames/bettertabs
|
7
7
|
|
8
|
-
Copyright (c) 2011 Mario Izquierdo (tothemario@gmail.com)
|
8
|
+
Copyright (c) 2011-2014 Mario Izquierdo (tothemario@gmail.com)
|
9
9
|
Dual licensed under the MIT and GPL licenses:
|
10
10
|
http://www.opensource.org/licenses/mit-license.php
|
11
11
|
http://www.gnu.org/licenses/gpl.html
|
@@ -1,12 +1,12 @@
|
|
1
1
|
(function(){
|
2
2
|
/*!
|
3
3
|
jQuery Bettertabs Plugin
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.2 (Nov-10-2014)
|
5
5
|
@requires jQuery v1.3 or later
|
6
6
|
|
7
7
|
Examples and documentation at: https://github.com/agoragames/bettertabs
|
8
8
|
|
9
|
-
Copyright (c) 2011 Mario Izquierdo (tothemario@gmail.com)
|
9
|
+
Copyright (c) 2011-2014 Mario Izquierdo (tothemario@gmail.com)
|
10
10
|
Dual licensed under the MIT and GPL licenses:
|
11
11
|
http://www.opensource.org/licenses/mit-license.php
|
12
12
|
http://www.gnu.org/licenses/gpl.html
|
@@ -20,8 +20,10 @@ module BettertabsHelper
|
|
20
20
|
# * :render_only_active_content => if true, this helper renders only the selected tab contents (no wrapper, no tabs, only content).
|
21
21
|
# Default to true only if controller.request.xhr? or params[:ajax].present? (true when its an ajax request).
|
22
22
|
# * :attach_jquery_bettertabs_inline => this helper includes a little inline script to apply the Bettertabs jQuery plugin to this widget. If false, do not render that inline script.
|
23
|
+
# * :list_html_options => html attributes on the <ul> element (list) for the tabs (added to 'tabs' that is automatically assigned)
|
24
|
+
# * :list_item_html_options => html attributes on the <li> elements (list items) for the tabs (added to 'tab' or 'tab active' class that is automatically assigned)
|
23
25
|
# * :class => html class attribute of the wrapper element. By default is 'bettertabs'
|
24
|
-
# * :id => html id attribute of the wrapper element. By default is the bettertabs_id
|
26
|
+
# * :id => html id attribute of the wrapper element. By default is the same value as `bettertabs_id` option.
|
25
27
|
# * Any other option will be used as wrapper elmenet html attribute.
|
26
28
|
#
|
27
29
|
# ==== tab builder arguments
|
data/bettertabs.gemspec
CHANGED
@@ -13,12 +13,13 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.homepage = "https://github.com/agoragames/bettertabs"
|
14
14
|
s.summary = %q{Just a simple, accessible, usable, flexible and fast way to split view content in tabs in a rails application.}
|
15
15
|
s.description = %q{Bettertabs is a Rails 3.1+ engine that adds a helper and jQuery plugin to define the markup and behavior for a tabbed area in a easy and declarative way, using the appropiate JavaScript but ensuring accessibility and usability, no matter if the content is loaded statically, via ajax or just with links. }
|
16
|
+
s.license = 'MIT'
|
16
17
|
|
17
18
|
s.files = `git ls-files`.split("\n")
|
18
|
-
|
19
|
+
|
19
20
|
s.add_dependency "rails", ">= 3.1.0"
|
20
21
|
s.add_dependency "jquery-rails"
|
21
|
-
|
22
|
+
|
22
23
|
s.add_development_dependency 'rspec-rails'
|
23
24
|
s.add_development_dependency 'haml-rails'
|
24
25
|
end
|
@@ -8,6 +8,7 @@ class BettertabsBuilder
|
|
8
8
|
@template = template
|
9
9
|
@selected_tab_id = selected_tab_id
|
10
10
|
@list_html_options = options.delete(:list_html_options) # sets html_options on the :ul element
|
11
|
+
@list_item_html_options = options.delete(:list_item_html_options) # sets html_options on the :li elements
|
11
12
|
@render_only_active_content = options.delete(:render_only_active_content) # used in ajax calls
|
12
13
|
@wrapper_html_options = options
|
13
14
|
|
@@ -110,21 +111,26 @@ class BettertabsBuilder
|
|
110
111
|
content_tag(:div, @wrapper_html_options) do
|
111
112
|
|
112
113
|
# Tabs list
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
114
|
+
@list_html_options ||= {}
|
115
|
+
@list_html_options[:class] ||= ''
|
116
|
+
@list_html_options[:class] += @list_html_options[:class].empty? ? 'tabs' : ' tabs'
|
117
|
+
|
118
|
+
@list_item_html_options ||= {}
|
119
|
+
@list_item_html_options[:class] ||= ''
|
120
|
+
@list_item_html_options[:class] += @list_item_html_options[:class].empty? ? 'tab' : ' tab'
|
121
|
+
|
122
|
+
content_tag(:ul, @list_html_options) do
|
123
|
+
@tabs.map do |tab|
|
124
|
+
content_tag(:li, tab_li_options(tab)) do
|
125
|
+
tab[:html_options][:"data-tab-type"] ||= tab[:tab_type] # for javascript: change click behavior depending on type :static, :link or :ajax
|
126
|
+
tab[:html_options][:"data-show-content-id"] ||= content_html_id_for(tab[:tab_id]) # for javascript: element id to show when select this tab
|
127
|
+
tab[:html_options][:"data-ajax-url"] ||= tab[:ajax_url] if tab[:tab_type] == :ajax # for javascript: url to make ajax call
|
128
|
+
tab[:html_options][:class] ||= ''
|
129
|
+
tab[:html_options][:class] += 'active' if tab[:active]
|
130
|
+
@template.link_to(tab[:text], tab[:url], tab[:html_options])
|
131
|
+
end
|
132
|
+
end.join.html_safe
|
133
|
+
end +
|
128
134
|
|
129
135
|
# Content sections
|
130
136
|
@contents.map do |content|
|
@@ -188,4 +194,12 @@ class BettertabsBuilder
|
|
188
194
|
end
|
189
195
|
end
|
190
196
|
|
197
|
+
# Gets the the html_options for the tab list_item element
|
198
|
+
def tab_li_options(tab)
|
199
|
+
options = @list_item_html_options.clone
|
200
|
+
options[:class] += ' active' if tab[:active]
|
201
|
+
options[:id] = tab_html_id_for(tab[:tab_id])
|
202
|
+
options
|
203
|
+
end
|
204
|
+
|
191
205
|
end
|
data/lib/bettertabs/version.rb
CHANGED
@@ -4,9 +4,10 @@
|
|
4
4
|
# * The bettertabs hepler should accept:
|
5
5
|
# * args: (bettertabs_id, options)
|
6
6
|
# * options can be:
|
7
|
-
# * :selected_tab => tab_id to select by default
|
8
|
-
#
|
7
|
+
# * :selected_tab => tab_id to select by default.
|
8
|
+
# It is be overridden with request params[:"#{bettertabs_id}_selected_tab"] if present.
|
9
9
|
# * :list_html_options => html_options for the :ul element
|
10
|
+
# * :list_item_html_options => html_options for the :li elements (each tab )
|
10
11
|
# * any other option is used as wrapper html_options (wrapper is the top-level widget dom element).
|
11
12
|
# * The bettertabs helper should render clear markup:
|
12
13
|
# * A wrapper with class 'bettertabs'
|
@@ -79,6 +80,10 @@ describe "Bettertabs requests" do
|
|
79
80
|
it "has a 200 status code" do
|
80
81
|
response.status.should be(200)
|
81
82
|
end
|
83
|
+
|
84
|
+
it 'should contain active on a list-item element' do
|
85
|
+
response.body.should have_selector("#tab2_link_tab[class*='active']")
|
86
|
+
end
|
82
87
|
end
|
83
88
|
|
84
89
|
describe "GET /bettertabs/ajax" do
|
@@ -91,6 +96,10 @@ describe "Bettertabs requests" do
|
|
91
96
|
response.body.should include("data-ajax-url")
|
92
97
|
end
|
93
98
|
|
99
|
+
it 'should include the default class=tab for the list_item' do
|
100
|
+
response.body.should have_selector("li.tab")
|
101
|
+
end
|
102
|
+
|
94
103
|
it "should include the default ajax=true extra param in the data-ajax-url" do
|
95
104
|
response.body.should include("data-ajax-url=\"/bettertabs/ajax/ajax_tab_2?ajax=true\"")
|
96
105
|
end
|
metadata
CHANGED
@@ -1,81 +1,72 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bettertabs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
5
|
-
prerelease:
|
4
|
+
version: 1.4.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Mario Izquierdo
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-11-10 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 3.1.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 3.1.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: jquery-rails
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec-rails
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: haml-rails
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
|
-
description:
|
69
|
+
description: 'Bettertabs is a Rails 3.1+ engine that adds a helper and jQuery plugin
|
79
70
|
to define the markup and behavior for a tabbed area in a easy and declarative way,
|
80
71
|
using the appropiate JavaScript but ensuring accessibility and usability, no matter
|
81
72
|
if the content is loaded statically, via ajax or just with links. '
|
@@ -152,34 +143,28 @@ files:
|
|
152
143
|
- spec/requests/bettertabs_spec.rb
|
153
144
|
- spec/spec_helper.rb
|
154
145
|
homepage: https://github.com/agoragames/bettertabs
|
155
|
-
licenses:
|
146
|
+
licenses:
|
147
|
+
- MIT
|
148
|
+
metadata: {}
|
156
149
|
post_install_message:
|
157
150
|
rdoc_options: []
|
158
151
|
require_paths:
|
159
152
|
- lib
|
160
153
|
required_ruby_version: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
154
|
requirements:
|
163
|
-
- -
|
155
|
+
- - '>='
|
164
156
|
- !ruby/object:Gem::Version
|
165
157
|
version: '0'
|
166
|
-
segments:
|
167
|
-
- 0
|
168
|
-
hash: 3598349345553857565
|
169
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
|
-
none: false
|
171
159
|
requirements:
|
172
|
-
- -
|
160
|
+
- - '>='
|
173
161
|
- !ruby/object:Gem::Version
|
174
162
|
version: '0'
|
175
|
-
segments:
|
176
|
-
- 0
|
177
|
-
hash: 3598349345553857565
|
178
163
|
requirements: []
|
179
164
|
rubyforge_project:
|
180
|
-
rubygems_version:
|
165
|
+
rubygems_version: 2.0.14
|
181
166
|
signing_key:
|
182
|
-
specification_version:
|
167
|
+
specification_version: 4
|
183
168
|
summary: Just a simple, accessible, usable, flexible and fast way to split view content
|
184
169
|
in tabs in a rails application.
|
185
170
|
test_files: []
|