xebec 2.6.0 → 2.6.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/developer_tasks/doc.rake +3 -3
- data/developer_tasks/test.rake +1 -1
- data/doc/example_app/app/controllers/application_controller.rb +4 -4
- data/doc/example_app/app/controllers/pages_controller.rb +1 -1
- data/doc/example_app/app/controllers/projects_controller.rb +9 -9
- data/doc/example_app/app/views/layouts/_site_nav_bar.html.erb +1 -1
- data/generators/xebec_stylesheet/templates/xebec.css.erb +3 -3
- data/lib/xebec.rb +6 -6
- data/lib/xebec/controller_support.rb +11 -11
- data/lib/xebec/has_nav_bars.rb +7 -7
- data/lib/xebec/html5.rb +8 -8
- data/lib/xebec/nav_bar.rb +10 -10
- data/lib/xebec/nav_bar_helper.rb +11 -11
- data/lib/xebec/nav_bar_renderer.rb +22 -22
- data/lib/xebec/nav_item.rb +5 -5
- data/lib/xebec/stylesheet_generator.rb +8 -8
- data/lib/xebec/title_enhanced_nav_bar_renderer.rb +6 -6
- data/lib/xebec/web_app_theme_renderer.rb +5 -5
- data/test/controller_support_test.rb +11 -12
- data/test/html5_test.rb +14 -14
- data/test/nav_bar_helper_test.rb +17 -17
- data/test/nav_bar_renderer_test.rb +33 -22
- data/test/nav_bar_test.rb +10 -10
- data/test/test_helper.rb +14 -16
- data/test/title_enhanced_nav_bar_renderer_test.rb +10 -10
- data/test/web_app_theme_renderer_test.rb +5 -5
- data/xebec.gemspec +5 -7
- metadata +13 -11
- data/VERSION +0 -1
- data/developer_tasks/gem.rake +0 -34
data/.gitignore
CHANGED
data/developer_tasks/doc.rake
CHANGED
@@ -4,13 +4,13 @@ task :doc => ['doc:generate']
|
|
4
4
|
namespace :doc do
|
5
5
|
project_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
6
6
|
doc_destination = File.join(project_root, 'doc', 'rdoc')
|
7
|
-
|
7
|
+
|
8
8
|
begin
|
9
9
|
require 'yard'
|
10
10
|
require 'yard/rake/yardoc_task'
|
11
11
|
|
12
12
|
YARD::Rake::YardocTask.new(:generate) do |yt|
|
13
|
-
yt.files = Dir.glob(File.join(project_root, '{lib,doc/example_app}', '**', '*.rb')) +
|
13
|
+
yt.files = Dir.glob(File.join(project_root, '{lib,doc/example_app}', '**', '*.rb')) +
|
14
14
|
[ File.join(project_root, 'README.md') ]
|
15
15
|
yt.options = ['--output-dir', doc_destination, '--readme', 'README.md']
|
16
16
|
end
|
@@ -25,5 +25,5 @@ namespace :doc do
|
|
25
25
|
task :clean do
|
26
26
|
rm_r doc_dir if File.exists?(doc_destination)
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
end
|
data/developer_tasks/test.rake
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
# Part of an example application showing the
|
2
2
|
# many features of Xebec.
|
3
3
|
class ApplicationController < ActionController::Base
|
4
|
-
|
4
|
+
|
5
5
|
# If you prefer to declare your navigation in your
|
6
6
|
# controllers, start by including Xebec's controller support:
|
7
7
|
include Xebec::ControllerSupport
|
8
|
-
|
8
|
+
|
9
9
|
# then declare and populate some navigation bars:
|
10
10
|
nav_bar :area do |nb|
|
11
11
|
nb.nav_item :projects # assumes projects_path
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
nav_bar :footer do |nb|
|
15
15
|
nb.nav_item :about_us, page_path(:about_us)
|
16
16
|
nb.nav_item :faq, page_path(:faq)
|
17
17
|
nb.nav_item :feedback, page_path(:feedback)
|
18
18
|
nb.nav_item :privacy_policy, page_path(:privacy_policy)
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# Part of an example application showing the
|
2
2
|
# many features of Xebec.
|
3
3
|
class ProjectsController < ApplicationController
|
4
|
-
|
4
|
+
|
5
5
|
# set the selected item for the :area navigation bar
|
6
6
|
# for all actions in this controller:
|
7
7
|
nav_bar(:area) { |nb| nb.current = :projects }
|
8
|
-
|
8
|
+
|
9
9
|
def index
|
10
10
|
params[:sort] ||= 'recent'
|
11
11
|
# set up tabs for the project-list view:
|
@@ -16,26 +16,26 @@ class ProjectsController < ApplicationController
|
|
16
16
|
end
|
17
17
|
@projects = Project.ordered_by(params[:sort])
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
def show(selected_tab = :overview)
|
21
21
|
@project = Project.find(params[:id])
|
22
22
|
prepare_project_tabs selected_tab
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def budget
|
26
26
|
show :budget
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
def history
|
30
30
|
show :history
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def edit
|
34
34
|
show :edit
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
protected
|
38
|
-
|
38
|
+
|
39
39
|
# Extract navigation bar setup that is common to
|
40
40
|
# multiple methods:
|
41
41
|
def prepare_project_tabs(selected)
|
@@ -47,5 +47,5 @@ class ProjectsController < ApplicationController
|
|
47
47
|
nb.current = selected
|
48
48
|
end
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<nav> is an HTML5 tag that browsers except IE suppor. By default,
|
4
4
|
Xebec will generate a <div class='navbar'> instead of a <nav>
|
5
5
|
element if it detects IE.
|
6
|
-
|
6
|
+
|
7
7
|
@see Xebec::HTML5 for more information
|
8
8
|
*/
|
9
9
|
|
@@ -22,12 +22,12 @@ div.navbar :hover, div.navbar .current {
|
|
22
22
|
nav.<%= bar -%>, div.navbar.<%= bar -%> {
|
23
23
|
/* styles specific to the <%= bar -%> navigation bar here */
|
24
24
|
}
|
25
|
-
|
25
|
+
|
26
26
|
nav.<%= bar -%> .current, div.navbar.<%= bar -%> .current {
|
27
27
|
/* styles specific to the currently-selected element in
|
28
28
|
the <%= bar -%> navigation bar here */
|
29
29
|
}
|
30
|
-
|
30
|
+
|
31
31
|
nav.<%= bar -%> :hover, div.navbar.<%= bar -%> :hover {
|
32
32
|
/* styles specific to a hovered-over element in
|
33
33
|
the <%= bar -%> navigation bar here */
|
data/lib/xebec.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
require 'xebec/nav_bar_renderer'
|
2
2
|
|
3
3
|
module Xebec
|
4
|
-
|
4
|
+
|
5
5
|
class <<self
|
6
|
-
|
6
|
+
|
7
7
|
# The CSS class that is added to navigation items that are
|
8
8
|
# "active." Defaults to "current."
|
9
9
|
attr_accessor :currently_selected_nav_item_class
|
10
|
-
|
10
|
+
|
11
11
|
# The navigation bar renderer class. Defaults to
|
12
12
|
# Xebec::NavBarRenderer
|
13
13
|
#
|
14
14
|
# @see Xebec::NavBarRenderer
|
15
15
|
attr_accessor :renderer_class
|
16
|
-
|
16
|
+
|
17
17
|
end
|
18
18
|
self.currently_selected_nav_item_class = :current
|
19
19
|
self.renderer_class = Xebec::NavBarRenderer
|
20
|
-
|
20
|
+
|
21
21
|
autoload :NavBarHelper, 'xebec/nav_bar_helper'
|
22
22
|
autoload :ControllerSupport, 'xebec/controller_support'
|
23
23
|
autoload :StylesheetGenerator, 'xebec/stylesheet_generator'
|
24
|
-
|
24
|
+
|
25
25
|
end
|
@@ -1,20 +1,20 @@
|
|
1
1
|
require 'xebec/has_nav_bars'
|
2
2
|
|
3
3
|
module Xebec
|
4
|
-
|
4
|
+
|
5
5
|
# Include this module in Rails controllers if you want to declare
|
6
6
|
# navigation bars in your controllers instead of or in addition to
|
7
7
|
# in your views.
|
8
8
|
module ControllerSupport
|
9
|
-
|
9
|
+
|
10
10
|
def self.included(base)
|
11
11
|
base.extend Xebec::ControllerSupport::ClassMethods
|
12
12
|
base.send :include, Xebec::ControllerSupport::InstanceMethods
|
13
13
|
base.send :include, Xebec::HasNavBars
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
module ClassMethods
|
17
|
-
|
17
|
+
|
18
18
|
# Declare and populate a navigation bar. This method
|
19
19
|
# is a shorthand for creating a +before_filter+ that looks
|
20
20
|
# up and populates a navigation bar.
|
@@ -45,11 +45,11 @@ module Xebec
|
|
45
45
|
end
|
46
46
|
nil
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
module InstanceMethods
|
52
|
-
|
52
|
+
|
53
53
|
# Declare and populate a navigation bar.
|
54
54
|
#
|
55
55
|
# @param [String, Symbol] name the name of the navigation bar
|
@@ -57,7 +57,7 @@ module Xebec
|
|
57
57
|
# @yield [Xebec::NavBar] nav_bar the navigation bar. The block
|
58
58
|
# is evaluated in the scope of the
|
59
59
|
# controller instance.
|
60
|
-
#
|
60
|
+
#
|
61
61
|
# @return [Xebec::NavBar]
|
62
62
|
#
|
63
63
|
# @example
|
@@ -69,9 +69,9 @@ module Xebec
|
|
69
69
|
def nav_bar(name = Xebec::NavBar::DEFAULT_NAME, &block)
|
70
70
|
look_up_nav_bar_and_eval name, &block
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
end
|
74
|
-
|
74
|
+
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
end
|
data/lib/xebec/has_nav_bars.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'xebec/nav_bar'
|
2
2
|
|
3
3
|
module Xebec
|
4
|
-
|
4
|
+
|
5
5
|
# A supporting mixin for NavBarHelper and ControllerSupport.
|
6
6
|
# Looks up navigation bars by name.
|
7
7
|
module HasNavBars #:nodoc:
|
8
|
-
|
8
|
+
|
9
9
|
protected
|
10
|
-
|
10
|
+
|
11
11
|
# Looks up the named nav bar, creates it if it
|
12
12
|
# doesn't exist, and evaluates the the block, if
|
13
13
|
# given, in the scope of +self+, yielding the nav bar.
|
@@ -21,17 +21,17 @@ module Xebec
|
|
21
21
|
block.bind(self).call(bar) if block_given?
|
22
22
|
end
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def look_up_nav_bar(name, html_attributes, options = {})
|
26
26
|
(nav_bars[name] ||= NavBar.new(name, html_attributes)).tap do |bar|
|
27
27
|
bar.html_attributes.merge!(html_attributes)
|
28
28
|
end
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
def nav_bars
|
32
32
|
@nav_bars ||= HashWithIndifferentAccess.new
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
end
|
data/lib/xebec/html5.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Xebec
|
2
|
-
|
2
|
+
|
3
3
|
def self.html5_for_all_browsers!
|
4
4
|
Xebec::HTML5.force = true
|
5
5
|
end
|
6
|
-
|
6
|
+
|
7
7
|
# Xebec will help you transition your site to HTML 5
|
8
8
|
# by using the <tt><nav></tt> element like so:
|
9
9
|
#
|
@@ -29,7 +29,7 @@ module Xebec
|
|
29
29
|
# That, unfortunately messes with your CSS selectors. Xebec,
|
30
30
|
# therefore, has a slightly more intelligent default behavior.
|
31
31
|
# If it detects a browser that does not support HTML5 elements,
|
32
|
-
# it will replace the <tt><nav></tt> element with a
|
32
|
+
# it will replace the <tt><nav></tt> element with a
|
33
33
|
# <tt><div class='navbar'></tt>.
|
34
34
|
#
|
35
35
|
# Some enterprising folks have found a workaround for IE, however.
|
@@ -45,19 +45,19 @@ module Xebec
|
|
45
45
|
# @see Xebec::NavBarHelper.add_html5_dom_elements_to_ie
|
46
46
|
# See also the example application.
|
47
47
|
module HTML5
|
48
|
-
|
48
|
+
|
49
49
|
class <<self
|
50
50
|
attr_accessor :force
|
51
51
|
end
|
52
52
|
self.force = false
|
53
|
-
|
53
|
+
|
54
54
|
NON_HTML_5_USER_AGENTS = /msie/i
|
55
|
-
|
55
|
+
|
56
56
|
def user_agent_supports_html5?
|
57
57
|
return true if Xebec::HTML5.force
|
58
58
|
return !(NON_HTML_5_USER_AGENTS === request.user_agent)
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
end
|
data/lib/xebec/nav_bar.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
require 'xebec/nav_item'
|
2
2
|
|
3
3
|
module Xebec
|
4
|
-
|
4
|
+
|
5
5
|
class NavBar
|
6
|
-
|
6
|
+
|
7
7
|
DEFAULT_NAME = :default
|
8
|
-
|
8
|
+
|
9
9
|
attr_reader :name
|
10
10
|
attr_reader :items
|
11
11
|
attr_reader :html_attributes
|
12
12
|
attr_accessor :current
|
13
|
-
|
13
|
+
|
14
14
|
# Create a new NavBar object.
|
15
15
|
#
|
16
16
|
# @param [String] name the name of the navigation bar; defaults to :default
|
@@ -22,7 +22,7 @@ module Xebec
|
|
22
22
|
@items = []
|
23
23
|
@current = nil
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
# Add a navigation item to this bar.
|
27
27
|
#
|
28
28
|
# @param [String, Symbol] name the name of the item
|
@@ -36,19 +36,19 @@ module Xebec
|
|
36
36
|
def nav_item(name, href = nil)
|
37
37
|
items << Xebec::NavItem.new(name, href)
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def empty?
|
41
41
|
items.empty?
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
def to_s
|
45
45
|
"<NavBar #{name}>"
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
def inspect
|
49
49
|
"<NavBar #{name}: #{items.map(&:name).join('|')}>"
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
end
|
data/lib/xebec/nav_bar_helper.rb
CHANGED
@@ -3,12 +3,12 @@ require 'xebec/nav_bar_renderer'
|
|
3
3
|
require 'xebec/has_nav_bars'
|
4
4
|
|
5
5
|
module Xebec
|
6
|
-
|
6
|
+
|
7
7
|
module NavBarHelper
|
8
|
-
|
8
|
+
|
9
9
|
include Xebec::HasNavBars
|
10
10
|
include Xebec::HTML5
|
11
|
-
|
11
|
+
|
12
12
|
# If called in an output expression ("<%= navbar %>" in ERB
|
13
13
|
# or "=navbar" in HAML), renders the navigation bar.
|
14
14
|
#
|
@@ -17,7 +17,7 @@ module Xebec
|
|
17
17
|
# # => <ul class="navbar tabs">...</ul>
|
18
18
|
#
|
19
19
|
# @see Xebec::NavBarRenderer#to_s
|
20
|
-
#
|
20
|
+
#
|
21
21
|
# If called with a block, yields the underlying NavBar for
|
22
22
|
# modification.
|
23
23
|
#
|
@@ -34,7 +34,7 @@ module Xebec
|
|
34
34
|
def nav_bar(name = nil, html_attributes = {}, options = {}, &block)
|
35
35
|
look_up_nav_bar_and_eval name, html_attributes, options, &block
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
# Renders a navigation bar if and only if it contains any
|
39
39
|
# navigation items. Unlike +nav_bar+, this method does not
|
40
40
|
# accept a block.
|
@@ -44,7 +44,7 @@ module Xebec
|
|
44
44
|
bar = look_up_nav_bar name, html_attributes
|
45
45
|
bar.empty? ? '' : bar
|
46
46
|
end
|
47
|
-
|
47
|
+
|
48
48
|
# Renders a <tt><script></tt> tag that preloads HTML5
|
49
49
|
# tags in IE. Useful if you called
|
50
50
|
# <tt>Xebec.html5_for_all_browsers!</tt> in your
|
@@ -53,14 +53,14 @@ module Xebec
|
|
53
53
|
# @see Xebec::HTML5
|
54
54
|
def add_html5_dom_elements_to_ie
|
55
55
|
return <<-EOS
|
56
|
-
<!--[if IE]>
|
56
|
+
<!--[if lt IE 9]>
|
57
57
|
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
58
58
|
<![endif]-->
|
59
59
|
EOS
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
protected
|
63
|
-
|
63
|
+
|
64
64
|
# Override HasNavBars#look_up_nav_bar to replace with a
|
65
65
|
# renderer if necessary.
|
66
66
|
def look_up_nav_bar(name, html_attributes, options = {})
|
@@ -71,7 +71,7 @@ EOS
|
|
71
71
|
end
|
72
72
|
bar
|
73
73
|
end
|
74
|
-
|
74
|
+
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
end
|