alchemy_cms 4.0.0.beta → 4.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -7
  3. data/CHANGELOG.md +23 -0
  4. data/README.md +1 -1
  5. data/alchemy_cms.gemspec +1 -1
  6. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js.coffee +2 -2
  7. data/app/assets/stylesheets/alchemy/_extends.scss +3 -5
  8. data/app/assets/stylesheets/alchemy/_mixins.scss +1 -1
  9. data/app/assets/stylesheets/alchemy/base.scss +2 -2
  10. data/app/assets/stylesheets/alchemy/buttons.scss +2 -2
  11. data/app/assets/stylesheets/alchemy/dialogs.scss +3 -3
  12. data/app/assets/stylesheets/alchemy/elements.scss +2 -2
  13. data/app/assets/stylesheets/alchemy/image_library.scss +10 -10
  14. data/app/assets/stylesheets/alchemy/jquery.datetimepicker.scss +2 -2
  15. data/app/assets/stylesheets/alchemy/lists.scss +2 -1
  16. data/app/assets/stylesheets/alchemy/sitemap.scss +1 -16
  17. data/app/assets/stylesheets/alchemy/tables.scss +1 -1
  18. data/app/assets/stylesheets/tinymce/skins/alchemy/skin.min.css.scss +4 -4
  19. data/app/controllers/alchemy/admin/attachments_controller.rb +10 -10
  20. data/app/controllers/alchemy/admin/base_controller.rb +10 -19
  21. data/app/controllers/alchemy/admin/clipboard_controller.rb +20 -7
  22. data/app/controllers/alchemy/admin/contents_controller.rb +5 -19
  23. data/app/controllers/alchemy/admin/dashboard_controller.rb +5 -3
  24. data/app/controllers/alchemy/admin/elements_controller.rb +7 -1
  25. data/app/controllers/alchemy/admin/essence_files_controller.rb +2 -2
  26. data/app/controllers/alchemy/admin/essence_pictures_controller.rb +8 -13
  27. data/app/controllers/alchemy/admin/languages_controller.rb +2 -0
  28. data/app/controllers/alchemy/admin/layoutpages_controller.rb +2 -0
  29. data/app/controllers/alchemy/admin/legacy_page_urls_controller.rb +2 -0
  30. data/app/controllers/alchemy/admin/pages_controller.rb +3 -1
  31. data/app/controllers/alchemy/admin/pictures_controller.rb +11 -9
  32. data/app/controllers/alchemy/admin/resources_controller.rb +25 -4
  33. data/app/controllers/alchemy/admin/sites_controller.rb +2 -0
  34. data/app/controllers/alchemy/admin/tags_controller.rb +2 -0
  35. data/app/controllers/alchemy/admin/trash_controller.rb +2 -0
  36. data/app/controllers/alchemy/api/base_controller.rb +2 -0
  37. data/app/controllers/alchemy/api/contents_controller.rb +2 -0
  38. data/app/controllers/alchemy/api/elements_controller.rb +2 -0
  39. data/app/controllers/alchemy/api/pages_controller.rb +2 -0
  40. data/app/controllers/alchemy/attachments_controller.rb +2 -0
  41. data/app/controllers/alchemy/base_controller.rb +3 -1
  42. data/app/controllers/alchemy/elements_controller.rb +2 -0
  43. data/app/controllers/alchemy/messages_controller.rb +2 -0
  44. data/app/controllers/alchemy/pages_controller.rb +11 -2
  45. data/app/controllers/concerns/alchemy/admin/uploader_responses.rb +2 -0
  46. data/app/controllers/concerns/alchemy/legacy_page_redirects.rb +2 -0
  47. data/app/controllers/concerns/alchemy/locale_redirects.rb +2 -0
  48. data/app/controllers/concerns/alchemy/page_redirects.rb +2 -0
  49. data/app/controllers/concerns/alchemy/site_redirects.rb +2 -0
  50. data/app/helpers/alchemy/admin/attachments_helper.rb +2 -0
  51. data/app/helpers/alchemy/admin/base_helper.rb +2 -28
  52. data/app/helpers/alchemy/admin/contents_helper.rb +2 -0
  53. data/app/helpers/alchemy/admin/elements_helper.rb +2 -0
  54. data/app/helpers/alchemy/admin/essences_helper.rb +2 -0
  55. data/app/helpers/alchemy/admin/form_helper.rb +2 -0
  56. data/app/helpers/alchemy/admin/navigation_helper.rb +2 -0
  57. data/app/helpers/alchemy/admin/pages_helper.rb +2 -0
  58. data/app/helpers/alchemy/admin/pictures_helper.rb +2 -0
  59. data/app/helpers/alchemy/admin/tags_helper.rb +24 -76
  60. data/app/helpers/alchemy/base_helper.rb +2 -0
  61. data/app/helpers/alchemy/deprecated_pages_helper.rb +2 -0
  62. data/app/helpers/alchemy/elements_block_helper.rb +2 -0
  63. data/app/helpers/alchemy/elements_helper.rb +2 -0
  64. data/app/helpers/alchemy/essences_helper.rb +2 -0
  65. data/app/helpers/alchemy/pages_helper.rb +2 -0
  66. data/app/helpers/alchemy/url_helper.rb +2 -0
  67. data/app/mailers/alchemy/base_mailer.rb +2 -0
  68. data/app/mailers/alchemy/messages_mailer.rb +2 -0
  69. data/app/models/alchemy.rb +2 -0
  70. data/app/models/alchemy/attachment.rb +6 -4
  71. data/app/models/alchemy/cell.rb +4 -2
  72. data/app/models/alchemy/content.rb +7 -5
  73. data/app/models/alchemy/content/factory.rb +7 -7
  74. data/app/models/alchemy/element.rb +21 -28
  75. data/app/models/alchemy/element/definitions.rb +4 -2
  76. data/app/models/alchemy/element/element_contents.rb +3 -1
  77. data/app/models/alchemy/element/element_essences.rb +2 -0
  78. data/app/models/alchemy/element/presenters.rb +2 -0
  79. data/app/models/alchemy/element_to_page.rb +2 -0
  80. data/app/models/alchemy/essence_boolean.rb +2 -0
  81. data/app/models/alchemy/essence_date.rb +2 -0
  82. data/app/models/alchemy/essence_file.rb +2 -0
  83. data/app/models/alchemy/essence_html.rb +2 -0
  84. data/app/models/alchemy/essence_link.rb +6 -4
  85. data/app/models/alchemy/essence_picture.rb +13 -11
  86. data/app/models/alchemy/essence_picture_view.rb +2 -0
  87. data/app/models/alchemy/essence_richtext.rb +2 -0
  88. data/app/models/alchemy/essence_select.rb +3 -1
  89. data/app/models/alchemy/essence_text.rb +6 -4
  90. data/app/models/alchemy/folded_page.rb +4 -2
  91. data/app/models/alchemy/language.rb +9 -6
  92. data/app/models/alchemy/language/code.rb +2 -0
  93. data/app/models/alchemy/legacy_page_url.rb +3 -1
  94. data/app/models/alchemy/message.rb +2 -0
  95. data/app/models/alchemy/page.rb +3 -2
  96. data/app/models/alchemy/page/fixed_attributes.rb +2 -0
  97. data/app/models/alchemy/page/page_cells.rb +2 -0
  98. data/app/models/alchemy/page/page_elements.rb +3 -1
  99. data/app/models/alchemy/page/page_naming.rb +2 -0
  100. data/app/models/alchemy/page/page_natures.rb +2 -1
  101. data/app/models/alchemy/page/page_scopes.rb +2 -0
  102. data/app/models/alchemy/page/page_users.rb +2 -0
  103. data/app/models/alchemy/picture.rb +2 -0
  104. data/app/models/alchemy/picture/transformations.rb +2 -0
  105. data/app/models/alchemy/picture/url.rb +2 -0
  106. data/app/models/alchemy/site.rb +4 -2
  107. data/app/models/alchemy/site/layout.rb +2 -0
  108. data/app/models/alchemy/tag.rb +5 -2
  109. data/app/models/alchemy/tree_node.rb +2 -0
  110. data/app/serializers/alchemy/attachment_serializer.rb +2 -0
  111. data/app/serializers/alchemy/base_serializer.rb +2 -0
  112. data/app/serializers/alchemy/cell_serializer.rb +2 -0
  113. data/app/serializers/alchemy/content_serializer.rb +2 -0
  114. data/app/serializers/alchemy/element_serializer.rb +2 -0
  115. data/app/serializers/alchemy/essence_boolean_serializer.rb +2 -0
  116. data/app/serializers/alchemy/essence_date_serializer.rb +2 -0
  117. data/app/serializers/alchemy/essence_file_serializer.rb +2 -0
  118. data/app/serializers/alchemy/essence_html_serializer.rb +2 -0
  119. data/app/serializers/alchemy/essence_link_serializer.rb +2 -0
  120. data/app/serializers/alchemy/essence_picture_serializer.rb +2 -0
  121. data/app/serializers/alchemy/essence_richtext_serializer.rb +2 -0
  122. data/app/serializers/alchemy/essence_select_serializer.rb +2 -0
  123. data/app/serializers/alchemy/essence_text_serializer.rb +2 -0
  124. data/app/serializers/alchemy/legacy_element_serializer.rb +2 -0
  125. data/app/serializers/alchemy/page_serializer.rb +2 -0
  126. data/app/serializers/alchemy/page_tree_serializer.rb +2 -0
  127. data/app/serializers/alchemy/picture_serializer.rb +2 -0
  128. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +1 -1
  129. data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +1 -1
  130. data/app/views/alchemy/admin/attachments/_filter_bar.html.erb +1 -3
  131. data/app/views/alchemy/admin/attachments/_tag_list.html.erb +1 -1
  132. data/app/views/alchemy/admin/contents/_missing.html.erb +1 -1
  133. data/app/views/alchemy/admin/contents/create.js.erb +9 -13
  134. data/app/views/alchemy/admin/contents/new.html.erb +1 -1
  135. data/app/views/alchemy/admin/elements/_picture_gallery_editor.html.erb +4 -4
  136. data/app/views/alchemy/admin/essence_files/assign.js.erb +1 -1
  137. data/app/views/alchemy/admin/essence_pictures/assign.js.erb +1 -1
  138. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +1 -1
  139. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +10 -7
  140. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +8 -6
  141. data/app/views/alchemy/admin/essence_pictures/update.js.erb +1 -1
  142. data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +2 -2
  143. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +4 -4
  144. data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +1 -3
  145. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +1 -1
  146. data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +1 -1
  147. data/app/views/alchemy/admin/pictures/_tag_list.html.erb +1 -1
  148. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +1 -3
  149. data/app/views/alchemy/admin/resources/_tag_list.html.erb +1 -1
  150. data/app/views/alchemy/admin/uploader/_button.html.erb +1 -1
  151. data/app/views/alchemy/essences/_essence_file_editor.html.erb +2 -2
  152. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +2 -2
  153. data/app/views/alchemy/essences/shared/_essence_picture_tools.html.erb +3 -3
  154. data/app/views/alchemy/navigation/_renderer.html.erb +1 -2
  155. data/config/brakeman.ignore +65 -0
  156. data/db/migrate/20130827094554_alchemy_two_point_six.rb +1 -1
  157. data/db/migrate/20130828121054_remove_do_not_index_from_alchemy_essence_texts.rb +1 -1
  158. data/db/migrate/20130828121120_remove_do_not_index_from_alchemy_essence_richtexts.rb +1 -1
  159. data/db/migrate/20130918201742_add_published_at_to_alchemy_pages.rb +1 -1
  160. data/db/migrate/20150608204610_add_parent_element_id_to_alchemy_elements.rb +1 -1
  161. data/db/migrate/20150729151825_add_link_text_to_alchemy_essence_files.rb +1 -1
  162. data/db/migrate/20150906195818_add_locale_to_alchemy_languages.rb +1 -1
  163. data/db/migrate/20160108174834_add_timebased_publishing_columns_to_pages.rb +1 -1
  164. data/db/migrate/20160422195310_add_image_file_format_to_alchemy_pictures.rb +1 -1
  165. data/db/migrate/20160617224938_change_alchemy_pages_locked_to_locked_at.rb +1 -1
  166. data/db/migrate/20160912223112_add_index_to_alchemy_pages_rgt.rb +1 -1
  167. data/db/migrate/20160927205604_add_foreign_key_indices_and_null_constraints.rb +1 -1
  168. data/db/migrate/20160928080104_add_foreign_keys.rb +1 -1
  169. data/lib/alchemy/ability_helper.rb +2 -0
  170. data/lib/alchemy/admin/locale.rb +2 -0
  171. data/lib/alchemy/auth_accessors.rb +2 -0
  172. data/lib/alchemy/cache_digests/template_tracker.rb +2 -0
  173. data/lib/alchemy/config.rb +2 -0
  174. data/lib/alchemy/configuration_methods.rb +2 -0
  175. data/lib/alchemy/controller_actions.rb +2 -0
  176. data/lib/alchemy/deprecation.rb +3 -0
  177. data/lib/alchemy/errors.rb +2 -0
  178. data/lib/alchemy/essence.rb +2 -0
  179. data/lib/alchemy/filetypes.rb +2 -0
  180. data/lib/alchemy/forms/builder.rb +2 -0
  181. data/lib/alchemy/hints.rb +2 -0
  182. data/lib/alchemy/i18n.rb +2 -0
  183. data/lib/alchemy/logger.rb +2 -0
  184. data/lib/alchemy/modules.rb +2 -0
  185. data/lib/alchemy/name_conversions.rb +2 -0
  186. data/lib/alchemy/on_page_layout.rb +2 -0
  187. data/lib/alchemy/on_page_layout/callbacks_runner.rb +2 -0
  188. data/lib/alchemy/page_layout.rb +3 -1
  189. data/lib/alchemy/paths.rb +2 -0
  190. data/lib/alchemy/permissions.rb +2 -0
  191. data/lib/alchemy/picture_attributes.rb +2 -0
  192. data/lib/alchemy/resource.rb +2 -0
  193. data/lib/alchemy/resources_helper.rb +14 -12
  194. data/lib/alchemy/routing_constraints.rb +2 -0
  195. data/lib/alchemy/ssl_protection.rb +2 -0
  196. data/lib/alchemy/test_support/controller_requests.rb +20 -0
  197. data/lib/alchemy/test_support/essence_shared_examples.rb +3 -21
  198. data/lib/alchemy/tinymce.rb +2 -0
  199. data/lib/alchemy/touching.rb +2 -0
  200. data/lib/alchemy/upgrader/three_point_four.rb +20 -3
  201. data/lib/alchemy/userstamp.rb +2 -0
  202. data/lib/alchemy/version.rb +3 -1
  203. data/lib/alchemy_cms.rb +1 -0
  204. data/lib/tasks/alchemy/upgrade.rake +5 -1
  205. metadata +7 -5
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  # This concern can extend classes that expose image_file, image_file_width and image_file_height.
3
5
  # It provides methods for cropping and resizing.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  module Picture::Url
