alchemy_cms 2.4.beta2 → 2.4.rc1

Sign up to get free protection for your applications and to get access to all the features.
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