funky_tabs 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.
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'echoe'
|
4
4
|
|
5
|
-
Echoe.new('funky_tabs', '0.1.
|
5
|
+
Echoe.new('funky_tabs', '0.1.2') do |p|
|
6
6
|
p.description = "Create Ajaxified tabs with simple history through window location hashes for Rails."
|
7
7
|
p.url = "http://github.com/thomaspouncy/funky_tabs"
|
8
8
|
p.author = "Thomas Pouncy"
|
@@ -1,13 +1,6 @@
|
|
1
1
|
class FunkyTabs::UpdateController < ApplicationController
|
2
2
|
layout false
|
3
3
|
|
4
|
-
def funky_tab_action
|
5
|
-
tab,tab_action,tab_action_id = FunkyTabs.tab_and_tab_action_from_location_hash(params[:location_hash])
|
6
|
-
action_to_call = FunkyTabs.content_path_for_tab_and_tab_action(tab,tab_action,tab_action_id)
|
7
|
-
redirect_to action_to_call+"?funky_tabs=true&location_hash=#{params[:location_hash]}" and return unless action_to_call.include?("?")
|
8
|
-
redirect_to action_to_call+"&funky_tabs=true&location_hash=#{params[:location_hash]}" and return
|
9
|
-
end
|
10
|
-
|
11
4
|
def missing_funky_tab
|
12
5
|
render FunkyTabs.missing_tab_action_path,:layout=>false and return
|
13
6
|
end
|
@@ -11,6 +11,8 @@
|
|
11
11
|
</div>
|
12
12
|
<div style="clear:both;"></div>
|
13
13
|
<script type="text/javascript">
|
14
|
+
<%= raw(@path_from_hash_arr) %>
|
15
|
+
|
14
16
|
function selectFunkyTab(tab_index){
|
15
17
|
jQuery('div#funky_tabs li.funky_tabs_list').removeClass('selected_tab');
|
16
18
|
jQuery('ul.css-tabs li#funky_tabs_list-'+tab_index).addClass('selected_tab');
|
@@ -24,17 +26,35 @@ function selectFunkyTab(tab_index){
|
|
24
26
|
<%= FunkyTabs.tab_select_callback.gsub(/:tab_number/,'tab_index') unless FunkyTabs.tab_select_callback.nil? %>
|
25
27
|
}
|
26
28
|
function funkyTabsAjaxCall(location_hash){
|
27
|
-
call_hash_change = false;
|
28
29
|
jQuery('div#funky_tabs div.funky_tab').html("<%= raw(FunkyTabs.loading_html) %>");
|
30
|
+
|
31
|
+
if((typeof(location_hash)=="string") && (location_hash.indexOf("#") != -1)){
|
32
|
+
location_hash = location_hash.replace("#","");
|
33
|
+
}
|
34
|
+
|
35
|
+
var tab_action_id = "";
|
36
|
+
location_hash = ''+location_hash;
|
37
|
+
|
38
|
+
var hash_components = location_hash.split("-");
|
39
|
+
var hash_lookup = hash_components[0];
|
40
|
+
if(hash_components.length > 1){
|
41
|
+
hash_lookup = hash_lookup + "-" + hash_components[1];
|
42
|
+
}
|
43
|
+
if(hash_components.length > 2){
|
44
|
+
tab_action_id = hash_components[2];
|
45
|
+
}
|
46
|
+
|
47
|
+
|
29
48
|
window.location.hash = location_hash;
|
30
|
-
|
49
|
+
|
50
|
+
var path = path_from_hash_arr[hash_lookup];
|
51
|
+
if(tab_action_id != ""){
|
52
|
+
path = path.replace("?","?id="+tab_action_id+"&");
|
53
|
+
}
|
54
|
+
jQuery("div#funky_tabs div.selected_tab_div").load(path+'&location_hash='+location_hash);
|
31
55
|
}
|
32
56
|
function hashChangeEvent(){
|
33
|
-
|
34
|
-
funkyTabsAjaxCall(location.hash.replace("#",""));
|
35
|
-
} else {
|
36
|
-
call_hash_change = true;
|
37
|
-
}
|
57
|
+
funkyTabsAjaxCall(location.hash);
|
38
58
|
}
|
39
59
|
if(typeof(jQuery(window).hashchange) == "undefined"){
|
40
60
|
// dont have special plugin, so use onhashchange event. NOTE: this will not work in ie 6 or 7
|
@@ -44,7 +64,6 @@ if(typeof(jQuery(window).hashchange) == "undefined"){
|
|
44
64
|
jQuery(window).hashchange(hashChangeEvent);
|
45
65
|
}
|
46
66
|
var load_on_select = true;
|
47
|
-
var call_hash_change = true;
|
48
67
|
jQuery(function() {
|
49
68
|
var initial_tab = <%= FunkyTabs.default_tab_index %>;
|
50
69
|
if(window.location.hash != ""){
|
data/funky_tabs.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{funky_tabs}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Thomas Pouncy"]
|
9
|
-
s.date = %q{2011-05-
|
9
|
+
s.date = %q{2011-05-21}
|
10
10
|
s.description = %q{Create Ajaxified tabs with simple history through window location hashes for Rails.}
|
11
11
|
s.email = %q{thomas.pouncy@gmail.com}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "README.rdoc", "lib/funky_tabs.rb", "lib/funky_tabs/helpers.rb", "lib/funky_tabs/rails.rb", "lib/funky_tabs/renderers.rb", "lib/funky_tabs/tab.rb", "lib/funky_tabs/tab_action.rb"]
|
data/lib/funky_tabs/helpers.rb
CHANGED
@@ -6,7 +6,7 @@ module FunkyTabs
|
|
6
6
|
def self.included(base)
|
7
7
|
base.class_eval do
|
8
8
|
def render_funky_tabs
|
9
|
-
|
9
|
+
@path_from_hash_arr = FunkyTabs.javascript_key_array
|
10
10
|
return render_to_string :partial=>"funky_tabs/update/render_funky_tabs"
|
11
11
|
end
|
12
12
|
|
@@ -14,18 +14,11 @@ module FunkyTabs
|
|
14
14
|
return FunkyTabs.location_hash_for_tab_action(tab,tab_action,tab_action_id)
|
15
15
|
end
|
16
16
|
|
17
|
-
def redirect_to_funky_tab(tab,tab_action=nil,tab_action_id=nil)
|
18
|
-
params[:location_hash] = FunkyTabs.location_hash_for_tab_action(tab,tab_action,tab_action_id)
|
19
|
-
action_to_call = FunkyTabs.content_path_for_tab_and_tab_action(tab,tab_action)
|
20
|
-
redirect_to action_to_call+"?funky_tabs=true&location_hash=#{params[:location_hash]}" and return unless action_to_call.include?("?")
|
21
|
-
redirect_to action_to_call+"&funky_tabs=true&location_hash=#{params[:location_hash]}" and return
|
22
|
-
end
|
23
|
-
|
24
17
|
def js_to_funky_tab(tab,tab_action=nil,tab_action_id=nil)
|
25
18
|
@location_hash_for_ajax = FunkyTabs.location_hash_for_tab_action(tab,tab_action,tab_action_id)
|
26
19
|
return render_to_string :partial=>"funky_tabs/update/ajax.js"
|
27
20
|
end
|
28
|
-
helper_method :render_funky_tabs, :
|
21
|
+
helper_method :render_funky_tabs, :js_to_funky_tab, :location_hash_for_funky_tab
|
29
22
|
end
|
30
23
|
end
|
31
24
|
end
|
data/lib/funky_tabs/renderers.rb
CHANGED
@@ -10,7 +10,13 @@ module FunkyTabs
|
|
10
10
|
super(*args, &block) and return if params[:funky_tabs].nil?
|
11
11
|
@tab_index = FunkyTabs.tab_index_from_location_hash(params[:location_hash])
|
12
12
|
super(*args, &block) and return if @tab_index.nil?
|
13
|
-
|
13
|
+
logger.debug "full path is #{request.fullpath}"
|
14
|
+
if FunkyTabs.correct_path_for_location_hash?(request.fullpath,params[:location_hash])
|
15
|
+
@location_hash = params[:location_hash]
|
16
|
+
else
|
17
|
+
@location_hash = FunkyTabs.location_hash_for_content_path(request.fullpath)
|
18
|
+
end
|
19
|
+
super(*args, &block) and return if @location_hash.nil?
|
14
20
|
@render_content = render_to_string(*args, &block)
|
15
21
|
super(:template=>"funky_tabs/update/update_tab",:layout=>false)
|
16
22
|
end
|
data/lib/funky_tabs.rb
CHANGED
@@ -20,7 +20,22 @@ module FunkyTabs
|
|
20
20
|
@@tabs ||= []
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
mattr_accessor :location_hashes_for_content_paths
|
24
|
+
def self.location_hashes_for_content_paths
|
25
|
+
return @@location_hashes_for_content_paths unless @@location_hashes_for_content_paths.blank?
|
26
|
+
|
27
|
+
path_hash = {}
|
28
|
+
tabs.each do |tab|
|
29
|
+
tab.tab_actions.each do |tab_action|
|
30
|
+
location_hash = location_hash_for_tab_action(tab,tab_action)
|
31
|
+
path = content_path_for_tab_and_tab_action(tab,tab_action)
|
32
|
+
path_hash[path] = location_hash
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
@@location_hashes_for_content_paths = path_hash
|
37
|
+
end
|
38
|
+
|
24
39
|
mattr_accessor :default_tab_index
|
25
40
|
def self.default_tab_index
|
26
41
|
@@default_tab_index ||= 0
|
@@ -88,8 +103,9 @@ module FunkyTabs
|
|
88
103
|
return nil if tab_index.nil?
|
89
104
|
|
90
105
|
tab_action_index = tabs[tab_index].find_tab_action(tab_action)
|
106
|
+
default_index = tabs[tab_index].find_tab_action(tabs[tab_index].default_tab_action)
|
91
107
|
|
92
|
-
return tab_index.to_s if tab_action_index.nil?
|
108
|
+
return tab_index.to_s if tab_action_index.nil? || tab_action_index == default_index
|
93
109
|
return "#{tab_index}-#{tab_action_index}" if tab_action_id.nil?
|
94
110
|
return "#{tab_index}-#{tab_action_index}-#{tab_action_id}"
|
95
111
|
end
|
@@ -104,12 +120,16 @@ module FunkyTabs
|
|
104
120
|
end
|
105
121
|
|
106
122
|
def self.content_path_for_tab_and_tab_action(tab,tab_action=nil,tab_action_id=nil)
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
tab_action
|
123
|
+
unless tab.is_a?(FunkyTabs::Tab)
|
124
|
+
tab_index = find_tab(tab)
|
125
|
+
return missing_tab_action_path if tab_index.nil?
|
126
|
+
tab = tabs[tab_index]
|
127
|
+
end
|
128
|
+
unless tab_action.is_a?(FunkyTabs::TabAction)
|
129
|
+
tab_action_index = tab.find_tab_action(tab_action||tab.default_tab_action)
|
130
|
+
return missing_tab_action_path if tab_action_index.nil?
|
131
|
+
tab_action = tab.tab_actions[tab_action_index]
|
132
|
+
end
|
113
133
|
unless tab_action.content_path.blank?
|
114
134
|
return tab_action.content_path if tab_action_id.nil?
|
115
135
|
return tab_action.content_path+"&id=#{tab_action_id}" if tab_action.content_path.include?("?")
|
@@ -151,6 +171,32 @@ module FunkyTabs
|
|
151
171
|
return indices.first
|
152
172
|
end
|
153
173
|
|
174
|
+
def self.correct_path_for_location_hash?(path,location_hash)
|
175
|
+
return false if path.blank? || location_hash.blank?
|
176
|
+
path = path.split("?").first
|
177
|
+
|
178
|
+
tab,tab_action,tab_action_id = tab_and_tab_action_from_location_hash(location_hash)
|
179
|
+
return path == content_path_for_tab_and_tab_action(tab,tab_action)
|
180
|
+
end
|
181
|
+
|
182
|
+
def self.location_hash_for_content_path(path)
|
183
|
+
path = path.split("?").first
|
184
|
+
return location_hashes_for_content_paths[path] rescue nil
|
185
|
+
end
|
186
|
+
|
187
|
+
def self.javascript_key_array
|
188
|
+
js_array = "var path_from_hash_arr = {"
|
189
|
+
location_hashes_for_content_paths.each do |path,location_hash|
|
190
|
+
if path.include?("?")
|
191
|
+
path = path + "&funky_tabs=true"
|
192
|
+
else
|
193
|
+
path = path + "?funky_tabs=true"
|
194
|
+
end
|
195
|
+
js_array = js_array + "'#{location_hash}':'#{path}',"
|
196
|
+
end
|
197
|
+
js_array = js_array.chomp(",")+"};"
|
198
|
+
end
|
199
|
+
|
154
200
|
# TODO: Figure out way to reset all mattr_accessors
|
155
201
|
def self.reset
|
156
202
|
tabs.clear
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: funky_tabs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.1.
|
5
|
+
version: 0.1.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Thomas Pouncy
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-05-
|
13
|
+
date: 2011-05-21 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|