alchemy_cms 2.1.4 → 2.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (143) hide show
  1. data/Gemfile +1 -1
  2. data/README.md +11 -31
  3. data/app/assets/javascripts/alchemy/alchemy.elements_window.js +3 -1
  4. data/app/assets/javascripts/alchemy/alchemy.windows.js +1 -1
  5. data/app/assets/stylesheets/alchemy/base.css.scss +0 -4
  6. data/app/assets/stylesheets/alchemy/buttons.css.scss +7 -4
  7. data/app/assets/stylesheets/alchemy/icons.css.scss +7 -1
  8. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +11 -15
  9. data/app/assets/{javascripts → stylesheets}/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +51 -18
  10. data/app/controllers/alchemy/admin/contents_controller.rb +5 -5
  11. data/app/controllers/alchemy/base_controller.rb +1 -1
  12. data/app/helpers/alchemy/admin/base_helper.rb +4 -7
  13. data/app/helpers/alchemy/admin/elements_helper.rb +2 -2
  14. data/app/models/alchemy/attachment.rb +1 -1
  15. data/app/models/alchemy/cell.rb +3 -3
  16. data/app/models/alchemy/content.rb +4 -4
  17. data/app/models/alchemy/element.rb +8 -8
  18. data/app/models/alchemy/essence_html.rb +1 -1
  19. data/app/models/alchemy/essence_richtext.rb +4 -4
  20. data/app/models/alchemy/essence_text.rb +1 -1
  21. data/app/models/alchemy/language.rb +10 -7
  22. data/app/models/alchemy/language/code.rb +19 -0
  23. data/app/models/alchemy/message.rb +6 -6
  24. data/app/models/alchemy/page.rb +26 -26
  25. data/app/models/alchemy/picture.rb +11 -13
  26. data/app/models/alchemy/user.rb +5 -5
  27. data/app/models/alchemy/user_session.rb +1 -1
  28. data/app/views/alchemy/admin/contents/destroy.js.erb +1 -1
  29. data/app/views/alchemy/admin/elements/create.js.erb +1 -0
  30. data/app/views/alchemy/admin/elements/fold.js.erb +2 -2
  31. data/app/views/alchemy/admin/elements/index.html.erb +1 -1
  32. data/app/views/alchemy/admin/essence_pictures/edit.html.erb +6 -6
  33. data/app/views/alchemy/admin/languages/_form.html.erb +47 -0
  34. data/app/views/alchemy/admin/languages/_language.html.erb +47 -0
  35. data/app/views/alchemy/admin/languages/_table.html.erb +33 -0
  36. data/app/views/alchemy/essences/_essence_picture_tools.html.erb +4 -1
  37. data/app/views/alchemy/essences/_essence_picture_view.html.erb +1 -3
  38. data/app/views/alchemy/essences/_essence_text_editor.html.erb +1 -1
  39. data/config/locales/alchemy.de.yml +26 -22
  40. data/config/locales/alchemy.en.yml +2 -0
  41. data/config/routes.rb +2 -2
  42. data/db/migrate/20120216135355_add_country_code_to_languages.rb +9 -0
  43. data/lib/alchemy/i18n.rb +21 -14
  44. data/lib/alchemy/seeder.rb +2 -2
  45. data/lib/alchemy/version.rb +1 -1
  46. data/spec/dummy/db/schema.rb +5 -3
  47. data/spec/factories.rb +2 -2
  48. data/spec/models/language_spec.rb +22 -4
  49. data/vendor/assets/javascripts/tiny_mce/langs/de.js +0 -0
  50. data/vendor/assets/javascripts/tiny_mce/langs/en.js +0 -0
  51. data/vendor/assets/javascripts/tiny_mce/license.txt +0 -0
  52. data/vendor/assets/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js +1 -137
  53. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +0 -0
  54. data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -0
  55. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +0 -0
  56. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +0 -0
  57. data/vendor/assets/javascripts/tiny_mce/plugins/paste/editor_plugin.js +0 -0
  58. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +0 -0
  59. data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +0 -0
  60. data/vendor/assets/javascripts/tiny_mce/plugins/paste/langs/de_dlg.js +0 -0
  61. data/vendor/assets/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +0 -0
  62. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +0 -0
  63. data/vendor/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +0 -0
  64. data/vendor/assets/javascripts/tiny_mce/plugins/table/cell.htm +0 -0
  65. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/cell.css +0 -0
  66. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/row.css +0 -0
  67. data/vendor/assets/javascripts/tiny_mce/plugins/table/css/table.css +0 -0
  68. data/vendor/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +0 -0
  69. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/cell.js +0 -0
  70. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +0 -0
  71. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/row.js +0 -0
  72. data/vendor/assets/javascripts/tiny_mce/plugins/table/js/table.js +5 -1
  73. data/vendor/assets/javascripts/tiny_mce/plugins/table/langs/de_dlg.js +0 -0
  74. data/vendor/assets/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +0 -0
  75. data/vendor/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +0 -0
  76. data/vendor/assets/javascripts/tiny_mce/plugins/table/row.htm +0 -0
  77. data/vendor/assets/javascripts/tiny_mce/plugins/table/table.htm +0 -0
  78. data/vendor/assets/javascripts/tiny_mce/themes/advanced/about.htm +0 -0
  79. data/vendor/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +0 -0
  80. data/vendor/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +0 -0
  81. data/vendor/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +0 -0
  82. data/vendor/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -1
  83. data/vendor/assets/javascripts/tiny_mce/themes/advanced/image.htm +0 -0
  84. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  85. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/flash.gif +0 -0
  86. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
  87. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  88. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  89. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  90. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  91. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  92. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/trans.gif +0 -0
  93. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/video.gif +0 -0
  94. data/vendor/assets/javascripts/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  95. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/about.js +0 -0
  96. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +0 -0
  97. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +0 -0
  98. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +0 -0
  99. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/image.js +0 -0
  100. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/link.js +0 -0
  101. data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +0 -0
  102. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de.js +0 -0
  103. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +0 -0
  104. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +0 -0
  105. data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +0 -0
  106. data/vendor/assets/javascripts/tiny_mce/themes/advanced/link.htm +0 -0
  107. data/vendor/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +0 -0
  108. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +0 -0
  109. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +0 -0
  110. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  111. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  112. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  113. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  114. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  115. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  116. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +0 -0
  117. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +0 -0
  118. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +0 -0
  119. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +0 -0
  120. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +0 -0
  121. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +0 -0
  122. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  123. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  124. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  125. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +0 -0
  126. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +0 -0
  127. data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +0 -0
  128. data/vendor/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +0 -0
  129. data/vendor/assets/javascripts/tiny_mce/tiny_mce.js +1 -1
  130. data/vendor/assets/javascripts/tiny_mce/tiny_mce_popup.js +0 -0
  131. data/vendor/assets/javascripts/tiny_mce/utils/editable_selects.js +0 -0
  132. data/vendor/assets/javascripts/tiny_mce/utils/form_utils.js +0 -0
  133. data/vendor/assets/javascripts/tiny_mce/utils/mctabs.js +0 -0
  134. data/vendor/assets/javascripts/tiny_mce/utils/validate.js +0 -0
  135. metadata +39 -42
  136. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
  137. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
  138. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
  139. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
  140. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
  141. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
  142. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
  143. data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +0 -90
