alchemy_cms 4.1.2 → 4.2.0.rc1

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 (155) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/Bug_report.md +0 -5
  3. data/.rubocop.yml +4 -1
  4. data/.travis.yml +3 -3
  5. data/CHANGELOG.md +29 -10
  6. data/Gemfile +5 -7
  7. data/README.md +114 -62
  8. data/Rakefile +2 -2
  9. data/alchemy_cms.gemspec +5 -5
  10. data/app/assets/images/alchemy/icon.svg +1 -1
  11. data/app/assets/javascripts/alchemy/admin.js +2 -0
  12. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +0 -24
  13. data/app/assets/javascripts/alchemy/alchemy.datepicker.js.coffee +11 -9
  14. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +7 -24
  15. data/app/assets/javascripts/alchemy/alchemy.element_editors.js.coffee +9 -8
  16. data/app/assets/javascripts/alchemy/alchemy.fixed_elements.js +38 -0
  17. data/app/assets/javascripts/alchemy/alchemy.sitemap.js.coffee +2 -4
  18. data/app/assets/javascripts/alchemy/alchemy.translations.js.coffee +1 -1
  19. data/app/assets/stylesheets/alchemy/_mixins.scss +2 -1
  20. data/app/assets/stylesheets/alchemy/_variables.scss +7 -2
  21. data/app/assets/stylesheets/alchemy/admin.scss +2 -1
  22. data/app/assets/stylesheets/alchemy/archive.scss +18 -4
  23. data/app/assets/stylesheets/alchemy/buttons.scss +1 -1
  24. data/app/assets/stylesheets/alchemy/dialogs.scss +1 -1
  25. data/app/assets/stylesheets/alchemy/elements.scss +154 -90
  26. data/app/assets/stylesheets/alchemy/filter_field.scss +30 -0
  27. data/app/assets/stylesheets/alchemy/flatpickr.scss +839 -0
  28. data/app/assets/stylesheets/alchemy/forms.scss +5 -1
  29. data/app/assets/stylesheets/alchemy/frame.scss +6 -14
  30. data/app/assets/stylesheets/alchemy/navigation.scss +109 -98
  31. data/app/assets/stylesheets/alchemy/search.scss +11 -29
  32. data/app/assets/stylesheets/alchemy/tables.scss +0 -23
  33. data/app/assets/stylesheets/alchemy/tags.scss +4 -27
  34. data/app/assets/stylesheets/alchemy/toolbar.scss +12 -2
  35. data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +4 -33
  36. data/app/controllers/alchemy/admin/attachments_controller.rb +1 -12
  37. data/app/controllers/alchemy/admin/contents_controller.rb +2 -24
  38. data/app/controllers/alchemy/admin/elements_controller.rb +11 -49
  39. data/app/controllers/alchemy/admin/pages_controller.rb +1 -1
  40. data/app/controllers/alchemy/admin/pictures_controller.rb +1 -14
  41. data/app/controllers/alchemy/api/contents_controller.rb +1 -1
  42. data/app/controllers/alchemy/api/elements_controller.rb +1 -1
  43. data/app/controllers/alchemy/api/pages_controller.rb +1 -1
  44. data/app/controllers/concerns/alchemy/admin/archive_overlay.rb +20 -0
  45. data/app/helpers/alchemy/admin/base_helper.rb +8 -18
  46. data/app/helpers/alchemy/admin/elements_helper.rb +55 -85
  47. data/app/helpers/alchemy/admin/pictures_helper.rb +0 -23
  48. data/app/helpers/alchemy/elements_helper.rb +80 -120
  49. data/app/helpers/alchemy/pages_helper.rb +5 -24
  50. data/app/models/alchemy/content.rb +0 -1
  51. data/app/models/alchemy/content/factory.rb +33 -57
  52. data/app/models/alchemy/element.rb +46 -66
  53. data/app/models/alchemy/element/element_contents.rb +2 -2
  54. data/app/models/alchemy/page.rb +34 -4
  55. data/app/models/alchemy/page/page_elements.rb +30 -122
  56. data/app/serializers/alchemy/attachment_serializer.rb +0 -2
  57. data/app/serializers/alchemy/content_serializer.rb +0 -2
  58. data/app/serializers/alchemy/element_serializer.rb +0 -3
  59. data/app/serializers/alchemy/essence_boolean_serializer.rb +0 -2
  60. data/app/serializers/alchemy/essence_date_serializer.rb +0 -2
  61. data/app/serializers/alchemy/essence_file_serializer.rb +0 -2
  62. data/app/serializers/alchemy/essence_html_serializer.rb +0 -2
  63. data/app/serializers/alchemy/essence_link_serializer.rb +0 -2
  64. data/app/serializers/alchemy/essence_picture_serializer.rb +0 -2
  65. data/app/serializers/alchemy/essence_richtext_serializer.rb +0 -2
  66. data/app/serializers/alchemy/essence_select_serializer.rb +0 -2
  67. data/app/serializers/alchemy/essence_text_serializer.rb +0 -2
  68. data/app/serializers/alchemy/legacy_element_serializer.rb +0 -3
  69. data/app/serializers/alchemy/page_serializer.rb +2 -8
  70. data/app/serializers/alchemy/page_tree_serializer.rb +1 -1
  71. data/app/serializers/alchemy/picture_serializer.rb +0 -2
  72. data/app/views/alchemy/admin/clipboard/index.html.erb +2 -2
  73. data/app/views/alchemy/admin/clipboard/insert.js.erb +9 -12
  74. data/app/views/alchemy/admin/contents/create.js.erb +4 -30
  75. data/app/views/alchemy/admin/elements/_element.html.erb +27 -12
  76. data/app/views/alchemy/admin/elements/_element_toolbar.html.erb +1 -1
  77. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +0 -10
  78. data/app/views/alchemy/admin/elements/create.js.erb +12 -12
  79. data/app/views/alchemy/admin/elements/fold.js.erb +1 -1
  80. data/app/views/alchemy/admin/elements/index.html.erb +20 -19
  81. data/app/views/alchemy/admin/elements/publish.js.erb +5 -0
  82. data/app/views/alchemy/admin/elements/trash.js.erb +4 -1
  83. data/app/views/alchemy/admin/essence_pictures/assign.js.erb +0 -7
  84. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +0 -22
  85. data/app/views/alchemy/admin/pages/_publication_fields.html.erb +2 -4
  86. data/app/views/alchemy/admin/pages/edit.html.erb +1 -1
  87. data/app/views/alchemy/admin/pages/index.html.erb +14 -10
  88. data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +1 -1
  89. data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +1 -1
  90. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +7 -5
  91. data/app/views/alchemy/admin/partials/_routes.html.erb +0 -1
  92. data/app/views/alchemy/admin/partials/_search_form.html.erb +6 -4
  93. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +6 -3
  94. data/app/views/alchemy/admin/pictures/index.html.erb +1 -1
  95. data/app/views/alchemy/admin/trash/index.html.erb +8 -7
  96. data/app/views/alchemy/elements/_editor_not_found.html.erb +1 -1
  97. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +4 -19
  98. data/app/views/layouts/alchemy/admin.html.erb +1 -0
  99. data/bin/rspec +0 -5
  100. data/config/alchemy/config.yml +3 -0
  101. data/config/brakeman.ignore +1 -1
  102. data/config/locales/alchemy.en.yml +6 -12
  103. data/config/routes.rb +1 -5
  104. data/db/migrate/20180226123013_alchemy_four_point_zero.rb +0 -29
  105. data/db/migrate/20180519204655_add_fixed_to_alchemy_elements.rb +6 -0
  106. data/lib/alchemy/admin/locale.rb +1 -1
  107. data/lib/alchemy/cache_digests/template_tracker.rb +4 -27
  108. data/lib/alchemy/elements_finder.rb +111 -0
  109. data/lib/alchemy/errors.rb +0 -4
  110. data/lib/alchemy/modules.rb +49 -18
  111. data/lib/alchemy/tasks/tidy.rb +3 -40
  112. data/lib/alchemy/test_support/controller_requests.rb +1 -1
  113. data/lib/alchemy/test_support/essence_shared_examples.rb +1 -1
  114. data/lib/alchemy/test_support/factories/attachment_factory.rb +5 -3
  115. data/lib/alchemy/test_support/factories/content_factory.rb +4 -4
  116. data/lib/alchemy/test_support/factories/dummy_user_factory.rb +5 -5
  117. data/lib/alchemy/test_support/factories/element_factory.rb +12 -7
  118. data/lib/alchemy/test_support/factories/essence_text_factory.rb +1 -1
  119. data/lib/alchemy/test_support/factories/language_factory.rb +13 -13
  120. data/lib/alchemy/test_support/factories/page_factory.rb +18 -17
  121. data/lib/alchemy/test_support/factories/picture_factory.rb +6 -4
  122. data/lib/alchemy/test_support/factories/site_factory.rb +6 -6
  123. data/lib/alchemy/tinymce.rb +1 -1
  124. data/lib/alchemy/upgrader/four_point_two.rb +68 -0
  125. data/lib/alchemy/upgrader/tasks/cells_migration.rb +41 -0
  126. data/lib/alchemy/upgrader/tasks/cells_upgrader.rb +146 -0
  127. data/lib/alchemy/upgrader/tasks/picture_gallery_migration.rb +65 -0
  128. data/lib/alchemy/upgrader/tasks/picture_gallery_upgrader.rb +195 -0
  129. data/lib/alchemy/version.rb +1 -1
  130. data/lib/alchemy_cms.rb +1 -0
  131. data/lib/rails/generators/alchemy/elements/elements_generator.rb +1 -0
  132. data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +0 -3
  133. data/lib/rails/generators/alchemy/elements/templates/editor.html.haml +0 -3
  134. data/lib/rails/generators/alchemy/elements/templates/editor.html.slim +0 -3
  135. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +3 -14
  136. data/lib/rails/generators/alchemy/elements/templates/view.html.haml +3 -10
  137. data/lib/rails/generators/alchemy/elements/templates/view.html.slim +3 -10
  138. data/lib/tasks/alchemy/tidy.rake +1 -23
  139. data/lib/tasks/alchemy/upgrade.rake +44 -1
  140. data/vendor/assets/javascripts/flatpickr/flatpickr.min.js +2 -0
  141. data/vendor/assets/javascripts/tinymce/license.txt +0 -0
  142. data/vendor/assets/javascripts/tinymce/tinymce.min.js +2 -2
  143. metadata +25 -31
  144. data/app/assets/stylesheets/alchemy/jquery.datetimepicker.scss +0 -478
  145. data/app/models/alchemy/cell.rb +0 -95
  146. data/app/models/alchemy/page/page_cells.rb +0 -69
  147. data/app/serializers/alchemy/cell_serializer.rb +0 -19
  148. data/app/views/alchemy/admin/contents/new.html.erb +0 -11
  149. data/app/views/alchemy/admin/contents/order.js.erb +0 -3
  150. data/app/views/alchemy/admin/elements/_add_picture.html.erb +0 -14
  151. data/app/views/alchemy/admin/elements/_picture_gallery_editor.html.erb +0 -24
  152. data/bin/spring +0 -16
  153. data/lib/alchemy/test_support/factories/cell_factory.rb +0 -9
  154. data/vendor/assets/javascripts/date-formatter.js +0 -161
  155. data/vendor/assets/javascripts/jquery_plugins/jquery.datetimepicker.full.min.js +0 -2
