refinerycms-footer-menu 1.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.
- data/app/decorators/controllers/application_decorator.rb +13 -0
- data/app/decorators/models/refinery/page_decorator.rb +27 -0
- data/app/views/refinery/_footer.html.erb +20 -0
- data/db/seeds.rb +15 -0
- data/lib/generators/refinery/footer_menu_generator.rb +13 -0
- data/lib/refinery/footer-menu.rb +21 -0
- data/lib/refinery/footer-menu/engine.rb +28 -0
- data/lib/refinerycms-footer-menu.rb +1 -0
- data/lib/tasks/refinery/footer-menu.rake +13 -0
- data/readme.md +3 -0
- metadata +76 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
::ApplicationController.class_eval do
|
2
|
+
|
3
|
+
before_filter :find_footer_pages_for_menu
|
4
|
+
|
5
|
+
protected
|
6
|
+
|
7
|
+
def find_footer_pages_for_menu
|
8
|
+
@menu_footer_pages = ::Refinery::Menu.new(::Refinery::Page.fast_footer_menu)
|
9
|
+
# Don't use /footer url prefix
|
10
|
+
@menu_footer_pages.each {|mi| mi[:url][:path].reject!{ |path| path =~ /footer/ } if mi[:url].include?('path')}
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
::Refinery::Page.class_eval do
|
2
|
+
def self.fast_footer_menu(columns = [])
|
3
|
+
# First, apply a filter to determine which pages to show.
|
4
|
+
# We need to join to the page's slug to avoid multiple queries.
|
5
|
+
return nil if (footer_page_id = ::Refinery::Page.select(:id).find_by_link_url('/footer')).nil?
|
6
|
+
|
7
|
+
pages = includes(:slug, :slugs).order('lft ASC').where(:parent_id => footer_page_id)
|
8
|
+
|
9
|
+
# Now we only want to select particular columns to avoid any further queries.
|
10
|
+
# Title and menu_title are retrieved in the next block below so they are not here.
|
11
|
+
(menu_columns | columns).each do |column|
|
12
|
+
pages = pages.select(arel_table[column.to_sym])
|
13
|
+
end
|
14
|
+
|
15
|
+
# We have to get title and menu_title from the translations table.
|
16
|
+
# To avoid calling globalize3 an extra time, we get title as page_title
|
17
|
+
# and we get menu_title as page_menu_title.
|
18
|
+
# These is used in 'to_refinery_menu_item' in the Page model.
|
19
|
+
%w(title menu_title).each do |column|
|
20
|
+
pages = pages.joins(:translations).select(
|
21
|
+
"#{translation_class.table_name}.#{column} as page_#{column}"
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
pages
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<%
|
2
|
+
# Collect the root items.
|
3
|
+
# ::Refinery::Menu is smart enough to remember all of the items in the original collection.
|
4
|
+
if (roots = @menu_footer_pages).present?
|
5
|
+
dom_id ||= 'footer_menu'
|
6
|
+
css = [(css || 'footer-menu'), 'clearfix'].flatten.join(' ')
|
7
|
+
hide_children = true
|
8
|
+
-%>
|
9
|
+
<nav id='<%= dom_id %>' class='<%= css %>'>
|
10
|
+
<ul>
|
11
|
+
<%= render :partial => '/refinery/menu_branch', :collection => roots.uniq,
|
12
|
+
:locals => {
|
13
|
+
:hide_children => hide_children,
|
14
|
+
:sibling_count => (roots.length - 1),
|
15
|
+
:menu_levels => local_assigns[:menu_levels],
|
16
|
+
:apply_css => false #if you don't care about class='first' class='last' or class='selected' set apply_css to false for speed.
|
17
|
+
} -%>
|
18
|
+
</ul>
|
19
|
+
</nav>
|
20
|
+
<% end -%>
|
data/db/seeds.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
url = "/footer"
|
2
|
+
if defined?(::Refinery::Page) && ::Refinery::Page.where(:link_url => url).empty?
|
3
|
+
page = ::Refinery::Page.create(
|
4
|
+
:title => 'Footer',
|
5
|
+
:link_url => url,
|
6
|
+
:deletable => false,
|
7
|
+
:position => ((::Refinery::Page.maximum(:position, :conditions => {:parent_id => nil}) || -1)+1),
|
8
|
+
:menu_match => "^#{url}(\/|\/.+?|)$",
|
9
|
+
:show_in_menu => false
|
10
|
+
)
|
11
|
+
Refinery::Pages.default_parts.each do |default_page_part|
|
12
|
+
page.parts.create(:title => default_page_part, :body => nil)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Refinery
|
2
|
+
class FooterMenuGenerator < Rails::Generators::Base
|
3
|
+
|
4
|
+
def append_load_seed_data
|
5
|
+
create_file 'db/seeds.rb' unless File.exists?(File.join(destination_root, 'db', 'seeds.rb'))
|
6
|
+
append_file 'db/seeds.rb', :verbose => true do
|
7
|
+
<<-EOH
|
8
|
+
Refinery::FooterMenu::Engine.load_seed
|
9
|
+
EOH
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'refinerycms-core'
|
2
|
+
|
3
|
+
module Refinery
|
4
|
+
autoload :FooterMenuGenerator, 'generators/refinery/footer_menu_generator'
|
5
|
+
|
6
|
+
module FooterMenu
|
7
|
+
require 'refinery/footer-menu/engine'
|
8
|
+
|
9
|
+
class << self
|
10
|
+
attr_writer :root
|
11
|
+
|
12
|
+
def root
|
13
|
+
@root ||= Pathname.new(File.expand_path('../../../', __FILE__))
|
14
|
+
end
|
15
|
+
|
16
|
+
def factory_paths
|
17
|
+
@factory_paths ||= [ root.join('spec', 'factories').to_s ]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Refinery
|
2
|
+
module FooterMenu
|
3
|
+
class Engine < Rails::Engine
|
4
|
+
include Refinery::Engine
|
5
|
+
isolate_namespace Refinery::FooterMenu
|
6
|
+
|
7
|
+
engine_name :refinery_footer_menu
|
8
|
+
|
9
|
+
initializer "register refinerycms_footer_menu plugin" do |app|
|
10
|
+
Refinery::Plugin.register do |plugin|
|
11
|
+
plugin.name = "footer-menu"
|
12
|
+
plugin.pathname = root
|
13
|
+
plugin.hide_from_menu = true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
config.after_initialize do
|
18
|
+
Refinery.register_engine(Refinery::FooterMenu)
|
19
|
+
end
|
20
|
+
|
21
|
+
after_inclusion do
|
22
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../../../app/**/*_decorator*.rb")) do |c|
|
23
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'refinery/footer-menu'
|
data/readme.md
ADDED
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: refinerycms-footer-menu
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.0'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Marian Andre
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: refinerycms-core
|
16
|
+
requirement: &70331192599560 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70331192599560
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: refinerycms-testing
|
27
|
+
requirement: &70331192598240 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.0.0
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70331192598240
|
36
|
+
description: Ruby on Rails Footer Menu engine for Refinery CMS
|
37
|
+
email: marian@bitflut.com
|
38
|
+
executables: []
|
39
|
+
extensions: []
|
40
|
+
extra_rdoc_files: []
|
41
|
+
files:
|
42
|
+
- app/decorators/controllers/application_decorator.rb
|
43
|
+
- app/decorators/models/refinery/page_decorator.rb
|
44
|
+
- app/views/refinery/_footer.html.erb
|
45
|
+
- db/seeds.rb
|
46
|
+
- lib/generators/refinery/footer_menu_generator.rb
|
47
|
+
- lib/refinery/footer-menu/engine.rb
|
48
|
+
- lib/refinery/footer-menu.rb
|
49
|
+
- lib/refinerycms-footer-menu.rb
|
50
|
+
- lib/tasks/refinery/footer-menu.rake
|
51
|
+
- readme.md
|
52
|
+
homepage: http://github.com/bitflut/refinerycms-footer-menu
|
53
|
+
licenses: []
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
require_paths:
|
57
|
+
- lib
|
58
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
requirements: []
|
71
|
+
rubyforge_project:
|
72
|
+
rubygems_version: 1.8.15
|
73
|
+
signing_key:
|
74
|
+
specification_version: 3
|
75
|
+
summary: Footer Menu engine for Refinery CMS
|
76
|
+
test_files: []
|