refinerycms-sl-snippets 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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