@@ -1,14 +1,19 @@
1
1
  var el = $('.element-editor[data-element-id="<%= @element.id %>"]');
2
2
  var icon = el.find('> .element-header > .element-handle > .icon');
3
3
  var label = el.find('> .element-toolbar .publish-element-button label');
4
+ var eye = el.find('> .element-toolbar .publish-element-button .icon');
4
5
 
5
6
  <%- if @element.public? -%>
6
7
  icon.removeClass('fa-window-close fas');
7
8
  icon.addClass('fa-window-maximize far');
9
+ eye.removeClass('fa-eye');
10
+ eye.addClass('fa-eye-slash');
8
11
  label.text('<%= Alchemy.t(:hide_element) %>');
9
12
  <%- else -%>
10
13
  icon.removeClass('fa-window-maximize far');
11
14
  icon.addClass('fa-window-close fas');
15
+ eye.removeClass('fa-eye-slash');
16
+ eye.addClass('fa-eye');
12
17
  label.text('<%= Alchemy.t(:show_element) %>');
13
18
  <%- end -%>
14
19
 
@@ -1,11 +1,14 @@
1
1
  $('#element_<%= @element.id %>').hide(200, function() {
2
2
  $(this).remove();
3
3
  Alchemy.growl('<%= j Alchemy.t("Element trashed") %>');
4
- $('#element_area .sortable_cell').sortable('refresh');
4
+ $('#element_area .sortable-elements').sortable('refresh');
5
5
  Alchemy.TrashWindow.refresh();
6
6
  $('#element_trash_button .icon').addClass('full');
7
7
  Alchemy.PreviewWindow.refresh();
8
8
  <% @element.richtext_contents_ids.each do |id| %>
9
9
  tinymce.get('tinymce_<%= id %>').remove();
10
10
  <% end %>
11
+ <% if @element.fixed? %>
12
+ Alchemy.FixedElements.removeTab(<%= @element.id %>);
13
+ <% end %>
11
14
  });
