alchemy_cms 2.2.rc13 → 2.2.rc14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/Rakefile +3 -0
  2. data/alchemy_cms.gemspec +1 -0
  3. data/app/assets/javascripts/alchemy/alchemy.base.js +95 -94
  4. data/app/assets/javascripts/alchemy/alchemy.buttons.js +15 -11
  5. data/app/assets/javascripts/alchemy/alchemy.datepicker.js +18 -18
  6. data/app/assets/javascripts/alchemy/alchemy.dirty.js +20 -20
  7. data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +50 -44
  8. data/app/assets/javascripts/alchemy/alchemy.element_editor_selector.js +15 -12
  9. data/app/assets/javascripts/alchemy/alchemy.elements_window.js +47 -43
  10. data/app/assets/javascripts/alchemy/alchemy.file_progress.js +27 -17
  11. data/app/assets/javascripts/alchemy/alchemy.growler.js +19 -15
  12. data/app/assets/javascripts/alchemy/alchemy.html5.js +1 -2
  13. data/app/assets/javascripts/alchemy/alchemy.image_cropper.js +10 -11
  14. data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +6 -6
  15. data/app/assets/javascripts/alchemy/alchemy.js_extensions.js +4 -6
  16. data/app/assets/javascripts/alchemy/alchemy.menubar.js +16 -20
  17. data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +18 -16
  18. data/app/assets/javascripts/alchemy/alchemy.preview.js +30 -30
  19. data/app/assets/javascripts/alchemy/alchemy.preview_window.js +50 -42
  20. data/app/assets/javascripts/alchemy/alchemy.routes.js.erb +11 -11
  21. data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +83 -86
  22. data/app/assets/javascripts/alchemy/alchemy.uploader.js +106 -112
  23. data/app/assets/javascripts/alchemy/alchemy.windows.js +158 -130
  24. data/app/assets/stylesheets/alchemy/base.css.scss +7 -1
  25. data/app/assets/stylesheets/alchemy/buttons.css.scss +31 -25
  26. data/app/assets/stylesheets/alchemy/elements.css.scss +4 -0
  27. data/app/controllers/alchemy/admin/base_controller.rb +5 -1
  28. data/app/helpers/alchemy/admin/base_helper.rb +21 -13
  29. data/app/helpers/alchemy/admin/contents_helper.rb +52 -11
  30. data/app/helpers/alchemy/admin/elements_helper.rb +0 -1
  31. data/app/helpers/alchemy/admin/essences_helper.rb +5 -5
  32. data/app/helpers/alchemy/essences_helper.rb +1 -0
  33. data/app/models/alchemy/content.rb +102 -91
  34. data/app/models/alchemy/essence_boolean.rb +8 -0
  35. data/app/models/alchemy/essence_select.rb +7 -0
  36. data/app/sweepers/alchemy/content_sweeper.rb +2 -4
  37. data/app/views/alchemy/admin/clipboard/clear.js.erb +3 -2
  38. data/app/views/alchemy/admin/clipboard/index.html.erb +2 -2
  39. data/app/views/alchemy/admin/contents/create.js.erb +2 -0
  40. data/app/views/alchemy/admin/contents/destroy.js.coffee +4 -0
  41. data/app/views/alchemy/admin/contents/new.html.erb +1 -1
  42. data/app/views/alchemy/admin/elements/_element_foot.html.erb +3 -2
  43. data/app/views/alchemy/admin/elements/create.js.coffee +31 -0
  44. data/app/views/alchemy/admin/elements/fold.js.coffee +37 -0
  45. data/app/views/alchemy/admin/essence_pictures/assign.js.coffee +15 -0
  46. data/app/views/alchemy/admin/essence_pictures/destroy.js.coffee +19 -0
  47. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +12 -2
  48. data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +1 -1
  49. data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
  50. data/app/views/alchemy/admin/pages/destroy.js.coffee +19 -0
  51. data/app/views/alchemy/admin/pages/edit.html.erb +5 -5
  52. data/app/views/alchemy/admin/pages/update.js.coffee +36 -0
  53. data/app/views/alchemy/admin/resources/_form.html.erb +12 -1
  54. data/app/views/alchemy/admin/resources/_resource.html.erb +6 -3
  55. data/app/views/alchemy/admin/resources/_table.html.erb +1 -1
  56. data/app/views/alchemy/admin/trash/clear.js.coffee +4 -0
  57. data/app/views/alchemy/admin/trash/index.html.erb +4 -4
  58. data/app/views/alchemy/elements/_article_editor.html.erb +4 -2
  59. data/app/views/alchemy/elements/_article_view.html.erb +7 -7
  60. data/app/views/alchemy/elements/_download_editor.html.erb +4 -1
  61. data/app/views/alchemy/elements/_download_view.html.erb +7 -3
  62. data/app/views/alchemy/elements/_image_mosaic_editor.html.erb +1 -0
  63. data/app/views/alchemy/elements/_image_mosaic_view.html.erb +11 -9
  64. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +14 -0
  65. data/app/views/alchemy/essences/_essence_boolean_view.html.erb +1 -0
  66. data/app/views/alchemy/essences/_essence_date_editor.html.erb +1 -1
  67. data/app/views/alchemy/essences/_essence_file_editor.html.erb +1 -0
  68. data/app/views/alchemy/essences/_essence_html_editor.html.erb +1 -1
  69. data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +1 -1
  70. data/app/views/alchemy/essences/_essence_select_editor.html.erb +35 -0
  71. data/app/views/alchemy/essences/_essence_select_view.html.erb +1 -0
  72. data/app/views/alchemy/essences/_essence_text_editor.html.erb +29 -77
  73. data/app/views/alchemy/essences/_essence_text_view.html.erb +2 -2
  74. data/config/alchemy/elements.yml +72 -44
  75. data/config/locales/alchemy.de.yml +46 -45
  76. data/config/locales/alchemy.en.yml +90 -89
  77. data/db/migrate/20120608085509_create_alchemy_essence_selects.rb +11 -0
  78. data/db/migrate/20120611221734_create_alchemy_essence_booleans.rb +11 -0
  79. data/lib/alchemy/authentication_helpers.rb +3 -7
  80. data/lib/alchemy/engine.rb +3 -4
  81. data/lib/alchemy/essence.rb +24 -16
  82. data/lib/alchemy/resource.rb +22 -3
  83. data/lib/alchemy/resources_helper.rb +8 -0
  84. data/lib/alchemy/seeder.rb +26 -1
  85. data/lib/alchemy/upgrader.rb +70 -1
  86. data/lib/alchemy/version.rb +1 -1
  87. data/lib/alchemy_cms.rb +1 -0
  88. data/spec/controllers/admin/clipboard_controller_spec.rb +16 -4
  89. data/spec/controllers/admin/contents_controller_spec.rb +21 -4
  90. data/spec/dummy/app/models/event.rb +1 -1
  91. data/spec/dummy/db/schema.rb +18 -1
  92. data/spec/helpers/admin/contents_helper_spec.rb +3 -2
  93. data/spec/models/clipboard_spec.rb +14 -3
  94. data/spec/models/essence_boolean_spec.rb +15 -0
  95. data/spec/models/essence_select_spec.rb +15 -0
  96. data/spec/models/resource_spec.rb +113 -0
  97. metadata +40 -12
  98. data/app/views/alchemy/admin/contents/destroy.js.erb +0 -7
  99. data/app/views/alchemy/admin/elements/create.js.erb +0 -36
  100. data/app/views/alchemy/admin/elements/fold.js.erb +0 -41
  101. data/app/views/alchemy/admin/essence_pictures/assign.js.erb +0 -16
  102. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +0 -20
  103. data/app/views/alchemy/admin/pages/destroy.js.erb +0 -12
  104. data/app/views/alchemy/admin/pages/update.js.erb +0 -40
  105. data/app/views/alchemy/admin/trash/clear.js.erb +0 -3
  106. data/spec/dummy/app/models/.gitkeep +0 -0
