refinerycms-llama_menus 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/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: []
|