alchemy_cms 2.2.4 → 2.3.rc5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (215) hide show
  1. data/.gitignore +1 -1
  2. data/.travis.yml +3 -4
  3. data/Gemfile +1 -0
  4. data/README.md +10 -6
  5. data/alchemy_cms.gemspec +5 -2
  6. data/app/assets/images/alchemy/icons.png +0 -0
  7. data/app/assets/images/sassy-ie-overlay.png +0 -0
  8. data/app/assets/javascripts/alchemy/alchemy.base.js +50 -59
  9. data/app/assets/javascripts/alchemy/alchemy.buttons.js +14 -4
  10. data/app/assets/javascripts/alchemy/alchemy.datepicker.js +8 -2
  11. data/app/assets/javascripts/alchemy/alchemy.elements_window.js +11 -3
  12. data/app/assets/javascripts/alchemy/alchemy.gui.js.coffee +1 -1
  13. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +14 -1
  14. data/app/assets/javascripts/alchemy/alchemy.preview.js +1 -1
  15. data/app/assets/javascripts/alchemy/alchemy.preview_window.js +12 -4
  16. data/app/assets/javascripts/alchemy/alchemy.uploader.js +4 -1
  17. data/app/assets/javascripts/alchemy/alchemy.windows.js +18 -8
  18. data/app/assets/stylesheets/alchemy/_defaults.scss +84 -120
  19. data/app/assets/stylesheets/alchemy/alchemy.css +2 -2
  20. data/app/assets/stylesheets/alchemy/archive.css.scss +288 -0
  21. data/app/assets/stylesheets/alchemy/base.css.scss +95 -390
  22. data/app/assets/stylesheets/alchemy/dashboard.css.scss +4 -4
  23. data/app/assets/stylesheets/alchemy/elements.css.scss +83 -118
  24. data/app/assets/stylesheets/alchemy/flash.css.scss +1 -1
  25. data/app/assets/stylesheets/alchemy/form_elements.css.scss +528 -0
  26. data/app/assets/stylesheets/alchemy/frame.css.scss +13 -39
  27. data/app/assets/stylesheets/alchemy/icons.css.scss +217 -228
  28. data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +48 -50
  29. data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +1 -1
  30. data/app/assets/stylesheets/alchemy/login.css.scss +1 -5
  31. data/app/assets/stylesheets/alchemy/menubar.css.scss +19 -29
  32. data/app/assets/stylesheets/alchemy/pagination.css.scss +3 -4
  33. data/app/assets/stylesheets/alchemy/sitemap.css.scss +81 -81
  34. data/app/assets/stylesheets/alchemy/tables.css.scss +63 -57
  35. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +57 -57
  36. data/app/assets/stylesheets/alchemy/upload.css.scss +6 -6
  37. data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +6 -10
  38. data/app/controllers/alchemy/admin/attachments_controller.rb +5 -4
  39. data/app/controllers/alchemy/admin/base_controller.rb +1 -9
  40. data/app/controllers/alchemy/admin/contents_controller.rb +4 -6
  41. data/app/controllers/alchemy/admin/elements_controller.rb +2 -2
  42. data/app/controllers/alchemy/admin/pages_controller.rb +2 -2
  43. data/app/controllers/alchemy/admin/pictures_controller.rb +74 -15
  44. data/app/controllers/alchemy/attachments_controller.rb +8 -2
  45. data/app/controllers/alchemy/base_controller.rb +47 -5
  46. data/app/controllers/alchemy/elements_controller.rb +1 -1
  47. data/app/controllers/alchemy/messages_controller.rb +12 -12
  48. data/app/controllers/alchemy/pages_controller.rb +5 -1
  49. data/app/controllers/alchemy/pictures_controller.rb +9 -4
  50. data/app/controllers/alchemy/user_sessions_controller.rb +2 -4
  51. data/app/helpers/alchemy/admin/base_helper.rb +98 -19
  52. data/app/helpers/alchemy/admin/contents_helper.rb +2 -2
  53. data/app/helpers/alchemy/admin/elements_helper.rb +2 -3
  54. data/app/helpers/alchemy/base_helper.rb +6 -5
  55. data/app/helpers/alchemy/elements_helper.rb +2 -2
  56. data/app/helpers/alchemy/essences_helper.rb +4 -5
  57. data/app/helpers/alchemy/pages_helper.rb +15 -79
  58. data/app/helpers/alchemy/url_helper.rb +67 -0
  59. data/app/mailers/alchemy/messages.rb +1 -1
  60. data/app/mailers/alchemy/notifications.rb +1 -1
  61. data/app/models/alchemy/attachment.rb +11 -2
  62. data/app/models/alchemy/cell.rb +20 -10
  63. data/app/models/alchemy/content.rb +4 -3
  64. data/app/models/alchemy/element.rb +170 -178
  65. data/app/models/alchemy/language/code.rb +4 -1
  66. data/app/models/alchemy/message.rb +19 -3
  67. data/app/models/alchemy/page.rb +45 -40
  68. data/app/models/alchemy/picture.rb +24 -2
  69. data/app/models/alchemy/user.rb +2 -3
  70. data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +12 -12
  71. data/app/views/alchemy/admin/attachments/_attachment.html.erb +1 -1
  72. data/app/views/alchemy/admin/attachments/create.js.erb +1 -0
  73. data/app/views/alchemy/admin/attachments/edit.html.erb +9 -3
  74. data/app/views/alchemy/admin/attachments/index.html.erb +3 -2
  75. data/app/views/alchemy/admin/contents/_missing.html.erb +1 -1
  76. data/app/views/alchemy/admin/contents/create.js.erb +54 -0
  77. data/app/views/alchemy/admin/contents/new.html.erb +9 -4
  78. data/app/views/alchemy/admin/elements/{_add_content.html.erb → _add_picture.html.erb} +4 -4
  79. data/app/views/alchemy/admin/elements/_elements_select.html.erb +2 -1
  80. data/app/views/alchemy/admin/elements/_new_element_form.html.erb +1 -1
  81. data/app/views/alchemy/admin/elements/{_picture_editor.html.erb → _picture_gallery_editor.html.erb} +7 -11
  82. data/app/views/alchemy/admin/elements/fold.js.erb +46 -0
  83. data/app/views/alchemy/admin/elements/index.html.erb +24 -24
  84. data/app/views/alchemy/admin/elements/list.js.erb +11 -9
  85. data/app/views/alchemy/admin/essence_files/assign.js.erb +3 -1
  86. data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +28 -0
  87. data/app/views/alchemy/admin/pages/_contactform_links.html.erb +8 -6
  88. data/app/views/alchemy/admin/pages/_external_link.html.erb +11 -9
  89. data/app/views/alchemy/admin/pages/_file_link.html.erb +10 -8
  90. data/app/views/alchemy/admin/pages/_internal_link.html.erb +14 -10
  91. data/app/views/alchemy/admin/pages/_new_page_form.html.erb +1 -1
  92. data/app/views/alchemy/admin/pages/_page.html.erb +1 -1
  93. data/app/views/alchemy/admin/pages/_page_for_links.html.erb +32 -21
  94. data/app/views/alchemy/admin/pages/configure.html.erb +2 -2
  95. data/app/views/alchemy/admin/pages/configure_external.html.erb +13 -13
  96. data/app/views/alchemy/admin/pages/edit.html.erb +2 -2
  97. data/app/views/alchemy/admin/pages/index.html.erb +26 -24
  98. data/app/views/alchemy/admin/pages/link.html.erb +2 -5
  99. data/app/views/alchemy/admin/partials/_upload_form.html.erb +28 -12
  100. data/app/views/alchemy/admin/pictures/_archive.html.erb +54 -0
  101. data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +10 -7
  102. data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +21 -22
  103. data/app/views/alchemy/admin/pictures/_filter_bar.html.erb +31 -0
  104. data/app/views/alchemy/admin/pictures/_overlay_picture_list.html.erb +9 -0
  105. data/app/views/alchemy/admin/pictures/_picture.html.erb +36 -6
  106. data/app/views/alchemy/admin/pictures/_tag_list.html.erb +27 -0
  107. data/app/views/alchemy/admin/pictures/archive_overlay.js.erb +3 -1
  108. data/app/views/alchemy/admin/pictures/create.js.erb +4 -5
  109. data/app/views/alchemy/admin/pictures/edit.html.erb +26 -0
  110. data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +39 -0
  111. data/app/views/alchemy/admin/pictures/index.html.erb +81 -70
  112. data/app/views/alchemy/admin/pictures/index.js.erb +3 -0
  113. data/app/views/alchemy/admin/pictures/new.html.erb +1 -0
  114. data/app/views/alchemy/admin/resources/index.html.erb +3 -1
  115. data/app/views/alchemy/admin/users/_table.html.erb +1 -1
  116. data/app/views/alchemy/admin/users/index.html.erb +27 -23
  117. data/app/views/alchemy/elements/_article_editor.html.erb +7 -2
  118. data/app/views/alchemy/elements/_bild_editor.html.erb +1 -1
  119. data/app/views/alchemy/elements/_bild_text_editor.html.erb +6 -1
  120. data/app/views/alchemy/elements/_bild_text_view.html.erb +3 -3
  121. data/app/views/alchemy/elements/_image_mosaic_editor.html.erb +1 -1
  122. data/app/views/alchemy/elements/_image_mosaic_view.html.erb +2 -2
  123. data/app/views/alchemy/elements/_intro_image_text_view.html.erb +4 -4
  124. data/app/views/alchemy/elements/_searchresult_editor.html.erb +4 -1
  125. data/app/views/alchemy/essences/_essence_boolean_editor.html.erb +1 -1
  126. data/app/views/alchemy/essences/_essence_picture_editor.html.erb +2 -3
  127. data/app/views/alchemy/essences/_essence_picture_tools.html.erb +1 -1
  128. data/app/views/alchemy/search/_form.html.erb +8 -0
  129. data/app/views/alchemy/search/_result.html.erb +3 -2
  130. data/app/views/alchemy/search/_results.html.erb +28 -0
  131. data/app/views/alchemy/user_sessions/leave.html.erb +4 -4
  132. data/app/views/alchemy/user_sessions/login.html.erb +1 -2
  133. data/app/views/layouts/alchemy/admin.html.erb +30 -10
  134. data/app/views/layouts/alchemy/login.html.erb +2 -39
  135. data/config/alchemy/elements.yml +1 -2
  136. data/config/alchemy/page_layouts.yml +8 -5
  137. data/config/authorization_rules.rb +27 -18
  138. data/config/initializers/localeapp.rb +9 -0
  139. data/config/locales/alchemy.de.yml +93 -56
  140. data/config/locales/alchemy.en.yml +73 -50
  141. data/config/routes.rb +3 -1
  142. data/db/migrate/20120704181529_add_upload_hash_to_alchemy_picture.rb +5 -0
  143. data/db/migrate/20120705214247_acts_as_taggable_on_migration.rb +28 -0
  144. data/db/migrate/20120728185830_add_cached_tag_list_to_alchemy_pictures.rb +5 -0
  145. data/db/migrate/20120831135441_set_alchemy_languages_country_code_default_to_empty_string.rb +9 -0
  146. data/lib/alchemy/capistrano.rb +2 -2
  147. data/lib/alchemy/essence.rb +14 -0
  148. data/lib/alchemy/page_layout.rb +0 -6
  149. data/lib/alchemy/resource.rb +9 -15
  150. data/lib/alchemy/upgrader.rb +18 -3
  151. data/lib/alchemy/version.rb +5 -1
  152. data/lib/alchemy_cms.rb +4 -1
  153. data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +16 -6
  154. data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +17 -3
  155. data/lib/rails/generators/alchemy/elements/elements_generator.rb +6 -1
  156. data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +10 -1
  157. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +17 -18
  158. data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +4 -2
  159. data/lib/tasks/fleximage.rake +2 -2
  160. data/spec/controllers/admin/contents_controller_spec.rb +2 -2
  161. data/spec/controllers/admin/elements_controller_spec.rb +30 -1
  162. data/spec/controllers/admin/pages_controller_spec.rb +35 -18
  163. data/spec/controllers/admin/trash_controller_spec.rb +40 -16
  164. data/spec/controllers/attachments_controller_spec.rb +62 -0
  165. data/spec/controllers/base_controller_spec.rb +43 -42
  166. data/spec/controllers/elements_controller_spec.rb +30 -0
  167. data/spec/controllers/pages_controller_spec.rb +22 -5
  168. data/spec/controllers/pictures_controller_spec.rb +82 -0
  169. data/spec/dummy/app/models/event.rb +2 -1
  170. data/spec/dummy/config/database.yml +3 -2
  171. data/spec/dummy/db/schema.rb +51 -27
  172. data/spec/factories.rb +29 -8
  173. data/spec/helpers/admin/base_helper_spec.rb +134 -21
  174. data/spec/helpers/admin/contents_helper_spec.rb +2 -2
  175. data/spec/helpers/admin/elements_helper_spec.rb +17 -9
  176. data/spec/helpers/admin/essences_helper_spec.rb +7 -6
  177. data/spec/helpers/essences_helper_spec.rb +8 -7
  178. data/spec/helpers/pages_helper_spec.rb +208 -325
  179. data/spec/helpers/url_helper_spec.rb +171 -0
  180. data/spec/integration/admin/link_overlay_spec.rb +53 -0
  181. data/spec/integration/admin/modules_integration_spec.rb +22 -26
  182. data/spec/integration/admin/pages_controller_spec.rb +10 -19
  183. data/spec/integration/admin/picture_library_integration_spec.rb +52 -0
  184. data/spec/integration/admin/resources_integration_spec.rb +68 -75
  185. data/spec/integration/pages_controller_spec.rb +70 -61
  186. data/spec/integration/security_spec.rb +3 -5
  187. data/spec/integration/translation_integration_spec.rb +56 -0
  188. data/spec/libraries/essence_spec.rb +18 -0
  189. data/spec/libraries/resource_spec.rb +101 -79
  190. data/spec/libraries/resources_helper_spec.rb +3 -0
  191. data/spec/models/content_spec.rb +63 -60
  192. data/spec/models/element_spec.rb +203 -93
  193. data/spec/models/language_spec.rb +90 -65
  194. data/spec/models/page_layout_spec.rb +37 -0
  195. data/spec/models/page_spec.rb +181 -113
  196. data/spec/models/picture_spec.rb +73 -26
  197. data/spec/models/resource_spec.rb +52 -23
  198. data/spec/support/alchemy/specs_helpers.rb +2 -0
  199. data/spec/support/image.png +0 -0
  200. data/spec/{helpers/url_helpers_spec.rb → url_helpers_spec.rb} +0 -0
  201. data/vendor/assets/javascripts/jquery_plugins/jquery.selectBoxIt.js +1909 -0
  202. data/vendor/assets/javascripts/jquery_plugins/preloadCssImages.jQuery_v5.js +152 -0
  203. metadata +106 -33
  204. data/app/assets/stylesheets/alchemy/buttons.css.scss +0 -361
  205. data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +0 -260
  206. data/app/views/alchemy/admin/contents/create.js.coffee +0 -49
  207. data/app/views/alchemy/admin/elements/fold.js.coffee +0 -37
  208. data/app/views/alchemy/admin/essence_pictures/destroy.js.coffee +0 -19
  209. data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +0 -16
  210. data/app/views/alchemy/admin/pictures/update.js.erb +0 -3
  211. data/spec/dummy/config/locales/en.yml +0 -5
  212. data/spec/dummy/config/locales/fo.yml +0 -5
  213. data/spec/page_layout_spec.rb +0 -35
  214. data/vendor/assets/javascripts/jquery_plugins/jquery.in-place-edit.js +0 -172
  215. data/vendor/assets/javascripts/jquery_plugins/jquery.sb.min.js +0 -14