@@ -6,12 +6,5 @@ $('#<%= @content.dom_id -%>').replaceWith('<%= j(
6
6
  options: options_from_params
7
7
  )
8
8
  ) %>');
9
-
10
- <% if @content.siblings.essence_pictures.count > 1 %>
11
-
12
- Alchemy.SortableContents('#<%= @content.element.id -%>_contents', '<%= form_authenticity_token %>');
13
-
14
- <% end %>
15
-
16
9
  Alchemy.closeCurrentDialog();
17
10
  Alchemy.setElementDirty('#element_<%= @content.element.id %>');
@@ -1,27 +1,5 @@
1
1
  (function() {
2
- var $picture_editor = $('#element_<%= @element.id %>_contents');
3
-
4
2
  $('#essence_picture_<%= @content_id %>').remove();
5
-
6
- <% if max_image_count.present? && @essence_pictures.size < max_image_count.to_i -%>
7
-
8
- if ($('div.add_picture', $picture_editor).length === 0) {
9
- $picture_editor.append('<%= j(
10
- render "alchemy/admin/elements/add_picture",
11
- element: @element,
12
- options: options_from_params
13
- ) %>');
14
- }
15
-
16
- <% end -%>
17
-
18
- <% if @essence_pictures.size > 1 %>
19
- Alchemy.SortableContents($picture_editor.selector, '<%= form_authenticity_token %>');
20
- <% else %>
21
- $picture_editor.find('.draggable_picture').removeClass('draggable_picture');
22
- $picture_editor.sortable('destroy');
23
- <% end %>
24
3
  Alchemy.reloadPreview();
25
4
  Alchemy.pleaseWaitOverlay(false);
26
-
27
5
  })()
