bettertabs 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +14 -0
- data/README.md +288 -0
- data/Rakefile +2 -0
- data/bettertabs.gemspec +19 -0
- data/lib/bettertabs.rb +7 -0
- data/lib/bettertabs/bettertabs_builder.rb +162 -0
- data/lib/bettertabs/bettertabs_helper.rb +16 -0
- data/lib/bettertabs/javascripts/README.md +38 -0
- data/lib/bettertabs/javascripts/jquery.bettertabs.coffee +77 -0
- data/lib/bettertabs/javascripts/jquery.bettertabs.js +81 -0
- data/lib/bettertabs/javascripts/jquery.bettertabs.min.js +4 -0
- data/lib/bettertabs/version.rb +3 -0
- data/test/README_for_TEST.txt +5 -0
- data/test/ruby_1_9/rails_3_0/.rspec +1 -0
- data/test/ruby_1_9/rails_3_0/.rvmc +1 -0
- data/test/ruby_1_9/rails_3_0/Gemfile +11 -0
- data/test/ruby_1_9/rails_3_0/Gemfile.lock +105 -0
- data/test/ruby_1_9/rails_3_0/README +3 -0
- data/test/ruby_1_9/rails_3_0/Rakefile +7 -0
- data/test/ruby_1_9/rails_3_0/app/controllers/application_controller.rb +3 -0
- data/test/ruby_1_9/rails_3_0/app/controllers/bettertabs_controller.rb +24 -0
- data/test/ruby_1_9/rails_3_0/app/helpers/application_helper.rb +2 -0
- data/test/ruby_1_9/rails_3_0/app/views/bettertabs/_ajax.html.haml +6 -0
- data/test/ruby_1_9/rails_3_0/app/views/bettertabs/_link.html.haml +4 -0
- data/test/ruby_1_9/rails_3_0/app/views/bettertabs/_mixed.html.haml +6 -0
- data/test/ruby_1_9/rails_3_0/app/views/bettertabs/_tab_content.html.haml +1 -0
- data/test/ruby_1_9/rails_3_0/app/views/bettertabs/ajax.html.haml +2 -0
- data/test/ruby_1_9/rails_3_0/app/views/bettertabs/link_tab_1.html.haml +2 -0
- data/test/ruby_1_9/rails_3_0/app/views/bettertabs/link_tab_2.html.haml +2 -0
- data/test/ruby_1_9/rails_3_0/app/views/bettertabs/mixed.html.haml +2 -0
- data/test/ruby_1_9/rails_3_0/app/views/bettertabs/mixed_with_erb.html.erb +8 -0
- data/test/ruby_1_9/rails_3_0/app/views/bettertabs/static.html.haml +7 -0
- data/test/ruby_1_9/rails_3_0/app/views/layouts/application.html.erb +23 -0
- data/test/ruby_1_9/rails_3_0/config.ru +4 -0
- data/test/ruby_1_9/rails_3_0/config/application.rb +47 -0
- data/test/ruby_1_9/rails_3_0/config/boot.rb +6 -0
- data/test/ruby_1_9/rails_3_0/config/environment.rb +5 -0
- data/test/ruby_1_9/rails_3_0/config/environments/development.rb +26 -0
- data/test/ruby_1_9/rails_3_0/config/environments/test.rb +35 -0
- data/test/ruby_1_9/rails_3_0/config/initializers/mime_types.rb +5 -0
- data/test/ruby_1_9/rails_3_0/config/initializers/secret_token.rb +7 -0
- data/test/ruby_1_9/rails_3_0/config/initializers/session_store.rb +8 -0
- data/test/ruby_1_9/rails_3_0/config/routes.rb +6 -0
- data/test/ruby_1_9/rails_3_0/public/404.html +26 -0
- data/test/ruby_1_9/rails_3_0/public/422.html +26 -0
- data/test/ruby_1_9/rails_3_0/public/500.html +26 -0
- data/test/ruby_1_9/rails_3_0/public/favicon.ico +0 -0
- data/test/ruby_1_9/rails_3_0/public/images/rails.png +0 -0
- data/test/ruby_1_9/rails_3_0/public/javascripts/jquery-1.5.2.min.js +16 -0
- data/test/ruby_1_9/rails_3_0/public/javascripts/jquery.bettertabs.min.js +4 -0
- data/test/ruby_1_9/rails_3_0/public/javascripts/rails.js +278 -0
- data/test/ruby_1_9/rails_3_0/public/robots.txt +5 -0
- data/test/ruby_1_9/rails_3_0/public/stylesheets/bettertabs.css +23 -0
- data/test/ruby_1_9/rails_3_0/public/stylesheets/layout.css +8 -0
- data/test/ruby_1_9/rails_3_0/script/rails +6 -0
- data/test/ruby_1_9/rails_3_0/spec/requests/bettertabs_spec.rb +54 -0
- data/test/ruby_1_9/rails_3_0/spec/spec_helper.rb +19 -0
- metadata +122 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
module BettertabsHelper
|
2
|
+
|
3
|
+
# Bettertabs helper
|
4
|
+
# Defines the bettertabs markup in the view.
|
5
|
+
def bettertabs(bettertabs_id, options={})
|
6
|
+
bettertabs_id = bettertabs_id.to_s
|
7
|
+
selected_tab_id = params[:"#{bettertabs_id}_selected_tab"] || options.delete(:selected_tab)
|
8
|
+
options[:class] = "bettertabs #{options[:class]}" # keep 'bettertabs' class even when the user adds more classes.
|
9
|
+
options[:id] ||= bettertabs_id
|
10
|
+
options[:render_only_active_content] = true if controller.request.xhr?
|
11
|
+
builder = BettertabsBuilder.new(bettertabs_id, self, selected_tab_id, options)
|
12
|
+
yield(builder)
|
13
|
+
builder.render
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
Bettertabs Javascript Development
|
2
|
+
=================================
|
3
|
+
|
4
|
+
Bettertabs rails helper depends on the jquery.bettertabs plugin to work properly with javascript.
|
5
|
+
|
6
|
+
|
7
|
+
## CoffeeScript ##
|
8
|
+
|
9
|
+
The jquery.bettertabs plugin is written using CoffeeScript.
|
10
|
+
How to install CoffeeScript: http://jashkenas.github.com/coffee-script/#installation
|
11
|
+
|
12
|
+
To install, first make sure you have a working copy of the latest stable version of Node.js, and npm (the Node Package Manager).
|
13
|
+
You can then install CoffeeScript with npm:
|
14
|
+
|
15
|
+
npm install coffee-script
|
16
|
+
|
17
|
+
|
18
|
+
Then you will be able to compile `jquery.bettertabs.coffee` into `jquery.bettertabs.js` using the coffee command:
|
19
|
+
|
20
|
+
coffee --watch --compile jquery.bettertabs.coffee
|
21
|
+
|
22
|
+
With this, each time you save the `jquery.bettertabs.coffee` file, `jquery.bettertabs.js` will be automatically updated.
|
23
|
+
|
24
|
+
|
25
|
+
## JavaScript Compressor ##
|
26
|
+
|
27
|
+
Before make a new release of the `jquery.bettertabs.js`, we have to be sure that an equivalent minified script is available.
|
28
|
+
|
29
|
+
You can use for example the [YUI compressor](http://developer.yahoo.com/yui/compressor/), the [Google Cosure Compiler](http://code.google.com/closure/compiler/) or [JSMin](http://crockford.com/javascript/jsmin) among others..
|
30
|
+
|
31
|
+
I used a simple solution of copy-paste the `jquery.bettertabs.js` in an online tool and then copy-paste again in the `jquery.bettertabs.min.js` file.
|
32
|
+
|
33
|
+
Online compressors:
|
34
|
+
|
35
|
+
* http://refresh-sf.com/yui/
|
36
|
+
* http://yui.2clics.net/
|
37
|
+
* http://closure-compiler.appspot.com/home
|
38
|
+
* http://compressorrater.thruhere.net/
|
@@ -0,0 +1,77 @@
|
|
1
|
+
###
|
2
|
+
Bettertabs jQuery plugin v1.0
|
3
|
+
|
4
|
+
jQuery(selector).bettertabs(); adds javascript to change content when click on tabs.
|
5
|
+
|
6
|
+
Markup needed, the same that is generated by the rails bettertabs helper, added by the bettertabs plugin
|
7
|
+
https://github.com/agoragames/bettertabs
|
8
|
+
|
9
|
+
Events: Each time a tab is selected, some events are fired, so you can easily activate
|
10
|
+
behavior from another jquery script (using .bind); The available events are:
|
11
|
+
'bettertabs-before-deactivate': fired on content that is active and will be deactivated
|
12
|
+
'bettertabs-before-activate': fired on content that will be activated
|
13
|
+
'bettertabs-before-ajax-loading': fired on content that will be activated and needs ajax loading
|
14
|
+
'bettertabs-after-deactivate': fired on content that was deactivated
|
15
|
+
'bettertabs-after-activate': fired on content that was activated
|
16
|
+
'bettertabs-after-ajax-loading': fired on content after it was loaded via ajax
|
17
|
+
|
18
|
+
###
|
19
|
+
|
20
|
+
$ = jQuery
|
21
|
+
|
22
|
+
tab_type_attr = 'data-tab-type' # attribute on tab links that indicate the tab type
|
23
|
+
show_content_id_attr = 'data-show-content-id' # attribute on tab links that indicate the related content id
|
24
|
+
tab_type_of = ($tab_link) -> $tab_link.attr(tab_type_attr)
|
25
|
+
content_id_from = ($tab_link) -> $tab_link.attr(show_content_id_attr)
|
26
|
+
|
27
|
+
change_url = ($link) ->
|
28
|
+
# Use replaceState for HTML5 browsers, and just ignore for old browsers (no change url support).
|
29
|
+
# This will work on last modern browsers, but I could not find a neasy way to listen the popstate event,
|
30
|
+
# so better not to use pushState (because we can't safely revert to previous state), replaceState just works fine.
|
31
|
+
if history? and history.replaceState?
|
32
|
+
url = $link.attr 'href'
|
33
|
+
history.replaceState null, document.title, url
|
34
|
+
|
35
|
+
$.fn.bettertabs = ->
|
36
|
+
@each ->
|
37
|
+
mytabs = $(this)
|
38
|
+
tabs = mytabs.find 'ul.tabs > li'
|
39
|
+
tabs_links = mytabs.find 'ul.tabs > li > a'
|
40
|
+
tabs_contents = mytabs.children '.content'
|
41
|
+
tabs_and_contents = tabs.add tabs_contents
|
42
|
+
|
43
|
+
tabs_links.click (event) ->
|
44
|
+
this_link = $(this)
|
45
|
+
if tab_type_of(this_link) isnt 'link'
|
46
|
+
event.preventDefault()
|
47
|
+
this_tab = this_link.parent()
|
48
|
+
if not this_tab.is('.active') and not this_link.is('.ajax-loading')
|
49
|
+
this_tab_content = tabs_contents.filter "##{content_id_from this_link}"
|
50
|
+
previous_active_tab = tabs.filter '.active'
|
51
|
+
previous_active_tab_content = tabs_contents.filter '.active'
|
52
|
+
activate_tab_and_content = ->
|
53
|
+
tabs_and_contents.removeClass('active').addClass('hidden')
|
54
|
+
this_tab.removeClass('hidden').addClass('active')
|
55
|
+
this_tab_content.removeClass('hidden').addClass('active')
|
56
|
+
previous_active_tab_content.trigger 'bettertabs-after-deactivate'
|
57
|
+
this_tab_content.trigger 'bettertabs-after-activate'
|
58
|
+
change_url this_link
|
59
|
+
|
60
|
+
previous_active_tab_content.trigger 'bettertabs-before-deactivate'
|
61
|
+
this_tab_content.trigger 'bettertabs-before-activate'
|
62
|
+
|
63
|
+
if tab_type_of(this_link) is 'ajax' and not this_link.data('content-loaded-already')?
|
64
|
+
this_link.addClass('ajax-loading')
|
65
|
+
this_tab_content.trigger 'bettertabs-before-ajax-loading'
|
66
|
+
this_tab_content.load this_link.attr('href'), ->
|
67
|
+
this_link.removeClass('ajax-loading')
|
68
|
+
this_link.data('content-loaded-already', yes)
|
69
|
+
this_tab_content.trigger 'bettertabs-after-ajax-loading'
|
70
|
+
activate_tab_and_content()
|
71
|
+
else
|
72
|
+
activate_tab_and_content()
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
@@ -0,0 +1,81 @@
|
|
1
|
+
(function() {
|
2
|
+
/*
|
3
|
+
Bettertabs jQuery plugin v1.0
|
4
|
+
|
5
|
+
jQuery(selector).bettertabs(); adds javascript to change content when click on tabs.
|
6
|
+
|
7
|
+
Markup needed, the same that is generated by the rails bettertabs helper, added by the bettertabs plugin
|
8
|
+
https://github.com/agoragames/bettertabs
|
9
|
+
|
10
|
+
Events: Each time a tab is selected, some events are fired, so you can easily activate
|
11
|
+
behavior from another jquery script (using .bind); The available events are:
|
12
|
+
'bettertabs-before-deactivate': fired on content that is active and will be deactivated
|
13
|
+
'bettertabs-before-activate': fired on content that will be activated
|
14
|
+
'bettertabs-before-ajax-loading': fired on content that will be activated and needs ajax loading
|
15
|
+
'bettertabs-after-deactivate': fired on content that was deactivated
|
16
|
+
'bettertabs-after-activate': fired on content that was activated
|
17
|
+
'bettertabs-after-ajax-loading': fired on content after it was loaded via ajax
|
18
|
+
|
19
|
+
*/ var $, change_url, content_id_from, show_content_id_attr, tab_type_attr, tab_type_of;
|
20
|
+
$ = jQuery;
|
21
|
+
tab_type_attr = 'data-tab-type';
|
22
|
+
show_content_id_attr = 'data-show-content-id';
|
23
|
+
tab_type_of = function($tab_link) {
|
24
|
+
return $tab_link.attr(tab_type_attr);
|
25
|
+
};
|
26
|
+
content_id_from = function($tab_link) {
|
27
|
+
return $tab_link.attr(show_content_id_attr);
|
28
|
+
};
|
29
|
+
change_url = function($link) {
|
30
|
+
var url;
|
31
|
+
if ((typeof history != "undefined" && history !== null) && (history.replaceState != null)) {
|
32
|
+
url = $link.attr('href');
|
33
|
+
return history.replaceState(null, document.title, url);
|
34
|
+
}
|
35
|
+
};
|
36
|
+
$.fn.bettertabs = function() {
|
37
|
+
return this.each(function() {
|
38
|
+
var mytabs, tabs, tabs_and_contents, tabs_contents, tabs_links;
|
39
|
+
mytabs = $(this);
|
40
|
+
tabs = mytabs.find('ul.tabs > li');
|
41
|
+
tabs_links = mytabs.find('ul.tabs > li > a');
|
42
|
+
tabs_contents = mytabs.children('.content');
|
43
|
+
tabs_and_contents = tabs.add(tabs_contents);
|
44
|
+
return tabs_links.click(function(event) {
|
45
|
+
var activate_tab_and_content, previous_active_tab, previous_active_tab_content, this_link, this_tab, this_tab_content;
|
46
|
+
this_link = $(this);
|
47
|
+
if (tab_type_of(this_link) !== 'link') {
|
48
|
+
event.preventDefault();
|
49
|
+
this_tab = this_link.parent();
|
50
|
+
if (!this_tab.is('.active') && !this_link.is('.ajax-loading')) {
|
51
|
+
this_tab_content = tabs_contents.filter("#" + (content_id_from(this_link)));
|
52
|
+
previous_active_tab = tabs.filter('.active');
|
53
|
+
previous_active_tab_content = tabs_contents.filter('.active');
|
54
|
+
activate_tab_and_content = function() {
|
55
|
+
tabs_and_contents.removeClass('active').addClass('hidden');
|
56
|
+
this_tab.removeClass('hidden').addClass('active');
|
57
|
+
this_tab_content.removeClass('hidden').addClass('active');
|
58
|
+
previous_active_tab_content.trigger('bettertabs-after-deactivate');
|
59
|
+
this_tab_content.trigger('bettertabs-after-activate');
|
60
|
+
return change_url(this_link);
|
61
|
+
};
|
62
|
+
previous_active_tab_content.trigger('bettertabs-before-deactivate');
|
63
|
+
this_tab_content.trigger('bettertabs-before-activate');
|
64
|
+
if (tab_type_of(this_link) === 'ajax' && !(this_link.data('content-loaded-already') != null)) {
|
65
|
+
this_link.addClass('ajax-loading');
|
66
|
+
this_tab_content.trigger('bettertabs-before-ajax-loading');
|
67
|
+
return this_tab_content.load(this_link.attr('href'), function() {
|
68
|
+
this_link.removeClass('ajax-loading');
|
69
|
+
this_link.data('content-loaded-already', true);
|
70
|
+
this_tab_content.trigger('bettertabs-after-ajax-loading');
|
71
|
+
return activate_tab_and_content();
|
72
|
+
});
|
73
|
+
} else {
|
74
|
+
return activate_tab_and_content();
|
75
|
+
}
|
76
|
+
}
|
77
|
+
}
|
78
|
+
});
|
79
|
+
});
|
80
|
+
};
|
81
|
+
}).call(this);
|
@@ -0,0 +1,4 @@
|
|
1
|
+
/**
|
2
|
+
* Bettertabs jQuery plugin v1.0
|
3
|
+
*/
|
4
|
+
(function(){var e,b,d,c,a,f;e=jQuery;a="data-tab-type";c="data-show-content-id";f=function(g){return g.attr(a)};d=function(g){return g.attr(c)};b=function(g){var h;if((typeof history!="undefined"&&history!==null)&&(history.replaceState!=null)){h=g.attr("href");return history.replaceState(null,document.title,h)}};e.fn.bettertabs=function(){return this.each(function(){var k,h,j,g,i;k=e(this);h=k.find("ul.tabs > li");i=k.find("ul.tabs > li > a");g=k.children(".content");j=h.add(g);return i.click(function(o){var q,r,n,m,p,l;m=e(this);if(f(m)!=="link"){o.preventDefault();p=m.parent();if(!p.is(".active")&&!m.is(".ajax-loading")){l=g.filter("#"+(d(m)));r=h.filter(".active");n=g.filter(".active");q=function(){j.removeClass("active").addClass("hidden");p.removeClass("hidden").addClass("active");l.removeClass("hidden").addClass("active");n.trigger("bettertabs-after-deactivate");l.trigger("bettertabs-after-activate");return b(m)};n.trigger("bettertabs-before-deactivate");l.trigger("bettertabs-before-activate");if(f(m)==="ajax"&&!(m.data("content-loaded-already")!=null)){m.addClass("ajax-loading");l.trigger("bettertabs-before-ajax-loading");return l.load(m.attr("href"),function(){m.removeClass("ajax-loading");m.data("content-loaded-already",true);l.trigger("bettertabs-after-ajax-loading");return q()})}else{return q()}}}})})}}).call(this);
|
@@ -0,0 +1,5 @@
|
|
1
|
+
For test bettertabs in a full stack mode, we will have one simple rails app for each environment.
|
2
|
+
Inside the Rails app, we will be able to test a request (including javascript behavior) thanks to Capybara and Rspec.
|
3
|
+
|
4
|
+
Check this RailsCast to better understand how to test with Rspec and Capybara:
|
5
|
+
http://asciicasts.com/episodes/257-request-specs-and-capybara
|
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
@@ -0,0 +1 @@
|
|
1
|
+
rvm 1.9.2
|
@@ -0,0 +1,11 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
|
3
|
+
gem 'rails', '3.0.6'
|
4
|
+
gem 'haml', '>=3.0.18'
|
5
|
+
gem 'rspec-rails'
|
6
|
+
|
7
|
+
gem 'bettertabs'
|
8
|
+
|
9
|
+
# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
|
10
|
+
# gem 'ruby-debug'
|
11
|
+
gem 'ruby-debug19', :require => 'ruby-debug'
|
@@ -0,0 +1,105 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
abstract (1.0.0)
|
5
|
+
actionmailer (3.0.6)
|
6
|
+
actionpack (= 3.0.6)
|
7
|
+
mail (~> 2.2.15)
|
8
|
+
actionpack (3.0.6)
|
9
|
+
activemodel (= 3.0.6)
|
10
|
+
activesupport (= 3.0.6)
|
11
|
+
builder (~> 2.1.2)
|
12
|
+
erubis (~> 2.6.6)
|
13
|
+
i18n (~> 0.5.0)
|
14
|
+
rack (~> 1.2.1)
|
15
|
+
rack-mount (~> 0.6.14)
|
16
|
+
rack-test (~> 0.5.7)
|
17
|
+
tzinfo (~> 0.3.23)
|
18
|
+
activemodel (3.0.6)
|
19
|
+
activesupport (= 3.0.6)
|
20
|
+
builder (~> 2.1.2)
|
21
|
+
i18n (~> 0.5.0)
|
22
|
+
activerecord (3.0.6)
|
23
|
+
activemodel (= 3.0.6)
|
24
|
+
activesupport (= 3.0.6)
|
25
|
+
arel (~> 2.0.2)
|
26
|
+
tzinfo (~> 0.3.23)
|
27
|
+
activeresource (3.0.6)
|
28
|
+
activemodel (= 3.0.6)
|
29
|
+
activesupport (= 3.0.6)
|
30
|
+
activesupport (3.0.6)
|
31
|
+
archive-tar-minitar (0.5.2)
|
32
|
+
arel (2.0.9)
|
33
|
+
bettertabs (0.0.1)
|
34
|
+
builder (2.1.2)
|
35
|
+
columnize (0.3.2)
|
36
|
+
diff-lcs (1.1.2)
|
37
|
+
erubis (2.6.6)
|
38
|
+
abstract (>= 1.0.0)
|
39
|
+
haml (3.0.25)
|
40
|
+
i18n (0.5.0)
|
41
|
+
linecache19 (0.5.12)
|
42
|
+
ruby_core_source (>= 0.1.4)
|
43
|
+
mail (2.2.15)
|
44
|
+
activesupport (>= 2.3.6)
|
45
|
+
i18n (>= 0.4.0)
|
46
|
+
mime-types (~> 1.16)
|
47
|
+
treetop (~> 1.4.8)
|
48
|
+
mime-types (1.16)
|
49
|
+
polyglot (0.3.1)
|
50
|
+
rack (1.2.2)
|
51
|
+
rack-mount (0.6.14)
|
52
|
+
rack (>= 1.0.0)
|
53
|
+
rack-test (0.5.7)
|
54
|
+
rack (>= 1.0)
|
55
|
+
rails (3.0.6)
|
56
|
+
actionmailer (= 3.0.6)
|
57
|
+
actionpack (= 3.0.6)
|
58
|
+
activerecord (= 3.0.6)
|
59
|
+
activeresource (= 3.0.6)
|
60
|
+
activesupport (= 3.0.6)
|
61
|
+
bundler (~> 1.0)
|
62
|
+
railties (= 3.0.6)
|
63
|
+
railties (3.0.6)
|
64
|
+
actionpack (= 3.0.6)
|
65
|
+
activesupport (= 3.0.6)
|
66
|
+
rake (>= 0.8.7)
|
67
|
+
thor (~> 0.14.4)
|
68
|
+
rake (0.8.7)
|
69
|
+
rspec (2.5.0)
|
70
|
+
rspec-core (~> 2.5.0)
|
71
|
+
rspec-expectations (~> 2.5.0)
|
72
|
+
rspec-mocks (~> 2.5.0)
|
73
|
+
rspec-core (2.5.1)
|
74
|
+
rspec-expectations (2.5.0)
|
75
|
+
diff-lcs (~> 1.1.2)
|
76
|
+
rspec-mocks (2.5.0)
|
77
|
+
rspec-rails (2.5.0)
|
78
|
+
actionpack (~> 3.0)
|
79
|
+
activesupport (~> 3.0)
|
80
|
+
railties (~> 3.0)
|
81
|
+
rspec (~> 2.5.0)
|
82
|
+
ruby-debug-base19 (0.11.25)
|
83
|
+
columnize (>= 0.3.1)
|
84
|
+
linecache19 (>= 0.5.11)
|
85
|
+
ruby_core_source (>= 0.1.4)
|
86
|
+
ruby-debug19 (0.11.6)
|
87
|
+
columnize (>= 0.3.1)
|
88
|
+
linecache19 (>= 0.5.11)
|
89
|
+
ruby-debug-base19 (>= 0.11.19)
|
90
|
+
ruby_core_source (0.1.5)
|
91
|
+
archive-tar-minitar (>= 0.5.2)
|
92
|
+
thor (0.14.6)
|
93
|
+
treetop (1.4.9)
|
94
|
+
polyglot (>= 0.3.1)
|
95
|
+
tzinfo (0.3.26)
|
96
|
+
|
97
|
+
PLATFORMS
|
98
|
+
ruby
|
99
|
+
|
100
|
+
DEPENDENCIES
|
101
|
+
bettertabs
|
102
|
+
haml (>= 3.0.18)
|
103
|
+
rails (= 3.0.6)
|
104
|
+
rspec-rails
|
105
|
+
ruby-debug19
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
2
|
+
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
3
|
+
|
4
|
+
require File.expand_path('../config/application', __FILE__)
|
5
|
+
require 'rake'
|
6
|
+
|
7
|
+
Rails30::Application.load_tasks
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class BettertabsController < ApplicationController
|
2
|
+
|
3
|
+
def static
|
4
|
+
end
|
5
|
+
|
6
|
+
def link_tab_1
|
7
|
+
end
|
8
|
+
|
9
|
+
def link_tab_2
|
10
|
+
end
|
11
|
+
|
12
|
+
def ajax
|
13
|
+
render partial: 'ajax' and return if request.xhr?
|
14
|
+
end
|
15
|
+
|
16
|
+
def mixed
|
17
|
+
render partial: 'mixed' and return if request.xhr?
|
18
|
+
end
|
19
|
+
|
20
|
+
def mixed_with_erb
|
21
|
+
render partial: 'tab_content' and return if request.xhr? and params[:erb_test_selected_tab] == 'ajax_tab'
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
tab_content partial content.
|