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.
- data/.gitignore +2 -1
- data/.travis.yml +3 -1
- data/.yardopts +1 -1
- data/Gemfile +2 -1
- data/alchemy_cms.gemspec +18 -17
- data/app/assets/images/alchemy/ajax_loader.gif +0 -0
- data/app/assets/images/alchemy/alchemy-logo.png +0 -0
- data/app/assets/images/alchemy/icons.png +0 -0
- data/app/assets/images/alchemy/image_loader.gif +0 -0
- data/app/assets/images/alchemy/placeholder.png +0 -0
- data/app/assets/images/alchemy/shading.png +0 -0
- data/app/assets/images/alchemy/swfupload/browse_button.png +0 -0
- data/app/assets/images/alchemy/tabs.gif +0 -0
- data/app/assets/images/alchemy/ui-icons_666666_256x240.png +0 -0
- data/app/assets/images/sassy-ie-overlay.png +0 -0
- data/app/assets/javascripts/alchemy/alchemy.base.js +1 -3
- data/app/assets/javascripts/alchemy/alchemy.browser.js.coffee +28 -0
- data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +2 -2
- data/app/assets/javascripts/alchemy/alchemy.js +2 -0
- data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +79 -47
- data/app/assets/javascripts/alchemy/alchemy.menubar.js +12 -4
- data/app/assets/javascripts/alchemy/alchemy.onload.js.coffee +1 -1
- data/app/assets/javascripts/alchemy/alchemy.preview.js.coffee +103 -0
- data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +1 -1
- data/app/assets/javascripts/alchemy/alchemy.uploader.js +4 -6
- data/app/assets/javascripts/alchemy/preview.js +1 -0
- data/app/assets/stylesheets/alchemy/admin.css.scss +25 -0
- data/app/assets/stylesheets/alchemy/{archive.css.scss → archive.scss} +0 -2
- data/app/assets/stylesheets/alchemy/{base.css.scss → base.scss} +1 -57
- data/app/assets/stylesheets/alchemy/{custom.css → custom.scss} +0 -0
- data/app/assets/stylesheets/alchemy/{dashboard.css.scss → dashboard.scss} +0 -2
- data/app/assets/stylesheets/alchemy/defaults.scss +5 -0
- data/app/assets/stylesheets/alchemy/{elements.css.scss → elements.scss} +24 -37
- data/app/assets/stylesheets/alchemy/{errors.css.scss → errors.scss} +0 -2
- data/app/assets/stylesheets/alchemy/{flash.css.scss → flash.scss} +0 -2
- data/app/assets/stylesheets/alchemy/{form_elements.css.scss → form_elements.scss} +39 -12
- data/app/assets/stylesheets/alchemy/{frame.css.scss → frame.scss} +0 -2
- data/app/assets/stylesheets/alchemy/{icons.css.scss → icons.scss} +20 -2
- data/app/assets/stylesheets/alchemy/{jquery-ui.alchemy.css.scss → jquery-ui.scss} +6 -3
- data/app/assets/stylesheets/alchemy/{login.css.scss → login.scss} +3 -3
- data/app/assets/stylesheets/alchemy/menubar.css.scss +0 -1
- data/app/assets/stylesheets/alchemy/{_defaults.scss → mixins.scss} +2 -39
- data/app/assets/stylesheets/alchemy/{modules.css.scss → modules.scss} +4 -2
- data/app/assets/stylesheets/alchemy/notices.scss +51 -0
- data/app/assets/stylesheets/alchemy/{pagination.css.scss → pagination.scss} +0 -2
- data/app/assets/stylesheets/alchemy/{print.css → print.css.scss} +3 -3
- data/app/assets/stylesheets/alchemy/search.scss +63 -0
- data/app/assets/stylesheets/alchemy/{sitemap.css.scss → sitemap.scss} +1 -2
- data/app/assets/stylesheets/alchemy/{tables.css.scss → tables.scss} +16 -3
- data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +3 -0
- data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +3 -0
- data/app/assets/stylesheets/alchemy/{upload.css.scss → upload.scss} +0 -2
- data/app/assets/stylesheets/alchemy/variables.scss +33 -0
- data/app/controllers/alchemy/admin/elements_controller.rb +1 -2
- data/app/controllers/alchemy/admin/tags_controller.rb +64 -0
- data/app/controllers/alchemy/base_controller.rb +8 -23
- data/app/controllers/alchemy/pages_controller.rb +5 -18
- data/app/helpers/alchemy/admin/base_helper.rb +1 -1
- data/app/helpers/alchemy/admin/elements_helper.rb +1 -0
- data/app/helpers/alchemy/elements_block_helper.rb +162 -0
- data/app/helpers/alchemy/elements_helper.rb +41 -3
- data/app/helpers/alchemy/pages_helper.rb +2 -1
- data/app/models/alchemy/attachment.rb +2 -1
- data/app/models/alchemy/element.rb +13 -10
- data/app/models/alchemy/essence_link.rb +11 -0
- data/app/models/alchemy/essence_picture.rb +15 -4
- data/app/models/alchemy/page.rb +23 -25
- data/app/models/alchemy/picture.rb +2 -2
- data/app/models/alchemy/tag.rb +16 -0
- data/app/models/alchemy/user.rb +3 -1
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +12 -12
- data/app/views/alchemy/admin/attachments/edit.html.erb +10 -4
- data/app/views/alchemy/admin/elements/_element.html.erb +10 -13
- data/app/views/alchemy/admin/elements/_element_foot.html.erb +1 -1
- data/app/views/alchemy/admin/essence_files/edit.html.erb +12 -76
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +9 -4
- data/app/views/alchemy/admin/layoutpages/_layoutpage.html.erb +1 -1
- data/app/views/alchemy/admin/layoutpages/index.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_external_link.html.erb +9 -4
- data/app/views/alchemy/admin/pages/configure.html.erb +22 -12
- data/app/views/alchemy/admin/pages/edit.html.erb +40 -40
- data/app/views/alchemy/admin/partials/_autocomplete_tag_list.html.erb +9 -0
- data/app/views/alchemy/admin/pictures/edit.html.erb +1 -1
- data/app/views/alchemy/admin/pictures/edit_multiple.html.erb +11 -2
- data/app/views/alchemy/admin/tags/_radio_tag.html.erb +6 -0
- data/app/views/alchemy/admin/tags/_tag.html.erb +29 -0
- data/app/views/alchemy/admin/tags/edit.html.erb +41 -0
- data/app/views/alchemy/admin/tags/index.html.erb +46 -0
- data/app/views/alchemy/admin/tags/new.html.erb +16 -0
- data/app/views/alchemy/admin/users/_table.html.erb +18 -10
- data/app/views/alchemy/admin/users/_user.html.erb +2 -1
- data/app/views/alchemy/admin/users/index.html.erb +2 -1
- data/app/views/alchemy/elements/_article_view.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_link_editor.html.erb +23 -0
- data/app/views/alchemy/essences/_essence_link_view.html.erb +0 -0
- data/app/views/alchemy/essences/_essence_picture_tools.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_text_editor.html.erb +1 -9
- data/app/views/alchemy/essences/_linkable_essence_tools.html.erb +19 -0
- data/app/views/layouts/alchemy/admin.html.erb +1 -1
- data/config/alchemy/elements.yml +2 -0
- data/config/alchemy/modules.yml +12 -0
- data/config/alchemy/page_layouts.yml +2 -0
- data/config/authorization_rules.rb +2 -0
- data/config/locales/alchemy.de.yml +36 -5
- data/config/locales/alchemy.en.yml +3 -0
- data/config/routes.rb +6 -4
- data/db/migrate/20121026100815_alchemy_two_point_three.rb +0 -36
- data/db/migrate/20121113115120_create_alchemy_essence_links.rb +13 -0
- data/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +7 -0
- data/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +5 -0
- data/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +9 -0
- data/lib/alchemy/engine.rb +1 -1
- data/lib/alchemy/resource.rb +1 -1
- data/lib/alchemy/resources_helper.rb +1 -1
- data/lib/alchemy/upgrader.rb +17 -0
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +1 -0
- data/lib/rails/generators/alchemy/base.rb +41 -0
- data/lib/rails/generators/alchemy/deploy_script/templates/deploy.rb.tt +10 -3
- data/lib/rails/generators/alchemy/elements/elements_generator.rb +6 -14
- data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +8 -6
- data/lib/rails/generators/alchemy/elements/templates/editor.html.haml +13 -0
- data/lib/rails/generators/alchemy/elements/templates/editor.html.slim +13 -0
- data/lib/rails/generators/alchemy/elements/templates/view.html.erb +4 -4
- data/lib/rails/generators/alchemy/elements/templates/view.html.haml +15 -0
- data/lib/rails/generators/alchemy/elements/templates/view.html.slim +15 -0
- data/lib/rails/generators/alchemy/essence/essence_generator.rb +1 -1
- data/lib/rails/generators/alchemy/essence/templates/editor.html.erb +2 -3
- data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +4 -13
- data/lib/rails/generators/alchemy/page_layouts/templates/layout.html.haml +1 -0
- data/lib/rails/generators/alchemy/page_layouts/templates/layout.html.slim +1 -0
- data/spec/controllers/pages_controller_spec.rb +41 -34
- data/spec/dummy/app/views/layouts/application.html.erb +51 -0
- data/spec/dummy/db/migrate/20121026100815_alchemy_two_point_three.rb +0 -36
- data/spec/dummy/db/migrate/20121113115120_create_alchemy_essence_links.rb +13 -0
- data/spec/dummy/db/migrate/20121115100736_add_cached_tag_list_to_elements_pages_and_users.rb +7 -0
- data/spec/dummy/db/migrate/20121116140636_add_cached_tag_list_to_alchemy_attachments.rb +5 -0
- data/spec/dummy/db/migrate/20121116141016_change_alchemy_pictures_tag_list_column.rb +9 -0
- data/spec/dummy/db/schema.rb +24 -45
- data/spec/helpers/elements_block_helper_spec.rb +135 -0
- data/spec/helpers/elements_helper_spec.rb +43 -5
- data/spec/integration/pages_controller_spec.rb +22 -18
- data/spec/integration/translation_integration_spec.rb +0 -15
- data/spec/models/element_spec.rb +44 -36
- data/spec/models/essence_picture_spec.rb +22 -6
- data/spec/models/page_spec.rb +28 -0
- data/spec/spec_helper.rb +8 -3
- data/spec/support/ci/install_phantomjs +6 -0
- metadata +82 -40
- data/app/assets/images/alchemy/gui/navi-tab.png +0 -0
- data/app/assets/images/alchemy/gui/shading_90.png +0 -0
- data/app/assets/images/alchemy/jquery-sb/select_arrow.gif +0 -0
- data/app/assets/images/alchemy/jquery-sb/select_arrow_bg.gif +0 -0
- data/app/assets/images/alchemy/jquery-sb/select_arrow_bg_hover.gif +0 -0
- data/app/assets/javascripts/alchemy/alchemy.preview.js +0 -98
- data/app/assets/stylesheets/alchemy/alchemy.css +0 -21
- data/app/controllers/alchemy/admin/essence_audios_controller.rb +0 -12
- data/app/controllers/alchemy/admin/essence_flashes_controller.rb +0 -12
- data/app/controllers/alchemy/admin/essence_videos_controller.rb +0 -12
- data/app/models/alchemy/essence_audio.rb +0 -14
- data/app/models/alchemy/essence_flash.rb +0 -12
- data/app/models/alchemy/essence_video.rb +0 -20
- data/app/views/alchemy/essences/_essence_audio_editor.html.erb +0 -1
- data/app/views/alchemy/essences/_essence_audio_view.html.erb +0 -33
- data/app/views/alchemy/essences/_essence_flash_editor.html.erb +0 -1
- data/app/views/alchemy/essences/_essence_flash_view.html.erb +0 -26
- data/app/views/alchemy/essences/_essence_video_editor.html.erb +0 -1
- 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
|
data/lib/alchemy/engine.rb
CHANGED
data/lib/alchemy/resource.rb
CHANGED
data/lib/alchemy/upgrader.rb
CHANGED
@@ -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
|
data/lib/alchemy/version.rb
CHANGED
data/lib/alchemy_cms.rb
CHANGED
@@ -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 '
|
1
|
+
require File.join(__FILE__, '../../base')
|
2
2
|
|
3
3
|
module Alchemy
|
4
4
|
module Generators
|
5
|
-
class ElementsGenerator <
|
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 =
|
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
|
-
|
33
|
-
|
34
|
-
|
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
|
-
<%%=
|
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
|
-
|
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
|
-
|
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
|
-
<%%=
|
14
|
+
<%%= el.render :<%= content["name"] %> %>
|
15
15
|
</div>
|
16
16
|
<%- else -%>
|
17
|
-
<%%=
|
17
|
+
<%%= el.render :<%= content["name"] %> %>
|
18
18
|
<%- end -%>
|
19
19
|
<%- end -%>
|
20
|
-
|
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
|
-
|
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 '
|
1
|
+
require File.join(__FILE__, '../../base')
|
2
2
|
|
3
3
|
module Alchemy
|
4
4
|
module Generators
|
5
|
-
class PageLayoutsGenerator <
|
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 =
|
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
|
-
|
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
|
@@ -0,0 +1 @@
|
|
1
|
+
= render_elements
|
@@ -0,0 +1 @@
|
|
1
|
+
= render_elements
|
@@ -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
|
-
|
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
|