refinerycms-llama_menus 1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/app/controllers/refinery/menus/admin/menus_controller.rb +13 -0
  2. data/app/controllers/refinery/menus/menus_controller.rb +34 -0
  3. data/app/decorators/refinery/menus/menu_item_decorator.rb +19 -0
  4. data/app/helpers/refinery/menus/admin/menu_items_helper.rb +18 -0
  5. data/app/models/refinery/menus/menu.rb +16 -0
  6. data/app/models/refinery/menus/menu_item.rb +17 -0
  7. data/app/models/refinery/menus/menu_widget.rb +15 -0
  8. data/app/views/refinery/menus/admin/menus/_actions.html.erb +25 -0
  9. data/app/views/refinery/menus/admin/menus/_form.html.erb +23 -0
  10. data/app/views/refinery/menus/admin/menus/_menu.html.erb +16 -0
  11. data/app/views/refinery/menus/admin/menus/_menu_item_fields.html.erb +40 -0
  12. data/app/views/refinery/menus/admin/menus/_menus.html.erb +2 -0
  13. data/app/views/refinery/menus/admin/menus/_records.html.erb +16 -0
  14. data/app/views/refinery/menus/admin/menus/_sortable_list.html.erb +5 -0
  15. data/app/views/refinery/menus/admin/menus/edit.html.erb +1 -0
  16. data/app/views/refinery/menus/admin/menus/index.html.erb +7 -0
  17. data/app/views/refinery/menus/admin/menus/new.html.erb +1 -0
  18. data/app/views/refinery/widgets/_menu_widget.html.slim +15 -0
  19. data/app/views/refinery/widgets/admin/widgets/_menu_widget.html.slim +7 -0
  20. data/app/views/refinery/widgets/admin/widgets/_menu_widget_preview.html.slim +3 -0
  21. data/config/locales/cs.yml +28 -0
  22. data/config/locales/en.yml +36 -0
  23. data/config/locales/es.yml +29 -0
  24. data/config/locales/fr.yml +28 -0
  25. data/config/locales/it.yml +28 -0
  26. data/config/locales/nb.yml +28 -0
  27. data/config/locales/nl.yml +28 -0
  28. data/config/locales/sk.yml +28 -0
  29. data/config/locales/tr.yml +28 -0
  30. data/config/locales/zh-CN.yml +30 -0
  31. data/config/routes.rb +14 -0
  32. data/db/migrate/1_create_menus_menus.rb +22 -0
  33. data/db/migrate/2_create_menus_menu_items.rb +22 -0
  34. data/db/migrate/3_create_menus_menu_widgets.rb +19 -0
  35. data/db/seeds.rb +13 -0
  36. data/lib/generators/refinery/menus_generator.rb +26 -0
  37. data/lib/generators/refinery/templates/config/initializers/refinery/menus.rb.erb +4 -0
  38. data/lib/refinery/menus.rb +21 -0
  39. data/lib/refinery/menus/configuration.rb +36 -0
  40. data/lib/refinery/menus/engine.rb +32 -0
  41. data/lib/refinerycms-menus.rb +5 -0
  42. data/lib/tasks/refinery/menus.rake +13 -0
  43. data/readme.md +12 -0
  44. metadata +151 -0
@@ -0,0 +1,13 @@
1
+ module Refinery
2
+ module Menus
3
+ module Admin
4
+ class MenusController < ::Refinery::AdminController
5
+
6
+ crudify :'refinery/menus/menu',
7
+ :title_attribute => 'name',
8
+ :xhr_paging => true
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -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,19 @@
1
+ module Refinery
2
+ module Menus
3
+ class MenuItemDecorator < Draper::Decorator
4
+
5
+ delegate_all
6
+
7
+ def url
8
+ if object.url?
9
+ object.url
10
+ elsif object.linkable
11
+ object.linkable
12
+ else
13
+ ''
14
+ end
15
+ end
16
+
17
+ end
18
+ end
19
+ 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,2 @@
1
+ <%= will_paginate @menus if Refinery::Menus::Admin::MenusController.pageable? %>
2
+ <%= render 'sortable_list' %>
@@ -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,5 @@
1
+ <ul id='sortable_list'>
2
+ <%= render :partial => 'menu', :collection => @menus %>
3
+ </ul>
4
+ <%= render '/refinery/admin/sortable_list',
5
+ :continue_reordering => (local_assigns.keys.include?(:continue_reordering)) ? continue_reordering : true %>
@@ -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,7 @@
1
+ .field
2
+ = f.label :menu_id
3
+ = f.collection_select :menu_id, Refinery::Menus::Menu.order(:position), :id, :name
4
+
5
+ .field
6
+ = f.label :style
7
+ = f.select :style, [['Top navigation', 'top'], ['Footer', 'footer']]
@@ -0,0 +1,3 @@
1
+ .field
2
+ = f.label :style
3
+ = f.object.style
@@ -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,4 @@
1
+ # encoding: utf-8
2
+ Refinery::Menus.configure do |config|
3
+ # config.linkable_classes = [{class_name: 'Refinery::Page', name_attribute: :title}]
4
+ 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
@@ -0,0 +1,5 @@
1
+ require 'refinery/menus'
2
+ require 'refinery/menus/configuration'
3
+
4
+ require 'refinerycms-nested_models'
5
+ require 'draper'
@@ -0,0 +1,13 @@
1
+ namespace :refinery do
2
+
3
+ namespace :menus do
4
+
5
+ # call this task by running: rake refinery:menus:my_task
6
+ # desc "Description of my task below"
7
+ # task :my_task => :environment do
8
+ # # add your logic here
9
+ # end
10
+
11
+ end
12
+
13
+ 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: []