refinerycms-llama_menus 1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/refinery/menus/admin/menus_controller.rb +13 -0
- data/app/controllers/refinery/menus/menus_controller.rb +34 -0
- data/app/decorators/refinery/menus/menu_item_decorator.rb +19 -0
- data/app/helpers/refinery/menus/admin/menu_items_helper.rb +18 -0
- data/app/models/refinery/menus/menu.rb +16 -0
- data/app/models/refinery/menus/menu_item.rb +17 -0
- data/app/models/refinery/menus/menu_widget.rb +15 -0
- data/app/views/refinery/menus/admin/menus/_actions.html.erb +25 -0
- data/app/views/refinery/menus/admin/menus/_form.html.erb +23 -0
- data/app/views/refinery/menus/admin/menus/_menu.html.erb +16 -0
- data/app/views/refinery/menus/admin/menus/_menu_item_fields.html.erb +40 -0
- data/app/views/refinery/menus/admin/menus/_menus.html.erb +2 -0
- data/app/views/refinery/menus/admin/menus/_records.html.erb +16 -0
- data/app/views/refinery/menus/admin/menus/_sortable_list.html.erb +5 -0
- data/app/views/refinery/menus/admin/menus/edit.html.erb +1 -0
- data/app/views/refinery/menus/admin/menus/index.html.erb +7 -0
- data/app/views/refinery/menus/admin/menus/new.html.erb +1 -0
- data/app/views/refinery/widgets/_menu_widget.html.slim +15 -0
- data/app/views/refinery/widgets/admin/widgets/_menu_widget.html.slim +7 -0
- data/app/views/refinery/widgets/admin/widgets/_menu_widget_preview.html.slim +3 -0
- data/config/locales/cs.yml +28 -0
- data/config/locales/en.yml +36 -0
- data/config/locales/es.yml +29 -0
- data/config/locales/fr.yml +28 -0
- data/config/locales/it.yml +28 -0
- data/config/locales/nb.yml +28 -0
- data/config/locales/nl.yml +28 -0
- data/config/locales/sk.yml +28 -0
- data/config/locales/tr.yml +28 -0
- data/config/locales/zh-CN.yml +30 -0
- data/config/routes.rb +14 -0
- data/db/migrate/1_create_menus_menus.rb +22 -0
- data/db/migrate/2_create_menus_menu_items.rb +22 -0
- data/db/migrate/3_create_menus_menu_widgets.rb +19 -0
- data/db/seeds.rb +13 -0
- data/lib/generators/refinery/menus_generator.rb +26 -0
- data/lib/generators/refinery/templates/config/initializers/refinery/menus.rb.erb +4 -0
- data/lib/refinery/menus.rb +21 -0
- data/lib/refinery/menus/configuration.rb +36 -0
- data/lib/refinery/menus/engine.rb +32 -0
- data/lib/refinerycms-menus.rb +5 -0
- data/lib/tasks/refinery/menus.rake +13 -0
- data/readme.md +12 -0
- metadata +151 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Menus
|
3
|
+
class MenusController < ::ApplicationController
|
4
|
+
|
5
|
+
before_filter :find_all_menus
|
6
|
+
before_filter :find_page
|
7
|
+
|
8
|
+
def index
|
9
|
+
# you can use meta fields from your model instead (e.g. browser_title)
|
10
|
+
# by swapping @page for @menu in the line below:
|
11
|
+
present(@page)
|
12
|
+
end
|
13
|
+
|
14
|
+
def show
|
15
|
+
@menu = Menu.find(params[:id])
|
16
|
+
|
17
|
+
# you can use meta fields from your model instead (e.g. browser_title)
|
18
|
+
# by swapping @page for @menu in the line below:
|
19
|
+
present(@page)
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
|
24
|
+
def find_all_menus
|
25
|
+
@menus = Menu.order('position ASC')
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_page
|
29
|
+
@page = ::Refinery::Page.where(:link_url => "/menus").first
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Menus
|
3
|
+
module Admin
|
4
|
+
module MenuItemsHelper
|
5
|
+
|
6
|
+
def options_for_select_from_linkable_class(linkable_class)
|
7
|
+
linkable = Linkable.new(linkable_class)
|
8
|
+
blank = ["Select a #{linkable.human_class_name.downcase}..."]
|
9
|
+
rows = linkable.klass.all.map{|object| [object.send(linkable.name_attribute), object.id] }
|
10
|
+
blank + rows
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
::ActionView::Base.send(:include, ::Refinery::Menus::Admin::MenuItemsHelper)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Menus
|
3
|
+
class Menu < Refinery::Core::BaseModel
|
4
|
+
self.table_name = 'refinery_menus'
|
5
|
+
|
6
|
+
attr_accessible :name, :style, :position, :menu_items_attributes
|
7
|
+
|
8
|
+
acts_as_indexed :fields => [:name]
|
9
|
+
|
10
|
+
validates :name, :presence => true, :uniqueness => true
|
11
|
+
|
12
|
+
has_many :menu_items, class_name: 'Refinery::Menus::MenuItem', dependent: :destroy
|
13
|
+
accepts_nested_attributes_for :menu_items, allow_destroy: true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Menus
|
3
|
+
class MenuItem < ActiveRecord::Base
|
4
|
+
self.table_name = 'refinery_menu_items'
|
5
|
+
|
6
|
+
attr_accessible :label, :position, :linkable_type, :linkable_id, :menu_id, :url
|
7
|
+
|
8
|
+
belongs_to :menu, class_name: 'Refinery::Menus::Menu'
|
9
|
+
belongs_to :linkable, polymorphic: true
|
10
|
+
|
11
|
+
validates :label, :menu, :presence => true
|
12
|
+
validates :linkable, :presence => {:unless => 'url?'}
|
13
|
+
validates :url, :presence => {:unless => 'linkable_type?'}
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Menus
|
3
|
+
class MenuWidget < ActiveRecord::Base
|
4
|
+
|
5
|
+
self.table_name = 'refinery_menu_widgets'
|
6
|
+
|
7
|
+
belongs_to :menu, class_name: 'Refinery::Menus::Menu'
|
8
|
+
|
9
|
+
acts_as_widget
|
10
|
+
|
11
|
+
attr_accessible :style, :menu_id, :widget_id
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<ul>
|
2
|
+
<% if ::Refinery::Menus::Admin::MenusController.searchable? %>
|
3
|
+
<li>
|
4
|
+
<%= render '/refinery/admin/search', :url => refinery.menus_admin_menus_path %>
|
5
|
+
</li>
|
6
|
+
<% end %>
|
7
|
+
<li>
|
8
|
+
<%= link_to t('.create_new'), refinery.new_menus_admin_menu_path,
|
9
|
+
:class => "add_icon" %>
|
10
|
+
</li>
|
11
|
+
<% if !searching? && ::Refinery::Menus::Admin::MenusController.sortable? && ::Refinery::Menus::Menu.many? %>
|
12
|
+
<li>
|
13
|
+
<%= link_to t('.reorder', :what => "Menus"),
|
14
|
+
refinery.menus_admin_menus_path,
|
15
|
+
:id => "reorder_action",
|
16
|
+
:class => "reorder_icon" %>
|
17
|
+
|
18
|
+
<%= link_to t('.reorder_done', :what => "Menus"),
|
19
|
+
refinery.menus_admin_menus_path,
|
20
|
+
:id => "reorder_action_done",
|
21
|
+
:style => "display: none;",
|
22
|
+
:class => "reorder_icon" %>
|
23
|
+
</li>
|
24
|
+
<% end %>
|
25
|
+
</ul>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%= form_for [refinery, :menus_admin, @menu] do |f| -%>
|
2
|
+
<%= render '/refinery/admin/error_messages',
|
3
|
+
:object => @menu,
|
4
|
+
:include_object_name => true %>
|
5
|
+
|
6
|
+
<div class='field'>
|
7
|
+
<%= f.label :name -%>
|
8
|
+
<%= f.text_field :name, :class => 'larger widest' -%>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<div class='field' data-sortable='true'>
|
12
|
+
<%= f.label :menu_items %>
|
13
|
+
<%= f.fields_for :menu_items do |j| %>
|
14
|
+
<%= render 'refinery/menus/admin/menus/menu_item_fields', :f => j %>
|
15
|
+
<% end %>
|
16
|
+
<%= link_to_add_fields 'Add menu item', f, :menu_items %>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<%= render '/refinery/admin/form_actions', :f => f,
|
20
|
+
:continue_editing => false,
|
21
|
+
:delete_title => t('delete', :scope => 'refinery.menus.admin.menus.menu'),
|
22
|
+
:delete_confirmation => t('message', :scope => 'refinery.admin.delete', :title => @menu.name) -%>
|
23
|
+
<% end -%>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(menu) -%>">
|
2
|
+
<span class='title'>
|
3
|
+
<%= menu.name %>
|
4
|
+
|
5
|
+
</span>
|
6
|
+
<span class='actions'>
|
7
|
+
|
8
|
+
<%= link_to refinery_icon_tag("application_edit.png"), refinery.edit_menus_admin_menu_path(menu),
|
9
|
+
:title => t('.edit') %>
|
10
|
+
<%= link_to refinery_icon_tag("delete.png"), refinery.menus_admin_menu_path(menu),
|
11
|
+
:class => "cancel confirm-delete",
|
12
|
+
:title => t('.delete'),
|
13
|
+
:confirm => t('message', :scope => 'refinery.admin.delete', :title => menu.name),
|
14
|
+
:method => :delete %>
|
15
|
+
</span>
|
16
|
+
</li>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<fieldset class='nested' data-nested-item='true' data-sortable-item='true'>
|
2
|
+
<%= refinery_icon_tag 'arrow_switch', 'data-handle' => true, :title => 'Reorder', :class => 'handle' %>
|
3
|
+
<%= f.hidden_field :position, 'data-position' => true %>
|
4
|
+
<div class='field'>
|
5
|
+
<span class='label_with_help'>
|
6
|
+
<%= f.label :label %>
|
7
|
+
<%= refinery_help_tag t('refinery.menus.admin.tooltips.label') %>
|
8
|
+
</span>
|
9
|
+
<%= f.text_field :label %>
|
10
|
+
</div>
|
11
|
+
<div class='field'>
|
12
|
+
<span class='label_with_help'>
|
13
|
+
<%= f.label :url %>
|
14
|
+
<%= refinery_help_tag t('refinery.menus.admin.tooltips.url') %>
|
15
|
+
</span>
|
16
|
+
<%= f.text_field :url %>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<% if Refinery::Menus.linkable_classes.any? %>
|
20
|
+
<% if Refinery::Menus.linkable_classes.many? %>
|
21
|
+
<div class='field'>
|
22
|
+
<span class='label_with_help'>
|
23
|
+
<%= f.label :linkable_type %>
|
24
|
+
<%= refinery_help_tag t('refinery.menus.admin.tooltips.linkable_type') %>
|
25
|
+
</span>
|
26
|
+
</div>
|
27
|
+
<% else %>
|
28
|
+
<%= f.hidden_field :linkable_type, value: Refinery::Menus.linkables.first.class_name %>
|
29
|
+
<% end %>
|
30
|
+
<div class='field'>
|
31
|
+
<%= f.label :linkable_id %>
|
32
|
+
<% Refinery::Menus.linkable_classes.each do |linkable_class| %>
|
33
|
+
<%= f.select :linkable_id, options_for_select_from_linkable_class(linkable_class) %>
|
34
|
+
<% end %>
|
35
|
+
</div>
|
36
|
+
<% end %>
|
37
|
+
|
38
|
+
|
39
|
+
<%= link_to_remove_field 'Remove this menu item', f %>
|
40
|
+
</fieldset>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<%= render 'refinery/admin/search_header', :url => refinery.menus_admin_menus_path %>
|
2
|
+
<div class='pagination_container'>
|
3
|
+
<% if @menus.any? %>
|
4
|
+
<%= render 'menus' %>
|
5
|
+
<% else %>
|
6
|
+
<p>
|
7
|
+
<% unless searching? %>
|
8
|
+
<strong>
|
9
|
+
<%= t('.no_items_yet') %>
|
10
|
+
</strong>
|
11
|
+
<% else %>
|
12
|
+
<%= t('no_results', :scope => 'refinery.admin.search') %>
|
13
|
+
<% end %>
|
14
|
+
</p>
|
15
|
+
<% end %>
|
16
|
+
</div>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render 'form' %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<section id='records'>
|
2
|
+
<%= render 'records' %>
|
3
|
+
</section>
|
4
|
+
<aside id='actions'>
|
5
|
+
<%= render 'actions' %>
|
6
|
+
</aside>
|
7
|
+
<%= render '/refinery/admin/make_sortable', :tree => false if !searching? and ::Refinery::Menus::Admin::MenusController.sortable? and ::Refinery::Menus::Menu.many? %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render 'form' %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
nav.navbar.navbar-default role='navigation'
|
2
|
+
.container
|
3
|
+
.navbar-header
|
4
|
+
button.navbar-toggle data-toggle='collapse' data-target='#bs-example-navbar-collapse-1'
|
5
|
+
span.sr-only Toggle navigation
|
6
|
+
span.icon-bar
|
7
|
+
span.icon-bar
|
8
|
+
span.icon-bar
|
9
|
+
= link_to Refinery::Core.site_name, refinery.root_url, class: 'navbar-brand'
|
10
|
+
|
11
|
+
.collapse.navbar-collapse#bs-example-navbar-collapse-1
|
12
|
+
ul.nav.navbar-nav
|
13
|
+
- Refinery::Menus::MenuItemDecorator.decorate_collection(widget.menu_widget.menu.menu_items.order(:position)).each do |menu_item|
|
14
|
+
li
|
15
|
+
= link_to menu_item.label, menu_item.url
|
@@ -0,0 +1,28 @@
|
|
1
|
+
cs:
|
2
|
+
refinery:
|
3
|
+
plugins:
|
4
|
+
menus:
|
5
|
+
title: Menus
|
6
|
+
menus:
|
7
|
+
admin:
|
8
|
+
menus:
|
9
|
+
actions:
|
10
|
+
create_new: Přidat Menu
|
11
|
+
reorder: Řadit Menus
|
12
|
+
reorder_done: Konec řazení Menus
|
13
|
+
records:
|
14
|
+
title: Menus
|
15
|
+
sorry_no_results: Litujeme, ale nebyly nalezny žádné výsledky.
|
16
|
+
no_items_yet: Zatím nebyly vytvořeny žádné Menus. Zvolte "Přidat Menu" pro přidání prvního menu.
|
17
|
+
menu:
|
18
|
+
view_live_html: Zobrazit náhled menu<br/><em>(otevře se v novém okně)</em>
|
19
|
+
edit: Upravit menu
|
20
|
+
delete: Smazat menu
|
21
|
+
menus:
|
22
|
+
show:
|
23
|
+
other: Další Menus
|
24
|
+
activerecord:
|
25
|
+
attributes:
|
26
|
+
'refinery/menus/menu':
|
27
|
+
name: Name
|
28
|
+
style: Style
|
@@ -0,0 +1,36 @@
|
|
1
|
+
en:
|
2
|
+
refinery:
|
3
|
+
plugins:
|
4
|
+
menus:
|
5
|
+
title: Menus
|
6
|
+
menus:
|
7
|
+
admin:
|
8
|
+
tooltips:
|
9
|
+
label: Text which shows in the menu for this link.
|
10
|
+
url: 'If you would like to link to an external resource enter the full url (including protocol - e.g. http:// or https://) here.'
|
11
|
+
linkable_type: If you would like to link to something on the site select the type of ofject you would like to link to.
|
12
|
+
menus:
|
13
|
+
actions:
|
14
|
+
create_new: Add New Menu
|
15
|
+
reorder: Reorder Menus
|
16
|
+
reorder_done: Done Reordering Menus
|
17
|
+
records:
|
18
|
+
title: Menus
|
19
|
+
sorry_no_results: Sorry! There are no results found.
|
20
|
+
no_items_yet: There are no Menus yet. Click "Add New Menu" to add your first menu.
|
21
|
+
menu:
|
22
|
+
view_live_html: View this menu live <br/><em>(opens in a new window)</em>
|
23
|
+
edit: Edit this menu
|
24
|
+
delete: Remove this menu forever
|
25
|
+
menus:
|
26
|
+
show:
|
27
|
+
other: Other Menus
|
28
|
+
activerecord:
|
29
|
+
attributes:
|
30
|
+
'refinery/menus/menu':
|
31
|
+
name: Name
|
32
|
+
style: Style
|
33
|
+
'refinery/menus/menu_item':
|
34
|
+
url: External URL
|
35
|
+
linkable_type: Internal link category
|
36
|
+
linkable_id: Internal link
|
@@ -0,0 +1,29 @@
|
|
1
|
+
es:
|
2
|
+
refinery:
|
3
|
+
plugins:
|
4
|
+
menus:
|
5
|
+
title: Menus
|
6
|
+
# article: masculino/femenino
|
7
|
+
menus:
|
8
|
+
admin:
|
9
|
+
menus:
|
10
|
+
actions:
|
11
|
+
create_new: Crear nuevo menu
|
12
|
+
reorder: Reordenar menus
|
13
|
+
reorder_done: Reordenación de menus completada
|
14
|
+
records:
|
15
|
+
title: Menus
|
16
|
+
sorry_no_results: Lo siento, no hay resultados
|
17
|
+
no_items_yet: No hay menus todavía. Pulsa en "Crear nuevo Menu" para crear tu primer menu.
|
18
|
+
menu:
|
19
|
+
view_live_html: Ver este menu como abierto al público <br/><em>(abre en ventana nueva)</em>
|
20
|
+
edit: Editar este menu
|
21
|
+
delete: Borrar este menu para siempre
|
22
|
+
menus:
|
23
|
+
show:
|
24
|
+
other: Otros menus
|
25
|
+
activerecord:
|
26
|
+
attributes:
|
27
|
+
'refinery/menus/menu':
|
28
|
+
name: Name
|
29
|
+
style: Style
|
@@ -0,0 +1,28 @@
|
|
1
|
+
fr:
|
2
|
+
refinery:
|
3
|
+
plugins:
|
4
|
+
menus:
|
5
|
+
title: Menus
|
6
|
+
menus:
|
7
|
+
admin:
|
8
|
+
menus:
|
9
|
+
actions:
|
10
|
+
create_new: Créer un(e) nouve(au/l/lle) Menu
|
11
|
+
reorder: Réordonner les Menus
|
12
|
+
reorder_done: Fin de réordonnancement des Menus
|
13
|
+
records:
|
14
|
+
title: Menus
|
15
|
+
sorry_no_results: "Désolé ! Aucun résultat."
|
16
|
+
no_items_yet: 'Il n''y a actuellement aucun(e) Menu. Cliquer sur "Créer un(e) nouve(au/l/lle) Menu" pour créer votre premi(er/ère) menu.'
|
17
|
+
menu:
|
18
|
+
view_live_html: Voir ce(t/tte) menu <br/><em>(Ouvre une nouvelle fenêtre)</em>
|
19
|
+
edit: Modifier ce(t/tte) menu
|
20
|
+
delete: Supprimer définitivement ce(t/tte) menu
|
21
|
+
menus:
|
22
|
+
show:
|
23
|
+
other: Autres Menus
|
24
|
+
activerecord:
|
25
|
+
attributes:
|
26
|
+
'refinery/menus/menu':
|
27
|
+
name: Name
|
28
|
+
style: Style
|
@@ -0,0 +1,28 @@
|
|
1
|
+
it:
|
2
|
+
refinery:
|
3
|
+
plugins:
|
4
|
+
menus:
|
5
|
+
title: Menus
|
6
|
+
menus:
|
7
|
+
admin:
|
8
|
+
menus:
|
9
|
+
actions:
|
10
|
+
create_new: Aggiungi Nuovo Menu
|
11
|
+
reorder: Riordina Menus
|
12
|
+
reorder_done: Termina il Riordino di Menus
|
13
|
+
records:
|
14
|
+
title: Menus
|
15
|
+
sorry_no_results: "Spiacenti! Nessun risultato trovato"
|
16
|
+
no_items_yet: Non ci sono ancora Menus. Clicca "Aggiungi Nuovo Menu" per aggiungere il tuo primo menu.
|
17
|
+
menu:
|
18
|
+
view_live_html: Guarda live questo menu <br/><em>(apre una nuova finestra)</em>
|
19
|
+
edit: Modifica questo menu
|
20
|
+
delete: Rimuovi per sempre questo menu
|
21
|
+
menus:
|
22
|
+
show:
|
23
|
+
other: Altri Menus
|
24
|
+
activerecord:
|
25
|
+
attributes:
|
26
|
+
'refinery/menus/menu':
|
27
|
+
name: Name
|
28
|
+
style: Style
|
@@ -0,0 +1,28 @@
|
|
1
|
+
nb:
|
2
|
+
refinery:
|
3
|
+
plugins:
|
4
|
+
menus:
|
5
|
+
title: Menus
|
6
|
+
menus:
|
7
|
+
admin:
|
8
|
+
menus:
|
9
|
+
actions:
|
10
|
+
create_new: Lag en ny Menu
|
11
|
+
reorder: Endre rekkefølgen på Menus
|
12
|
+
reorder_done: Ferdig å endre rekkefølgen Menus
|
13
|
+
records:
|
14
|
+
title: Menus
|
15
|
+
sorry_no_results: Beklager! Vi fant ikke noen resultater.
|
16
|
+
no_items_yet: Det er ingen Menus enda. Klikk på "Lag en ny Menu" for å legge til din første menu.
|
17
|
+
menu:
|
18
|
+
view_live_html: Vis hvordan denne menu ser ut offentlig <br/><em>(åpner i et nytt vindu)</em>
|
19
|
+
edit: Rediger denne menu
|
20
|
+
delete: Fjern denne menu permanent
|
21
|
+
menus:
|
22
|
+
show:
|
23
|
+
other: Andre Menus
|
24
|
+
activerecord:
|
25
|
+
attributes:
|
26
|
+
'refinery/menus/menu':
|
27
|
+
name: Name
|
28
|
+
style: Style
|
@@ -0,0 +1,28 @@
|
|
1
|
+
nl:
|
2
|
+
refinery:
|
3
|
+
plugins:
|
4
|
+
menus:
|
5
|
+
title: Menus
|
6
|
+
menus:
|
7
|
+
admin:
|
8
|
+
menus:
|
9
|
+
actions:
|
10
|
+
create_new: Nieuwe Menu toevoegen
|
11
|
+
reorder: De volgorde van de Menus wijzigen
|
12
|
+
reorder_done: Klaar met het wijzingen van de van de Menu-volgorde
|
13
|
+
records:
|
14
|
+
title: Menus
|
15
|
+
sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
|
16
|
+
no_items_yet: Er zijn nog geen Menus. Druk op 'Nieuwe Menu toevoegen' om de eerste toe te voegen.
|
17
|
+
menu:
|
18
|
+
view_live_html: Deze menu op de website bekijken <br/><em>(opent in een nieuw venster)</em>
|
19
|
+
edit: Bewerk deze menu
|
20
|
+
delete: Deze menu definitief verwijderen
|
21
|
+
menus:
|
22
|
+
show:
|
23
|
+
other: Andere Menus
|
24
|
+
activerecord:
|
25
|
+
attributes:
|
26
|
+
'refinery/menus/menu':
|
27
|
+
name: Name
|
28
|
+
style: Style
|
@@ -0,0 +1,28 @@
|
|
1
|
+
sk:
|
2
|
+
refinery:
|
3
|
+
plugins:
|
4
|
+
menus:
|
5
|
+
title: Menus
|
6
|
+
menus:
|
7
|
+
admin:
|
8
|
+
menus:
|
9
|
+
actions:
|
10
|
+
create_new: Pridať Menu
|
11
|
+
reorder: Preusporiadať Menus
|
12
|
+
reorder_done: Koniec radenia Menus
|
13
|
+
records:
|
14
|
+
title: Menus
|
15
|
+
sorry_no_results: Ľutujeme, ale neboli nájdené žiadne výsledky.
|
16
|
+
no_items_yet: Nie sú vytvorené žiadne Menus. Kliknite na "Pridať Menu" pre pridanie prvého menu.
|
17
|
+
menu:
|
18
|
+
view_live_html: Zobraziť náhľad menu<br/><em>(otvorí sa v novom okne)</em>
|
19
|
+
edit: Upraviť menu
|
20
|
+
delete: Zmazať menu
|
21
|
+
menus:
|
22
|
+
show:
|
23
|
+
other: Daľšie Menus
|
24
|
+
activerecord:
|
25
|
+
attributes:
|
26
|
+
'refinery/menus/menu':
|
27
|
+
name: Name
|
28
|
+
style: Style
|
@@ -0,0 +1,28 @@
|
|
1
|
+
tr:
|
2
|
+
refinery:
|
3
|
+
plugins:
|
4
|
+
menus:
|
5
|
+
title: Menus
|
6
|
+
menus:
|
7
|
+
admin:
|
8
|
+
menus:
|
9
|
+
actions:
|
10
|
+
create_new: Yeni Ekle Menu
|
11
|
+
reorder: Tekrar sirala Menus
|
12
|
+
reorder_done: Tekrar siralama tamamlandiMenus
|
13
|
+
records:
|
14
|
+
title: Menus
|
15
|
+
sorry_no_results: Uzgunum! Herhangi bir sonuc bulunamadi.
|
16
|
+
no_items_yet: Herhangi bir Menus yok henuz. Tikla "Yeni Ekle Menu" eklemek senin ilk menu.
|
17
|
+
menu:
|
18
|
+
view_live_html: Bunu canlu menu goruntule <br/><em>(yeni bir pencerede acar)</em>
|
19
|
+
edit: Bunu Duzenle menu
|
20
|
+
delete: Bunu Sil menu sonsuza dek
|
21
|
+
menus:
|
22
|
+
show:
|
23
|
+
other: Diger Menus
|
24
|
+
activerecord:
|
25
|
+
attributes:
|
26
|
+
'refinery/menus/menu':
|
27
|
+
name: Name
|
28
|
+
style: Style
|
@@ -0,0 +1,30 @@
|
|
1
|
+
zh-CN:
|
2
|
+
refinery:
|
3
|
+
plugins:
|
4
|
+
menus:
|
5
|
+
title: Menus
|
6
|
+
menus:
|
7
|
+
admin:
|
8
|
+
menus:
|
9
|
+
actions:
|
10
|
+
create_new: 建立新的 Menu
|
11
|
+
reorder: 对 Menus 重新排序
|
12
|
+
reorder_done: 对 Menus 的重新排序结束
|
13
|
+
records:
|
14
|
+
title: Menus
|
15
|
+
sorry_no_results: 对不起,未找到结果。 #Sorry! There are no results found.
|
16
|
+
|
17
|
+
# There are no Menus yet. Click "Add New Menu" to add your first menu.
|
18
|
+
no_items_yet: 目前没有 Menus . 点击 "Add New Menu" 创建一个menu.
|
19
|
+
menu:
|
20
|
+
view_live_html: 查看 menu 的最新内容.<br/><em>(新窗口中打开)</em>
|
21
|
+
edit: 编辑 menu
|
22
|
+
delete: 永久删除 menu
|
23
|
+
menus:
|
24
|
+
show:
|
25
|
+
other: 其他 Menus
|
26
|
+
activerecord:
|
27
|
+
attributes:
|
28
|
+
'refinery/menus/menu':
|
29
|
+
name: Name
|
30
|
+
style: Style
|
data/config/routes.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Refinery::Core::Engine.routes.draw do
|
2
|
+
|
3
|
+
# Admin routes
|
4
|
+
namespace :menus, :path => '' do
|
5
|
+
namespace :admin, :path => Refinery::Core.backend_route do
|
6
|
+
resources :menus, :except => :show do
|
7
|
+
collection do
|
8
|
+
post :update_positions
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class CreateMenusMenus < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def up
|
4
|
+
create_table :refinery_menus do |t|
|
5
|
+
t.string :name
|
6
|
+
t.integer :position
|
7
|
+
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
def down
|
14
|
+
if defined?(::Refinery::UserPlugin)
|
15
|
+
::Refinery::UserPlugin.destroy_all({:name => "refinerycms-menus"})
|
16
|
+
end
|
17
|
+
|
18
|
+
drop_table :refinery_menus
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class CreateMenusMenuItems < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def up
|
4
|
+
create_table :refinery_menu_items do |t|
|
5
|
+
t.string :label
|
6
|
+
t.integer :position
|
7
|
+
t.string :linkable_type
|
8
|
+
t.integer :linkable_id
|
9
|
+
t.string :url
|
10
|
+
t.integer :menu_id
|
11
|
+
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
def down
|
18
|
+
drop_table :refinery_menu_items
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class CreateMenusMenuWidgets < ActiveRecord::Migration
|
2
|
+
|
3
|
+
def up
|
4
|
+
create_table :refinery_menu_widgets do |t|
|
5
|
+
t.integer :menu_id
|
6
|
+
t.integer :widget_id
|
7
|
+
t.string :style
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def down
|
15
|
+
drop_table :refinery_menu_widgets
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/db/seeds.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Refinery::I18n.frontend_locales.each do |lang|
|
2
|
+
I18n.locale = lang
|
3
|
+
|
4
|
+
if defined?(Refinery::User)
|
5
|
+
Refinery::User.all.each do |user|
|
6
|
+
if user.plugins.where(:name => 'refinerycms-menus').blank?
|
7
|
+
user.plugins.create(:name => 'refinerycms-menus',
|
8
|
+
:position => (user.plugins.maximum(:position) || -1) +1)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Refinery
|
2
|
+
class MenusGenerator < Rails::Generators::Base
|
3
|
+
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
|
6
|
+
def rake_db
|
7
|
+
rake "refinery_menus:install:migrations"
|
8
|
+
end
|
9
|
+
|
10
|
+
def append_load_seed_data
|
11
|
+
create_file 'db/seeds.rb' unless File.exists?(File.join(destination_root, 'db', 'seeds.rb'))
|
12
|
+
append_file 'db/seeds.rb', :verbose => true do
|
13
|
+
<<-EOH
|
14
|
+
|
15
|
+
# Added by Refinery CMS Menus extension
|
16
|
+
Refinery::Menus::Engine.load_seed
|
17
|
+
EOH
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def generate_menus_initializer
|
22
|
+
template "config/initializers/refinery/menus.rb.erb",
|
23
|
+
File.join(destination_root, "config", "initializers", "refinery", "menus.rb")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'refinerycms-core'
|
2
|
+
|
3
|
+
module Refinery
|
4
|
+
autoload :MenusGenerator, 'generators/refinery/menus_generator'
|
5
|
+
|
6
|
+
module Menus
|
7
|
+
require 'refinery/menus/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,36 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Menus
|
3
|
+
include ActiveSupport::Configurable
|
4
|
+
|
5
|
+
config_accessor :linkable_classes
|
6
|
+
|
7
|
+
self.linkable_classes = [{class_name: 'Refinery::Page', name_attribute: :title}]
|
8
|
+
|
9
|
+
def self.linkables
|
10
|
+
ret = []
|
11
|
+
self.linkable_classes.each do |linkable_class|
|
12
|
+
ret << Linkable.new(linkable_class)
|
13
|
+
end
|
14
|
+
ret
|
15
|
+
end
|
16
|
+
|
17
|
+
class Linkable
|
18
|
+
attr_accessor :class_name, :name_attribute, :human_class_name, :klass
|
19
|
+
|
20
|
+
def initialize(params)
|
21
|
+
if params.is_a? Hash
|
22
|
+
@class_name = params[:class_name]
|
23
|
+
@name_attribute = params[:name_attribute]
|
24
|
+
elsif params.is_a? String
|
25
|
+
@class_name = params
|
26
|
+
@name_attribute = :name
|
27
|
+
else
|
28
|
+
raise 'Unknown link initialize params'
|
29
|
+
end
|
30
|
+
@klass = class_name.constantize
|
31
|
+
@human_class_name = @klass.model_name.human
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Menus
|
3
|
+
class Engine < Rails::Engine
|
4
|
+
extend Refinery::Engine
|
5
|
+
isolate_namespace Refinery::Menus
|
6
|
+
|
7
|
+
engine_name :refinery_menus
|
8
|
+
|
9
|
+
initializer "register refinerycms_menus plugin" do
|
10
|
+
Refinery::Plugin.register do |plugin|
|
11
|
+
plugin.name = "menus"
|
12
|
+
plugin.url = proc { Refinery::Core::Engine.routes.url_helpers.menus_admin_menus_path }
|
13
|
+
plugin.pathname = root
|
14
|
+
plugin.activity = {
|
15
|
+
:class_name => :'refinery/menus/menu',
|
16
|
+
:title => 'name'
|
17
|
+
}
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
config.after_initialize do
|
23
|
+
Refinery.register_extension(Refinery::Menus)
|
24
|
+
end
|
25
|
+
|
26
|
+
config.to_prepare do
|
27
|
+
Dir["#{File.dirname(__FILE__)}/../../../app/helpers/**/*.rb"].each { |f| load(f) }
|
28
|
+
Dir["#{File.dirname(__FILE__)}/../../../app/decorators/**/*.rb"].each { |f| load(f) }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/readme.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# Menus extension for Refinery CMS.
|
2
|
+
|
3
|
+
## How to build this extension as a gem
|
4
|
+
|
5
|
+
cd vendor/extensions/menus
|
6
|
+
gem build refinerycms-menus.gemspec
|
7
|
+
gem install refinerycms-menus.gem
|
8
|
+
|
9
|
+
If you want to use the widget remember to add it to your refinery widget configuration
|
10
|
+
|
11
|
+
TODO - UI for multiple linkable_classes (need callback in nested_models so there is a place to
|
12
|
+
add the JS for the menu items partials).
|
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: refinerycms-llama_menus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: '1.0'
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Nick Bolt
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-11-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
type: :runtime
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 2.1.1
|
21
|
+
none: false
|
22
|
+
prerelease: false
|
23
|
+
name: refinerycms-core
|
24
|
+
requirement: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: 2.1.1
|
29
|
+
none: false
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ~>
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 0.0.2
|
37
|
+
none: false
|
38
|
+
prerelease: false
|
39
|
+
name: refinerycms-nested_models
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 0.0.2
|
45
|
+
none: false
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
none: false
|
54
|
+
prerelease: false
|
55
|
+
name: draper
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ! '>='
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
none: false
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
type: :development
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.1.1
|
69
|
+
none: false
|
70
|
+
prerelease: false
|
71
|
+
name: refinerycms-testing
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.1.1
|
77
|
+
none: false
|
78
|
+
description: Ruby on Rails Menus extension for Refinery CMS
|
79
|
+
email:
|
80
|
+
executables: []
|
81
|
+
extensions: []
|
82
|
+
extra_rdoc_files: []
|
83
|
+
files:
|
84
|
+
- app/views/refinery/widgets/admin/widgets/_menu_widget_preview.html.slim
|
85
|
+
- app/views/refinery/widgets/admin/widgets/_menu_widget.html.slim
|
86
|
+
- app/views/refinery/widgets/_menu_widget.html.slim
|
87
|
+
- app/views/refinery/menus/admin/menus/edit.html.erb
|
88
|
+
- app/views/refinery/menus/admin/menus/_menu_item_fields.html.erb
|
89
|
+
- app/views/refinery/menus/admin/menus/new.html.erb
|
90
|
+
- app/views/refinery/menus/admin/menus/_records.html.erb
|
91
|
+
- app/views/refinery/menus/admin/menus/index.html.erb
|
92
|
+
- app/views/refinery/menus/admin/menus/_menu.html.erb
|
93
|
+
- app/views/refinery/menus/admin/menus/_form.html.erb
|
94
|
+
- app/views/refinery/menus/admin/menus/_menus.html.erb
|
95
|
+
- app/views/refinery/menus/admin/menus/_actions.html.erb
|
96
|
+
- app/views/refinery/menus/admin/menus/_sortable_list.html.erb
|
97
|
+
- app/controllers/refinery/menus/menus_controller.rb
|
98
|
+
- app/controllers/refinery/menus/admin/menus_controller.rb
|
99
|
+
- app/helpers/refinery/menus/admin/menu_items_helper.rb
|
100
|
+
- app/decorators/refinery/menus/menu_item_decorator.rb
|
101
|
+
- app/models/refinery/menus/menu_widget.rb
|
102
|
+
- app/models/refinery/menus/menu_item.rb
|
103
|
+
- app/models/refinery/menus/menu.rb
|
104
|
+
- config/locales/sk.yml
|
105
|
+
- config/locales/it.yml
|
106
|
+
- config/locales/fr.yml
|
107
|
+
- config/locales/tr.yml
|
108
|
+
- config/locales/nl.yml
|
109
|
+
- config/locales/es.yml
|
110
|
+
- config/locales/cs.yml
|
111
|
+
- config/locales/zh-CN.yml
|
112
|
+
- config/locales/en.yml
|
113
|
+
- config/locales/nb.yml
|
114
|
+
- config/routes.rb
|
115
|
+
- db/seeds.rb
|
116
|
+
- db/migrate/1_create_menus_menus.rb
|
117
|
+
- db/migrate/2_create_menus_menu_items.rb
|
118
|
+
- db/migrate/3_create_menus_menu_widgets.rb
|
119
|
+
- lib/tasks/refinery/menus.rake
|
120
|
+
- lib/refinery/menus/configuration.rb
|
121
|
+
- lib/refinery/menus/engine.rb
|
122
|
+
- lib/refinery/menus.rb
|
123
|
+
- lib/generators/refinery/templates/config/initializers/refinery/menus.rb.erb
|
124
|
+
- lib/generators/refinery/menus_generator.rb
|
125
|
+
- lib/refinerycms-menus.rb
|
126
|
+
- readme.md
|
127
|
+
homepage:
|
128
|
+
licenses: []
|
129
|
+
post_install_message:
|
130
|
+
rdoc_options: []
|
131
|
+
require_paths:
|
132
|
+
- lib
|
133
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - ! '>='
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
138
|
+
none: false
|
139
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - ! '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
none: false
|
145
|
+
requirements: []
|
146
|
+
rubyforge_project:
|
147
|
+
rubygems_version: 1.8.25
|
148
|
+
signing_key:
|
149
|
+
specification_version: 3
|
150
|
+
summary: Menus extension for Refinery CMS
|
151
|
+
test_files: []
|