refinerycms-sl-snippets 1.0.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 (53) hide show
  1. data/app/assets/javascripts/page-snippet-picker.js +121 -0
  2. data/app/assets/javascripts/part-snippets-select.js +40 -0
  3. data/app/assets/stylesheets/page-snippet-picker.css +82 -0
  4. data/app/controllers/refinery/admin/snippets_controller.rb +38 -0
  5. data/app/controllers/refinery/admin/snippets_page_parts_controller.rb +38 -0
  6. data/app/models/refinery/snippet.rb +62 -0
  7. data/app/models/refinery/snippet_page_part.rb +20 -0
  8. data/app/views/admin/pages/tabs/_snippets_field.html.erb +46 -0
  9. data/app/views/refinery/admin/pages/tabs/_snippets.html.erb +3 -0
  10. data/app/views/refinery/admin/pages/tabs/_snippets_content.html.erb +24 -0
  11. data/app/views/refinery/admin/pages/tabs/_snippets_field.html.erb +55 -0
  12. data/app/views/refinery/admin/pages/tabs/_snippets_list_item.html.erb +20 -0
  13. data/app/views/refinery/admin/snippets/_actions.html.erb +28 -0
  14. data/app/views/refinery/admin/snippets/_form.html.erb +35 -0
  15. data/app/views/refinery/admin/snippets/_locale_picker.html.erb +12 -0
  16. data/app/views/refinery/admin/snippets/_records.html.erb +18 -0
  17. data/app/views/refinery/admin/snippets/_snippet.html.erb +22 -0
  18. data/app/views/refinery/admin/snippets/_snippets.html.erb +2 -0
  19. data/app/views/refinery/admin/snippets/_sortable_list.html.erb +7 -0
  20. data/app/views/refinery/admin/snippets/edit.html.erb +1 -0
  21. data/app/views/refinery/admin/snippets/index.html.erb +10 -0
  22. data/app/views/refinery/admin/snippets/new.html.erb +1 -0
  23. data/app/views/refinery/admin/snippets_page_parts/add.html.erb +1 -0
  24. data/app/views/refinery/admin/snippets_page_parts/remove.html.erb +1 -0
  25. data/config/locales/cs.yml +35 -0
  26. data/config/locales/en.yml +44 -0
  27. data/config/locales/es.yml +44 -0
  28. data/config/locales/nl.yml +22 -0
  29. data/config/routes.rb +18 -0
  30. data/db/migrate/1_create_snippets.rb +22 -0
  31. data/db/migrate/2_translate_snippets.rb +20 -0
  32. data/db/migrate/3_create_snippets_page_parts.rb +22 -0
  33. data/db/migrate/6_remove_position_from_snippets.rb +12 -0
  34. data/db/seeds.rb +6 -0
  35. data/features/manage_snippets.feature +63 -0
  36. data/features/step_definitions/snippet_steps.rb +14 -0
  37. data/features/support/paths.rb +17 -0
  38. data/lib/extensions/application_helper_extensions.rb +39 -0
  39. data/lib/extensions/page_extensions.rb +22 -0
  40. data/lib/gemspec.rb +31 -0
  41. data/lib/generators/refinery/snippets_generator.rb +22 -0
  42. data/lib/refinery/snippets.rb +29 -0
  43. data/lib/refinery/snippets/engine.rb +49 -0
  44. data/lib/refinery/snippets/tabs.rb +22 -0
  45. data/lib/refinery/snippets/version.rb +5 -0
  46. data/lib/refinerycms-snippets.rb +1 -0
  47. data/lib/tasks/snippets.rake +13 -0
  48. data/readme.md +52 -0
  49. data/refinerycms-snippets.gemspec +106 -0
  50. data/spec/helpers/application_helper_spec.rb +43 -0
  51. data/spec/models/page_spec.rb +39 -0
  52. data/spec/models/snippet_spec.rb +91 -0
  53. metadata +133 -0