@@ -1 +1,4 @@
1
- <%= render_essence_editor_by_name(element, 'file') %>
1
+ <% element.contents.each do |content| %>
2
+ <%= render_essence_editor(content) %>
3
+ <% end %>
4
+ <%= render_create_content_link(element, 'file') %>
@@ -1,3 +1,7 @@
1
- <div class="download" <%= element_preview_code(element) -%>>
2
- <%= render_essence_view_by_name(element, 'file') %>
3
- </div>
1
+ <div class="downloads" <%= element_preview_code(element) %>>
2
+ <% element.contents.each do |content| %>
3
+ <div class="download">
4
+ <%= render_essence(content) %>
5
+ </div>
6
+ <% end %>
7
+ </div>
@@ -1,2 +1,3 @@
1
1
  <%= render_picture_editor(element, :image_size => '300x200', :crop => true) %>
2
2
  <%= render_essence_editor_by_name(element, 'caption') %>
3
+ <%= render_essence_editor_by_name(element, 'show_caption', :default_value => true) %>
@@ -1,12 +1,14 @@
1
1
  <div class="image_mosaic" id="<%= element_dom_id(element) %>" <%= element_preview_code(element) -%>>
2
- <div class="image_mosaic_images">
3
- <%- element.contents.find_all_by_essence_type("Alchemy::EssencePicture").each do |essence| -%>
4
- <div class="image_mosaic_image">
5
- <%= render_essence_view(essence, :image_size => '300x200', :crop => true) %>
6
- </div>
7
- <%- end -%>
8
- </div>
9
- <div class="caption">
10
- <%= render_essence_view_by_name(element, 'caption') %>
2
+ <div class="image_mosaic_images">
3
+ <%- element.contents.find_all_by_essence_type("Alchemy::EssencePicture").each do |essence| -%>
4
+ <div class="image_mosaic_image">
5
+ <%= render_essence_view(essence, :image_size => '300x200', :crop => true) %>
11
6
  </div>