@@ -1,8 +1,8 @@
1
1
  <% cache(content) do %>
2
2
  <div class="content_editor essence_boolean" id="<%= content_dom_id(content) %>">
3
+ <input type="hidden" value="0" name="<%= content.form_field_name %>" />
3
4
  <%= check_box_tag(content.form_field_name, 1,
4
5
  !content.ingredient.nil? ? content.ingredient : options[:default_value],
5
- :onclick => "Alchemy.handleEssenceCheckbox(this)",
6
6
  :class => html_options[:class],
7
7
  :style => html_options[:style]
8
8
  ) %>
@@ -3,7 +3,7 @@
3
3
  <label><%= render_content_name(content) %></label>
4
4
  <% end %>
5
5
  <div class="picture_thumbnail">
6
- <span class="picture_tool_delete">
6
+ <span class="picture_tool delete">
7
7
  <% if options[:grouped] %>
8
8
  <%= link_to_confirmation_window(
9
9
  "",
@@ -13,8 +13,7 @@
13
13
  :options => options
14
14
  ),
15
15
  {
16
- :title => t("delete_image"),
17
- :class => "picture_delete"
16
+ :title => t("delete_image")
18
17
  }
19
18
  ) -%>
20
19
  <% else %>
@@ -24,7 +24,7 @@
24
24
  ),