@@ -0,0 +1,3 @@
1
+ <div class="wym_skin_refinery page_part" id="page_snippet_picker">
2
+ <%= render :partial => '/refinery/admin/pages/tabs/snippets_content', :locals => {:f => f} %>
3
+ </div>
@@ -0,0 +1,24 @@
1
+ <% if @page.new_record? %>
2
+ <div class="msg alert"><%= t('.please_save_page_before') %></div>
3
+ <% else %>
4
+ <div id="part-snippets-menu">
5
+ <ul>
6
+ <% @page.parts.each do |part|%>
7
+ <li>
8
+ <%= link_to(part.title, refinery.url_for(:anchor => "part-#{part.id}")) %> |
9
+ </li>
10
+ <% end %>
11
+ </ul>
12
+ </div>
13
+ <%= render :partial => '/refinery/admin/pages/tabs/snippets_field', :collection => @page.parts, :as => :part %>
14
+ <% end %>
15
+
16
+ <% content_for :stylesheets do %>
17
+ <%= stylesheet_link_tag 'page-snippet-picker' %>
18
+ <% end %>
19
+ <% content_for :javascripts do %>
20
+ <%= javascript_include_tag 'page-snippet-picker' %>
21
+ <% end %>
22
+ <% content_for :javascripts do %>
23
+ <%= javascript_include_tag 'part-snippets-select' %>
24
+ <% end %>
@@ -0,0 +1,55 @@
1
+ <div id="<%= "part-#{part.id}" %>" class="part-snippets">
2
+ <h1><%= part.title %></h1>
3
+ <div class="active-snippets">
4
+ <% if part.snippets.before.any? %>
5
+ <h2><%= t('.before_body') %></h2>
6
+ <ul>
7
+ <%= render :partial => '/refinery/admin/pages/tabs/snippets_list_item', :collection => part.snippets.before, :as => :snippet, :locals => {:part => part, :before_body => true} %>
8
+ </ul>
9
+ <% end %>
10
+ <% if part.snippets.after.any? %>
11
+ <h2><%= t('.after_body') %></h2>
12
+ <ul>
13
+ <%= render :partial => '/refinery/admin/pages/tabs/snippets_list_item', :collection => part.snippets.after, :as => :snippet, :locals => {:part => part, :before_body => false} %>
14
+ </ul>
15
+ <% end %>
16
+ </div>
17
+
18
+ <div class="inactive-snippets">
19
+ <%
20
+ inactive_snippets = []
21
+ Refinery::Snippet.all.inject(inactive_snippets) do |s, snippet|
22
+ unless snippet.after?(part) and snippet.before?(part)
23
+ s << snippet
24
+ end
25
+ end
26
+ %>
27
+ <% unless inactive_snippets.empty? %>
28
+ <h2><%= t('.inactive') %></h2>
29
+ <ul>
30
+ <% inactive_snippets.each do |snippet| %>
31
+ <li class='clearfix record <%= cycle('on', 'on-hover') %>' >
32
+ <span class="title"><%= snippet.title %></span>
33
+ <div class="actions">
34
+ <% unless snippet.after?(part) %>
35
+ <%= link_to t('.add_after_body'), refinery.url_for({:controller => 'snippets_page_parts', :action => 'add', :id => @page.id, :snippet_id => snippet.id, :part_id => part.id}), :class => 'add_icon add-snippet' %>
36
+ <% else %>
37
+ <span class="add-snippet"><%= t('.add_after_body') %></span>
38
+ <% end %>
39
+ <% unless snippet.before?(part) %>
40
+ <%= link_to t('.add_before_body'), refinery.url_for({:controller => 'snippets_page_parts', :action => 'add', :id => @page.id, :snippet_id => snippet.id, :part_id => part.id, :before_body => 'true'}), :class => 'add_icon add-snippet' %>
41
+ <% else %>
42
+ <span class=" add-snippet"><%= t('.add_before_body') %></span>
43
+ <% end %>
44
+ </div>
45
+ </li>
46
+ <% end %>
47
+ </ul>
48
+ <% end %>
49
+ </div>
50
+ </div>
51
+
52
+
53
+
54
+
55
+
@@ -0,0 +1,20 @@
1
+ <li class='clearfix record <%= cycle('on', 'on-hover') %>' >
2
+ <span class='title'>
3
+ <%= snippet.title %>
4
+ <% if defined?(::Refinery::I18n) and ::Refinery::I18n.frontend_locales.many? and
5
+ (locales = snippet.translations.collect{|t| t.locale}).present? %>
6
+ <span class='preview'>
7
+ <% locales.each do |locale| %>
8
+ <%= refinery_icon_tag "flags/#{locale}.png", :size => '16x11' %>
9
+ <% end %>
10
+ </span>
11
+ <% end %>
12
+ </span>
13
+ <span class='actions'>
14
+ <%= link_to refinery_icon_tag('application_edit.png'), refinery.edit_admin_snippet_path(snippet),
15
+ :title => t('.edit') %>
16
+ <%= link_to refinery_icon_tag('delete.png'), refinery.url_for({:controller => 'snippets_page_parts', :action => 'remove', :id => @page.id, :snippet_id => snippet.id, :part_id => part.id, :before_body => before_body}),
17
+ :title => t('.remove'),
18
+ :class => 'remove-snippet' %>
19
+ </span>
20
+ </li>
@@ -0,0 +1,28 @@
1
+ <ul>
2
+ <% if Refinery::Admin::SnippetsController.searchable? %>
3
+ <li>
4
+ <%= render :partial => "/refinery/admin/search",
5
+ :locals => {
6
+ :url => refinery.admin_snippets_path
7
+ } %>
8
+ </li>
9
+ <% end %>
10
+ <li>
11
+ <%= link_to t('.create_new'), refinery.new_admin_snippet_path,
12
+ :class => "add_icon" %>
13
+ </li>
14
+ <% if !searching? and Refinery::Admin::SnippetsController.sortable? and Refinery::Snippet.count > 1 %>
15
+ <li>
16
+ <%= link_to t('.reorder', :what => "Snippets"),
17
+ refinery.admin_snippets_path,
18
+ :id => "reorder_action",
19
+ :class => "reorder_icon" %>
20
+
21
+ <%= link_to t('.reorder_done', :what => "Snippets"),
22
+ refinery.admin_snippets_path,
23
+ :id => "reorder_action_done",
24
+ :style => "display: none;",
25
+ :class => "reorder_icon" %>
26
+ </li>
27
+ <% end %>
28
+ </ul>
@@ -0,0 +1,35 @@
1
+ <%= form_for [refinery, :admin, @snippet] do |f| -%>
2
+ <%= render :partial => "/refinery/admin/error_messages", :locals => {
3
+ :object => @snippet,
4
+ :include_object_name => true
5
+ } %>
6
+
7
+ <%= render :partial => "locale_picker",
8
+ :locals => {
9
+ :current_locale => Thread.current[:globalize_locale]
10
+ } if defined?(::Refinery::I18n) %>
11
+
12
+ <div class='field'>
13
+ <%= f.label :title -%>
14
+ <%= f.text_field :title, :class => 'larger widest' -%>
15
+ </div>
16
+ <br />
17
+ <div class='field'>
18
+ <div class='clearfix ui-tabs ui-widget ui-widget-content ui-corner-all'>
19
+ <div>
20
+ <% [:body].each do |part| %>
21
+ <div>
22
+ <%= f.text_area part, :rows => 20, :class => 'wymeditor widest' -%>
23
+ </div>
24
+ <% end %>
25
+ </div>
26
+ </div>
27
+
28
+ <%= render :partial => '/refinery/admin/form_actions',
29
+ :locals => {
30
+ :f => f,
31
+ :continue_editing => true,
32
+ :delete_title => t('delete', :scope => 'refinery.admin.snippets.snippet'),
33
+ :delete_confirmation => t('message', :scope => 'refinery.admin.delete', :title => @snippet.title)
34
+ } %>
35
+ <% end -%>
@@ -0,0 +1,12 @@
1
+ <input type='hidden' name='switch_locale' id='switch_locale' value='<%= local_assigns[:current_locale] %>' />
2
+ <% if defined?(::Refinery::I18n) and ::Refinery::I18n.frontend_locales.many? and
3
+ (locales = ::Refinery::I18n.frontend_locales).present? %>
4
+ <ul id='switch_locale_picker' class='clearfix'>
5
+ <% locales.each do |locale| %>
6
+ <li<%= " class='selected'" if locale.to_s == local_assigns[:current_locale].to_s %>>
7
+ <%= link_to refinery_icon_tag("flags/#{locale}.png", :size => '48x33'),
8
+ refinery.url_for(:switch_locale => locale) %>
9
+ </li>
10
+ <% end %>
11
+ </ul>
12
+ <% end %>
@@ -0,0 +1,18 @@
1
+ <% if searching? %>
2
+ <h2><%= t('results_for', :scope => 'refinery.admin.search', :query => params[:search]) %></h2>
3
+ <% end %>
4
+ <% if @snippets.any? %>
5
+ <div class='pagination_container'>
6
+ <%= render :partial => 'snippets' %>
7
+ </div>
8
+ <% else %>
9
+ <p>
10
+ <% unless searching? %>
11
+ <strong>
12
+ <%= t('.no_items_yet') %>
13
+ </strong>
14
+ <% else %>
15
+ <%= t('no_results', :scope => 'refinery.admin.search') %>
16
+ <% end %>
17
+ </p>
18
+ <% end %>
@@ -0,0 +1,22 @@
1
+ <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(snippet) -%>">
2
+ <span class='title'>
3
+ <%= snippet.title %>
4
+ <% if defined?(::Refinery::I18n) and ::Refinery::I18n.frontend_locales.many? and
5
+ (locales = snippet.translations.collect{|t| t.locale}).present? %>
6
+ <span class='preview'>
7
+ <% locales.each do |locale| %>
8
+ <%= refinery_icon_tag "flags/#{locale}.png", :size => '16x11' %>
9
+ <% end %>
10
+ </span>
11
+ <% end %>
12
+ </span>
13
+ <span class='actions'>
14
+ <%= link_to refinery_icon_tag("application_edit.png"), refinery.edit_admin_snippet_path(snippet),
15
+ :title => t('.edit') %>
16
+ <%= link_to refinery_icon_tag("delete.png"), refinery.admin_snippet_path(snippet),
17
+ :class => "cancel confirm-delete",
18
+ :title => t('.delete'),
19
+ :confirm => t('message', :scope => 'refinery.admin.delete', :title => snippet.title),
20
+ :method => :delete %>
21
+ </span>
22
+ </li>
@@ -0,0 +1,2 @@
1
+ <%= will_paginate @snippets %>
2
+ <%= render :partial => "sortable_list" %>
@@ -0,0 +1,7 @@
1
+ <ul id='sortable_list'>
2
+ <%= render :partial => 'snippet', :collection => @snippets %>
3
+ </ul>
4
+ <%= render :partial => "/refinery/admin/sortable_list",
5
+ :locals => {
6
+ :continue_reordering => (local_assigns.keys.include?(:continue_reordering)) ? continue_reordering : true
7
+ } %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,10 @@
1
+ <section id='records'>
2
+ <%= render :partial => 'records' %>
3
+ </section>
4
+ <aside id='actions'>
5
+ <%= render :partial => 'actions' %>
6
+ </aside>
7
+ <%= render :partial => '/refinery/admin/make_sortable',
8
+ :locals => {
9
+ :tree => false
10
+ } if !searching? and Refinery::Admin::SnippetsController.sortable? and Refinery::Snippet.count > 1 %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1 @@
1
+ <%= render :partial => '/refinery/admin/pages/tabs/snippets_content' %>
@@ -0,0 +1 @@
1
+ <%= render :partial => '/refinery/admin/pages/tabs/snippets_content' %>
@@ -0,0 +1,35 @@
1
+ cs:
2
+ plugins:
3
+ snippets:
4
+ title: Výstřižky
5
+ admin:
6
+ snippets:
7
+ actions:
8
+ create_new: Přidat nový výstřižek
9
+ reorder: Přeuspořádat výstřižky
10
+ reorder_done: Dokončit přeuspořádávání výstřižků
11
+ records:
12
+ title: Výstřižky
13
+ sorry_no_results: Zadaným kritériím neodpovídají žádné výstřižky
14
+ no_items_yet: Žádné výstřižky zatím nebyly nalezeny. Klikněte na "Přidat nový výstřižek" pro přidání prvního výstřižku.
15
+ snippet:
16
+ view_live_html: Zobrazí výstřižek živě <br/><em>(zobrazí se v novém okně)</em>
17
+ edit: Upravit výstřižek
18
+ delete: Odstranit výstřižek
19
+ pages:
20
+ tabs:
21
+ snippets_content:
22
+ please_save_page_before: Před přidáním výstřižků prosím uložte tuto stránku.
23
+ snippets_field:
24
+ active: Aktivní
25
+ inactive: Neaktivní
26
+ add_after_body: Přidat za obsah
27
+ add_before_body: Přidat před obsah
28
+ after_body: Před obsah
29
+ before_body: Za obsah
30
+ snippets_list_item:
31
+ remove: Odstranit
32
+ edit: Upravit
33
+ snippets:
34
+ show:
35
+ other: Další výstřižky
@@ -0,0 +1,44 @@
1
+ en:
2
+ refinery:
3
+ plugins:
4
+ refinery_snippets:
5
+ title: Snippets
6
+ admin:
7
+ snippets:
8
+ actions:
9
+ create_new: Add New Snippet
10
+ reorder: Reorder Snippets
11
+ reorder_done: Done Reordering Snippets
12
+ records:
13
+ title: Snippets
14
+ sorry_no_results: Sorry! There are no results found.
15
+ no_items_yet: There are no Snippets yet. Click "Add New Snippet" to add your first snippet.
16
+ snippet:
17
+ view_live_html: View this snippet live <br/><em>(opens in a new window)</em>
18
+ edit: Edit this snippet
19
+ delete: Remove this snippet forever
20
+ pages:
21
+ tabs:
22
+ snippets_content:
23
+ please_save_page_before: Please save this page before you can add any snippets.
24
+ snippets_field:
25
+ active: Active
26
+ inactive: Inactive
27
+ add_after_body: Add after body
28
+ add_before_body: Add before body
29
+ after_body: After body
30
+ before_body: Before body
31
+ snippets_list_item:
32
+ remove: Remove
33
+ edit: Edit
34
+ snippets:
35
+ show:
36
+ other: Other Snippets
37
+ activerecord:
38
+ models:
39
+ refinery/snippet: snippet
40
+ refinery/snippet_page_part: Snippet association
41
+ attributes:
42
+ refinery/snippet:
43
+ title: Title
44
+
@@ -0,0 +1,44 @@
1
+ es:
2
+ refinery:
3
+ plugins:
4
+ refinery_snippets:
5
+ title: Snippets
6
+ admin:
7
+ snippets:
8
+ actions:
9
+ create_new: Añadir Snippet
10
+ reorder: Reordenar Snippets
11
+ reorder_done: Snippets reordenados
12
+ records:
13
+ title: Snippets
14
+ sorry_no_results: No hay resultados.
15
+ no_items_yet: No hay Snippets todavía. Usa "Añadir Snippet" para crear uno.
16
+ snippet:
17
+ view_live_html: Ver el snippet <br/><em>(abre una nueva ventana)</em>
18
+ edit: Editar este snippet
19
+ delete: Borrar este snippet
20
+ pages:
21
+ tabs:
22
+ snippets_content:
23
+ please_save_page_before: Por favor guarda la página antes de añadir un snippet.
24
+ snippets_field:
25
+ active: Activo
26
+ inactive: Inactivo
27
+ add_after_body: Añadir después
28
+ add_before_body: Añadir antes
29
+ after_body: Después
30
+ before_body: Antes
31
+ snippets_list_item:
32
+ remove: Eliminar
33
+ edit: Editar
34
+ snippets:
35
+ show:
36
+ other: Otros Snippets
37
+ activerecord:
38
+ models:
39
+ refinery/snippet: snippet
40
+ refinery/snippet_page_part: Asociación de snippet
41
+ attributes:
42
+ refinery/snippet:
43
+ title: Título
44
+
@@ -0,0 +1,22 @@
1
+ nl:
2
+ refinery:
3
+ plugins:
4
+ refinery_snippets:
5
+ title: Snippets
6
+ admin:
7
+ snippets:
8
+ actions:
9
+ create_new: Maak een nieuwe Snippet
10
+ reorder: Wijzig de volgorde van de Snippets
11
+ reorder_done: Klaar met het wijzingen van de volgorde van de Snippets
12
+ records:
13
+ title: Snippets
14
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
15
+ no_items_yet: Er zijn nog geen Snippets. Druk op 'Maak een nieuwe Snippet' om de eerste aan te maken.
16
+ snippet:
17
+ view_live_html: Bekijk deze snippet op de website <br/><em>(opent een nieuw venster)</em>
18
+ edit: Bewerk deze snippet
19
+ delete: Verwijder deze snippet voor eeuwig
20
+ snippets:
21
+ show:
22
+ other: Andere Snippets
@@ -0,0 +1,18 @@
1
+ Refinery::Core::Engine.routes.append do
2
+
3
+ # Admin routes
4
+ namespace :admin, :path => 'refinery', :as => 'admin' do
5
+ resources :snippets, except: :show do
6
+ collection do
7
+ post :update_positions
8
+ end
9
+ end
10
+ resources :snippets_page_parts do
11
+ member do
12
+ get 'add'
13
+ get 'remove'
14
+ end
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,22 @@
1
+ class CreateSnippets < ActiveRecord::Migration
2
+
3
+ def up
4
+ unless ::Refinery::Snippet.table_exists?
5
+ create_table ::Refinery::Snippet.table_name do |t|
6
+ t.string :title, :limit => 36, :null => false
7
+ t.text :body
8
+ t.integer :position, :null => false, :default => 0
9
+ t.timestamps
10
+ end
11
+ end
12
+
13
+ Refinery::Snippets::Engine.load_seed
14
+ end
15
+
16
+ def down
17
+ ::Refinery::UserPlugin.destroy_all({:name => "snippets"})
18
+
19
+ drop_table ::Refinery::Snippet.table_name
20
+ end
21
+
22
+ end