logical_tabs 0.8.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.
@@ -0,0 +1,98 @@
1
+ require 'logical_tabs/tab_pane'
2
+
3
+ module LogicalTabs
4
+ class DuplicateTabID < Exception
5
+ end
6
+
7
+ # a collection of tabs with their associated panes, I.E. a tabbed panel
8
+ class TabbedPanel
9
+ attr_reader :tabs, :base_id
10
+
11
+ # view must be an instance of ActionView::Base. This class
12
+ # depends on it for access to the capture and content_tag methods
13
+ def initialize(view, options = {})
14
+ @view = view
15
+ @tabs = []
16
+ @base_id = options[:base_id] || build_generic_id(options)
17
+ end
18
+
19
+ def build_generic_id(options)
20
+ base_id = "tabbed_panel".html_safe
21
+ base_id += "_#{options[:seq]}".html_safe if options[:seq]
22
+ base_id
23
+ end
24
+
25
+ # Add a new tab (with pane) to this tabbed panel. Either pass
26
+ # a block with the content for the panel, or pass :content => 'my_content'.
27
+ #
28
+ # Name is required and serves as the internal identifier for the tab. By
29
+ # default, it is also the displayed text of the tab.
30
+ #
31
+ #
32
+ # Other options:
33
+ # :base_id The string used as the beginning of the ID for CSS
34
+ # IDs for the tab and pane. :base_id => 'foo' will
35
+ # generate a tab with ID 'foo_tab' and a panel with ID
36
+ # 'foo_panel'. Defaults to name.downcase
37
+ #
38
+ # :tab_text The text to display in the tab. Defaults to name.
39
+ #
40
+ # :content The content for the panel itself, in HTML
41
+ def add_tab(name, options = {}, &block)
42
+ # debugger
43
+ options[:content] ||= v.capture(&block)
44
+ tab = TabPane.new(self, name, options)
45
+ if @tabs.any?{ |t| t.base_id == tab.base_id }
46
+ raise DuplicateTabID
47
+ else
48
+ @tabs << tab
49
+ end
50
+ return nil
51
+ end
52
+
53
+ # Render a UL containing all the tabs as LIs. Which tab is
54
+ # shown as selected is determined by the return value of selected?
55
+ def render_tabs
56
+ v.content_tag(:ul,
57
+ @tabs.map{ |tab| tab.render_tab(selected?(tab)) }.join.html_safe,
58
+ :class => 'tabs'.html_safe
59
+ ).html_safe
60
+ end
61
+
62
+ # Render a sequence of DIVs containing the panes.
63
+ def render_panes
64
+ v.content_tag(:div,
65
+ @tabs.map{ |tab| tab.render_pane(selected?(tab)) }.join.html_safe,
66
+ :class => 'panes'.html_safe
67
+ ).html_safe
68
+ end
69
+
70
+ # render the entire tabbed panel and all contents.
71
+ def render
72
+ out = v.content_tag(:div,
73
+ render_tabs + render_panes,
74
+ :id => @base_id.to_s.html_safe,
75
+ :class => 'tabbed_panel'.html_safe
76
+ ).html_safe
77
+ out
78
+ end
79
+
80
+ # For the moment, the first tab is the one selected
81
+ def selected_tab
82
+ @tabs.first
83
+ end
84
+
85
+ def selected?(tab)
86
+ tab == selected_tab
87
+ end
88
+
89
+ # returns the array of TabPanes
90
+ def tabs
91
+ @tabs
92
+ end
93
+
94
+ # shortcut to the View
95
+ def v; @view end
96
+
97
+ end
98
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: logical_tabs
3
+ version: !ruby/object:Gem::Version
4
+ hash: 63
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 8
9
+ - 0
10
+ version: 0.8.0
11
+ platform: ruby
12
+ authors:
13
+ - Evan Dorn
14
+ - Judson Lester
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-03-01 00:00:00 -08:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: rspec
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 5
31
+ segments:
32
+ - 1
33
+ - 5
34
+ version: "1.5"
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 23
46
+ segments:
47
+ - 1
48
+ - 0
49
+ - 0
50
+ version: 1.0.0
51
+ type: :development
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: rcov
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 3
62
+ segments:
63
+ - 0
64
+ version: "0"
65
+ type: :development
66
+ version_requirements: *id003
67
+ description: " LogicalTabs assists in the creation of a tabbed panel UI for Rails apps\n with several advantages. A Rails helper generates the tedious (but\n semantically clean) HTML structures for you. Tab selection persists across\n page loads, the page is functional when JavaScript and/or CSS are\n unavaliable. Sensible default print styling allows printouts\n to show all the panel content. JavaScript is provided for use with\n either jQuery or Prototype.\n"
68
+ email: evan@lrdesign.com
69
+ executables: []
70
+
71
+ extensions: []
72
+
73
+ extra_rdoc_files: []
74
+
75
+ files:
76
+ - Gemfile
77
+ - Gemfile.lock
78
+ - LICENSE.txt
79
+ - README.rdoc
80
+ - Rakefile
81
+ - VERSION
82
+ - lib/generators/logical_tabs/install/install_generator.rb
83
+ - lib/generators/logical_tabs/install/templates/javascripts/logical_tabs_jquery.js
84
+ - lib/generators/logical_tabs/install/templates/javascripts/logical_tabs_prototype.js
85
+ - lib/generators/logical_tabs/install/templates/stylesheets/logical_tabs.css
86
+ - lib/generators/logical_tabs/install/templates/stylesheets/sass/logical_tabs.sass
87
+ - lib/logical_tabs/helper.rb
88
+ - lib/logical_tabs/tab_pane.rb
89
+ - lib/logical_tabs/tabbed_panel.rb
90
+ - lib/logical_tabs.rb
91
+ - doc/README
92
+ has_rdoc: true
93
+ homepage: http://lrdesign.com/tools
94
+ licenses:
95
+ - MIT
96
+ post_install_message: Another tidy package brought to you by Logical Reality Design
97
+ rdoc_options: []
98
+
99
+ require_paths:
100
+ - lib/
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ hash: 3
116
+ segments:
117
+ - 0
118
+ version: "0"
119
+ requirements: []
120
+
121
+ rubyforge_project:
122
+ rubygems_version: 1.5.1
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: Tabbed panel UI tool for Rails
126
+ test_files: []
127
+