7
+ <%- end -%>
8
+ </div>
9
+ <% if element.ingredient(:show_caption) %>
10
+ <div class="caption">
11
+ <%= render_essence_view_by_name(element, 'caption') %>
12
+ </div>
13
+ <% end %>
12
14
  </div>
@@ -0,0 +1,14 @@
1
+ <% cache(content) do %>
2
+ <div class="content_editor essence_boolean" id="<%= content_dom_id(content) %>">
3
+ <%= check_box_tag(content.form_field_name, 1,
4
+ !content.ingredient.nil? ? content.ingredient : options[:default_value],
5
+ :onclick => "Alchemy.handleEssenceCheckbox(this)",
6
+ :class => html_options[:class],
7
+ :style => html_options[:style]
8
+ ) %>
9
+ <label for="<%= content.form_field_id %>" style="display: inline">
10
+ <%= render_content_name(content) %>
11
+ <%= delete_content_link(content) %>
12
+ </label>
13
+ </div>
14
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= t(content.ingredient) %>
@@ -1,5 +1,5 @@
1
1
  <div class="content_editor essence_date" id="<%= content_dom_id(content) %>">
2
- <label><%= render_content_name(content) %></label>
2
+ <%= label_and_remove_link(content) %>
3
3
  <%= alchemy_datepicker(
4
4
  content.essence, :date, {
5
5
  :name => content.form_field_name,
@@ -1,6 +1,7 @@
1
1
  <div class="content_editor" id="<%= content_dom_id(content) %>">
2
2
  <label style="display: inline">
3
3
  <%= render_content_name(content) %>
4
+ <%= delete_content_link(content) %>
4
5
  </label>
5
6
  <div class="file" id="file_<%= content.id %>">
6
7
  <div class="file_icon">
@@ -1,5 +1,5 @@
1
1
  <div class="content_editor content_text_editor"<%= " style=\"float: left;\"" if options[:css_class] == "text_short" %>>
2
- <label><%= render_content_name(content) %></label>
2
+ <%= label_and_remove_link(content) %>
3
3
  <%= text_field_tag(
4
4
  content.form_field_name,
5
5
  content.ingredient,
@@ -1,6 +1,6 @@
1
1
  <% cache(content) do -%>
2
2
  <div class="content_editor content_rtf_editor" id="<%= content_dom_id(content) %>">
3
- <label><%= render_content_name(content) %></label>
3
+ <%= label_and_remove_link(content) %>
4
4
  <div style="position: relative">
5
5
  <% if content.has_custom_tinymce_config? && content.settings[:tinymce] -%>
6
6
  <div class="essence_richtext_loader">
@@ -0,0 +1,35 @@
1
+ <% cache(content) do %>
2
+ <div class="content_editor<%= options[:display_inline].to_s == 'true' ? ' display_inline' : '' %>" id="<%= content_dom_id(content) %>">
3
+
4
+ <%= label_and_remove_link(content) %>
5
+
6
+ <% if options[:select_values].nil? %>
7
+
8
+ <%= warning('options[:select_values] is nil', "No select values given. Please provide :select_values as argument to render_essence_editor_by_name() helper inside this element editor view.") %>
9
+
10
+ <% else %>
11
+
12
+ <%
13
+ if options[:select_values].is_a?(Hash)
14
+ options_method = grouped_options_for_select(
15
+ options[:select_values],
16
+ content.ingredient,
17
+ ''
18
+ )
19
+ else
20
+ options_method = options_for_select(
21
+ options[:select_values],
22
+ content.ingredient
23
+ )
24
+ end
25
+ %>
26
+
27
+ <%= select_tag(content.form_field_name, options_method, {
28
+ :class => ["alchemy_selectbox", "essence_editor_select", html_options[:class]].join(' '),
29
+ :style => html_options[:style]
30
+ }) %>
31
+
32
+ <% end %>
33
+
34
+ </div>
35
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= content.ingredient %>
@@ -1,88 +1,40 @@
1
- <%- cache(content) do -%>
2
- <div class="content_editor<%= options[:display_inline].to_s == 'true' ? ' display_inline' : '' %>" id="<%= content_dom_id(content) %>">
1
+ <% cache(content) do %>
2
+ <div class="content_editor<%= options[:display_inline].to_s == 'true' ? ' display_inline' : '' %>" id="<%= content_dom_id(content) %>">
3
3
 
4
- <%- if content.settings[:display_as] == "checkbox" -%>
4
+ <% if content.settings[:display_as].present? %>
5
5
 
6
- <%= check_box_tag(
7
- content.form_field_name,
8
- "1",
9
- content.ingredient == "1",
10
- :onclick => "Alchemy.handleEssenceCheckbox(this)",
11
- :class => html_options[:class],
12
- :style => html_options[:style]
13
- ) %>
14
- <label for="<%= content.form_field_id %>" style="display: inline">
15
- <%= render_content_name(content) %>
16
- </label>
6
+ <%= warning 'The display_as setting is deprecated! Please run rake alchemy:upgrade', 'You are using the display_as setting in your elements.yml. Please run rake alchemy:upgrade' %>
17
7
 
18
- <%- elsif content.settings[:display_as] == "select" -%>
8
+ <% else %>
19
9
 
20
- <label><%= render_content_name(content) %></label>
10
+ <%= label_and_remove_link(content) %>
21
11
 
22
- <%- if options[:select_values].nil? -%>
23
- <%= warning('options[:select_values] is nil', "No select values given. Please provide :select_values as argument to render_essence_editor_by_name() helper inside this element editor view.") %>
24
- <%- else -%>
25
- <%- if options[:select_values].is_a?(Hash)
26
- options_method = grouped_options_for_select(
27
- options[:select_values],
28
- content.ingredient,
29
- ''
30
- )
31
- else
32
- options_method = options_for_select(
33
- options[:select_values],
34
- content.ingredient
35
- )
36
- end
37
- %>
38
- <%= select_tag(
39
- content.form_field_name,
40
- options_method,
41
- {
42
- :class => ["alchemy_selectbox", "essence_editor_select", html_options[:class]].join(' '),
43
- :style => html_options[:style]
44
- }
45
- ) %>
46
- <%- end -%>
12
+ <%= text_field_tag(
13
+ content.form_field_name,
14
+ content.ingredient,
15
+ :class => ["thin_border #{content.settings[:linkable] ? ' text_with_icon' : ''}", html_options[:class]].join(' '),
16
+ :style => html_options[:style]
17
+ ) %>
47
18
 
48
- <%- else -%>
19
+ <% if content.settings[:linkable] %>
49
20
 
50
- <label>
51
- <%= render_content_name(content) %>
52
- <%= link_to_confirmation_window(
53
- render_icon('delete-small'),
54
- t('Do you really want to delete this content?'),
55
- alchemy.admin_content_path(content),
56
- :class => 'icon_button small',
57
- :title => t('Remove this content')
58
- ) if content.settings[:deletable] %>
59
- </label>
60
- <%= text_field_tag(
61
- content.form_field_name,
62
- content.ingredient,
63
- :class => ["thin_border #{content.settings[:linkable] ? ' text_with_icon' : ''}", html_options[:class]].join(' '),
64
- :style => html_options[:style]
65
- ) %>
21
+ <%= hidden_field_tag content.form_field_name(:link), content.essence.link %>
22
+ <%= hidden_field_tag content.form_field_name(:link_title), content.essence.link_title %>
23
+ <%= hidden_field_tag content.form_field_name(:link_class_name), content.essence.link_class_name %>
24
+ <%= hidden_field_tag content.form_field_name(:link_target), content.essence.link_target %>
66
25
 
67
- <%- if content.settings[:linkable] -%>
26
+ <span class="linkable_text_essence_tools">
27
+ <a href="#" onclick="Alchemy.LinkOverlay.open(this, 420); return false;" title="<%= t('place_link') -%>" class="icon_button <%= content.linked? ? ' linked' : '' -%>" name="essence_text_<%= content.id -%>" id="edit_link_<%= content.id -%>">
28
+ <span class="icon link"></span>
29
+ </a>
30
+ <a href="#" onclick="Alchemy.LinkOverlay.removeLink(this, <%= content.id -%>); return false;" title="<%= t('unlink') %>" class="icon_button unlink<%= content.linked? ? ' linked' : ' disabled' -%>" name="essence_text_<%= content.id -%>">
31
+ <span class="icon unlink"></span>
32
+ </a>
33
+ </span>
68
34
 
69
- <%= hidden_field_tag content.form_field_name(:link), content.essence.link %>
70
- <%= hidden_field_tag content.form_field_name(:link_title), content.essence.link_title %>
71
- <%= hidden_field_tag content.form_field_name(:link_class_name), content.essence.link_class_name %>
72
- <%= hidden_field_tag content.form_field_name(:link_target), content.essence.link_target %>
35
+ <% end %>
73
36
 
74
- <span class="linkable_text_essence_tools">
75
- <a href="#" onclick="Alchemy.LinkOverlay.open(this, 420); return false;" title="<%= t('place_link') -%>" class="icon_button <%= content.linked? ? ' linked' : '' -%>" name="essence_text_<%= content.id -%>" id="edit_link_<%= content.id -%>">
76
- <span class="icon link"></span>
77
- </a>
78
- <a href="#" onclick="Alchemy.LinkOverlay.removeLink(this, <%= content.id -%>); return false;" title="<%= t('unlink') %>" class="icon_button unlink<%= content.linked? ? ' linked' : ' disabled' -%>" name="essence_text_<%= content.id -%>">
79
- <span class="icon unlink"></span>
80
- </a>
81
- </span>
37
+ <% end %>
82
38
 
83
- <%- end -%>
84
-
85
- <%- end -%>
86
-
87
- </div>
88
- <%- end -%>
39
+ </div>
40
+ <% end %>
@@ -1,8 +1,8 @@
1
1
  <%- if content.essence.link.blank? || options[:disable_link] -%>
2
- <%= h(content.essence.body) -%>
2
+ <%= content.ingredient -%>
3
3
  <%- else -%>
4
4
  <%= link_to(
5
- h(content.essence.body),
5
+ content.ingredient,
6
6
  url_for(content.essence.link),
7
7
  :title => content.essence.link_title,
8
8
  :target => (content.essence.link_target == "blank" ? "_blank" : nil),
@@ -1,12 +1,12 @@
1
1
  # == In this configuration you setup Alchemy´s element layouts.
2
- #
2
+ #
3
3
  # Use rails generate alchemy:scaffold to generate this file for your app.
4
- #
4
+ #
5
5
  # Elements containing all necessary basic tools for displaying and editing content inside Alchemy.
6
6
  # They consists of composed contents (different essence-types) as shown in the illustration of an elements-sheme below.
7
7
  #
8
8
  # == Schema of an element
9
- #
9
+ #
10
10
  # =================================
11
11
  # # Content 1 (EssenceText) #
12
12
  # # #
@@ -16,7 +16,7 @@
16
16
  # =================================
17
17
  #
18
18
  # == Example of a basic element layout
19
- #
19
+ #
20
20
  # - name: a_unique_name (Used for the partial name in +app/views/elements+ and translated as Element.display_name)
21
21
  # unique: Bool //pass true if this element only can be displayed once on page
22
22
  # contents:
@@ -26,55 +26,61 @@
26
26
  # type: EssenceRichtext
27
27
  #
28
28
  # As already mentioned above, there are different content-types wich can be defined for each content in an element.
29
+ #
29
30
  # Defining these types is used to render predefined views in the element.
30
31
  #
31
32
  # == Content-Types:
32
33
  #
33
34
  # * EssenceText (Used to store a String (max. 255 Chars.) i.e. a headline, or productname. The editor is renderd as a single-lined input field. The view output will be sanitized and escaped. So it's XSS save.)
34
35
  # * EssenceRichtext (Used to store editable richtext. Editor is rendered as a textarea with TinyMCE Editor.)
35
- # * EssencePicture (Used to store picture ids from pictures assigned through the library. The editor is rendered as a picture-editor collection with a lot of options (i.e. image cropper). The view renders the assigned picture, resizes it, crops it and caches the result.)
36
- # * EssenceFlash (Used to store attachment ids from attachments assigned through the library. The view renders an embeded object.)
36
+ # * EssencePicture (Used to store pictures assigned through the library. The editor view provides a lot of options (i.e. image cropper). The view renders the assigned picture, resizes it, crops it and caches the result.)
37
+ # * EssenceFile (Used to store attachments assigned through the library. The view renders download link.)
38
+ # * EssenceAudio (Used to store attachments assigned through the library. The view renders an flash audio player.)
39
+ # * EssenceVideo (Used to store attachments assigned through the library. The view renders an flash video player.)
40
+ # * EssenceFlash (Used to store attachments assigned through the library. The view renders the embeded flash object.)
37
41
  # * EssenceDate (Used to store a DateTime object. The view output is passed through Rails I18n Library, so it will be fully localized.)
38
- # * EssenceHtml (Used to store a String (max. 255 Chars.). The view output renders the raw, not sanitized or unescaped String. So be carefull!)
39
- #
42
+ # * EssenceHtml (Used to store HTML code. The view output renders the raw, not sanitized or unescaped String. So be careful!)
43
+ # * EssenceSelect (Used to store a String (max. 255 Chars.) value. The editor view is displayed as a select box)
44
+ # * EssenceBoolean (Used to store a Boolean (true or false) value. The editor view is displayed as a check box)
45
+ #
40
46
  # After finishing the setup of your element layouts, you need to generate the files for the elements before using them in Alchemy.
47
+ #
41
48
  # For creating these files, use the following command in your terminal:
42
49
  #
50
+ # rails g alchemy:elements
51
+ #
52
+ # or:
43
53
  #
44
- #
45
- # rails generate alchemy:elements
54
+ # rails g alchemy:elements --skip
46
55
  #
56
+ # to skip existing elements
47
57
  #
48
- # or:
49
- #
50
- # rails g alchemy:elements --skip
51
58
  #
52
- #
53
- # to skip existing elements
54
- #
59
+ # All new elements will be created as two different partials in +Rails.root/app/views/elements+.
55
60
  #
56
- # All new elements will be created as two different partials in Rails.root/app/views/elements.
57
61
  # For each element there is an editor-view wich will be rendered when editing them in Alchemy and another view for the website´s frontend.
58
- #
62
+ #
59
63
  # app/views/elements/_elements_name_editor.html.erb
60
64
  # app/views/elements/_elements_name_view.html.erb
61
- #
65
+ #
62
66
  # For most contents in an element you can specify additional options, so they get rendered in a specific way.
63
67
  # These options can be defined as symbols, but its too much to list them up here.
64
68
  # You can find these options described in the application_helper.rb, most of them at the render_essence method.
65
69
  #
66
70
  # == Setting a content as preview-text for the element
67
- #
68
- # You can set a content-essence as preview-text for its element like this
69
- # take_me_for_preview: true
70
71
  #
72
+ # You can set a content-essence as preview-text for its element like this:
73
+ #
74
+ # take_me_for_preview: true
71
75
  #
72
76
  # == Adding contents dynamically in the frontend
73
- #
77
+ #
74
78
  # You are able to add content-essences dynamically to the element from the Alchemy frontend.
79
+ #
75
80
  # You just have to make contents available for adding them.
76
- # This example enables this feature
77
- #
81
+ #
82
+ # === Example:
83
+ #
78
84
  # - name: headline
79
85
  # unique: false
80
86
  # contents:
@@ -86,24 +92,32 @@
86
92
  # - name: big_text
87
93
  # type: EssenceRichtext
88
94
  #
89
- # Now an Alchemy user can add the content 'big_text' from the element as much as desired.
95
+ # And add a +<%= render_create_content_link(element, 'big_text') %>+ helper to your element editor partial.
96
+ #
97
+ # Now an Alchemy user can add as many additional +big_text+ contents as s/he wants.
98
+ #
99
+ # If you have more then one additional content defined you should use the:
100
+ #
101
+ # <%= render_new_content_link(element) %>
102
+ #
103
+ # helper. This opens an overlay from where the user can choose which content to add.
90
104
  #
91
105
  # === Translate element names
92
- #
93
- # Element names are passed through the I18n library. So you can translate them in your config/locales language yml file.
94
- #
95
- # Example:
96
- #
106
+ #
107
+ # Element names are passed through the +I18n+ library. So you can translate them in your config/locales language yml file.
108
+ #
109
+ # === Example:
110
+ #
97
111
  # de:
98
112
  # alchemy:
99
113
  # element_names:
100
114
  # contact: Kontakt
101
115
  # search: Suche
102
- #
116
+ #
103
117
  # == Validations:
104
- #
118
+ #
105
119
  # You can validate the presence of a content. Just pass validate and one of the supported vaidatiosn methods to your content definition:
106
- #
120
+ #
107
121
  # - name: article
108
122
  # display_name: Standard-Artikel
109
123
  # contents:
@@ -111,23 +125,32 @@
111
125
  # type: EssenceText
112
126
  # validate:
113
127
  # - presence
114
- #
128
+ #
115
129
  # Now the user has to enter a value inside of the intro EssenceText textfield to save the element.
116
130
  # Currently supported validations are:
117
- #
131
+ #
118
132
  # * presence
119
133
  # * uniqueness
120
- #
134
+ #
121
135
  - name: article
122
136
  contents:
123
137
  - name: intro
124
138
  type: EssenceText
125
139
  - name: headline
126
140
  type: EssenceText
141
+ settings:
142
+ deletable: true
127
143
  - name: image
128
144
  type: EssencePicture
129
145
  - name: text
130
146
  type: EssenceRichtext
147
+ settings:
148
+ deletable: true
149
+ available_contents:
150
+ - name: text
151
+ type: EssenceRichtext
152
+ - name: headline
153
+ type: EssenceText
131
154
 
132
155
  - name: intro_image_text
133
156
  unique: true
@@ -138,19 +161,19 @@
138
161
  type: EssencePicture
139
162
  - name: text
140
163
  type: EssenceRichtext
141
-
164
+
142
165
  - name: text
143
166
  contents:
144
167
  - name: text
145
168
  type: EssenceRichtext
146
169
 
147
170
  - name: bild
148
- contents:
171
+ contents:
149
172
  - name: image
150
173
  type: EssencePicture
151
174
 
152
175
  - name: bild_text
153
- contents:
176
+ contents:
154
177
  - name: image
155
178
  type: EssencePicture
156
179
  - name: text
@@ -162,11 +185,13 @@
162
185
  type: EssenceText
163
186
 
164
187
  - name: image_mosaic
165
- contents:
188
+ contents:
166
189
  - name: image
167
190
  type: EssencePicture
168
191
  - name: caption
169
192
  type: EssenceText
193
+ - name: show_caption
194
+ type: EssenceBoolean
170
195
 
171
196
  - name: footnote
172
197
  unique: true
@@ -206,6 +231,11 @@
206
231
  contents:
207
232
  - name: file
208
233
  type: EssenceFile
234
+ settings:
235
+ deletable: true
236
+ available_contents:
237
+ - name: file
238
+ type: EssenceFile
209
239
 
210
240
  - name: news
211
241
  contents:
@@ -238,8 +268,6 @@
238
268
  validate:
239
269
  - presence
240
270
  - name: success_page
241
- type: EssenceText
242
- settings:
243
- display_as: select
271
+ type: EssenceSelect
244
272
  validate:
245
273
  - presence