3
5
  TRANSFORMATION_OPTIONS = [
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # == Schema Information
2
4
  #
3
5
  # Table name: alchemy_sites
4
6
  #
5
7
  # id :integer not null, primary key
6
- # host :string(255)
7
- # name :string(255)
8
+ # host :string
9
+ # name :string
8
10
  # created_at :datetime not null
9
11
  # updated_at :datetime not null
10
12
  # public :boolean default(FALSE)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  module Site::Layout
3
5
  extend ActiveSupport::Concern
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # == Schema Information
2
4
  #
3
5
  # Table name: tags
4
6
  #
5
- # id :integer not null, primary key
6
- # name :string(255)
7
+ # id :integer not null, primary key
8
+ # name :string
9
+ # taggings_count :integer default(0)
7
10
  #
8
11
 
9
12
  # Just holds some useful tag methods.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Represents a node in the admin page tree
2
4
  #
3
5
  # Used by page reorder
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class AttachmentSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class BaseSerializer
3
5
  include ActiveModel::Serializers::JSON
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class CellSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class ContentSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class ElementSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class EssenceBooleanSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class EssenceDateSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class EssenceFileSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class EssenceHtmlSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class EssenceLinkSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class EssencePictureSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class EssenceRichtextSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class EssenceSelectSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class EssenceTextSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class LegacyElementSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class PageSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class PageTreeSerializer < BaseSerializer
3
5
  def attributes
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alchemy
2
4
  class PictureSerializer < ActiveModel::Serializer
3
5
  self.root = false
@@ -8,7 +8,7 @@
8
8
  redirect_url: admin_attachments_path(
9
9
  element_id: @element.try(:id),
10
10
  content_id: @content.try(:id),
11
- options: @options ? @options.to_json : nil
11
+ options: options_from_params
12
12
  ) %>
13
13
  <% end %>
14
14
  <%= render 'alchemy/admin/partials/remote_search_form' %>
@@ -2,7 +2,7 @@
2
2
  <%= link_to alchemy.assign_admin_essence_files_path(
3
3
  attachment_id: file_to_assign.id,
4
4
  content_id: @content.id,
5
- options: @options.to_json
5
+ options: options_from_params
6
6
  ),
7
7
  remote: true,
8
8
  method: 'put' do %>
@@ -1,5 +1,3 @@
1
- <% params_to_keep = [:tagged_with, :q, :content_id, :options] %>
2
-
3
1
  <div id="filter_bar">
4
2
  <h2><%= Alchemy.t('Filter') %></h2>
5
3
  <%= select_tag(
@@ -18,7 +16,7 @@
18
16
  $(function() {
19
17
  $('#file_type_filter').on('change', function(e) {
20
18
  var $this = $(this);
21
- var url = '<%= alchemy.admin_attachments_path(merge_params_only(params_to_keep)).html_safe %>';
19
+ var url = '<%= alchemy.admin_attachments_path(search_filter_params.except(:file_type).to_h) %>';
22
20
  if ($this.data('remote') === true) {
23
21
  $.get(url, {file_type: $this.val()}, null, 'script');
24
22
  } else {
@@ -7,7 +7,7 @@
7
7
  <% if params[:tagged_with].present? %>
8
8
  <%= link_to(
9
9
  render_icon('delete-small') + Alchemy.t('Remove tag filter'),
10
- url_for(tag_list_params.delete_if { |k, v| k == "tagged_with" }.merge(action: 'index')),
10
+ url_for(search_filter_params.except(:tagged_with)),
11
11
  remote: request.xhr?,
12
12
  class: 'button small with_icon please_wait'
13
13
  ) %>
@@ -9,7 +9,7 @@
9
9
  name: name
10
10
  },
11
11
  was_missing: true,
12
- options: options.to_json
12
+ options: options
13
13
  ),
14
14
  'data-create-missing-content' => true,
15
15
  class: 'small button' %>
@@ -1,20 +1,16 @@
1
+ var editor_html = '<%= j(render "alchemy/essences/#{@content.essence_partial_name}_editor", {
2
+ content: @content,
3
+ options: options_from_params.symbolize_keys,
4
+ html_options: @html_options.symbolize_keys
5
+ }) %>';
6
+
1
7
  <% if params[:was_missing] %>
2
8
 
3
- $("[data-element-<%= @element.id %>-missing-content=\"<%= @content.name %>\"]").replaceWith('<%= j(
4
- render(
5
- partial: "alchemy/essences/#{@content.essence_partial_name}_editor",
6
- locals: @locals
7
- )
8
- ) %>');
9
+ $("[data-element-<%= @element.id %>-missing-content=\"<%= @content.name %>\"]").replaceWith(editor_html);
9
10
 
10
11
  <% else %>
11
12
 
12
- $("<%= @content_dom_id %>").before('<%= j(
13
- render(
14
- partial: "alchemy/essences/#{@content.essence_partial_name}_editor",
15
- locals: @locals
16
- )
17
- ) %>');
13
+ $("<%= @content_dom_id %>").before(editor_html);
18
14
  Alchemy.Buttons.enable();
19
15
  Alchemy.growl('<%= j Alchemy.t("Successfully added content") % {content: @content.name_for_label} %>')
20
16
 
@@ -29,7 +25,7 @@ $('#picture_to_assign_<%= @content.ingredient.id %> a').attr('href', '#').off('c
29
25
  <% if @gallery_pictures %>
30
26
 
31
27
  <% if @gallery_pictures.size > 1 %>
32
- $('#element_<%= @element.id %>_contents .essence_picture_editor').addClass('dragable_picture');
28
+ $('#element_<%= @element.id %>_contents .essence_picture_editor').addClass('draggable_picture');
33
29
  <% end %>
34
30
 
35
31
  <% if !max_image_count.blank? && @gallery_pictures.size >= max_image_count %>
@@ -1,6 +1,6 @@
1
1
  <%= alchemy_form_for [:admin, @content] do |f| %>
2
2
  <%= f.hidden_field :element_id %>
3
- <%= hidden_field_tag('options', @options.to_json) %>
3
+ <%= hidden_field_tag('options', options_from_params) %>
4
4
  <%= f.input :name, collection: @contents.map { |content|
5
5
  [
6
6
  Alchemy.t(content['name'], scope: 'content_names', default: content['name'].humanize),
@@ -1,23 +1,23 @@
1
+ <% sortable = pictures.size > 1 %>
1
2
  <%- max_image_count = options[:maximum_amount_of_images] || options[:max_images] -%>
2
3
  <div class="content_editor picture_gallery_editor">
3
4
  <label><%= Alchemy.t("picture_gallery_editor.#{element.name}", default: Alchemy.t(:picture_gallery_editor)) %></label>
4
5
  <div class="picture_gallery_images" id="element_<%= element.id %>_contents">
5
6
  <%- pictures.each do |picture| -%>
6
- <%= render_essence_editor(picture, {dragable: (pictures.size > 1)}.merge(options)) %>
7
+ <%= render_essence_editor(picture, {sortable: sortable}.merge(options)) %>
7
8
  <%- end -%>
8
9
  <%- if max_image_count.blank? || pictures.length < max_image_count.to_i -%>
9
10
  <%= render(
10
11
  partial: 'alchemy/admin/elements/add_picture',
11
12
  locals: {
12
13
  element: element,
13
- options: options,
14
- dragable: (pictures.size > 1)
14
+ options: options
15
15
  }
16
16
  ) %>
17
17
  <%- end -%>
18
18
  </div>
19
19
  </div>
20
- <%- if pictures.size > 1 -%>
20
+ <%- if sortable -%>
21
21
  <script type="text/javascript" charset="utf-8">
22
22
  Alchemy.SortableContents('#element_<%= element.id %>_contents', '<%= form_authenticity_token %>');
23
23
  </script>
@@ -2,7 +2,7 @@ $('#<%= @content.dom_id %>').replaceWith('<%= j(
2
2
  render "alchemy/essences/essence_file_editor",
3
3
  formats: [:html],
4
4
  content: @content,
5
- options: @options
5
+ options: options_from_params
6
6
  ) %>');
7
7
  Alchemy.closeCurrentDialog();
8
8
  Alchemy.setElementDirty($('#element_<%= @content.element.id %>'));
@@ -3,7 +3,7 @@ $('#<%= @content.dom_id -%>').replaceWith('<%= j(
3
3
  render(
4
4
  "alchemy/essences/essence_picture_editor",
5
5
  content: @content,
6
- options: @options
6
+ options: options_from_params
7
7
  )
8
8
  ) %>');
9
9
 
@@ -12,7 +12,7 @@
12
12
  </div>
13
13
  <%= form_for(
14
14
  @essence_picture,
15
- url: alchemy.admin_essence_picture_path(@essence_picture, options: @options.to_json),
15
+ url: alchemy.admin_essence_picture_path(@essence_picture, options: options_from_params),
16
16
  id: 'image_cropper_form',
17
17
  remote: true
18
18
  ) do |f| %>
@@ -1,23 +1,26 @@
1
1
  (function() {
2
- var $picture_editor;
2
+ var $picture_editor = $('#element_<%= @element.id %>_contents');
3
3
 
4
4
  $('#essence_picture_<%= @content_id %>').remove();
5
5
 
6
- <% if max_image_count.present? && @essence_pictures.count < max_image_count.to_i -%>
7
-
8
- $picture_editor = $('#element_<%= @element.id %>_contents');
6
+ <% if max_image_count.present? && @essence_pictures.size < max_image_count.to_i -%>
9
7
 
10
8
  if ($('div.add_picture', $picture_editor).length === 0) {
11
- $('#element_<%= @element.id %>_contents').append('<%= j(
9
+ $picture_editor.append('<%= j(
12
10
  render "alchemy/admin/elements/add_picture",
13
11
  element: @element,
14
- options: @options
12
+ options: options_from_params
15
13
  ) %>');
16
14
  }
17
15
 
18
16
  <% end -%>
19
17
 
20
- Alchemy.SortableContents('#element_<%= @element.id %>_contents', '<%= form_authenticity_token %>');
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 %>
21
24
  Alchemy.reloadPreview();
22
25
  Alchemy.pleaseWaitOverlay(false);
23
26
 
@@ -1,18 +1,20 @@
1
1
  <%= alchemy_form_for @essence_picture,
2
- url: alchemy.admin_essence_picture_path(@essence_picture, options: @options.to_json) do |f| %>
2
+ url: alchemy.admin_essence_picture_path(@essence_picture, options: options_from_params) do |f| %>
3
3
  <%= hidden_field_tag 'content_id', @content.id %>
4
- <%= f.input :caption, as: @options[:caption_as_textarea] ? 'text' : 'string' %>
4
+ <%= f.input :caption, as: options_from_params[:caption_as_textarea] ? 'text' : 'string' %>
5
5
  <%= f.input :title %>
6
6
  <%= f.input :alt_tag %>
7
- <%- if @options[:sizes].present? -%>
7
+ <%- if options_from_params[:sizes].present? -%>
8
8
  <%= f.input :render_size,
9
- collection: [[Alchemy.t('Layout default'), @options[:size]]] + @options[:sizes].to_a,
9
+ collection: [
10
+ [Alchemy.t('Layout default'), options_from_params[:size]]
11
+ ] + options_from_params[:sizes].to_a,
10
12
  include_blank: false,
11
13
  input_html: {class: 'alchemy_selectbox'} %>
12
14
  <%- end -%>
13
- <%- if @options[:css_classes].present? -%>
15
+ <%- if options_from_params[:css_classes].present? -%>
14
16
  <%= f.input :css_class,
15
- collection: @options[:css_classes],
17
+ collection: options_from_params[:css_classes],
16
18
  include_blank: Alchemy.t('None'),
17
19
  input_html: {class: 'alchemy_selectbox'} %>
18
20
  <%- else -%>
@@ -3,7 +3,7 @@
3
3
  Alchemy.closeCurrentDialog();
4
4
  Alchemy.setElementDirty('#element_<%= @content.element.id %>');
5
5
  <% if @content.ingredient %>
6
- $('.thumbnail_background img', '#<%= @content.dom_id %>').replaceWith('<%= essence_picture_thumbnail(@content, @options) %>');
6
+ $('.thumbnail_background img', '#<%= @content.dom_id %>').replaceWith('<%= essence_picture_thumbnail(@content, options_from_params) %>');
7
7
  Alchemy.ImageLoader('#<%= @content.dom_id %> .thumbnail_background');
8
8
  <% end %>
9
9
  })(jQuery);
@@ -1,6 +1,6 @@
1
1
  <%= search_form_for @query, url: url_for(
2
2
  action: 'index',
3
- options: @options.to_json,
3
+ options: options_from_params,
4
4
  size: @size
5
5
  ), remote: true, html: {class: 'search_form', id: nil} do |f| %>
6
6
  <%= hidden_field_tag("element_id", @element.blank? ? "" : @element.id) %>
@@ -15,7 +15,7 @@
15
15
  action: 'index',
16
16
  element_id: @element.blank? ? '' : @element.id,
17
17
  content_id: @content.blank? ? '' : @content.id,
18
- options: @options.to_json,
18
+ options: options_from_params,
19
19
  size: @size,
20
20
  overlay: true
21
21
  ),
@@ -10,7 +10,7 @@
10
10
  filter: 'last_upload',
11
11
  content_id: @content.try(:id),
12
12
  element_id: @element.try(:id),
13
- options: @options
13
+ options: options_from_params
14
14
  ) %>
15
15
  <div class="toolbar_spacer"></div>
16
16
  <% end %>
@@ -23,7 +23,7 @@
23
23
  content_id: @content,
24
24
  element_id: @element,
25
25
  q: params[:q],
26
- options: @options.to_json,
26
+ options: options_from_params,
27
27
  filter: params[:filter],
28
28
  tagged_with: params[:tagged_with]
29
29
  }),
@@ -40,7 +40,7 @@
40
40
  content_id: @content,
41
41
  element_id: @element,
42
42
  q: params[:q],
43
- options: @options.to_json,
43
+ options: options_from_params,
44
44
  filter: params[:filter],
45
45
  tagged_with: params[:tagged_with]
46
46
  }),
@@ -57,7 +57,7 @@
57
57
  content_id: @content,
58
58
  element_id: @element,
59
59
  q: params[:q],
60
- options: @options.to_json,
60
+ options: options_from_params,
61
61
  filter: params[:filter],
62
62
  tagged_with: params[:tagged_with]
63
63
  }),