alchemy_cms 2.4.beta2 → 2.4.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. data/.gitignore +2 -1
  2. data/.travis.yml +3 -1
  3. data/.yardopts +1 -1
  4. data/Gemfile +2 -1
  5. data/alchemy_cms.gemspec +18 -17
  6. data/app/assets/images/alchemy/ajax_loader.gif +0 -0
  7. data/app/assets/images/alchemy/alchemy-logo.png +0 -0
  8. data/app/assets/images/alchemy/icons.png +0 -0
  9. data/app/assets/images/alchemy/image_loader.gif +0 -0
  10. data/app/assets/images/alchemy/placeholder.png +0 -0
  11. data/app/assets/images/alchemy/shading.png +0 -0
  12. data/app/assets/images/alchemy/swfupload/browse_button.png +0 -0
  13. data/app/assets/images/alchemy/tabs.gif +0 -0
  14. data/app/assets/images/alchemy/ui-icons_666666_256x240.png +0 -0
  15. data/app/assets/images/sassy-ie-overlay.png +0 -0
  16. data/app/assets/javascripts/alchemy/alchemy.base.js +1 -3
  17. data/app/assets/javascripts/alchemy/alchemy.browser.js.coffee +28 -0
  18. data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +2 -2
  19. data/app/assets/javascripts/alchemy/alchemy.js +2 -0
  20. data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +79 -47
  21. data/app/assets/javascripts/alchemy/alchemy.menubar.js +12 -4
  22. data/app/assets/javascripts/alchemy/alchemy.onload.js.coffee +1 -1
  23. data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +103 -0
  24. data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +1 -1
  25. data/app/assets/javascripts/alchemy/alchemy.uploader.js +4 -6
  26. data/app/assets/javascripts/alchemy/preview.js +1 -0
  27. data/app/assets/stylesheets/alchemy/admin.css.scss +25 -0
  28. data/app/assets/stylesheets/alchemy/{archive.css.scss → archive.scss} +0 -2
  29. data/app/assets/stylesheets/alchemy/{base.css.scss → base.scss} +1 -57
  30. data/app/assets/stylesheets/alchemy/{custom.css → custom.scss} +0 -0
  31. data/app/assets/stylesheets/alchemy/{dashboard.css.scss → dashboard.scss} +0 -2
  32. data/app/assets/stylesheets/alchemy/defaults.scss +5 -0
  33. data/app/assets/stylesheets/alchemy/{elements.css.scss → elements.scss} +24 -37
  34. data/app/assets/stylesheets/alchemy/{errors.css.scss → errors.scss} +0 -2
  35. data/app/assets/stylesheets/alchemy/{flash.css.scss → flash.scss} +0 -2
  36. data/app/assets/stylesheets/alchemy/{form_elements.css.scss → form_elements.scss} +39 -12
  37. data/app/assets/stylesheets/alchemy/{frame.css.scss → frame.scss} +0 -2
  38. data/app/assets/stylesheets/alchemy/{icons.css.scss → icons.scss} +20 -2
  39. data/app/assets/stylesheets/alchemy/{jquery-ui.alchemy.css.scss → jquery-ui.scss} +6 -3
  40. data/app/assets/stylesheets/alchemy/{login.css.scss → login.scss} +3 -3
  41. data/app/assets/stylesheets/alchemy/menubar.css.scss +0 -1
  42. data/app/assets/stylesheets/alchemy/{_defaults.scss → mixins.scss} +2 -39
  43. data/app/assets/stylesheets/alchemy/{modules.css.scss → modules.scss} +4 -2
  44. data/app/assets/stylesheets/alchemy/notices.scss +51 -0
  45. data/app/assets/stylesheets/alchemy/{pagination.css.scss → pagination.scss} +0 -2
  46. data/app/assets/stylesheets/alchemy/{print.css → print.css.scss} +3 -3
  47. data/app/assets/stylesheets/alchemy/search.scss +63 -0
  48. data/app/assets/stylesheets/alchemy/{sitemap.css.scss → sitemap.scss} +1 -2
  49. data/app/assets/stylesheets/alchemy/{tables.css.scss → tables.scss} +16 -3
  50. data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +3 -0
  51. data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +3 -0
  52. data/app/assets/stylesheets/alchemy/{upload.css.scss → upload.scss} +0 -2
  53. data/app/assets/stylesheets/alchemy/variables.scss +33 -0
  54. data/app/controllers/alchemy/admin/elements_controller.rb +1 -2
  55. data/app/controllers/alchemy/admin/tags_controller.rb +64 -0
  56. data/app/controllers/alchemy/base_controller.rb +8 -23
  57. data/app/controllers/alchemy/pages_controller.rb +5 -18
  58. data/app/helpers/alchemy/admin/base_helper.rb +1 -1
  59. data/app/helpers/alchemy/admin/elements_helper.rb +1 -0
  60. data/app/helpers/alchemy/elements_block_helper.rb +162 -0
  61. data/app/helpers/alchemy/elements_helper.rb +41 -3
  62. data/app/helpers/alchemy/pages_helper.rb +2 -1
  63. data/app/models/alchemy/attachment.rb +2 -1
  64. data/app/models/alchemy/element.rb +13 -10
  65. data/app/models/alchemy/essence_link.rb +11 -0
  66. data/app/models/alchemy/essence_picture.rb +15 -4
  67. data/app/models/alchemy/page.rb +23 -25
  68. data/app/models/alchemy/picture.rb +2 -2
  69. data/app/models/alchemy/tag.rb +16 -0
  70. data/app/models/alchemy/user.rb +3 -1
  71. data/app/views/alchemy/admin/attachments/_attachment.html.erb +12 -12
  72. data/app/views/alchemy/admin/attachments/edit.html.erb +10 -4
  73. data/app/views/alchemy/admin/elements/_element.html.erb +10 -13
  74. data/app/views/alchemy/admin/elements/_element_foot.html.erb +1 -1
  75. data/app/views/alchemy/admin/essence_files/edit.html.erb +12 -76
  76. data/app/views/alchemy/admin/essence_pictures/crop.html.erb +9 -4
  77. data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +1 -1
  78. data/app/views/alchemy/admin/layoutpages/index.html.erb +1 -1
  79. data/app/views/alchemy/admin/pages/_external_link.html.erb +9 -4
  80. data/app/views/alchemy/admin/pages/configure.html.erb +22 -12
  81. data/app/views/alchemy/admin/pages/edit.html.erb +40 -40
  82. data/app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb +9 -0
  83. data/app/views/alchemy/admin/pictures/edit.html.erb +1 -1
  84. data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +11 -2
  85. data/app/views/alchemy/admin/tags/_radio_tag.html.erb +6 -0
  86. data/app/views/alchemy/admin/tags/_tag.html.erb +29 -0
  87. data/app/views/alchemy/admin/tags/edit.html.erb +41 -0
  88. data/app/views/alchemy/admin/tags/index.html.erb +46 -0
  89. data/app/views/alchemy/admin/tags/new.html.erb +16 -0
  90. data/app/views/alchemy/admin/users/_table.html.erb +18 -10
  91. data/app/views/alchemy/admin/users/_user.html.erb +2 -1
  92. data/app/views/alchemy/admin/users/index.html.erb +2 -1
  93. data/app/views/alchemy/elements/_article_view.html.erb +1 -1
  94. data/app/views/alchemy/essences/_essence_link_editor.html.erb +23 -0
  95. data/app/views/alchemy/essences/_essence_link_view.html.erb +0 -0
  96. data/app/views/alchemy/essences/_essence_picture_tools.html.erb +1 -1
  97. data/app/views/alchemy/essences/_essence_text_editor.html.erb +1 -9
  98. data/app/views/alchemy/essences/_linkable_essence_tools.html.erb +19 -0
  99. data/app/views/layouts/alchemy/admin.html.erb +1 -1
  100. data/config/alchemy/elements.yml +2 -0
  101. data/config/alchemy/modules.yml +12 -0
  102. data/config/alchemy/page_layouts.yml +2 -0
  103. data/config/authorization_rules.rb +2 -0
  104. data/config/locales/alchemy.de.yml +36 -5
  105. data/config/locales/alchemy.en.yml +3 -0
  106. data/config/routes.rb +6 -4
  107. data/db/migrate/20121026100815_alchemy_two_point_three.rb +0 -36
  108. data/db/migrate/20121113115120_create_alchemy_essence_links.rb +13 -0
  109. data/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +7 -0
  110. data/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +5 -0
  111. data/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +9 -0
  112. data/lib/alchemy/engine.rb +1 -1
  113. data/lib/alchemy/resource.rb +1 -1
  114. data/lib/alchemy/resources_helper.rb +1 -1
  115. data/lib/alchemy/upgrader.rb +17 -0
  116. data/lib/alchemy/version.rb +1 -1
  117. data/lib/alchemy_cms.rb +1 -0
  118. data/lib/rails/generators/alchemy/base.rb +41 -0
  119. data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +10 -3
  120. data/lib/rails/generators/alchemy/elements/elements_generator.rb +6 -14
  121. data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +8 -6
  122. data/lib/rails/generators/alchemy/elements/templates/editor.html.haml +13 -0
  123. data/lib/rails/generators/alchemy/elements/templates/editor.html.slim +13 -0
  124. data/lib/rails/generators/alchemy/elements/templates/view.html.erb +4 -4
  125. data/lib/rails/generators/alchemy/elements/templates/view.html.haml +15 -0
  126. data/lib/rails/generators/alchemy/elements/templates/view.html.slim +15 -0
  127. data/lib/rails/generators/alchemy/essence/essence_generator.rb +1 -1
  128. data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +2 -3
  129. data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +4 -13
  130. data/lib/rails/generators/alchemy/page_layouts/templates/layout.html.haml +1 -0
  131. data/lib/rails/generators/alchemy/page_layouts/templates/layout.html.slim +1 -0
  132. data/spec/controllers/pages_controller_spec.rb +41 -34
  133. data/spec/dummy/app/views/layouts/application.html.erb +51 -0
  134. data/spec/dummy/db/migrate/20121026100815_alchemy_two_point_three.rb +0 -36
  135. data/spec/dummy/db/migrate/20121113115120_create_alchemy_essence_links.rb +13 -0
  136. data/spec/dummy/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +7 -0
  137. data/spec/dummy/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +5 -0
  138. data/spec/dummy/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +9 -0
  139. data/spec/dummy/db/schema.rb +24 -45
  140. data/spec/helpers/elements_block_helper_spec.rb +135 -0
  141. data/spec/helpers/elements_helper_spec.rb +43 -5
  142. data/spec/integration/pages_controller_spec.rb +22 -18
  143. data/spec/integration/translation_integration_spec.rb +0 -15
  144. data/spec/models/element_spec.rb +44 -36
  145. data/spec/models/essence_picture_spec.rb +22 -6
  146. data/spec/models/page_spec.rb +28 -0
  147. data/spec/spec_helper.rb +8 -3
  148. data/spec/support/ci/install_phantomjs +6 -0
  149. metadata +82 -40
  150. data/app/assets/images/alchemy/gui/navi-tab.png +0 -0
  151. data/app/assets/images/alchemy/gui/shading_90.png +0 -0
  152. data/app/assets/images/alchemy/jquery-sb/select_arrow.gif +0 -0
  153. data/app/assets/images/alchemy/jquery-sb/select_arrow_bg.gif +0 -0
  154. data/app/assets/images/alchemy/jquery-sb/select_arrow_bg_hover.gif +0 -0
  155. data/app/assets/javascripts/alchemy/alchemy.preview.js +0 -98
  156. data/app/assets/stylesheets/alchemy/alchemy.css +0 -21
  157. data/app/controllers/alchemy/admin/essence_audios_controller.rb +0 -12
  158. data/app/controllers/alchemy/admin/essence_flashes_controller.rb +0 -12
  159. data/app/controllers/alchemy/admin/essence_videos_controller.rb +0 -12
  160. data/app/models/alchemy/essence_audio.rb +0 -14
  161. data/app/models/alchemy/essence_flash.rb +0 -12
  162. data/app/models/alchemy/essence_video.rb +0 -20
  163. data/app/views/alchemy/essences/_essence_audio_editor.html.erb +0 -1
  164. data/app/views/alchemy/essences/_essence_audio_view.html.erb +0 -33
  165. data/app/views/alchemy/essences/_essence_flash_editor.html.erb +0 -1
  166. data/app/views/alchemy/essences/_essence_flash_view.html.erb +0 -26
  167. data/app/views/alchemy/essences/_essence_video_editor.html.erb +0 -1
  168. data/app/views/alchemy/essences/_essence_video_view.html.erb +0 -35