@@ -1,6 +1,4 @@
1
- <% checkbox = check_box_tag :page_public, nil, @page.public?, name: nil,
2
- data: {date_format: I18n.t(:datetimepicker, scope: 'time.formats.alchemy')},
3
- disabled: @page.attribute_fixed?(:public_on) %>
1
+ <% checkbox = check_box_tag :page_public, nil, @page.public?, name: nil, disabled: @page.attribute_fixed?(:public_on) %>
4
2
 
5
3
  <label class="checkbox">
6
4
  <% if @page.attribute_fixed?(:public_on) || @page.attribute_fixed?(:public_until) %>
@@ -32,4 +30,4 @@
32
30
  <%= alchemy_datepicker @page, :public_until, type: :datetime,
33
31
  disabled: @page.attribute_fixed?(:public_until) %>
34
32
  </div>
35
- <% end %>
33
+ <% end %>
@@ -178,7 +178,7 @@
178
178
  Alchemy.ElementEditors.init();
179
179
  Alchemy.SelectBox('.element-editor');
180
180
  Alchemy.Tinymce.init(<%= @page.richtext_contents_ids.to_json %>);
181
- $('#cells').tabs().tabs('paging', {
181
+ $('#fixed-elements').tabs().tabs('paging', {
182
182
  follow: true,
183
183
  followOnSelect: true,
184
184
  prevButton: '<i class="fas fa-angle-double-left"></i>',
@@ -45,16 +45,20 @@
45
45
  <label><%= Alchemy.t('Show clipboard') %></label>
46
46
  </div>
47
47
  </div>
48
- <div class="js_filter_field_box">
49
- <%= text_field_tag 'filter', '',
50
- class: 'thin_border js_filter_field search_input_field',
51
- placeholder: Alchemy.t(:search),
52
- id: nil %>
53
- <%= render_icon :search %>
54
- <%= link_to(render_icon(:times, size: 'xs'), '#', {
55
- class: "js_filter_field_clear",
56
- title: Alchemy.t(:click_to_show_all)
57
- }) %>
48
+ <div class="search_form">
49
+ <div class="search_field">
50
+ <label>
51
+ <%= text_field_tag 'filter', '',
52
+ class: 'search_input_field',
53
+ placeholder: Alchemy.t(:search),
54
+ id: nil %>
55
+ <%= render_icon :search %>
56
+ </label>
57
+ <%= link_to(render_icon(:times, size: 'xs'), '#', {
58
+ class: "search_field_clear",
59
+ title: Alchemy.t(:click_to_show_all)
60
+ }) %>
61
+ </div>
58
62
  </div>
59
63
  <% end %>
60
64
 
@@ -1,4 +1,4 @@
1
- <%- if multi_language? -%>
1
+ <% if can?(:switch_language, Alchemy::Page) && @languages.many? %>
2
2
  <div class="button_with_label">
3
3
  <%= form_tag switch_language_admin_pages_path, method: 'get' do %>
4
4
  <%= select_tag(
@@ -1,5 +1,5 @@
1
1
  <% if can? *navigate_module(navigation) %>
2
- <%= content_tag :div, class: main_navigation_css_classes(navigation) do %>
2
+ <%= content_tag :div, class: main_navigation_css_classes(navigation), data: navigation["data"] do %>
3
3
  <%= link_to url_for_module(alchemy_module) do %>
4
4
  <% if navigation["image"] %>
5
5
  <%= image_tag(navigation["image"]) %>
@@ -6,11 +6,13 @@
6
6
  <%= hidden_field_tag("element_id", @element.blank? ? "" : @element.id) %>
7
7
  <%= hidden_field_tag("content_id", @content.blank? ? "" : @content.id) %>
8
8
  <div class="search_field">
9
- <%= render_icon('search') %>
10
- <%= f.search_field resource_handler.search_field_name,
11
- placeholder: Alchemy.t(:search),
12
- class: 'search_input_field',
13
- id: nil %>
9
+ <label>
10
+ <%= render_icon('search') %>
11
+ <%= f.search_field resource_handler.search_field_name,
12
+ placeholder: Alchemy.t(:search),
13
+ class: 'search_input_field',
14
+ id: nil %>
15
+ </label>
14
16
  <%= link_to render_icon(:times, size: 'xs'), url_for(
15
17
  action: 'index',
16
18
  element_id: @element.blank? ? '' : @element.id,
@@ -16,7 +16,6 @@
16
16
  },
17
17
 
18
18
  list_admin_elements_path: '<%= alchemy.list_admin_elements_path %>',
19
- order_admin_contents_path: '<%= alchemy.order_admin_contents_path %>',
20
19
  order_admin_elements_path: '<%= alchemy.order_admin_elements_path %>',
21
20
  order_admin_pages_path: '<%= alchemy.order_admin_pages_path %>',
22
21
  link_admin_pages_path: '<%= alchemy.link_admin_pages_path %>'
@@ -2,10 +2,12 @@
2
2
 
3
3
  <%= search_form_for @query, url: url, class: 'search_form' do |f| %>
4
4
  <div class="search_field">
5
- <%= render_icon('search') %>
6
- <%= f.search_field resource_handler.search_field_name,
7
- class: 'search_input_field',
8
- placeholder: Alchemy.t(:search) %>
5
+ <label>
6
+ <%= render_icon('search') %>
7
+ <%= f.search_field resource_handler.search_field_name,
8
+ class: 'search_input_field',
9
+ placeholder: Alchemy.t(:search) %>
10
+ </label>
9
11
  <% local_assigns.fetch(:additional_query_fields, []).each do |field| %>
10
12
  <%= f.hidden_field field %>
11
13
  <% end %>
@@ -1,14 +1,17 @@
1
1
  <div class="picture_thumbnail assign_image_list_detail <%= size.blank? ? 'medium' : size %>" name="<%= picture_to_assign.name %>" id="picture_to_assign_<%= picture_to_assign.id %>">
2
- <% action_url = create_or_assign_url(picture_to_assign, options) %>
3
2
  <%= link_to(
4
3
  image_tag(
5
4
  picture_to_assign.url(size: preview_size(size), flatten: true),
6
5
  alt: picture_to_assign.name
7
6
  ),
8
- action_url,
7
+ alchemy.assign_admin_essence_pictures_path(
8
+ picture_id: picture_to_assign.id,
9
+ content_id: @content,
10
+ options: options
11
+ ),
9
12
  remote: true,
10
13
  onclick: '$(self).attr("href", "#").off("click"); return false',
11
- method: @content.blank? ? 'post' : 'put',
14
+ method: 'put',
12
15
  title: Alchemy.t(:assign_image),
13
16
  class: 'thumbnail_background'
14
17
  ) %>
@@ -55,7 +55,7 @@
55
55
  additional_params: [:filter, :tagged_with, :size] %>
56
56
  <% end %>
57
57
 
58
- <div id="picture_archive" class="resources-table-wrapper">
58
+ <div id="picture_archive" class="resources-table-wrapper with_tag_filter">
59
59
  <div class="resources-header">
60
60
  <h2>
61
61
  <%= @pictures.total_count %>
@@ -8,13 +8,14 @@
8
8
  <% end %>
9
9
  <div id="trash_items">
10
10
  <%- @elements.each do |element| -%>
11
- <%= render partial: 'alchemy/admin/elements/element',
12
- object: element,
13
- locals: {
14
- draggable: @allowed_elements.any? do |e|
15
- e['name'] == element.name || e.fetch('nestable_elements', []).include?(element.name)
16
- end
17
- } %>
11
+ <% draggable = @allowed_elements.any? { |e|
12
+ !e['fixed'] && e['name'] == element.name || element.name.in?(e.fetch('nestable_elements', []))
13
+ } %>
14
+ <%= content_tag :div,
15
+ data: {'element-id' => element.id, 'element-name' => element.name},
16
+ class: ['element-editor', draggable ? 'draggable' : 'not-draggable'] do %>
17
+ <%= render 'alchemy/admin/elements/element_header', element: element %>
18
+ <% end %>
18
19
  <%- end -%>
19
20
  </div>
20
21
  <p>
@@ -1,4 +1,4 @@
1
1
  <%= render_message :warning do %>
2
2
  <h2><%= Alchemy.t(:element_editor_not_found) %>:</h2>
3
- <p><%= error.html_safe %></p>
3
+ <p><%== local_assigns[:error] %></p>
4
4
  <% end %>
@@ -1,25 +1,10 @@
1
- <%= content_tag :div, id: content.dom_id, data: {"content-id" => content.id}, class: [
2
- "essence_picture",
3
- options[:sortable] ? "draggable_picture" : nil,
4
- options[:grouped] ? nil : "content_editor"
5
- ].compact.join(" ") do %>
6
- <% unless options[:grouped] %><%= content_label(content) %><br/><% end %>
1
+ <%= content_tag :div, id: content.dom_id, data: {"content-id" => content.id}, class: "content_editor essence_picture" do %>
2
+ <%= content_label(content) %>
7
3
  <div class="picture_thumbnail">
8
4
  <span class="picture_tool delete">
9
- <% if options[:grouped] %>
10
- <%= link_to_confirm_dialog render_icon(:minus), Alchemy.t(:confirm_to_delete_image),
11
- alchemy.admin_essence_picture_path(
12
- id: content,
13
- options: options
14
- ), {title: Alchemy.t(:delete_image)} %>
15
- <% else %>
16
- <%= link_to render_icon(:times), '#',
17
- onclick: "return Alchemy.removePicture('##{content.form_field_id(:picture_id)}');" %>
18
- <% end %>
5
+ <%= link_to render_icon(:times), '#',
6
+ onclick: "return Alchemy.removePicture('##{content.form_field_id(:picture_id)}');" %>
19
7
  </span>
20
- <%- if content.ingredient -%>
21
- <div class="picture_handle" title="<%= Alchemy.t(:drag_to_sort) if options[:sortable] %>"></div>
22
- <%- end -%>
23
8
  <div class="picture_image">
24
9
  <div class="thumbnail_background">
25
10
  <%- if content.ingredient -%>
@@ -2,6 +2,7 @@
2
2
  <html class="no-js">
3
3
  <head>
4
4
  <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
5
6
  <title><%= render_alchemy_title %></title>
6
7
  <link rel="shortcut icon" href="<%= asset_path('alchemy/favicon.ico') %>">
7
8
  <%= csrf_meta_tag %>
data/bin/rspec CHANGED
@@ -1,8 +1,3 @@
1
1
  #!/usr/bin/env ruby
2
- begin
3
- load File.expand_path('spring', __dir__)
4
- rescue LoadError => e
5
- raise unless e.message.include?('spring')
6
- end
7
2
  require 'bundler/setup'
8
3
  load Gem.bin_path('rspec-core', 'rspec')
@@ -195,3 +195,6 @@ format_matchers:
195
195
  email: !ruby/regexp '/\A[^@\s]+@([^@\s]+\.)+[^@\s]+\z/'
196
196
  url: !ruby/regexp '/\A[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?\z/ix'
197
197
  link_url: !ruby/regexp '/^(mailto:|\/|[a-z]+:\/\/)/'
198
+
199
+ # The layout used for rendering the +alchemy/admin/pages#show+ action.
200
+ admin_page_preview_layout: application
@@ -29,7 +29,7 @@
29
29
  "file": "app/views/alchemy/admin/contents/create.js.erb",
30
30
  "line": 1,
31
31
  "link": "http://brakemanscanner.org/docs/warning_types/dynamic_render_path/",
32
- "code": "render(action => \"alchemy/essences/#{Content.create_from_scratch(Element.find(params[:content][:element_id]), content_params).essence_partial_name}_editor\", { :content => Content.create_from_scratch(Element.find(params[:content][:element_id]), content_params), :options => options_from_params, :html_options => ((params[:html_options] or {})) })",
32
+ "code": "render(action => \"alchemy/essences/#{Content.create(Element.find(params[:content][:element_id]), content_params).essence_partial_name}_editor\", { :content => Content.create(Element.find(params[:content][:element_id]), content_params), :options => options_from_params, :html_options => ((params[:html_options] or {})) })",
33
33
  "render_path": [{"type":"controller","class":"Alchemy::Admin::ContentsController","method":"create","line":21,"file":"app/controllers/alchemy/admin/contents_controller.rb"}],
34
34
  "location": {
35
35
  "type": "template",
@@ -157,6 +157,7 @@ en:
157
157
  site:
158
158
  aliases: Please separate additional domains with spaces or new lines.
159
159
 
160
+ add_nested_element: "Add %{name}"
160
161
  anchor: 'Anchor'
161
162
  attribute_fixed: Value can't be changed for this page type
162
163
  back: 'back'
@@ -270,7 +271,6 @@ en:
270
271
  "Sort pages": "Reorder pages"
271
272
  "Successfully added content": "Successfully added %{content}"
272
273
  "Successfully deleted content": "Successfully deleted %{content}"
273
- "Successfully saved content position": "Successfully saved content position"
274
274
  "Tags": "Tags"
275
275
  "These pictures could not be deleted, because they were in use": "These pictures could not be deleted, because they were in use: %{names}"
276
276
  "This page is locked": "This page is currently locked by %{name}"
@@ -299,8 +299,6 @@ en:
299
299
  "Your trash is empty": "Your trash is empty"
300
300
  above: "above"
301
301
  add: "Add"
302
- "add new content": "Add new content"
303
- add_image_to_element: "Add an image"
304
302
  align_in_text: "Alignment in text"
305
303
  all: "all"
306
304
  all_pictures: "All pictures"
@@ -414,8 +412,8 @@ en:
414
412
  file: "File"
415
413
  internal: "Internal"
416
414
  link_title: "Link title"
417
- login: "login"
418
- logout: "logout"
415
+ login: "Login"
416
+ logout: "Logout"
419
417
  mail_to: "Recipient"
420
418
  main_content: "Main content"
421
419
  male: "Male"
@@ -485,7 +483,6 @@ en:
485
483
  comma_seperated: "Separate by comma"
486
484
  password: "Password"
487
485
  paste: "paste"
488
- picture_gallery_editor: 'Pictures'
489
486
  picture_library:
490
487
  filter:
491
488
  last_upload: "from last upload"
@@ -574,11 +571,11 @@ en:
574
571
  you_can_rename_this_tag: "You can rename this tag"
575
572
  zoom_image: "Zoom this image"
576
573
  "Leave Alchemy": "Leave Alchemy"
577
- leave: "leave"
574
+ leave: "Leave"
578
575
  "You are about to leave Alchemy": "You are about to leave Alchemy"
579
576
  "Do you want to": "Do you want to"
580
- "stay logged in": "stay logged in"
581
- "or to completely": "or to completely"
577
+ "stay logged in": "Stay Logged In"
578
+ "or to completely": "or completely"
582
579
  "Are you sure?": "Are you sure?"
583
580
  "Create": "Create"
584
581
  "Edit": "Edit"
@@ -619,14 +616,11 @@ en:
619
616
  time:
620
617
  formats:
621
618
  alchemy:
622
- datepicker: "%Y-%m-%d"
623
- datetimepicker: "%Y-%m-%d %H:%M"
624
619
  default: "%a, %d %b %Y %H:%M:%S %z"
625
620
  essence_date: "%Y-%m-%d"
626
621
  page_status: "%m.%d.%Y %H:%M"
627
622
  short_datetime: "%d %b %H:%M"
628
623
  time: "%H:%M"
629
- timepicker: "%H:%M"
630
624
 
631
625
  # Translations for error messages.
632
626
  errors:
@@ -15,11 +15,7 @@ Alchemy::Engine.routes.draw do
15
15
  end
16
16
 
17
17
  namespace :admin, {path: Alchemy.admin_path, constraints: Alchemy.admin_constraints} do
18
- resources :contents, only: [:create] do
19
- collection do
20
- post :order
21
- end
22
- end
18
+ resources :contents, only: [:create]
23
19
 
24
20
  resources :pages do
25
21
  resources :elements
@@ -18,16 +18,6 @@ class AlchemyFourPointZero < ActiveRecord::Migration[5.0]
18
18
  end
19
19
  end
20
20
 
21
- unless table_exists?(:alchemy_cells)
22
- create_table :alchemy_cells do |t|
23
- t.integer "page_id", null: false
24
- t.string "name"
25
- t.datetime "created_at", null: false, precision: 6
26
- t.datetime "updated_at", null: false, precision: 6
27
- t.index ["page_id"], name: "index_alchemy_cells_on_page_id"
28
- end
29
- end
30
-
31
21
  unless table_exists?(:alchemy_contents)
32
22
  create_table :alchemy_contents do |t|
33
23
  t.string "name"
@@ -56,10 +46,8 @@ class AlchemyFourPointZero < ActiveRecord::Migration[5.0]
56
46
  t.datetime "updated_at", null: false, precision: 6
57
47
  t.integer "creator_id"
58
48
  t.integer "updater_id"
59
- t.integer "cell_id"
60
49
  t.text "cached_tag_list"
61
50
  t.integer "parent_element_id"
62
- t.index ["cell_id"], name: "index_alchemy_elements_on_cell_id"
63
51
  t.index ["page_id", "parent_element_id"], name: "index_alchemy_elements_on_page_id_and_parent_element_id"
64
52
  t.index ["page_id", "position"], name: "index_elements_on_page_id_and_position"
65
53
  end
@@ -332,14 +320,6 @@ class AlchemyFourPointZero < ActiveRecord::Migration[5.0]
332
320
  end
333
321
  end
334
322
 
335
- unless foreign_key_exists?(:alchemy_cells, column: :page_id)
336
- add_foreign_key :alchemy_cells, :alchemy_pages,
337
- column: :page_id,
338
- on_update: :cascade,
339
- on_delete: :cascade,
340
- name: :alchemy_cells_page_id_fkey
341
- end
342
-
343
323
  unless foreign_key_exists?(:alchemy_contents, column: :element_id)
344
324
  add_foreign_key :alchemy_contents, :alchemy_elements,
345
325
  column: :element_id,
@@ -355,19 +335,10 @@ class AlchemyFourPointZero < ActiveRecord::Migration[5.0]
355
335
  on_delete: :cascade,
356
336
  name: :alchemy_elements_page_id_fkey
357
337
  end
358
-
359
- unless foreign_key_exists?(:alchemy_elements, column: :cell_id)
360
- add_foreign_key :alchemy_elements, :alchemy_cells,
361
- column: :cell_id,
362
- on_update: :cascade,
363
- on_delete: :cascade,
364
- name: :alchemy_elements_cell_id_fkey
365
- end
366
338
  end
367
339
 
368
340
  def down
369
341
  drop_table(:alchemy_attachments) if table_exists?(:alchemy_attachments)
370
- drop_table(:alchemy_cells) if table_exists?(:alchemy_cells)
371
342
  drop_table(:alchemy_contents) if table_exists?(:alchemy_contents)
372
343
  drop_table(:alchemy_elements) if table_exists?(:alchemy_elements)
373
344
  drop_table(:alchemy_elements_alchemy_pages) if table_exists?(:alchemy_elements_alchemy_pages)