25
25
  {
26
26
  :title => (content.ingredient ? t('swap_image') : t('insert_image')),
27
- :size => '720x580',
27
+ :size => '780x580',
28
28
  :resizable => "true"
29
29
  },
30
30
  :title => (content.ingredient ? t('swap_image') : t('insert_image'))
@@ -0,0 +1,8 @@
1
+ <%= form_tag(show_alchemy_page_path(@search_result_page), :method => :get, :class => 'fulltext_search') do %>
2
+ <% if options[:html5] %>
3
+ <%= search_field_tag(:query, params[:query], :placeholder => t('search query')) %>
4
+ <% else %>
5
+ <%= text_field_tag(:query, params[:query]) %>
6
+ <% end %>
7
+ <%= submit_tag(t("search"), :name => nil) %>
8
+ <% end %>
@@ -1,6 +1,7 @@
1
1
  <li class="search_result">
2
- <h3><%= t('Page') %>:
3
- <%= link_to page.name, show_alchemy_page_path(page, {:query => 'test'}) %>
2
+ <h3>
3
+ <%= t('search_result_page.result_page') %>:
4
+ <%= link_to page.name, show_alchemy_page_path(page) %>
4
5
  <%= content_tag(:span, page.language_code.upcase, :class => 'language_code') if multi_language? && options[:show_language] %>
5
6
  </h3>
6
7
  <%- result.each do |highlight| -%>