@@ -1,6 +1,6 @@
1
1
  module Alchemy
2
2
  class UserSession < Authlogic::Session::Base
3
- logout_on_timeout(Rails.env != 'development')
3
+ logout_on_timeout(::Rails.env != 'development')
4
4
 
5
5
  before_destroy :unlock_pages
6
6
 
@@ -1,6 +1,6 @@
1
1
  (function($) {
2
2
 
3
- $('<%= @content_dom_id %>').remove();
3
+ $('#<%= content_dom_id(@content_dup) %>').remove();
4
4
  Alchemy.growl('<%= escape_javascript(@notice) %>');
5
5
  Alchemy.reloadPreview();
6
6
 
@@ -23,6 +23,7 @@
23
23
  Alchemy.ElementDirtyObserver('#element_<%= @element.id -%>');
24
24
  Alchemy.SelectBox('#element_<%= @element.id -%> select');
25
25
  Alchemy.ButtonObserver('#element_<%= @element.id -%> button.button');
26
+ Alchemy.Datepicker('#element_<%= @element.id -%> input[type="date"]');
26
27
 
27
28
  <%- if @clipboard.blank? -%>
28
29
  $('#clipboard_button .icon.clipboard').removeClass('full');
@@ -10,8 +10,6 @@
10
10
  $('#element_area .sortable_cell').sortable('refresh');
11
11
  Alchemy.ElementEditorSelector.reinit('.element_editor[data-element-id="<%= @element.id -%>"]');
12
12
 
13
- Alchemy.ButtonObserver('.element_editor[data-element-id="<%= @element.id -%>"] button.button');
14
-
15
13
  <%- if @element.folded -%>
16
14
 
17
15
  <%- @element.rtf_contents.each do |content| -%>
@@ -32,6 +30,8 @@
32
30
  <%- end -%>
33
31
 
34
32
  Alchemy.ElementDirtyObserver('#element_<%= @element.id -%>');
33
+ Alchemy.Datepicker('#element_<%= @element.id -%> input[type="date"]');
34
+ Alchemy.ButtonObserver('.element_editor[data-element-id="<%= @element.id -%>"] button.button');
35
35
  <%- end -%>
36
36
 
37
37
  <%- end -%>
@@ -5,7 +5,7 @@
5
5
  <%- @elements.each do |cell, elements| -%>
6
6
  <li>
7
7
  <a href="#cell_<%= cell.name -%>">
8
- <%= cell.name == 'for_other_elements' ? t('other Elements') : t("alchemy.cell_names.#{cell.name}", :default => cell.name.camelcase) -%>
8
+ <%= cell.name == 'for_other_elements' ? t('other Elements') : t(cell.name, :scope => :cell_names) -%>
9
9
  </a>
10
10
  </li>
11
11
  <%- end -%>
@@ -10,23 +10,23 @@
10
10
  <%- if @options[:caption_as_textarea] -%>
11
11
  <%= f.text_area "caption", :class => 'thin_border' %>
12
12
  <%- else -%>
13
- <%= f.text_field "caption", :class => 'thin_border long' %>
13
+ <%= f.text_field "caption", :class => 'thin_border' %>
14
14
  <%- end -%>
15
15
  </td>
16
16
  </tr>
17
17
  <tr>
18
18
  <td class="label"><%= f.label "title" %></td>
19
- <td class="input"><%= f.text_field "title", :class => 'thin_border long' %></td>
19
+ <td class="input"><%= f.text_field "title", :class => 'thin_border' %></td>
20
20
  </tr>
21
21
  <tr>
22
22
  <td class="label"><%= f.label "alt_tag" %></td>
23
- <td class="input"><%= f.text_field "alt_tag", :class => 'thin_border long' %></td>
23
+ <td class="input"><%= f.text_field "alt_tag", :class => 'thin_border' %></td>
24
24
  </tr>
25
25
  <%# Have to use a Hash here, because Rails has a Hash.to_params bug with nested Arrays!!!! %>
26
26
  <%- if @options[:sizes].is_a?(HashWithIndifferentAccess) -%>
27
27
  <tr>
28
28
  <td class="label"><%= f.label "render_size" %></td>
29
- <td class="input">
29
+ <td class="select">
30
30
  <%= f.select(
31
31
  "render_size",
32
32
  options_for_select(
@@ -46,7 +46,7 @@
46
46
  <%- if @options[:image_float_selector] -%>
47
47
  <tr>
48
48
  <td class="label"><%= f.label "css_class" %></td>
49
- <td class="input">
49
+ <td class="select">
50
50
  <%= f.select "css_class", [[t("Layout default"), ""], [t("above"), "no_float"], [t("left"), "left"], [t("right"), "right"]] %>
51
51
  </td>
52
52
  </tr>
@@ -54,7 +54,7 @@
54
54
  <%- elsif @options[:css_classes].is_a?(HashWithIndifferentAccess) -%>
55
55
  <tr>
56
56
  <td class="label"><%= f.label "css_class" %></td>
57
- <td class="input">
57
+ <td class="select">
58
58
  <%= f.select("css_class", options_for_select([[t('None'), '']] + @options[:css_classes].sort, @essence_picture.css_class)) %>
59
59
  </td>
60
60
  </tr>
@@ -0,0 +1,47 @@
1
+ <%= form_for [resource_url_scope, :admin, resource_instance_variable], :remote => true, :html => {:style => 'width: 403px'} do |f| %>
2
+ <div id="errors" style="display: none"></div>
3
+ <table>
4
+ <tr>
5
+ <td class="label"><%= f.label :name %></td>
6
+ <td class="input"><%= f.text_field :name, :class => 'thin_border long' -%></td>
7
+ </tr>
8
+ <tr>
9
+ <td class="label"><%= f.label :language_code %></td>
10
+ <td class="input"><%= f.text_field :language_code, :class => 'thin_border long', :placeholder => t(:language_code_placeholder) -%></td>
11
+ </tr>
12
+ <tr>
13
+ <td class="label"><%= f.label :country_code %>*</td>
14
+ <td class="input">
15
+ <%= f.text_field :country_code, :class => 'thin_border long', :placeholder => t(:country_code_placeholder) -%>
16
+ </td>
17
+ </tr>
18
+ <tr>
19
+ <td class="label"><%= f.label :frontpage_name %></td>
20
+ <td class="input"><%= f.text_field :frontpage_name, :class => 'thin_border long' -%></td>
21
+ </tr>
22
+ <tr>
23
+ <td class="label"><%= f.label :page_layout %></td>
24
+ <td class="input"><%= f.text_field :page_layout, :class => 'thin_border long' -%></td>
25
+ </tr>
26
+ <tr>
27
+ <td class="label"><%= f.label :public %></td>
28
+ <td class="checkbox"><%= f.check_box :public -%></td>
29
+ </tr>
30
+ <tr>
31
+ <td class="label"><%= f.label :default -%></td>
32
+ <td class="checkbox"><%= f.check_box :default -%></td>
33
+ </tr>
34
+ <tr>
35
+ <td colspan="2">
36
+ <p class="foot_note">
37
+ * Der Ländercode ist nur notwendig, wenn Sie mehrere Länder mit unterschiedlichen Sprachen versehen wollen.
38
+ </p>
39
+ </td>
40
+ </tr>
41
+ <tr>
42
+ <td class="submit" colspan="2">
43
+ <%= f.button t('save'), :class => 'button' %>
44
+ </td>
45
+ </tr>
46
+ </table>
47
+ <% end %>
@@ -0,0 +1,47 @@
1
+ <tr class="<%= cycle('even', 'odd') %>">
2
+ <td>
3
+ <%= language.name %>
4
+ </td>
5
+ <td>
6
+ <%= language.language_code %>
7
+ </td>
8
+ <td>
9
+ <%= language.country_code %>
10
+ </td>
11
+ <td>
12
+ <%= language.frontpage_name %>
13
+ </td>
14
+ <td>
15
+ <%= language.page_layout %>
16
+ </td>
17
+ <td class="center">
18
+ <%= language.public? ? render_icon('true') : '' %>
19
+ </td>
20
+ <td class="center">
21
+ <%= language.default? ? render_icon('true') : '' %>
22
+ </td>
23
+ <td class="tools">
24
+ <%- permitted_to?(:destroy, :alchemy_admin_languages) do -%>
25
+ <%= link_to_confirmation_window(
26
+ '',
27
+ t("Are you sure?"),
28
+ alchemy.admin_language_path(language),
29
+ :title => t("Delete"),
30
+ :class => "icon destroy"
31
+ ) -%>
32
+ <%- end -%>
33
+ <%- permitted_to?(:edit, :alchemy_admin_languages) do -%>
34
+ <%= link_to_overlay_window(
35
+ '',
36
+ alchemy.edit_admin_language_path(language),
37
+ {
38
+ :title => t("Edit")
39
+ },
40
+ {
41
+ :class => "icon edit",
42
+ :title => t("Edit")
43
+ }
44
+ ) -%>
45
+ <%- end -%>
46
+ </td>
47
+ </tr>
@@ -0,0 +1,33 @@
1
+ <%- if @languages.any? -%>
2
+ <table class="list" id="languages_list">
3
+ <tr>
4
+ <th>
5
+ <%= Alchemy::Language.human_attribute_name(:name) %>
6
+ </th>
7
+ <th>
8
+ <%= Alchemy::Language.human_attribute_name(:language_code) %>
9
+ </th>
10
+ <th>
11
+ <%= Alchemy::Language.human_attribute_name(:country_code) %>
12
+ </th>
13
+ <th>
14
+ <%= Alchemy::Language.human_attribute_name(:frontpage_name) %>
15
+ </th>
16
+ <th>
17
+ <%= Alchemy::Language.human_attribute_name(:page_layout) %>
18
+ </th>
19
+ <th class="center">
20
+ <%= Alchemy::Language.human_attribute_name(:public) %>
21
+ </th>
22
+ <th class="center">
23
+ <%= Alchemy::Language.human_attribute_name(:default) %>
24
+ </th>
25
+ <th class="tools"></th>
26
+ </tr>
27
+ <%= render_resources %>
28
+ </table>
29
+ <%- elsif params[:query] -%>
30
+ <p><%= t('Nothing found') %></p>
31
+ <%- end -%>
32
+
33
+ <%= render 'alchemy/admin/partials/pagination_links', :items => @languages, :scope => alchemy %>
@@ -1,3 +1,4 @@
1
+ <% if options[:crop].to_s == 'true' && content.ingredient %>
1
2
  <%= link_to_overlay_window(
2
3
  render_icon('crop'),
3
4
  alchemy.crop_admin_essence_picture_path(content.essence, :options => options),
@@ -6,10 +7,12 @@
6
7
  :title => t('Edit Picturemask')
7
8
  },
8
9
  {
9
- :class => necessary_options_for_cropping_provided?(options) && content.ingredient ? nil : 'disabled',
10
10
  :title => t('Edit Picturemask')
11
11
  }
12
12
  ) %>
13
+ <%- else -%>
14
+ <a href="#" class="disabled"><%= render_icon('crop') %></a>
15
+ <%- end -%>
13
16
 
14
17
  <%= link_to_overlay_window(
15
18
  render_icon('swap_picture'),
@@ -14,9 +14,7 @@
14
14
  ),
15
15
  {
16
16
  :alt => (content.essence.alt_tag.blank? ? nil : content.essence.alt_tag),
17
- :title => (content.essence.title.blank? ? nil : content.essence.title),
18
- :id => dom_id(content.essence.picture),
19
- :style => (options[:crop] && !options[:image_size].blank?) || (!options[:crop] && options[:image_size].blank?) ? "width: #{options[:image_size].blank? ? content.essence.picture.image_width : options[:image_size].split('x')[0]}px; height: #{options[:image_size].blank? ? content.essence.picture.image_height : options[:image_size].split('x')[1]}px" : nil
17
+ :title => (content.essence.title.blank? ? nil : content.essence.title)
20
18
  }.merge(html_options)
21
19
  ) -%>
22
20
 
@@ -49,7 +49,7 @@
49
49
  <%= link_to_confirmation_window(
50
50
  render_icon('delete-small'),
51
51
  t('Do you really want to delete this content?'),
52
- alchemy.content_path(content),
52
+ alchemy.admin_content_path(content),
53
53
  :class => 'icon_button small',
54
54
  :title => t('Remove this content')
55
55
  ) if content.settings[:deletable] %>
@@ -341,6 +341,7 @@ de:
341
341
  copy_element: "Element kopieren"
342
342
  copy_page: "Seite kopieren"
343
343
  copy_language_tree_heading: "Einen Sprachbaum kopieren"
344
+ country_code_placeholder: 'z.B. at (optional)'
344
345
  create: "erstellen"
345
346
  "Create language": "Eine neue Sprache erstellen"
346
347
  create_language_tree_heading: "Einen leeren Sprachbaum erstellen"
@@ -397,6 +398,7 @@ de:
397
398
  "item removed from clipboard": "%{name} wurde aus der Zwischenablage entfernt."
398
399
  javascript_disabled_headline: "Javascript ist deaktiviert!"
399
400
  javascript_disabled_text: "Alchemy funktioniert nur einwandfrei mit aktiviertem Javascript. Bitte aktivieren Sie es in Ihrem Browser."
401
+ language_code_placeholder: 'z.B. de'
400
402
  language_does_not_exist: "Dieser Sprachbaum existiert noch nicht"
401
403
  language_pages_copied: "Der Sprachbaum wurde kopiert"
402
404
  left: "links"
@@ -711,7 +713,8 @@ de:
711
713
  picture_id: Bild
712
714
 
713
715
  alchemy/language:
714
- code: "Sprachkürzel"
716
+ country_code: "Länderkürzel"
717
+ language_code: "Sprachkürzel"
715
718
  default: "Standardsprache"
716
719
  frontpage_name: "Name der Startseite"
717
720
  name: "Name"
@@ -762,26 +765,26 @@ de:
762
765
  body: ""
763
766
 
764
767
  messages:
765
- inclusion: "%{attribute} ist kein gültiger Wert"
766
- exclusion: "%{attribute} ist nicht verfügbar"
767
- invalid: "%{attribute} ist nicht gültig"
768
+ inclusion: "ist kein gültiger Wert"
769
+ exclusion: "ist nicht verfügbar"
770
+ invalid: "ist nicht gültig"
768
771
  record_invalid: 'Validierung von %{errors} ist fehlgeschlagen'
769
- confirmation: "%{attribute} stimmt nicht mit der Bestätigung überein"
770
- accepted: "%{attribute} muss akzeptiert werden"
771
- empty: "%{attribute} muss ausgefüllt werden"
772
- blank: "%{attribute} muss ausgefüllt werden"
773
- too_long: "%{attribute} ist zu lang (nicht mehr als %{count} Zeichen)"
774
- too_short: "%{attribute} ist zu kurz (nicht weniger als %{count} Zeichen)"
775
- wrong_length: "%{attribute} hat die falsche Länge (muss genau %{count} Zeichen haben)"
776
- taken: "%{attribute} ist bereits vergeben"
777
- not_a_number: "%{attribute} ist keine Zahl"
778
- greater_than: "%{attribute} muss größer als %{count} sein"
779
- greater_than_or_equal_to: "%{attribute} muss größer oder gleich %{count} sein"
780
- equal_to: "%{attribute} muss genau %{count} sein"
781
- less_than: "%{attribute} muss kleiner als %{count} sein"
782
- less_than_or_equal_to: "%{attribute} muss kleiner oder gleich %{count} sein"
783
- odd: "%{attribute} muss ungerade sein"
784
- even: "%{attribute} muss gerade sein"
772
+ confirmation: "stimmt nicht mit der Bestätigung überein"
773
+ accepted: "muss akzeptiert werden"
774
+ empty: "muss ausgefüllt werden"
775
+ blank: "muss ausgefüllt werden"
776
+ too_long: "ist zu lang (nicht mehr als %{count} Zeichen)"
777
+ too_short: "ist zu kurz (nicht weniger als %{count} Zeichen)"
778
+ wrong_length: "hat die falsche Länge (muss genau %{count} Zeichen haben)"
779
+ taken: "ist bereits vergeben"
780
+ not_a_number: "ist keine Zahl"
781
+ greater_than: "muss größer als %{count} sein"
782
+ greater_than_or_equal_to: "muss größer oder gleich %{count} sein"
783
+ equal_to: "muss genau %{count} sein"
784
+ less_than: "muss kleiner als %{count} sein"
785
+ less_than_or_equal_to: "muss kleiner oder gleich %{count} sein"
786
+ odd: "muss ungerade sein"
787
+ even: "muss gerade sein"
785
788
 
786
789
  models:
787
790
  alchemy/content:
@@ -790,8 +793,9 @@ de:
790
793
  validation_failed: 'Validierung fehlgeschlagen.'
791
794
  alchemy/language:
792
795
  attributes:
793
- code:
794
- invalid: '^Sprachkürzel ist nicht korrekt. Bitte exakt zwei Kleinbuchstaben verwenden.'
796
+ language_code:
797
+ invalid: 'ist nicht korrekt. Bitte exakt zwei Kleinbuchstaben verwenden.'
798
+ taken: 'ist für dieses Länderkürzel bereits vergeben.'
795
799
 
796
800
  # Translations for the authentication system used in alchemy.
797
801
  authlogic:
@@ -199,6 +199,7 @@ en:
199
199
  copy_element: "Copy this element"
200
200
  copy_language_tree_heading: "Copy page tree"
201
201
  copy_page: "Copy page"
202
+ country_code_placeholder: 'i.e. us (optional)'
202
203
  "Create language": "Create a new language"
203
204
  create_language_tree_heading: "Create empty language tree"
204
205
  create_page: "Create a new subpage"
@@ -255,6 +256,7 @@ en:
255
256
  "item removed from clipboard": "Removed %{name} from clipboard"
256
257
  javascript_disabled_headline: "Javascript is disabled!"
257
258
  javascript_disabled_text: "Alchemy needs Javascript to run smoothly. Please enable it in your browser settings."
259
+ language_code_placeholder: 'i.e. en'
258
260
  language_does_not_exist: "This language tree does not exist"
259
261
  language_pages_copied: "Language tree succesfully copied."
260
262
  link_image: "Link this image."
data/config/routes.rb CHANGED
@@ -139,12 +139,12 @@ Alchemy::Engine.routes.draw do
139
139
  end
140
140
 
141
141
  match '/:lang' => 'pages#show',
142
- :constraints => {:lang => /[a-z]{2}/},
142
+ :constraints => {:lang => /[a-z]{2}(-[a-z]{2})?/},
143
143
  :as => :show_language_root
144
144
 
145
145
  # The page show action has to be last route
146
146
  match '(/:lang)(/:level1(/:level2(/:level3)))/:urlname(.:format)' => 'pages#show',
147
- :constraints => {:lang => /[a-z]{2}/},
147
+ :constraints => {:lang => /[a-z]{2}(-[a-z]{2})?/},
148
148
  :as => :show_page
149
149
 
150
150
  end
@@ -0,0 +1,9 @@
1
+ class AddCountryCodeToLanguages < ActiveRecord::Migration
2
+ def change
3
+ add_column :alchemy_languages, :country_code, :string
4
+ rename_column :alchemy_languages, :code, :language_code
5
+ remove_index :alchemy_languages, :name => :index_languages_on_code
6
+ add_index :alchemy_languages, :language_code
7
+ add_index :alchemy_languages, [:language_code, :country_code]
8
+ end
9
+ end
data/lib/alchemy/i18n.rb CHANGED
@@ -1,28 +1,35 @@
1
1
  module Alchemy
2
2
  class I18n
3
3
 
4
- ## Thanks Typus for this I18n hack!
4
+ # A I18n Proxy for Alchemy translations
5
5
  #
6
6
  # Instead of having to translate strings and defining a default value:
7
- #
8
- # AlchemyAlchemy::I18n.t("Hello World!", :default => 'Hello World!')
9
- #
7
+ #
8
+ # Alchemy::I18n.t("Hello World!", :default => 'Hello World!')
9
+ #
10
10
  # We define this method to define the value only once:
11
- #
12
- # AlchemyAlchemy::I18n.t("Hello World!")
13
- #
11
+ #
12
+ # Alchemy::I18n.t("Hello World!")
13
+ #
14
14
  # Note that interpolation still works:
15
- #
16
- # AlchemyAlchemy::I18n.t("Hello %{world}!", :world => @world)
17
- #
18
- # Notes:
19
- # -----
20
15
  #
21
- # Already scoped to alchemy namespace!
16
+ # Alchemy::I18n.t("Hello %{world}!", :world => @world)
17
+ #
18
+ # === Notes
19
+ #
20
+ # All translations are scoped into the +alchemy+ namespace.
21
+ # Even scopes are scoped into the +alchemy+ namespace.
22
+ #
23
+ # So a call for t('hello', :scope => :world) has to be translated like this:
24
+ #
25
+ # de:
26
+ # alchemy:
27
+ # world:
28
+ # hello: Hallo
22
29
  #
23
30
  def self.t(msg, *args)
24
31
  options = args.extract_options!
25
- options[:default] = options[:default] ? options[:default] : msg
32
+ options[:default] = options[:default] ? options[:default] : msg.to_s.humanize
26
33
  scope = ['alchemy']
27
34
  case options[:scope].class.name
28
35
  when "Array"