golden-menu 0.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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +128 -0
- data/Rakefile +1 -0
- data/app/controllers/golden/menu/hierarchical_menus_controller.rb +48 -0
- data/app/helpers/golden/menu/hierarchical_menus_helper.rb +56 -0
- data/app/models/concerns/golden/menu/golden_menu_resource.rb +11 -0
- data/app/models/golden/menu/hierarchical_menu.rb +35 -0
- data/app/models/golden/menu/menu_resource.rb +6 -0
- data/app/views/golden/menu/hierarchical_menus/_form.html.erb +14 -0
- data/app/views/golden/menu/hierarchical_menus/_menu.html.erb +22 -0
- data/app/views/golden/menu/hierarchical_menus/_table.html.erb +36 -0
- data/app/views/golden/menu/hierarchical_menus/_tree.html.erb +3 -0
- data/app/views/golden/menu/hierarchical_menus/edit.html.erb +27 -0
- data/app/views/golden/menu/hierarchical_menus/index.html.erb +19 -0
- data/app/views/golden/menu/hierarchical_menus/list.html.erb +20 -0
- data/app/views/golden/menu/hierarchical_menus/new.html.erb +24 -0
- data/app/views/golden/menu/hierarchical_menus/show.html.erb +21 -0
- data/config/locales/menus.en.yml +50 -0
- data/config/locales/menus.zh-TW.yml +50 -0
- data/config/routes.rb +8 -0
- data/golden-menu.gemspec +30 -0
- data/lib/generators/golden/menu/USAGE +16 -0
- data/lib/generators/golden/menu/install_generator.rb +64 -0
- data/lib/generators/golden/menu/templates/create_golden_menu_resources.rb +12 -0
- data/lib/generators/golden/menu/templates/create_golden_menus.rb +19 -0
- data/lib/generators/golden/menu/templates/golden_menu.rb +11 -0
- data/lib/generators/golden/menu/templates/menu_resources_helper.rb +8 -0
- data/lib/generators/golden/menu/templates/menus.en.yml +6 -0
- data/lib/generators/golden/menu/templates/menus.zh-TW.yml +6 -0
- data/lib/golden/menu.rb +27 -0
- data/lib/golden/menu/engine.rb +12 -0
- data/lib/golden/menu/option_helper.rb +41 -0
- data/lib/golden/menu/version.rb +5 -0
- metadata +217 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2a9e1ca8781107e28df6d6418e7a2a1d5443089c
|
4
|
+
data.tar.gz: b8dd7c33402a20495f4545b2c94baf6f0236193b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ed26d208087a54659e146a00c895074329f2fd691b3f0a0a39f249dc4c2e2f3eabea95ae5fd565c964fac5e9246752a09de6b7687c972a9eedd639a9f79c63ff
|
7
|
+
data.tar.gz: 62748ad8a8d3537e824a9d100a9ec6225325a6388e1b4c050360a1a89e2ef834d883eec27680784de5711817ee06812da7b259ece5cab89abd0c1f0015cef284
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Tse-Ching Ho
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
# Golden::Menu
|
2
|
+
|
3
|
+
The `golden-menu` creates menus by building a hierarchiacal tree first and linking related resources later.
|
4
|
+
|
5
|
+
## Requirement
|
6
|
+
|
7
|
+
For Rails 4 project, `Gemfile` should have
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'protected_attributes'
|
11
|
+
gem 'devise', '~> 3.0.0.rc'
|
12
|
+
gem 'cancan'
|
13
|
+
gem 'simple_form', '~> 3.0.0.rc'
|
14
|
+
gem 'anjlab-bootstrap-rails', require: 'bootstrap-rails'
|
15
|
+
gem 'will_paginate'
|
16
|
+
gem 'rails-theme-helper'
|
17
|
+
```
|
18
|
+
|
19
|
+
For Rails 3 project, `Gemfile` should have
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
gem 'devise', '>= 2.0', '< 3.0'
|
23
|
+
gem 'cancan'
|
24
|
+
gem 'simple_form', '>= 2.0', '< 3.0'
|
25
|
+
gem 'anjlab-bootstrap-rails', require: 'bootstrap-rails'
|
26
|
+
gem 'will_paginate'
|
27
|
+
gem 'rails-theme-helper'
|
28
|
+
```
|
29
|
+
|
30
|
+
Please make sure these gems are installed and configured properly.
|
31
|
+
|
32
|
+
## Installation
|
33
|
+
|
34
|
+
Add `golden-menu` to your application's Gemfile.
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
gem 'golden-menu'
|
38
|
+
```
|
39
|
+
|
40
|
+
Then bundle gems, generate files and migrate database.
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
$ bundle
|
44
|
+
$ rails generate golden:menu:install
|
45
|
+
$ rake db:migrate
|
46
|
+
```
|
47
|
+
|
48
|
+
Remember add menu abilities for `cancan`.
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
can :manage, Golden::Menu::HierarchicalMenu
|
52
|
+
```
|
53
|
+
|
54
|
+
## Configuration
|
55
|
+
|
56
|
+
You will need to add these basic configures of `golden-menu` for your needs.
|
57
|
+
|
58
|
+
* `groups` for grouping menus with a name
|
59
|
+
* `translate_group_block` for group name translation
|
60
|
+
|
61
|
+
Edit `config/initializers/golden_menu.rb` for more detail.
|
62
|
+
|
63
|
+
## Usage
|
64
|
+
|
65
|
+
Please go to `/hierarchical_menus` and create the needed menu tree first.
|
66
|
+
|
67
|
+
### Menu Navigation
|
68
|
+
|
69
|
+
You can simply add a `golden_dropdown_menu` to your view of main app
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
<%= golden_dropdown_menu Golden::Menu::HierarchicalMenu.grouped('header').roots %>
|
73
|
+
```
|
74
|
+
|
75
|
+
Or with more options and list items
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
<%= golden_dropdown_menu Golden::Menu::HierarchicalMenu.grouped('sidebar').roots, {
|
79
|
+
menu_type: %w{pull-left},
|
80
|
+
class: 'nav nav-list',
|
81
|
+
role: 'side-navigation'
|
82
|
+
} do |li|
|
83
|
+
li << [t('.title'), class: 'nav-header']
|
84
|
+
li << link_to(t('.guides'), guides_path)
|
85
|
+
pages.each do |page|
|
86
|
+
li << link_to(page.title, page_path(page))
|
87
|
+
end
|
88
|
+
end %>
|
89
|
+
```
|
90
|
+
|
91
|
+
### Menu resources
|
92
|
+
|
93
|
+
You can add the menu association field to form parital of any classes.
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
<%= f.association :menus,
|
97
|
+
collection: nested_set_options(Golden::Menu::HierarchicalMenu) { |menu|
|
98
|
+
"#{'-' * menu.level} #{menu.name_and_group} (#{menu.menu_resources.count})"
|
99
|
+
},
|
100
|
+
input_html: {
|
101
|
+
multiple: true,
|
102
|
+
class: 'chzn-select'
|
103
|
+
} %>
|
104
|
+
```
|
105
|
+
|
106
|
+
Edit `menu_resources_helper.rb` and define what resource the menu item represented.
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
def golden_menu_resource_link resource
|
110
|
+
case resource
|
111
|
+
when Page
|
112
|
+
link_to resource.title, page_path(resource)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
```
|
116
|
+
|
117
|
+
## Contributing
|
118
|
+
|
119
|
+
1. Fork it
|
120
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
121
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
122
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
123
|
+
5. Create new Pull Request
|
124
|
+
|
125
|
+
## License
|
126
|
+
|
127
|
+
MIT
|
128
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class Golden::Menu::HierarchicalMenusController < ApplicationController
|
2
|
+
include ::TheSortableTreeController::Rebuild
|
3
|
+
|
4
|
+
before_filter :authenticate_session!
|
5
|
+
load_and_authorize_resource :menu, class: 'Golden::Menu::HierarchicalMenu', parent: false #, find_by: :url
|
6
|
+
|
7
|
+
def index
|
8
|
+
@menu = @menus.nested_set.select('id, url, name, description, parent_id')
|
9
|
+
respond_with @menus
|
10
|
+
end
|
11
|
+
|
12
|
+
def show
|
13
|
+
respond_with @menu
|
14
|
+
end
|
15
|
+
|
16
|
+
def new
|
17
|
+
respond_with @menu
|
18
|
+
end
|
19
|
+
|
20
|
+
def edit
|
21
|
+
end
|
22
|
+
|
23
|
+
def create
|
24
|
+
@menu.save
|
25
|
+
respond_with @menu
|
26
|
+
end
|
27
|
+
|
28
|
+
def update
|
29
|
+
@menu.update_attributes params[:menu]
|
30
|
+
respond_with @menu
|
31
|
+
end
|
32
|
+
|
33
|
+
def destroy
|
34
|
+
@menu.destroy
|
35
|
+
respond_with @menu
|
36
|
+
end
|
37
|
+
|
38
|
+
def list
|
39
|
+
@menu = @menus.nested_set
|
40
|
+
@menus = @menus.paginate page: params[:page]
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def the_define_common_variables
|
46
|
+
['@menu', 'menus', Golden::Menu::HierarchicalMenu]
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Golden::Menu::HierarchicalMenusHelper
|
2
|
+
# Submenu should not be shown but move to root instead if root menu has no
|
3
|
+
# menu_resources at all.
|
4
|
+
def golden_dropdown_menu menus, options = {}
|
5
|
+
option_helper = Golden::Menu::OptionHelper.new options
|
6
|
+
render_list option_helper.menu_ul_class do |li|
|
7
|
+
yield li if block_given?
|
8
|
+
menus.each do |menu|
|
9
|
+
next unless menu.menu_resources.exists?
|
10
|
+
uri = golden_menu_link menu, option_helper.linked?
|
11
|
+
li << [
|
12
|
+
dropdown_toggle(menu.name, uri, title: menu.description),
|
13
|
+
dropdown_menu(role: 'menu') do |li2|
|
14
|
+
golden_dropdown_content menu.menu_resources, li2
|
15
|
+
golden_dropdown_submenu menu.children, li2, option_helper
|
16
|
+
end,
|
17
|
+
option_helper.menu_li_class
|
18
|
+
]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def golden_dropdown_submenu menus, li, option_helper
|
24
|
+
menus.each_with_index do |submenu, index|
|
25
|
+
next unless submenu.menu_resources.exists?
|
26
|
+
uri = golden_menu_link submenu, option_helper.linked?
|
27
|
+
li << [nil, { class: 'divider' }] if index == 0
|
28
|
+
li << [
|
29
|
+
link_to(submenu.name, uri, title: submenu.description),
|
30
|
+
dropdown_menu do |li2|
|
31
|
+
golden_dropdown_content submenu.menu_resources, li2
|
32
|
+
golden_dropdown_submenu submenu.children, li2, option_helper
|
33
|
+
end,
|
34
|
+
option_helper.submenu_li_class
|
35
|
+
]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def golden_dropdown_content menu_resources, li
|
40
|
+
menu_resources.each do |menu_resource|
|
41
|
+
link = golden_menu_resource_link menu_resource.resource
|
42
|
+
li << link if link
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def golden_menu_link menu, linked = false
|
47
|
+
return menu.resource_url if menu.resource_url.present?
|
48
|
+
linked ? golden_menu.hierarchical_menu_path(menu) : '#'
|
49
|
+
end
|
50
|
+
|
51
|
+
def golden_menu_groups
|
52
|
+
Golden::Menu.groups.map do |value|
|
53
|
+
[Golden::Menu.translate_group(value), value]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Golden::Menu::GoldenMenuResource
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
included do
|
4
|
+
attr_accessible :menu_ids
|
5
|
+
has_many :menu_resources, class_name: 'Golden::Menu::MenuResource', as: :resource
|
6
|
+
has_many :menus, class_name: 'Golden::Menu::HierarchicalMenu', through: :menu_resources
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Golden::Menu::HierarchicalMenu < ActiveRecord::Base
|
2
|
+
include ::TheSortableTree::Scopes
|
3
|
+
|
4
|
+
self.table_name = 'golden_menus'
|
5
|
+
|
6
|
+
attr_accessible :group, :name, :description, :parent_id, :resource_url
|
7
|
+
|
8
|
+
validates :name, presence: true
|
9
|
+
validates :url, format: { with: /\A([\w\-]{3,})\z/ }, allow_blank: true
|
10
|
+
|
11
|
+
belongs_to :parent, class_name: 'Golden::Menu::HierarchicalMenu'
|
12
|
+
has_many :menu_resources, foreign_key: 'menu_id'
|
13
|
+
|
14
|
+
acts_as_url :name, sync_url: true, only_when_blank: true
|
15
|
+
acts_as_nested_set
|
16
|
+
|
17
|
+
class << self
|
18
|
+
def grouped(name)
|
19
|
+
where(group: name)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_param
|
24
|
+
id
|
25
|
+
end
|
26
|
+
|
27
|
+
def name_and_group
|
28
|
+
return name unless translated_group
|
29
|
+
"#{name} @#{translated_group}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def translated_group
|
33
|
+
::Golden::Menu.translate_group group
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="form-inputs">
|
2
|
+
<%= f.input :group,
|
3
|
+
as: :select,
|
4
|
+
collection: golden_menu_groups,
|
5
|
+
input_html: { class: 'chzn-select' } %>
|
6
|
+
<%= f.input :name %>
|
7
|
+
<%= f.input :description %>
|
8
|
+
<%= f.association :parent,
|
9
|
+
collection: nested_set_options(Golden::Menu::HierarchicalMenu) { |menu|
|
10
|
+
"#{'-' * menu.level} #{menu.name}"
|
11
|
+
},
|
12
|
+
input_html: { class: 'chzn-select' } %>
|
13
|
+
<%= f.input :resource_url %>
|
14
|
+
</div>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<section>
|
2
|
+
<p>
|
3
|
+
<b><%= Golden::Menu::HierarchicalMenu.human_attribute_name :group %>:</b>
|
4
|
+
<%= menu.translated_group %>
|
5
|
+
</p>
|
6
|
+
<p>
|
7
|
+
<b><%= Golden::Menu::HierarchicalMenu.human_attribute_name :name %>:</b>
|
8
|
+
<%= menu.name %>
|
9
|
+
</p>
|
10
|
+
<p>
|
11
|
+
<b><%= Golden::Menu::HierarchicalMenu.human_attribute_name :description %>:</b>
|
12
|
+
<%= menu.description %>
|
13
|
+
</p>
|
14
|
+
<p>
|
15
|
+
<b><%= Golden::Menu::HierarchicalMenu.human_attribute_name :parent %>:</b>
|
16
|
+
<%= menu.parent.try :name %>
|
17
|
+
</p>
|
18
|
+
<p>
|
19
|
+
<b><%= Golden::Menu::HierarchicalMenu.human_attribute_name :menu_resource_counts %>:</b>
|
20
|
+
<%= menu.menu_resources.count %>
|
21
|
+
</p>
|
22
|
+
</section>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<table class="table table-striped table-bordered">
|
2
|
+
<thead>
|
3
|
+
<tr>
|
4
|
+
<th><%= Golden::Menu::HierarchicalMenu.human_attribute_name :group %></th>
|
5
|
+
<th><%= Golden::Menu::HierarchicalMenu.human_attribute_name :name %></th>
|
6
|
+
<th><%= Golden::Menu::HierarchicalMenu.human_attribute_name :description %></th>
|
7
|
+
<th><%= Golden::Menu::HierarchicalMenu.human_attribute_name :parent %></th>
|
8
|
+
<th><%= Golden::Menu::HierarchicalMenu.human_attribute_name :menu_resource_counts %></th>
|
9
|
+
<th><%= t('helpers.actions') %></th>
|
10
|
+
</tr>
|
11
|
+
</thead>
|
12
|
+
<tbody>
|
13
|
+
<% menus.each do |menu| %>
|
14
|
+
<tr>
|
15
|
+
<td><%= menu.translated_group %></td>
|
16
|
+
<td><%= menu.name %></td>
|
17
|
+
<td><%= menu.description %></td>
|
18
|
+
<td><%= menu.parent.try :name %></td>
|
19
|
+
<td><%= menu.menu_resources.count %></td>
|
20
|
+
<td>
|
21
|
+
<%= render_btn_group do |btn|
|
22
|
+
if can? :show, menu
|
23
|
+
btn << link_to_show(menu)
|
24
|
+
end
|
25
|
+
if can? :edit, menu
|
26
|
+
btn << link_to_edit([:edit, menu])
|
27
|
+
end
|
28
|
+
if can? :destroy, menu
|
29
|
+
btn << link_to_destroy(menu)
|
30
|
+
end
|
31
|
+
end %>
|
32
|
+
</td>
|
33
|
+
</tr>
|
34
|
+
<% end %>
|
35
|
+
</tbody>
|
36
|
+
</table>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<article>
|
2
|
+
<header>
|
3
|
+
<h1><%= t('.title') %></h1>
|
4
|
+
</header>
|
5
|
+
|
6
|
+
<%= render_list class: 'nav nav-tabs' do |li|
|
7
|
+
if can? :index, Golden::Menu::HierarchicalMenu
|
8
|
+
li << [link_to(t('helpers.index'), hierarchical_menus_path), { class: 'pull-right' }]
|
9
|
+
end
|
10
|
+
if can? :show, @menu
|
11
|
+
li << [link_to(t('helpers.show'), @menu), { class: 'pull-right' }]
|
12
|
+
end
|
13
|
+
end %>
|
14
|
+
|
15
|
+
<div>
|
16
|
+
<%= simple_form_for @menu, as: :menu do |f| %>
|
17
|
+
<%= f.error_notification %>
|
18
|
+
<%= render 'form', f: f %>
|
19
|
+
<div class="form-actions">
|
20
|
+
<%= submit_button f %>
|
21
|
+
</div>
|
22
|
+
<% end %>
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<footer>
|
26
|
+
</footer>
|
27
|
+
</article>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<article>
|
2
|
+
<header>
|
3
|
+
<h1><%= t('.title') %></h1>
|
4
|
+
</header>
|
5
|
+
|
6
|
+
<%= render_list class: 'nav nav-tabs' do |li|
|
7
|
+
if can? :list, Golden::Menu::HierarchicalMenu
|
8
|
+
li << [link_to(t('.list'), list_hierarchical_menus_path), { class: 'pull-right' }]
|
9
|
+
end
|
10
|
+
if can? :new, Golden::Menu::HierarchicalMenu
|
11
|
+
li << [link_to(t('helpers.new'), new_hierarchical_menu_path), { class: 'pull-right' }]
|
12
|
+
end
|
13
|
+
end %>
|
14
|
+
|
15
|
+
<%= render 'tree', menus: @menus %>
|
16
|
+
|
17
|
+
<footer>
|
18
|
+
</footer>
|
19
|
+
</article>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<article>
|
2
|
+
<header>
|
3
|
+
<h1><%= t('.title') %></h1>
|
4
|
+
</header>
|
5
|
+
|
6
|
+
<%= render_list class: 'nav nav-tabs' do |li|
|
7
|
+
if can? :index, Golden::Menu::HierarchicalMenu
|
8
|
+
li << [link_to(t('.index'), hierarchical_menus_path), { class: 'pull-right' }]
|
9
|
+
end
|
10
|
+
if can? :new, Golden::Menu::HierarchicalMenu
|
11
|
+
li << [link_to(t('helpers.new'), new_hierarchical_menu_path), { class: 'pull-right' }]
|
12
|
+
end
|
13
|
+
end %>
|
14
|
+
|
15
|
+
<%= render 'table', menus: @menus %>
|
16
|
+
<%= render 'application/pagination', collection: @menus %>
|
17
|
+
|
18
|
+
<footer>
|
19
|
+
</footer>
|
20
|
+
</article>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<article>
|
2
|
+
<header>
|
3
|
+
<h1><%= t('.title') %></h1>
|
4
|
+
</header>
|
5
|
+
|
6
|
+
<%= render_list class: 'nav nav-tabs' do |li|
|
7
|
+
if can? :index, Golden::Menu::HierarchicalMenu
|
8
|
+
li << [link_to(t('helpers.index'), hierarchical_menus_path), { class: 'pull-right' }]
|
9
|
+
end
|
10
|
+
end %>
|
11
|
+
|
12
|
+
<div>
|
13
|
+
<%= simple_form_for @menu, as: :menu do |f| %>
|
14
|
+
<%= f.error_notification %>
|
15
|
+
<%= render 'form', f: f %>
|
16
|
+
<div class="form-actions">
|
17
|
+
<%= submit_button f %>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<footer>
|
23
|
+
</footer>
|
24
|
+
</article>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<article>
|
2
|
+
<header>
|
3
|
+
<h1><%= t('.title', name: @menu.name) %></h1>
|
4
|
+
</header>
|
5
|
+
|
6
|
+
<%= render_list class: 'nav nav-tabs' do |li|
|
7
|
+
if can? :index, Golden::Menu::HierarchicalMenu
|
8
|
+
li << [link_to(t('helpers.index'), hierarchical_menus_path), { class: 'pull-right' }]
|
9
|
+
end
|
10
|
+
if can? :edit, @menu
|
11
|
+
li << [link_to(t('helpers.edit'), [:edit, @menu]), { class: 'pull-right' }]
|
12
|
+
end
|
13
|
+
end %>
|
14
|
+
|
15
|
+
<div>
|
16
|
+
<%= render 'menu', menu: @menu %>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<footer>
|
20
|
+
</footer>
|
21
|
+
</article>
|
@@ -0,0 +1,50 @@
|
|
1
|
+
en:
|
2
|
+
golden:
|
3
|
+
menu:
|
4
|
+
hierarchical_menus:
|
5
|
+
edit:
|
6
|
+
title: 'Editing menu'
|
7
|
+
index:
|
8
|
+
title: 'Menus'
|
9
|
+
list: 'Listing menus'
|
10
|
+
new:
|
11
|
+
title: 'New menu'
|
12
|
+
show:
|
13
|
+
title: 'Menu - %{name}'
|
14
|
+
list:
|
15
|
+
title: 'Listing menus'
|
16
|
+
index: 'Menus'
|
17
|
+
|
18
|
+
activerecord:
|
19
|
+
models:
|
20
|
+
golden/menu/hierarchical_menu: 'Menu'
|
21
|
+
attributes:
|
22
|
+
golden/menu/hierarchical_menu:
|
23
|
+
url: 'Url'
|
24
|
+
group: 'Group'
|
25
|
+
name: 'Name'
|
26
|
+
description: 'Description'
|
27
|
+
resource_url: 'Resource URL'
|
28
|
+
parent: 'Parent'
|
29
|
+
lft: 'Lft'
|
30
|
+
rgt: 'Rgt'
|
31
|
+
depth: 'Depth'
|
32
|
+
menu_resources: 'Menu items'
|
33
|
+
menu_resource_counts: 'Menu items count'
|
34
|
+
|
35
|
+
simple_form:
|
36
|
+
labels:
|
37
|
+
golden_menu/hierarchical_menu:
|
38
|
+
hints:
|
39
|
+
golden_menu/hierarchical_menu:
|
40
|
+
menu:
|
41
|
+
group: 'Only root menus (blank parent) need to choose a group'
|
42
|
+
resource_url: 'fill redirect URL while click menu'
|
43
|
+
placeholders:
|
44
|
+
golden_menu/hierarchical_menu:
|
45
|
+
|
46
|
+
helpers:
|
47
|
+
submit:
|
48
|
+
golden_menu/hierarchical_menu:
|
49
|
+
create: 'Create %{model}'
|
50
|
+
update: 'Update %{model}'
|
@@ -0,0 +1,50 @@
|
|
1
|
+
zh-TW:
|
2
|
+
golden:
|
3
|
+
menu:
|
4
|
+
hierarchical_menus:
|
5
|
+
edit:
|
6
|
+
title: '編輯選單'
|
7
|
+
index:
|
8
|
+
title: '選單管理'
|
9
|
+
list: '選單列表'
|
10
|
+
new:
|
11
|
+
title: '新增選單'
|
12
|
+
show:
|
13
|
+
title: '選單 - %{name}'
|
14
|
+
list:
|
15
|
+
title: '選單列表'
|
16
|
+
index: '選單管理'
|
17
|
+
|
18
|
+
activerecord:
|
19
|
+
models:
|
20
|
+
golden/menu/hierarchical_menu: '選單'
|
21
|
+
attributes:
|
22
|
+
golden/menu/hierarchical_menu:
|
23
|
+
url: '網址'
|
24
|
+
group: '群組'
|
25
|
+
name: '名稱'
|
26
|
+
description: '描述'
|
27
|
+
resource_url: '連結網址'
|
28
|
+
parent: '父層'
|
29
|
+
lft: '左'
|
30
|
+
rgt: '右'
|
31
|
+
depth: '深度'
|
32
|
+
menu_resources: '選項'
|
33
|
+
menu_resource_counts: '選項數量'
|
34
|
+
|
35
|
+
simple_form:
|
36
|
+
labels:
|
37
|
+
golden_menu_hierarchical_menu:
|
38
|
+
hints:
|
39
|
+
golden_menu_hierarchical_menu:
|
40
|
+
menu:
|
41
|
+
group: '只有最頂層的選單(父層為空者)需要選擇群組'
|
42
|
+
resource_url: '可選填點擊時連結的網址'
|
43
|
+
placeholders:
|
44
|
+
golden_menu_hierarchical_menu:
|
45
|
+
|
46
|
+
helpers:
|
47
|
+
submit:
|
48
|
+
golden_menu_hierarchical_menu:
|
49
|
+
create: '建立%{model}'
|
50
|
+
update: '確認'
|
data/config/routes.rb
ADDED
data/golden-menu.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'golden/menu/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'golden-menu'
|
8
|
+
spec.version = Golden::Menu::VERSION
|
9
|
+
spec.authors = ['Tse-Ching Ho']
|
10
|
+
spec.email = ['tsechingho@gmail.com']
|
11
|
+
spec.description = %q{Golden Menu creates menus by building a hierarchiacal tree first and linking related resources later}
|
12
|
+
spec.summary = %q{creates menus by building a hierarchiacal tree first and linking related resources later}
|
13
|
+
spec.homepage = 'https://github.com/goldenio/golden-menu'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'railties', '>= 3.2.13', '< 5'
|
22
|
+
spec.add_dependency 'activesupport', '>= 3.2.13', '< 5'
|
23
|
+
spec.add_dependency 'actionpack', '>= 3.2.13', '< 5'
|
24
|
+
spec.add_dependency 'activerecord', '>= 3.2.13', '< 5'
|
25
|
+
spec.add_dependency 'awesome_nested_set', '>= 2.1'
|
26
|
+
spec.add_dependency 'the_sortable_tree', '>= 2.3'
|
27
|
+
|
28
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
29
|
+
spec.add_development_dependency 'rake'
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Description:
|
2
|
+
It will generate migration, configuration and helper for use.
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate golden:menu:install
|
6
|
+
|
7
|
+
This will create/modify:
|
8
|
+
db/migrate/20130613082608_create_golden_menus.rb
|
9
|
+
db/migrate/20130613082609_create_golden_menu_resources.rb
|
10
|
+
config/initializers/golden_menu.rb
|
11
|
+
config/application.rb
|
12
|
+
config/locales/golden/menus.en.yml
|
13
|
+
config/locales/golden/menus.zh-TW.yml
|
14
|
+
config/routes.rb
|
15
|
+
app/controllers/application_controller.rb
|
16
|
+
app/helpers/golden/menu/menu_resources_helper.rb
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'active_record/migration'
|
2
|
+
|
3
|
+
class Golden::Menu::InstallGenerator < Rails::Generators::NamedBase
|
4
|
+
include Rails::Generators::Migration
|
5
|
+
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
|
8
|
+
argument :name, type: :string, default: 'menu'
|
9
|
+
|
10
|
+
def self.next_migration_number dirname
|
11
|
+
next_migration_number = current_migration_number(dirname) + 1
|
12
|
+
ActiveRecord::Migration.next_migration_number(next_migration_number)
|
13
|
+
end
|
14
|
+
|
15
|
+
def generate_migration
|
16
|
+
%W(
|
17
|
+
create_golden_menus.rb
|
18
|
+
create_golden_menu_resources.rb
|
19
|
+
).each do |file|
|
20
|
+
migration_template file, File.join('db/migrate', class_path, file)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def generate_initializer
|
26
|
+
file = 'golden_menu.rb'
|
27
|
+
log :initializer, file
|
28
|
+
template file, File.join('config/initializers', class_path, file), verbose: false
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_locales_path
|
32
|
+
file = 'config/application.rb'
|
33
|
+
sentinel = "# config.i18n.default_locale = :de\n"
|
34
|
+
insert_into_file file, after: sentinel do
|
35
|
+
" config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]\n"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def generate_locales
|
40
|
+
files = %w{menus.en.yml menus.zh-TW.yml}
|
41
|
+
files.each do |file|
|
42
|
+
log :locales, "golden/#{file}"
|
43
|
+
template file, File.join('config/locales/golden', class_path, file), verbose: false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def inject_routes
|
48
|
+
route "mount Golden::Menu::Engine, at: '/'\n"
|
49
|
+
end
|
50
|
+
|
51
|
+
def inject_controller
|
52
|
+
file = 'app/controllers/application_controller.rb'
|
53
|
+
sentinel = "protect_from_forgery with: :exception\n"
|
54
|
+
insert_into_file file, after: sentinel do
|
55
|
+
" helper Golden::Menu::HierarchicalMenusHelper\n"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def generate_helper
|
60
|
+
file = 'menu_resources_helper.rb'
|
61
|
+
log :helper, file
|
62
|
+
template file, File.join('app/helpers/golden/menu', class_path, file), verbose: false
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateGoldenMenuResources < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :golden_menu_resources do |t|
|
4
|
+
t.references :menu
|
5
|
+
t.references :resource, polymorphic: true
|
6
|
+
|
7
|
+
t.timestamps
|
8
|
+
end
|
9
|
+
add_index :golden_menu_resources, :menu_id
|
10
|
+
add_index :golden_menu_resources, [:resource_type, :resource_id]
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateGoldenMenus < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :golden_menus do |t|
|
4
|
+
t.string :url
|
5
|
+
t.string :group
|
6
|
+
t.string :name, null: false
|
7
|
+
t.string :description
|
8
|
+
t.string :resource_url
|
9
|
+
t.references :parent
|
10
|
+
t.integer :lft
|
11
|
+
t.integer :rgt
|
12
|
+
t.integer :depth
|
13
|
+
|
14
|
+
t.timestamps
|
15
|
+
end
|
16
|
+
add_index :golden_menus, :url
|
17
|
+
add_index :golden_menus, :parent_id
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Golden::Menu.configure do |config|
|
2
|
+
# Add avaiable groups with array of name and value.
|
3
|
+
# Name will be used as translation key.
|
4
|
+
# Default is a blank array. You SHOULD give one at least.
|
5
|
+
config.groups = %w{header sidebar}
|
6
|
+
|
7
|
+
# You can overwrite translated group names by changing the block definition.
|
8
|
+
#config.translate_group_block = lambda do |group|
|
9
|
+
# I18n.t(group, scope: 'golden.menu.groups')
|
10
|
+
#end
|
11
|
+
end
|
data/lib/golden/menu.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'awesome_nested_set'
|
2
|
+
require 'the_sortable_tree'
|
3
|
+
|
4
|
+
module Golden
|
5
|
+
module Menu
|
6
|
+
mattr_accessor :groups
|
7
|
+
@@groups = []
|
8
|
+
|
9
|
+
mattr_accessor :translate_group_block
|
10
|
+
@@translate_group_block = lambda { |group|
|
11
|
+
I18n.t(group, scope: 'golden.menu.groups')
|
12
|
+
}
|
13
|
+
|
14
|
+
def self.configure
|
15
|
+
yield self
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.translate_group group
|
19
|
+
return if group.blank?
|
20
|
+
@@translate_group_block.call group
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
require 'golden/menu/version'
|
26
|
+
require 'golden/menu/option_helper'
|
27
|
+
require 'golden/menu/engine'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Golden
|
2
|
+
module Menu
|
3
|
+
class OptionHelper
|
4
|
+
attr_accessor :menu_type
|
5
|
+
attr_accessor :linked
|
6
|
+
attr_accessor :options
|
7
|
+
|
8
|
+
def initialize args
|
9
|
+
@menu_type = args.delete(:menu_type) || []
|
10
|
+
@linked = args.delete(:menu_linked)
|
11
|
+
@linked = false if @linked.nil?
|
12
|
+
@options = args
|
13
|
+
end
|
14
|
+
|
15
|
+
def menu_ul_class
|
16
|
+
{ class: 'nav' }.deep_merge options
|
17
|
+
end
|
18
|
+
|
19
|
+
def menu_li_class
|
20
|
+
if menu_type.include? 'dropup'
|
21
|
+
{ class: 'dropup' }
|
22
|
+
else
|
23
|
+
{ class: 'dropdown' }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def submenu_li_class
|
28
|
+
if menu_type.include? 'pull-left'
|
29
|
+
{ class: 'dropdown-submenu pull-left' }
|
30
|
+
else
|
31
|
+
{ class: 'dropdown-submenu' }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def linked?
|
36
|
+
linked
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
metadata
ADDED
@@ -0,0 +1,217 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: golden-menu
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tse-Ching Ho
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-06-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: railties
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.2.13
|
20
|
+
- - <
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.2.13
|
30
|
+
- - <
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: activesupport
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 3.2.13
|
40
|
+
- - <
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '5'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 3.2.13
|
50
|
+
- - <
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '5'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: actionpack
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 3.2.13
|
60
|
+
- - <
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '5'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 3.2.13
|
70
|
+
- - <
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '5'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: activerecord
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 3.2.13
|
80
|
+
- - <
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '5'
|
83
|
+
type: :runtime
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 3.2.13
|
90
|
+
- - <
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '5'
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: awesome_nested_set
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '2.1'
|
100
|
+
type: :runtime
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - '>='
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '2.1'
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
name: the_sortable_tree
|
109
|
+
requirement: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '2.3'
|
114
|
+
type: :runtime
|
115
|
+
prerelease: false
|
116
|
+
version_requirements: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '2.3'
|
121
|
+
- !ruby/object:Gem::Dependency
|
122
|
+
name: bundler
|
123
|
+
requirement: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ~>
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '1.3'
|
128
|
+
type: :development
|
129
|
+
prerelease: false
|
130
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ~>
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '1.3'
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: rake
|
137
|
+
requirement: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
type: :development
|
143
|
+
prerelease: false
|
144
|
+
version_requirements: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
description: Golden Menu creates menus by building a hierarchiacal tree first and
|
150
|
+
linking related resources later
|
151
|
+
email:
|
152
|
+
- tsechingho@gmail.com
|
153
|
+
executables: []
|
154
|
+
extensions: []
|
155
|
+
extra_rdoc_files: []
|
156
|
+
files:
|
157
|
+
- .gitignore
|
158
|
+
- Gemfile
|
159
|
+
- LICENSE.txt
|
160
|
+
- README.md
|
161
|
+
- Rakefile
|
162
|
+
- app/controllers/golden/menu/hierarchical_menus_controller.rb
|
163
|
+
- app/helpers/golden/menu/hierarchical_menus_helper.rb
|
164
|
+
- app/models/concerns/golden/menu/golden_menu_resource.rb
|
165
|
+
- app/models/golden/menu/hierarchical_menu.rb
|
166
|
+
- app/models/golden/menu/menu_resource.rb
|
167
|
+
- app/views/golden/menu/hierarchical_menus/_form.html.erb
|
168
|
+
- app/views/golden/menu/hierarchical_menus/_menu.html.erb
|
169
|
+
- app/views/golden/menu/hierarchical_menus/_table.html.erb
|
170
|
+
- app/views/golden/menu/hierarchical_menus/_tree.html.erb
|
171
|
+
- app/views/golden/menu/hierarchical_menus/edit.html.erb
|
172
|
+
- app/views/golden/menu/hierarchical_menus/index.html.erb
|
173
|
+
- app/views/golden/menu/hierarchical_menus/list.html.erb
|
174
|
+
- app/views/golden/menu/hierarchical_menus/new.html.erb
|
175
|
+
- app/views/golden/menu/hierarchical_menus/show.html.erb
|
176
|
+
- config/locales/menus.en.yml
|
177
|
+
- config/locales/menus.zh-TW.yml
|
178
|
+
- config/routes.rb
|
179
|
+
- golden-menu.gemspec
|
180
|
+
- lib/generators/golden/menu/USAGE
|
181
|
+
- lib/generators/golden/menu/install_generator.rb
|
182
|
+
- lib/generators/golden/menu/templates/create_golden_menu_resources.rb
|
183
|
+
- lib/generators/golden/menu/templates/create_golden_menus.rb
|
184
|
+
- lib/generators/golden/menu/templates/golden_menu.rb
|
185
|
+
- lib/generators/golden/menu/templates/menu_resources_helper.rb
|
186
|
+
- lib/generators/golden/menu/templates/menus.en.yml
|
187
|
+
- lib/generators/golden/menu/templates/menus.zh-TW.yml
|
188
|
+
- lib/golden/menu.rb
|
189
|
+
- lib/golden/menu/engine.rb
|
190
|
+
- lib/golden/menu/option_helper.rb
|
191
|
+
- lib/golden/menu/version.rb
|
192
|
+
homepage: https://github.com/goldenio/golden-menu
|
193
|
+
licenses:
|
194
|
+
- MIT
|
195
|
+
metadata: {}
|
196
|
+
post_install_message:
|
197
|
+
rdoc_options: []
|
198
|
+
require_paths:
|
199
|
+
- lib
|
200
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
201
|
+
requirements:
|
202
|
+
- - '>='
|
203
|
+
- !ruby/object:Gem::Version
|
204
|
+
version: '0'
|
205
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
206
|
+
requirements:
|
207
|
+
- - '>='
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
version: '0'
|
210
|
+
requirements: []
|
211
|
+
rubyforge_project:
|
212
|
+
rubygems_version: 2.0.3
|
213
|
+
signing_key:
|
214
|
+
specification_version: 4
|
215
|
+
summary: creates menus by building a hierarchiacal tree first and linking related
|
216
|
+
resources later
|
217
|
+
test_files: []
|