@@ -0,0 +1,28 @@
1
+ <div class="search_results">
2
+ <% if @search_results.blank? %>
3
+ <h2 class="no_search_results">
4
+ <%=raw t('search_result_page.no_results', :query => h(params[:query])) %>
5
+ </h2>
6
+ <% else %>
7
+ <% if options[:show_heading] %>
8
+ <h1 class="search_results_heading">
9
+ <%=raw t("search_result_page.result_heading", :query => h(params[:query])) %>
10
+ </h1>
11
+ <% end %>
12
+ <% if options[:show_result_count] %>
13
+ <h2 class="search_result_count">
14
+ <%=raw t("search_result_page.result_count", :count => @search_results.length) %>
15
+ </h2>
16
+ <% end %>
17
+ <ul class="search_result_list">
18
+ <% @search_results.each do |search_result| %>
19
+ <% result = search_result.highlight(
20
+ "*#{params[:query]}*", {
21
+ :field => (search_result.class.name == "Alchemy::EssenceRichtext" ? :stripped_body : :body)
22
+ }
23
+ ) %>
24
+ <%= render 'alchemy/search/result', :result => result, :options => options, :page => search_result.page %>
25
+ <% end %>
26
+ </ul>
27
+ <% end %>
28
+ </div>
@@ -1,11 +1,11 @@
1
1
  <div class="with_padding">
2
2
  <h2><%= t("You are about to leave Alchemy") %>.</h2>
3
- <p style="line-height: 24px">
4
- <%= t("Do you want to") %>
3
+ <p class="buttons">
4
+ <label><%= t("Do you want to") %></label>
5
5
  <%= link_to t('stay logged in'), alchemy.root_path, :class => 'button' %>
6
6
  </p>
7
- <p style="line-height: 24px">
8
- <%= t('or to completly') %>
7
+ <p class="buttons">
8
+ <label><%= t('or to completly') %></label>
9
9
  <%= link_to t('logout'), alchemy.logout_path, :class => 'button' %>
10
10
  </p>
11
11
  </div>
@@ -1,7 +1,6 @@
1
1
  <div id="login_box">
2
2
  <div id="alchemy_greeting">
3
3
  <%= image_tag("alchemy/alchemy-logo.png", :style => "width: 240px; height: 70px") %>
4
- <h1><%= flash[:info] %></h1>
5
4
  </div>
6
5
  <div class="login_signup_box">
7
6
  <%= form_for @user_session, :url => {:action => 'login'}, :html => { :id => "login" } do |f| %>
@@ -12,7 +11,7 @@
12
11
  <%= f.label :login %>
13
12
  </td>
14
13
  <td class="input">
15
- <%= f.text_field :login, :class => 'thin_border' %>
14
+ <%= f.text_field :login, :class => 'thin_border', :autofocus => true %>
16
15
  </td>
17
16
  </tr>
18
17
  <tr>
@@ -33,9 +33,22 @@
33
33
  <%= yield(:alchemy_main_navigation) %>
34
34
  </div>
35
35
  <div id="logout">
36
- <%= link_to_overlay_window("<span class='module icon exit'></span><label>#{t('leave')}</label>".html_safe, alchemy.leave_admin_path, {:size => "300x105", :title => t("Leave Alchemy")}) %>
36
+ <% if current_user %>
37
+ <%= link_to_overlay_window(
38
+ "<span class='module icon exit'></span><label>#{t('leave')}</label>".html_safe,
39
+ alchemy.leave_admin_path, {
40
+ :size => "300x105",
41
+ :title => t("Leave Alchemy")
42
+ }) %>
43
+ <% else %>
44
+ <%= link_to(alchemy.root_path) do %>
45
+ <span class="module icon exit"></span>
46
+ <label><%= t('leave') %></label>
47
+ <% end %>
48
+ <% end %>
37
49
  </div>
38
50
  </div>
51
+ <% if current_user %>
39
52
  <div id="top_menu">
40
53
  <div id="sub_navigation">
41
54
  <%= admin_subnavigation %>
@@ -46,35 +59,42 @@
46
59
  <div id="toolbar">
47
60
  <%= yield(:toolbar) %>
48
61
  </div>
49
- <%- if current_user -%>
50
62
  <div id="user_info">
63
+ <%= select_tag 'change_locale', options_for_select(::I18n.available_locales.map { |l| [l.to_s.upcase, l] }, ::I18n.locale), :class => 'alchemy_select tiny' %>
51
64
  <%= t('Logged in as') %> <%= current_user.name %>
52
65
  </div>
53
- <%- end -%>
54
66
  </div>
67
+ <% end %>
55
68
  <%= render :partial => 'alchemy/admin/partials/flash_notices' %>
56
69
  <div id="main_content">
57
- <div id="archive_all">
58
- <%= yield %>
59
- </div>
70
+ <%= yield %>
60
71
  </div>
61
72
  <%= yield(:javascripts) %>
62
73
  <script type="text/javascript" charset="utf-8">
