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.
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: []