@@ -0,0 +1,13 @@
1
+ class CreateAlchemyEssenceLinks < ActiveRecord::Migration
2
+ def change
3
+ create_table :alchemy_essence_links do |t|
4
+ t.string :link
5
+ t.string :link_title
6
+ t.string :link_target
7
+ t.string :link_class_name
8
+
9
+ t.timestamps
10
+ t.userstamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ class AddCachedTagListToElementsPagesAndUsers < ActiveRecord::Migration
2
+ def change
3
+ add_column :alchemy_elements, :cached_tag_list, :text
4
+ add_column :alchemy_pages, :cached_tag_list, :text
5
+ add_column :alchemy_users, :cached_tag_list, :text
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class AddCachedTagListToAlchemyAttachments < ActiveRecord::Migration
2
+ def change
3
+ add_column :alchemy_attachments, :cached_tag_list, :text
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class ChangeAlchemyPicturesTagListColumn < ActiveRecord::Migration
2
+ def up
3
+ change_column :alchemy_pictures, :cached_tag_list, :text, :limit => nil
4
+ end
5
+
6
+ def down
7
+ change_column :alchemy_pictures, :cached_tag_list, :string
8
+ end
9
+ end
@@ -13,7 +13,7 @@ module Alchemy
13
13
  app.config.assets.precompile += [
14
14
  "alchemy/alchemy.js",
15
15
  "alchemy/preview.js",
16
- "alchemy/alchemy.css",
16
+ "alchemy/admin.css",
17
17
  "alchemy/menubar.css",
18
18
  "alchemy/menubar.js",
19
19
  "alchemy/print.css",
@@ -92,4 +92,4 @@ module Alchemy
92
92
  end
93
93
 
94
94
  end
95
- end
95
+ end
@@ -61,4 +61,4 @@ module Alchemy
61
61
  obj
62
62
  end
63
63
  end
64
- end
64
+ end
@@ -17,6 +17,7 @@ module Alchemy
17
17
  convert_essence_texts_displayed_as_select_into_essence_selects
18
18
  convert_essence_texts_displayed_as_checkbox_into_essence_booleans
19
19
  copy_new_config_file
20
+ removed_richmedia_essences_notice
20
21
 
21
22
  display_todos
22
23
  end
@@ -191,6 +192,22 @@ module Alchemy
191
192
  todo "Check the config/alchemy/config.yml.old file for custom configuration options and insert them into the new config file."
192
193
  end
193
194
 
195
+ def removed_richmedia_essences_notice
196
+ warn = <<-WARN
197
+ We removed the EssenceAudio, EssenceFlash and EssenceVideo essences from Alchemy core!
198
+ In order to get the essences back, install the `alchemy-richmedia-essences` gem.
199
+
200
+ gem 'alchemy-richmedia-essences'
201
+
202
+ We left the tables in your database, you can simply drop them if you don't use these essences in your project.
203
+
204
+ drop_table :alchemy_essence_audios
205
+ drop_table :alchemy_essence_flashes
206
+ drop_table :alchemy_essence_videos
207
+ WARN
208
+ todo warn
209
+ end
210
+
194
211
  end
195
212
 
196
213
  end
@@ -1,6 +1,6 @@
1
1
  module Alchemy
2
2
 
3
- VERSION = "2.4.beta2"
3
+ VERSION = "2.4.rc1"
4
4
 
5
5
  def self.version
6
6
  VERSION
data/lib/alchemy_cms.rb CHANGED
@@ -7,6 +7,7 @@ if defined?(Rails) && Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR == 2
7
7
  require 'dynamic_form'
8
8
  require 'fleximage'
9
9
  require 'jquery-rails'
10
+ require 'rails3-jquery-autocomplete'
10
11
  require 'kaminari'
11
12
  require 'userstamp'
12
13
  require 'yaml'
@@ -0,0 +1,41 @@
1
+ require 'rails'
2
+
3
+ module Alchemy
4
+ module Generators
5
+ class Base < ::Rails::Generators::Base
6
+ class_option :template_engine, :type => :string, :aliases => '-e', :desc => 'Template engine for the views. Available options are "erb", "haml", and "slim".'
7
+
8
+ private
9
+
10
+ def conditional_template(source, destination)
11
+ files = Dir.glob(destination.gsub(/\.([a-z]+)$/, '*'))
12
+ if files.any?
13
+ ext = File.extname(files.first)[1..-1]
14
+
15
+ # If view already exists using a different template engine, change
16
+ # source and destination file names to use that engine.
17
+ if ext != template_engine.to_s
18
+ say_status :warning, "View uses unexpected template engine '#{ext}'.", :cyan
19
+ destination.gsub!(/#{template_engine}$/, ext)
20
+ source.gsub!(/#{template_engine}$/, ext)
21
+ end
22
+ end
23
+
24
+ template source, destination
25
+ end
26
+
27
+ def template_engine
28
+ # Rails is clever enough to default this to whatever template
29
+ # engine is configured through its generator configuration,
30
+ # but we'll default it to erb anyway, just in case.
31
+ options[:template_engine] || 'erb'
32
+ end
33
+
34
+ def load_alchemy_yaml(name)
35
+ YAML.load_file "#{Rails.root}/config/alchemy/#{name}"
36
+ rescue Errno::ENOENT
37
+ puts "\nERROR: Could not read config/alchemy/#{name} file. Please run: rails generate alchemy:scaffold"
38
+ end
39
+ end
40
+ end
41
+ end
@@ -28,6 +28,7 @@ role :db, "<%= @server %>", :primary => true
28
28
 
29
29
  # the webserver path
30
30
  set :deploy_to, "<%= @deploy_path %>"
31
+ set :deploy_via, :remote_cache
31
32
 
32
33
  # repository settings
33
34
  <%- if @scm == "svn" -%>
@@ -46,6 +47,9 @@ set :repository, "<%= @repository_url %>"
46
47
  set :branch, "master"
47
48
  <%- end -%>
48
49
 
50
+ # rails env
51
+ set :rails_env, "production"
52
+
49
53
  # before hooks
50
54
  before "deploy:start", "deploy:seed"
51
55
  before "deploy:create_symlink", "deploy:migrate"
@@ -91,11 +95,14 @@ end
91
95
 
92
96
  ## defaults
93
97
 
94
- # rails env
95
- set :rails_env, "production"
96
-
97
98
  # enable bundler binstubs
98
99
  set :bundle_flags, "--deployment --binstubs"
99
100
 
100
101
  # do not use sudo
101
102
  set :use_sudo, false
103
+
104
+ # enable ssh-agent forwarding
105
+ ssh_options[:forward_agent] = true
106
+
107
+ # Enable git password prompting
108
+ default_run_options[:pty] = true
@@ -1,8 +1,8 @@
1
- require 'rails'
1
+ require File.join(__FILE__, '../../base')
2
2
 
3
3
  module Alchemy
4
4
  module Generators
5
- class ElementsGenerator < ::Rails::Generators::Base
5
+ class ElementsGenerator < Base
6
6
  desc "This generator generates your elements view partials."
7
7
  source_root File.expand_path('templates', File.dirname(__FILE__))
8
8
 
@@ -12,7 +12,7 @@ module Alchemy
12
12
  end
13
13
 
14
14
  def create_partials
15
- @elements = get_elements_from_yaml
15
+ @elements = load_alchemy_yaml('elements.yml')
16
16
  @elements.each do |element|
17
17
  @element = element
18
18
  if @element['available_contents']
@@ -22,19 +22,11 @@ module Alchemy
22
22
  @contents = (element["contents"] or [])
23
23
  end
24
24
  @element_name = element["name"].underscore
25
- template "editor.html.erb", "#{@elements_dir}/_#{@element_name}_editor.html.erb"
26
- template "view.html.erb", "#{@elements_dir}/_#{@element_name}_view.html.erb"
27
- end if @elements
28
- end
29
-
30
- private
31
25
 
32
- def get_elements_from_yaml
33
- YAML.load_file "#{Rails.root}/config/alchemy/elements.yml"
34
- rescue Errno::ENOENT
35
- puts "\nERROR: Could not read config/alchemy/elements.yml file. Please run: rails generate alchemy:scaffold"
26
+ conditional_template "editor.html.#{template_engine}", "#{@elements_dir}/_#{@element_name}_editor.html.#{template_engine}"
27
+ conditional_template "view.html.#{template_engine}", "#{@elements_dir}/_#{@element_name}_view.html.#{template_engine}"
28
+ end if @elements
36
29
  end
37
-
38
30
  end
39
31
  end
40
32
  end
@@ -1,12 +1,14 @@
1
+ <%%= element_editor_for(element) do |el| -%>
1
2
  <%- if @element['picture_gallery'] -%>
2
- <%%= render_picture_gallery_editor(element, :max_images => nil, :crop => true) %>
3
+ <%%= render_picture_gallery_editor(element, :max_images => nil, :crop => true) %>
3
4
  <%- end -%>
4
5
  <% @contents.each do |content| -%>
5
- <%%= render_essence_editor_by_name(element, '<%= content["name"] %>') %>
6
+ <%%= el.edit :<%= content["name"] %> %>
6
7
  <% end -%>
7
8
  <%- if @element['available_contents'] -%>
8
- <%% element.contents.where(:name => ['<%= @available_contents_names.join("', '") %>']).each do |content| %>
9
- <%%= render_essence_editor content %>
10
- <%% end %>
11
- <p><%%= render_new_content_link(element) %></p>
9
+ <%% element.contents.where(:name => ['<%= @available_contents_names.join("', '") %>']).each do |content| %>
10
+ <%%= render_essence_editor content %>
11
+ <%% end %>
12
+ <p><%%= render_new_content_link(element) %></p>
12
13
  <%- end -%>
14
+ <%%- end -%>
@@ -0,0 +1,13 @@
1
+ = element_editor_for(element) do |el|
2
+ <%- if @element['picture_gallery'] -%>
3
+ = render_picture_gallery_editor(element, :max_images => nil, :crop => true)
4
+ <%- end -%>
5
+ <% @contents.each do |content| -%>
6
+ = el.edit :<%= content["name"] %>
7
+ <% end -%>
8
+ <%- if @element['available_contents'] -%>
9
+ - element.contents.where(:name => ['<%= @available_contents_names.join("', '") %>']).each do |content|
10
+ = render_essence_editor content
11
+
12
+ %p= render_new_content_link(element)
13
+ <% end -%>
@@ -0,0 +1,13 @@
1
+ = element_editor_for(element) do |el|
2
+ <%- if @element['picture_gallery'] -%>
3
+ = render_picture_gallery_editor(element, :max_images => nil, :crop => true)
4
+ <%- end -%>
5
+ <% @contents.each do |content| -%>
6
+ = el.edit :<%= content["name"] %>
7
+ <% end -%>
8
+ <%- if @element['available_contents'] -%>
9
+ - element.contents.where(:name => ['<%= @available_contents_names.join("', '") %>']).each do |content|
10
+ = render_essence_editor content
11
+
12
+ p= render_new_content_link(element)
13
+ <% end -%>
@@ -1,4 +1,4 @@
1
- <div class="<%= @element_name %>" id="<%%= element_dom_id(element) %>"<%%= element_preview_code(element) %>>
1
+ <%%= element_view_for(element) do |el| -%>
2
2
  <%- if @element["picture_gallery"] -%>
3
3
  <div class="<%= @element_name %>_images">
4
4
  <%%- element.contents.gallery_pictures.each do |image| -%>
@@ -11,10 +11,10 @@
11
11
  <%- @contents.each do |content| -%>
12
12
  <%- if @contents.length > 1 -%>
13
13
  <div class="<%= content["name"] %>">
14
- <%%= render_essence_view_by_name(element, '<%= content["name"] %>') %>
14
+ <%%= el.render :<%= content["name"] %> %>
15
15
  </div>
16
16
  <%- else -%>
17
- <%%= render_essence_view_by_name(element, '<%= content["name"] %>') %>
17
+ <%%= el.render :<%= content["name"] %> %>
18
18
  <%- end -%>
19
19
  <%- end -%>
20
- </div>
20
+ <%%- end -%>
@@ -0,0 +1,15 @@
1
+ = element_view_for(element) do |el|
2
+ <%- if @element["picture_gallery"] -%>
3
+ .<%= @element_name %>_images
4
+ - element.contents.gallery_pictures.each do |image|
5
+ .<%= @element_name %>_image<%= image.essence.css_class ? ".#{image.essence.css_class}" : '' %>
6
+ = render_essence_view(image, :image_size => "160x120")
7
+ <%- end -%>
8
+ <%- @contents.each do |content| -%>
9
+ <%- if @contents.length > 1 -%>
10
+ .<%= content["name"] %>
11
+ = el.render :<%= content["name"] %>
12
+ <%- else -%>
13
+ = el.render :<%= content["name"] %>
14
+ <%- end -%>
15
+ <%- end -%>
@@ -0,0 +1,15 @@
1
+ = element_view_for(element) do |el|
2
+ <%- if @element["picture_gallery"] -%>
3
+ .<%= @element_name %>_images
4
+ - element.contents.gallery_pictures.each do |image|
5
+ .<%= @element_name %>_image<%= image.essence.css_class ? ".#{image.essence.css_class}" : '' %>
6
+ = render_essence_view(image, :image_size => "160x120")
7
+ <%- end -%>
8
+ <%- @contents.each do |content| -%>
9
+ <%- if @contents.length > 1 -%>
10
+ .<%= content["name"] %>
11
+ = el.render :<%= content["name"] %>
12
+ <%- else -%>
13
+ = el.render :<%= content["name"] %>
14
+ <%- end -%>
15
+ <%- end -%>
@@ -8,7 +8,7 @@ module Alchemy
8
8
  source_root File.expand_path('templates', File.dirname(__FILE__))
9
9
 
10
10
  def init
11
- @essence_name = essence_name.underscore
11
+ @essence_name = Alchemy::Content.normalize_essence_type(essence_name).underscore
12
12
  @essence_view_path = Rails.root.join('app/views/alchemy/essences')
13
13
  end
14
14
 
@@ -6,13 +6,12 @@
6
6
  Please consult Alchemy::Content.rb docs for further methods on the content object
7
7
  %>
8
8
  <%% cache(content) do %>
9
-
10
9
  <div class="content_editor <%= @essence_name %>" id="<%%= content_dom_id(content) %>">
11
- <%%#= text_field_tag(
10
+ <%%= label_and_remove_link(content) %>
11
+ <%%= text_field_tag(
12
12
  content.form_field_name,
13
13
  content.ingredient,
14
14
  :id => content.form_field_id
15
15
  ) %>
16
16
  </div>
17
-
18
17
  <%% end %>
@@ -1,8 +1,8 @@
1
- require 'rails'
1
+ require File.join(__FILE__, '../../base')
2
2
 
3
3
  module Alchemy
4
4
  module Generators
5
- class PageLayoutsGenerator < ::Rails::Generators::Base
5
+ class PageLayoutsGenerator < Base
6
6
  desc "This generator generates your page_layouts view partials."
7
7
  source_root File.expand_path('templates', File.dirname(__FILE__))
8
8
 
@@ -12,21 +12,12 @@ module Alchemy
12
12
  end
13
13
 
14
14
  def create_partials
15
- @page_layouts = get_page_layouts_from_yaml
15
+ @page_layouts = load_alchemy_yaml('page_layouts.yml')
16
16
  @page_layouts.each do |page_layout|
17
17
  @page_layout_name = page_layout["name"].underscore
18
- template "layout.html.erb", "#{@page_layouts_dir}/_#{@page_layout_name}.html.erb"
18
+ conditional_template "layout.html.#{template_engine}", "#{@page_layouts_dir}/_#{@page_layout_name}.html.#{template_engine}"
19
19
  end if @page_layouts
20
20
  end
21
-
22
- private
23
-
24
- def get_page_layouts_from_yaml
25
- YAML.load_file "#{Rails.root}/config/alchemy/page_layouts.yml"
26
- rescue Errno::ENOENT
27
- puts "\nERROR: Could not read config/alchemy/page_layouts.yml file. Please run: rails generate alchemy:scaffold"
28
- end
29
-
30
21
  end
31
22
  end
32
23
  end
@@ -58,11 +58,9 @@ describe Alchemy::PagesController do
58
58
  end
59
59
 
60
60
  context "with params layout set to not existing layout" do
61
-
62
- it "should raise ActionController::RoutingError" do
63
- expect { get :show, :urlname => :home, :layout => 'lkuiuk' }.to raise_error(ActionController::RoutingError)
61
+ it "should raise ActionView::MissingTemplate" do
62
+ expect { get :show, :urlname => :home, :layout => 'lkuiuk' }.to raise_error(ActionView::MissingTemplate)
64
63
  end
65
-
66
64
  end
67
65
 
68
66
  context "with param layout set to a custom layout" do
@@ -84,36 +82,6 @@ describe Alchemy::PagesController do
84
82
  end
85
83
 
86
84
  end
87
-
88
- context "with application layout absent" do
89
-
90
- it "should render pages layout" do
91
- get :show, :urlname => :home
92
- response.body.should_not have_content('I am the application layout')
93
- end
94
-
95
- end
96
-
97
- context "with application layout present" do
98
-
99
- before do
100
- @app_layout = Rails.root.join('app/views/layouts', 'application.html.erb')
101
- File.open(@app_layout, 'w') do |app_layout|
102
- app_layout.puts "<html>I am the application layout</html>"
103
- end
104
- end
105
-
106
- it "should render application layout" do
107
- get :show, :urlname => :home
108
- response.body.should have_content('I am the application layout')
109
- end
110
-
111
- after do
112
- FileUtils.rm(@app_layout)
113
- end
114
-
115
- end
116
-
117
85
  end
118
86
 
119
87
  describe "url nesting" do
@@ -157,4 +125,43 @@ describe Alchemy::PagesController do
157
125
  end
158
126
  end
159
127
 
128
+ describe '#redirect_to_public_child' do
129
+
130
+ let(:root_page) { FactoryGirl.create(:language_root_page, :public => false) }
131
+ let(:page) { FactoryGirl.create(:page, :parent_id => root_page.id) }
132
+ let(:public_page) { FactoryGirl.create(:public_page, :parent_id => page.id) }
133
+
134
+ before { controller.instance_variable_set("@page", root_page) }
135
+
136
+ context "with unpublished and published pages in page tree" do
137
+
138
+ before do
139
+ public_page
140
+ root_page.reload
141
+ end
142
+
143
+ it "should redirect to first public child" do
144
+ controller.should_receive(:redirect_page)
145
+ controller.send(:redirect_to_public_child)
146
+ controller.instance_variable_get('@page').should == public_page
147
+ end
148
+
149
+ end
150
+
151
+ context "with only unpublished pages in page tree" do
152
+
153
+ before do
154
+ page
155
+ root_page.reload
156
+ end
157
+
158
+ it "should raise not found error" do
159
+ expect {
160
+ controller.send(:redirect_to_public_child)
161
+ }.to raise_error(ActionController::RoutingError)
162
+ end
163
+
164
+ end
165
+ end
166
+
160
167
  end