63
74
  jQuery(function($) {
75
+ // Preloading all background images from CSS files.
76
+ $.preloadCssImages();
64
77
  $('html').removeClass('no-js');
65
78
  Alchemy.locale = '<%= ::I18n.locale %>';
66
79
  Alchemy.resizeFrame();
67
80
  Alchemy.Tooltips();
68
- if (typeof(jQuery().sb) === 'function') {
69
- Alchemy.SelectBox('body#alchemy select.alchemy_selectbox');
70
- }
81
+ Alchemy.SelectBox();
71
82
  Alchemy.Datepicker();
72
83
  if ($('#flash_notices').length > 0) {
73
84
  Alchemy.Growler.fade();
74
85
  }
75
- $('a.please_wait, form .button, form .icon_button, #main_navi a.main_navi_entry, #sub_navigation .subnavi_tab a, .pagination a').not('#subnav_additions .subnavi_tab button').click(function() {
86
+ $('a.please_wait, form button.button, form .icon_button, #main_navi a.main_navi_entry, #sub_navigation .subnavi_tab a, .pagination a').not('*[data-alchemy-confirm], #subnav_additions .subnavi_tab button').click(function() {
76
87
  Alchemy.pleaseWaitOverlay();
77
88
  });
89
+ // Hack for enabling tab focus for a's styled as button
90
+ $('a.button').attr({tabindex: 0});
91
+
92
+ // Locale select handler
93
+ $('select#change_locale').on('change', function(e) {
94
+ var url = '<%= url_for.html_safe %>';
95
+ delimiter = url.match(/\?/) ? '&' : '?';
96
+ window.location = url + delimiter + 'locale=' + $(this).val();
97
+ });
78
98
  });
79
99
  jQuery(window).resize(function() {
80
100
  Alchemy.resizeFrame();
@@ -1,39 +1,2 @@
1
- <!DOCTYPE html>
2
- <html class="no-js">
3
- <head>
4
- <meta charset="UTF-8">
5
- <title><%= render_alchemy_title %></title>
6
- <%= csrf_meta_tag %>
7
- <%= stylesheet_link_tag('alchemy/alchemy', :media => 'screen') %>
8
- <%= stylesheet_link_tag('alchemy/print', :media => 'print') %>
9
- <%= javascript_include_tag('alchemy/alchemy') %>
10
- </head>
11
- <body id="alchemy" class="login">
12
- <noscript>
13
- <h1><%= t(:javascript_disabled_headline) %></h1>
14
- <p><%= t(:javascript_disabled_text) %></p>
15
- </noscript>
16
- <div id="left_menu">
17
- <div id="main_navi">
18
- <div id="logout">
19
- <%= link_to(alchemy.root_path) do %>
20
- <span class="module icon exit"></span>
21
- <label><%= t('leave') %></label>
22
- <% end %>
23
- </div>
24
- </div>
25
- <div id="left_menu_background"></div>
26
- </div>
27
- <div id="main_content">
28
- <%= yield %>
29
- </div>
30
- <%= yield(:javascripts) %>
31
- <script type="text/javascript" charset="utf-8">
32
- jQuery(document).ready(function($) {
33
- $('html').removeClass('no-js');
34
- Alchemy.SelectBox('body#alchemy select.alchemy_selectbox');
35
- Alchemy.ButtonObserver('.button');
36
- });
37
- </script>
38
- </body>
39
- </html>
1
+ <%# This file only exist for cases where one want to override the login view %>
2
+ <%= render :template => 'layouts/alchemy/admin' %>
@@ -185,9 +185,8 @@
185
185
  type: EssenceText
186
186
 
187
187
  - name: image_mosaic
188
+ picture_gallery: true
188
189
  contents:
189
- - name: image
190
- type: EssencePicture
191
190
  - name: caption
192
191
  type: EssenceText
193
192
  - name: show_caption
@@ -1,5 +1,5 @@
1
1
  # == This file defines the page_layouts for new pages.
2
- #
2
+ #
3
3
  # Please make your own page_layouts for your app in your own Rails.root/config/alchemy/page_layouts.yml file.
4
4
  #
5
5
  # === DSL:
@@ -17,17 +17,17 @@
17
17
  # action: action_name # Controllers action to use instead of the default PagesController#show
18
18
  #
19
19
  # === Translate page layout names
20
- #
20
+ #
21
21
  # Page layout names are passed through the I18n library. So you can translate them in your config/locales language yml file.
22
- #
22
+ #
23
23
  # Example:
24
- #
24
+ #
25
25
  # de:
26
26
  # alchemy:
27
27
  # page_layout_names:
28
28
  # contact: Kontakt
29
29
  # search: Suche
30
- #
30
+ #
31
31
  - name: intro
32
32
  unique: true
33
33
  elements: [header, intro_image_text]
@@ -66,3 +66,6 @@
66
66
  unique: true
67
67
  layoutpage: true
68
68
  elements: [footnote]
69
+
70
+ - name: external
71
+ redirects_to_external: true
@@ -1,26 +1,35 @@
1
1
  authorization do
2
-
2
+
3
3
  role :guest do
4
4
  has_permission_on :alchemy_pages, :to => [:show] do
5
5
  if_attribute :public => true, :restricted => false
6
6
  end
7
7
  has_permission_on :alchemy_elements, :to => [:show] do
8
- if_attribute :public => true
8
+ if_attribute :public => true, :restricted? => false
9
+ end
10
+ has_permission_on :alchemy_attachments, :to => [:show, :download] do
11
+ if_attribute :restricted? => false
12
+ end
13
+ has_permission_on :alchemy_pictures, :to => [:show] do
14
+ if_attribute :restricted? => false
9
15
  end
10
- has_permission_on :alchemy_pictures, :to => [:show]
11
- has_permission_on :attachments, :to => [:show, :download]
12
16
  end
13
-
17
+
14
18
  role :registered do
15
19
  includes :guest
16
20
  has_permission_on :alchemy_pages, :to => [:show] do
17
21
  if_attribute :public => true
18
22
  end
23
+ has_permission_on :alchemy_elements, :to => [:show] do
24
+ if_attribute :public => true
25
+ end
19
26
  has_permission_on :alchemy_admin_users, :to => [:edit, :update] do
20
27
  if_attribute :id => is {user.id}
21
28
  end
29
+ has_permission_on :alchemy_attachments, :to => [:show, :download]
30
+ has_permission_on :alchemy_pictures, :to => [:show]
22
31
  end
23
-
32
+
24
33
  role :author do
25
34
  includes :registered
26
35
  has_permission_on :alchemy_admin_dashboard, :to => [:index]
@@ -36,55 +45,55 @@ authorization do
36
45
  has_permission_on :alchemy_admin_trash, :to => [:index, :clear]
37
46
  has_permission_on :alchemy_admin_clipboard, :to => [:index, :insert, :remove, :clear]
38
47
  end
39
-
48
+
40
49
  role :editor do
41
50
  includes :author
42
51
  has_permission_on :alchemy_admin_attachments, :to => [:manage]
43
- has_permission_on :alchemy_admin_pictures, :to => [:manage, :flush]
52
+ has_permission_on :alchemy_admin_pictures, :to => [:manage, :flush, :delete_multiple, :edit_multiple, :update_multiple]
44
53
  has_permission_on :alchemy_admin_pages, :to => [:manage_pages]
45
54
  has_permission_on :alchemy_admin_layoutpages, :to => [:index]
46
55
  end
47
-
56
+
48
57
  role :admin do
49
58
  includes :editor
50
59
  has_permission_on :alchemy_admin_users, :to => [:manage]
51
60
  has_permission_on :alchemy_admin_languages, :to => [:manage]
52
61
  has_permission_on :authorization_rules, :to => :read
53
62
  end
54
-
63
+
55
64
  end
56
65
 
57
66
  privileges do
58
-
67
+
59
68
  # default privilege hierarchies to facilitate RESTful Rails apps
60
69
  privilege :manage, :includes => [:create, :read, :update, :delete]
61
70
  privilege :read, :includes => [:index, :show]
62
71
  privilege :create, :includes => :new
63
72
  privilege :update, :includes => :edit
64
73
  privilege :delete, :includes => :destroy
65
-
74
+
66
75
  privilege :manage_pages, :alchemy_admin_pages do
67
76
  includes :manage, :switch_language, :sort, :order, :configure, :flush, :copy, :copy_language_tree
68
77
  end
69
-
78
+
70
79
  privilege :manage_elements, :alchemy_admin_elements do
71
80
  includes :manage, :copy_to_clipboard, :order, :fold, :list, :trash
72
81
  end
73
-
82
+
74
83
  privilege :manage_contents, :alchemy_admin_contents do
75
84
  includes :manage, :order
76
85
  end
77
-
86
+
78
87
  privilege :manage_picture_essences, :alchemy_admin_essence_pictures do
79
88
  includes :manage, :save_link, :assign, :crop
80
89
  end
81
-
90
+
82
91
  privilege :manage_file_essences, :alchemy_admin_essence_files do
83
92
  includes :manage, :assign
84
93
  end
85
-
94
+
86
95
  privilege :edit_page_content, :alchemy_admin_pages do
87
96
  includes :edit, :unlock, :show, :publish, :visit
88
97
  end
89
-
98
+
90
99
  end
@@ -0,0 +1,9 @@
1
+ # unless ENV['CI']
2
+
3
+ # require 'localeapp/rails'
4
+
5
+ # Localeapp.configure do |config|
6
+ # config.api_key = 'afwgJCX6Xq40Y2gQSU9sdYFJ2XmQdAhgKmZPd69TOLdsT7e4Sy'
7
+ # end
8
+
9
+ # end
@@ -21,6 +21,7 @@ de:
21
21
  search: Suche
22
22
  layout_header: 'Header Bereich'
23
23
  layout_footer: 'Footer Bereich'
24
+ external: Externer Link
24
25
 
25
26
  # == Translations for element names
26
27
  # Just use the elements name like defined inside the config/alchemy/elements.yml file and translate it.
@@ -91,12 +92,12 @@ de:
91
92
 
92
93
  # == Translations for the build in full text search.
93
94
  search_result_page:
94
- no_results: 'Ihre Suche ergab kein Ergebnis.'
95
+ result_page: Seite
96
+ no_results: "Ihre Suche nach '%{query}' ergab keine Treffer."
95
97
  result_heading: "Ihre Suche nach '%{query}'"
96
98
  result_count:
97
- zero: "Ergab keine Ergebnisse"
98
- one: "Ergab ein Ergebnis"
99
- other: "Ergab %{count} Ergebnisse"
99
+ one: "Ergab einen Treffer"
100
+ other: "Ergab %{count} Treffer"
100
101
 
101
102
  # == Contactform translations
102
103
  contactform:
@@ -183,7 +184,7 @@ de:
183
184
  "Alchemy is open software and itself uses open software and free resources:": "Alchemy ist offene Software und benutzt selbst offene Software und freie Ressourcen:"
184
185
  "Choose page": "Seite wählen"
185
186
  "Cleared trash": "Der Papierkorb wurde geleert"
186
- "Click to rename": "Klicken zum umbenennen"
187
+ "Clear selection": "Auswahl aufheben"
187
188
  "Clipboard": "Zwischenablage"
188
189
  "Copy": "Kopie"
189
190
  "Could not load Adobe Flash® Plugin!": "Adobe Flash® Plugin konnte nicht geladen werden!"
@@ -195,6 +196,8 @@ de:
195
196
  "Do you really want to delete this content?": "Wollen Sie diesen Inhalt wirklich löschen?"
196
197
  "Drag an element over to the element window to restore it": "Ziehen Sie ein Element mit der Maus in das Elemente Fenster, um es wieder herzustellen."
197
198
  "Edit Picturemask": "Bildmaske bearbeiten"
199
+ "Edit image": "Bild bearbeiten"
200
+ "Edit multiple pictures": "Mehrere Bilder bearbeiten"
198
201
  "Elements": "Elemente"
199
202
  "Element trashed": "Das Element wurde in den Papierkorb gelegt"
200
203
  "Error with the Flash® Uploader!": "Fehler mit dem Flash® Uploader!"
@@ -203,6 +206,7 @@ de:
203
206
  "File renamed successfully from: '%{from}' to '%{to}'": "Datei wurde erfolgreich von: '%{from}' nach '%{to}' umbenannt."
204
207
  "File upload error: %{error}": "Datei konnte nicht hochgeladen werden: %{error}"
205
208
  "File: '%{name}' deleted successfully": "%{name} wurde gelöscht"
209
+ "Filter by tag": "Nach Schlagwörtern filtern"
206
210
  "Flush page cache": "Seitencache löschen"
207
211
  "Flush picture cache": "Bildercache löschen"
208
212
  "Have much fun with Alchemy!": "Viel Spaß mit Alchemy!"
@@ -245,17 +249,22 @@ de:
245
249
  "Picture uploaded succesfully": "Bild %{name} wurde hochgeladen"
246
250
  "Picture renamed successfully": "Bild wurde erfolgreich von %{from} nach %{to} umbenannt"
247
251
  "Picture deleted successfully": "%{name} wurde gelöscht"
252
+ "Pictures deleted successfully": "Die Bilder %{names} wurden gelöscht"
253
+ "Pictures updated successfully": "Die Bilder wurden gespeichert"
248
254
  "Picture cache flushed": "Bildercache wurde geleert"
249
255
  "Please Signup": "Um Ihre Homepage bearbeiten zu können, müssen Sie als erstes einen Admin Benutzer einrichten."
250
256
  "Please choose": "Bitte wählen"
251
257
  "Please log in": "Bitte melden Sie sich an."
258
+ "Please seperate the tags with commata": "*) Die Schlagwörter bitte mit Kommata getrennt eingeben."
252
259
  use_alternative_uploader_instead: "Benutzen Sie bitte diesen alternativen Uploader."
253
260
  "Publish page": "veröffentlichen"
254
261
  "Read the License": "Lizenz lesen"
255
262
  "Redirects to": "Leitet weiter auf"
256
263
  "Remove item from clipboard": "Inhalt aus der Zwischenablage entfernen"
264
+ "Remove tag filter": "Filter entfernen"
257
265
  "Remove this content": "Diesen Inhalt entfernen"
258
266
  "Reset Imagemask": "Bildmaske zurücksetzen"
267
+ "Select all": "Alle auswählen"
259
268
  "Select an content": "Wählen Sie einen Inhalt aus"
260
269
  "Select style": "Stilvorlage"
261
270
  "Send email with credentials": "Sende Benutzerdaten per Email"
@@ -273,6 +282,7 @@ de:
273
282
  sitemap_editor_info: "Die Sitemap wird automatisch generiert"
274
283
  searchresults_editor_info: "Dieses Element stellt die Suchergebnisse dar. Es Bedarf keinerlei Anpassung."
275
284
  element_dirty_notice: "Dieses Element hat nicht gespeicherte Änderungen. Möchten Sie es wirklich einklappen?"
285
+ "Tags": "Schlagwörter"
276
286
  "This page is locked by %{name}": "Diese Seite wird gerade von %{name} blockiert"
277
287
  "Title": "Titel"
278
288
  "To manage your website open a browser and go to": "Um die Inhalte Ihrer Webseite zu bearbeiten klicken Sie bitte auf folgenden Link"
@@ -294,6 +304,7 @@ de:
294
304
  "Who else is online": "Wer ist noch online"
295
305
  "Yes": "Ja"
296
306
  "You are not authorized": "Sie sind dazu nicht authorisiert."
307
+ "You are about to edit %{length} pictures at once": "Sie sind dabei %{length} Bilder auf einmal zu bearbeiten."
297
308
  element_dirty_close_window_notice: "Sie haben ungesicherte Elemente. Möchten Sie das Elemente Fenster wirklich schließen?"
298
309
  "You may upload files with following extensions": "Sie können %{file_types_description} mit folgenden Endungen hochladen: %{file_types}"
299
310
  "You may upload any file": "Sie können jede Art von Datei hochladen."
@@ -309,10 +320,12 @@ de:
309
320
  align_in_text: "Im Text anordnen"
310
321
  all: "alle"
311
322
  allow_fullscreen: "Vollbild ansicht"
323
+ all_pictures: "Alle Bilder anzeigen"
312
324
  apply: "übernehmen"
313
325
  assign_file: "Datei zuweisen"
314
326
  assign_file_from_archive: "Datei aus dem Archiv zuweisen"
315
327
  assign_image: "Bild hinzufügen."
328
+ attachment_filename_notice: "*) Bitte verwenden Sie keine Sonderzeichen oder Umlaute in dem Dateinamen."
316
329
  auto_play: "Film automatisch abspielen"
317
330
  big_thumbnails: "große Miniaturbilder"
318
331
  browse: "durchsuchen"
@@ -326,6 +339,7 @@ de:
326
339
  confirm_to_delete_file: "Wollen Sie diese Datei wirklich vom Server löschen?"
327
340
  confirm_to_delete_image: "Wollen Sie dieses Bild wirklich löschen?"
328
341
  confirm_to_delete_image_from_server: "Wollen Sie dieses Bild wirklich vom Server löschen?"
342
+ confirm_to_delete_images_from_server: "Wollen Sie diese Bilder wirklich vom Server löschen?"
329
343
  confirm_to_delete_language: "Wollen Sie diese Sprache wirklich löschen?<br/>ACHTUNG! Alle zugehörigen Seiten werden ebenfalls gelöscht!"
330
344
  confirm_to_delete_page: "Wollen Sie diese Seite wirklich löschen? Alle Inhalte gehen dabei unwiderruflich verloren!"
331
345
  confirm_to_delete_user: "Wollen Sie diesen Benutzer wirklich löschen?"
@@ -336,6 +350,7 @@ de:
336
350
  copy: "kopieren"
337
351
  copy_element: "Element kopieren"
338
352
  copy_page: "Seite kopieren"
353
+ "Could not delete Pictures": "Bilder konnten nicht gelöscht werden"
339
354
  copy_language_tree_heading: "Einen Sprachbaum kopieren"
340
355
  country_code_placeholder: 'z.B. at (optional)'
341
356
  country_code_foot_note: "Der Ländercode ist nur notwendig, wenn Sie mehrere Länder mit unterschiedlichen Sprachen versehen wollen."
@@ -362,6 +377,7 @@ de:
362
377
  edit_page: "Seite bearbeiten"
363
378
  edit_page_properties: "Seiteneigenschaften bearbeiten"
364
379
  edit_user: "Benutzer bearbeiten"
380
+ edit_selected_pictures: "Selektierte Bilder:"
365
381
  element_dirty_page_leave_warning: "Sie haben ungesicherte Elemente auf der Seite. Möchten Sie wirklich fortfahren?"
366
382
  element_editor_not_found: "Bei diesem Element ist ein Fehler aufgetreten"
367
383
  element_of_type: "Element"
@@ -399,6 +415,7 @@ de:
399
415
  language_code_placeholder: 'z.B. de'
400
416
  language_does_not_exist: "Dieser Sprachbaum existiert noch nicht"
401
417
  language_pages_copied: "Der Sprachbaum wurde kopiert"
418
+ last_upload_only: "Zuletzt hochgeladene"
402
419
  left: "links"
403
420
  link_image: "Bild verlinken"
404
421
  link_overlay_tab_label:
@@ -441,6 +458,7 @@ de:
441
458
  no_more_elements_to_add: "Keine weiteren Elemente verfügbar."
442
459
  no_search_results: "Keine Suchergebnisse."
443
460
  "not a valid image": "Keine valide Bilddatei."
461
+ "or": 'oder'
444
462
  "Page created": "Seite '%{name}' wurde erstellt."
445
463
  page_for_links:
446
464
  choose_page: "%{name} wählen"
@@ -471,11 +489,16 @@ de:
471
489
  password: "Passwort"
472
490
  paste: "einfügen"
473
491
  picture_gallery_editor: 'Bilder'
492
+ picture_library:
493
+ filter:
494
+ last_upload: "Zuletzt hochgeladene Bilder"
495
+ recent: "Bilder der letzten 24 Stunden"
474
496
  place_link: "Text verlinken"
475
497
  player_version: "Flashplayer Version"
476
498
  "please enter subject and mail address": "Bitte geben Sie den Betreff und eine Empfängeradresse an."
477
499
  please_confirm: "Bitte bestätigen"
478
500
  please_wait: "Bitte warten"
501
+ recently_uploaded_only: 'Kürzlich hochgeladene'
479
502
  "regular method": "herkömmlichen Methode"
480
503
  remove: "entfernen"
481
504
  rename_file: "Datei umbenennen"
@@ -486,6 +509,7 @@ de:
486
509
  "save order": "Sortierung speichern"
487
510
  saved_link: "Link wurde gespeichert."
488
511
  search: "suchen"
512
+ 'search query': 'Suchbegriff'
489
513
  search_engines: "Suchmaschinen"
490
514
  select_element: "Element wählen"
491
515
  show_element_content: "Element ausklappen"
@@ -653,7 +677,66 @@ de:
653
677
  two_words_connector: " und "
654
678
  last_word_connector: " und "
655
679
 
680
+ errors: &errors
681
+ template:
682
+
683
+ header: "Formular-Prüfung fehlgeschlagen"
684
+ body: "Bitte überprüfen Sie Ihre Angaben an Hand der aufgelisteten Fehler"
685
+
686
+ messages:
687
+ inclusion: "ist kein gültiger Wert"
688
+ exclusion: "ist nicht verfügbar"
689
+ invalid: "ist nicht gültig"
690
+ record_invalid: 'Validierung von %{errors} ist fehlgeschlagen'
691
+ confirmation: "stimmt nicht mit der Bestätigung überein"
692
+ accepted: "muss akzeptiert werden"
693
+ empty: "muss ausgefüllt werden"
694
+ blank: "muss ausgefüllt werden"
695
+ too_long: "ist zu lang (nicht mehr als %{count} Zeichen)"
696
+ too_short: "ist zu kurz (nicht weniger als %{count} Zeichen)"
697
+ wrong_length: "hat die falsche Länge (muss genau %{count} Zeichen haben)"
698
+ taken: "ist bereits vergeben"
699
+ not_a_number: "ist keine Zahl"
700
+ greater_than: "muss größer als %{count} sein"
701
+ greater_than_or_equal_to: "muss größer oder gleich %{count} sein"
702
+ equal_to: "muss genau %{count} sein"
703
+ less_than: "muss kleiner als %{count} sein"
704
+ less_than_or_equal_to: "muss kleiner oder gleich %{count} sein"
705
+ odd: "muss ungerade sein"
706
+ even: "muss gerade sein"
707
+
708
+ models:
709
+ alchemy/content:
710
+ attributes:
711
+ essence:
712
+ validation_failed: 'Validierung fehlgeschlagen.'
713
+ alchemy/element:
714
+ attributes:
715
+ name:
716
+ blank: "^Bitte wählen Sie ein Element."
717
+ alchemy/language:
718
+ attributes:
719
+ language_code:
720
+ invalid: 'ist nicht korrekt. Bitte exakt zwei Kleinbuchstaben verwenden.'
721
+ taken: 'ist für dieses Länderkürzel bereits vergeben.'
722
+ alchemy/page:
723
+ attributes:
724
+ name:
725
+ blank: "^Bitte geben Sie einen Namen ein."
726
+ page_layout:
727
+ blank: "^Bitte wählen Sie einen Seitentyp."
728
+ urlname:
729
+ too_short: "^Der URL-Name der Seite ist zu kurz (min. 3 Zeichen)"
730
+ taken: "^Der URL-Name ist bereits vergeben."
731
+ exclusion: "^Der URL-Name der Seite kann nicht benutzt werden."
732
+
656
733
  activemodel:
734
+
735
+ models:
736
+ alchemy/message:
737
+ one: "Nachricht"
738
+ other: "Nachrichten"
739
+
657
740
  attributes:
658
741
  alchemy/message:
659
742
  salutation: Anrede
@@ -666,6 +749,9 @@ de:
666
749
  email: E-Mail
667
750
  message: Nachricht
668
751
 
752
+ errors:
753
+ <<: *errors
754
+
669
755
  # Translations for active record database models and error messages.
670
756
  activerecord:
671
757
 
@@ -759,6 +845,7 @@ de:
759
845
  image_height: "Bildhöhe"
760
846
  image_width: "Bildbreite"
761
847
  name: "Name"
848
+ tag_list: Schlagwörter
762
849
 
763
850
  alchemy/user:
764
851
  email: "Email"
@@ -774,57 +861,7 @@ de:
774
861
  role: "Benutzerrolle"
775
862
 
776
863
  errors:
777
- template:
778
-
779
- header: "Prüfung fehlgeschlagen"
780
- body: ""
781
-
782
- messages:
783
- inclusion: "ist kein gültiger Wert"
784
- exclusion: "ist nicht verfügbar"
785
- invalid: "ist nicht gültig"
786
- record_invalid: 'Validierung von %{errors} ist fehlgeschlagen'
787
- confirmation: "stimmt nicht mit der Bestätigung überein"
788
- accepted: "muss akzeptiert werden"
789
- empty: "muss ausgefüllt werden"
790
- blank: "muss ausgefüllt werden"
791
- too_long: "ist zu lang (nicht mehr als %{count} Zeichen)"
792
- too_short: "ist zu kurz (nicht weniger als %{count} Zeichen)"
793
- wrong_length: "hat die falsche Länge (muss genau %{count} Zeichen haben)"
794
- taken: "ist bereits vergeben"
795
- not_a_number: "ist keine Zahl"
796
- greater_than: "muss größer als %{count} sein"
797
- greater_than_or_equal_to: "muss größer oder gleich %{count} sein"
798
- equal_to: "muss genau %{count} sein"
799
- less_than: "muss kleiner als %{count} sein"
800
- less_than_or_equal_to: "muss kleiner oder gleich %{count} sein"
801
- odd: "muss ungerade sein"
802
- even: "muss gerade sein"
803
-
804
- models:
805
- alchemy/content:
806
- attributes:
807
- essence:
808
- validation_failed: 'Validierung fehlgeschlagen.'
809
- alchemy/element:
810
- attributes:
811
- name:
812
- blank: "^Bitte wählen Sie ein Element."
813
- alchemy/language:
814
- attributes:
815
- language_code:
816
- invalid: 'ist nicht korrekt. Bitte exakt zwei Kleinbuchstaben verwenden.'
817
- taken: 'ist für dieses Länderkürzel bereits vergeben.'
818
- alchemy/page:
819
- attributes:
820
- name:
821
- blank: "^Bitte geben Sie einen Namen ein."
822
- page_layout:
823
- blank: "^Bitte wählen Sie einen Seitentyp."
824
- urlname:
825
- too_short: "^Der URL-Name der Seite ist zu kurz (min. 3 Zeichen)"
826
- taken: "^Der URL-Name ist bereits vergeben."
827
- exclusion: "^Der URL-Name der Seite kann nicht benutzt werden."
864
+ <<: *errors
828
865
 
829
866
  # Translations for the authentication system used in alchemy.
830
867
  authlogic: