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.
- 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,51 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<!-- Your site title-prefix (That is YourSite in "YourSite - CurrentPage" is taken from a layout-page by default.
|
|
5
|
+
Alternatively you can hardcode it here -->
|
|
6
|
+
<%= render_meta_data(:title_prefix => sitename_from_header_page, :title_seperator => "-") %>
|
|
7
|
+
<!-- Paths here are relative to app/assets/stylesheets.
|
|
8
|
+
alchemy/standard_set, though, is located in Alchemy-source and doesn't have to be present in your app,
|
|
9
|
+
but you can copy it over and customize it of course. -->
|
|
10
|
+
<%= stylesheet_link_tag "alchemy/standard_set", :media => :screen %>
|
|
11
|
+
<%= stylesheet_link_tag "alchemy/standard_set", :media => :print %>
|
|
12
|
+
<!-- Here is also the place for custom javascripts. Put them in app/assets/javascripts/yourscript.js (or yourscript.js.coffee)
|
|
13
|
+
and include them like this (remove the \):
|
|
14
|
+
<\%= javascript_include_tag "yourscript" %> -->
|
|
15
|
+
</head>
|
|
16
|
+
<body>
|
|
17
|
+
<div id="page">
|
|
18
|
+
<div id="language_select">
|
|
19
|
+
<!-- Render links with flags for all public languages -->
|
|
20
|
+
<%= language_switches(:linkname => :code) %>
|
|
21
|
+
</div>
|
|
22
|
+
<div id="breadcrump">
|
|
23
|
+
<!-- Renders a breadcrumb/ariadne-path. For customizing see docs for render_breadcrumb (link?) -->
|
|
24
|
+
<%= render_breadcrumb :seperator => "<span> < </span>" %>
|
|
25
|
+
</div>
|
|
26
|
+
<div id="navigation">
|
|
27
|
+
<!-- Renders main navigation. For customizing see docs for render_navigation (link?)
|
|
28
|
+
You can overwrite app/views/navigation/_renderer.html.erb and app/views/navigation/_link.html.erb
|
|
29
|
+
if you want to roll out your own markup -->
|
|
30
|
+
<%= render_navigation :all_sub_menues => true %>
|
|
31
|
+
</div>
|
|
32
|
+
<!-- Most important call here!
|
|
33
|
+
This yields (=inserts) all content of the current page.
|
|
34
|
+
Markup depends on page_layout, elements and essences and can be changed in app/views/alchemy/... -->
|
|
35
|
+
<%= yield %>
|
|
36
|
+
<div class="footer">
|
|
37
|
+
<!-- Renders elements that are called "footnote" (name-attribute in elements.yml)
|
|
38
|
+
from page_layout "layout_footer" (name-attribute in page_layout.yml) -->
|
|
39
|
+
<%= render_elements(
|
|
40
|
+
:from_page => 'layout_footer',
|
|
41
|
+
:only => ['footnote']
|
|
42
|
+
) %>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
<!-- This is used in Alchemy's backend to prevent navigating to other pages through the preview window -->
|
|
46
|
+
<%= alchemy_preview_mode_code %>
|
|
47
|
+
<!-- Renders a menu_bar when a user with sufficient rights visits a page -->
|
|
48
|
+
<%= alchemy_menu_bar %>
|
|
49
|
+
</body>
|
|
50
|
+
</html>
|
|
51
|
+
|
|
@@ -63,18 +63,6 @@ class AlchemyTwoPointThree < ActiveRecord::Migration
|
|
|
63
63
|
t.integer "page_id"
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
-
create_table "alchemy_essence_audios", :force => true do |t|
|
|
67
|
-
t.integer "attachment_id"
|
|
68
|
-
t.integer "width", :default => 400
|
|
69
|
-
t.integer "height", :default => 300
|
|
70
|
-
t.boolean "show_eq", :default => true
|
|
71
|
-
t.boolean "show_navigation", :default => true
|
|
72
|
-
t.integer "creator_id"
|
|
73
|
-
t.integer "updater_id"
|
|
74
|
-
t.datetime "created_at", :null => false
|
|
75
|
-
t.datetime "updated_at", :null => false
|
|
76
|
-
end
|
|
77
|
-
|
|
78
66
|
create_table "alchemy_essence_booleans", :force => true do |t|
|
|
79
67
|
t.boolean "value"
|
|
80
68
|
t.datetime "created_at", :null => false
|
|
@@ -103,17 +91,6 @@ class AlchemyTwoPointThree < ActiveRecord::Migration
|
|
|
103
91
|
t.datetime "updated_at", :null => false
|
|
104
92
|
end
|
|
105
93
|
|
|
106
|
-
create_table "alchemy_essence_flashes", :force => true do |t|
|
|
107
|
-
t.integer "attachment_id"
|
|
108
|
-
t.integer "width", :default => 400
|
|
109
|
-
t.integer "height", :default => 300
|
|
110
|
-
t.string "player_version", :default => "9.0.28"
|
|
111
|
-
t.integer "creator_id"
|
|
112
|
-
t.integer "updater_id"
|
|
113
|
-
t.datetime "created_at", :null => false
|
|
114
|
-
t.datetime "updated_at", :null => false
|
|
115
|
-
end
|
|
116
|
-
|
|
117
94
|
create_table "alchemy_essence_htmls", :force => true do |t|
|
|
118
95
|
t.text "source"
|
|
119
96
|
t.integer "creator_id"
|
|
@@ -176,19 +153,6 @@ class AlchemyTwoPointThree < ActiveRecord::Migration
|
|
|
176
153
|
t.datetime "updated_at", :null => false
|
|
177
154
|
end
|
|
178
155
|
|
|
179
|
-
create_table "alchemy_essence_videos", :force => true do |t|
|
|
180
|
-
t.integer "attachment_id"
|
|
181
|
-
t.integer "width"
|
|
182
|
-
t.integer "height"
|
|
183
|
-
t.boolean "allow_fullscreen", :default => true
|
|
184
|
-
t.boolean "auto_play", :default => false
|
|
185
|
-
t.boolean "show_navigation", :default => true
|
|
186
|
-
t.integer "creator_id"
|
|
187
|
-
t.integer "updater_id"
|
|
188
|
-
t.datetime "created_at", :null => false
|
|
189
|
-
t.datetime "updated_at", :null => false
|
|
190
|
-
end
|
|
191
|
-
|
|
192
156
|
create_table "alchemy_folded_pages", :force => true do |t|
|
|
193
157
|
t.integer "page_id"
|
|
194
158
|
t.integer "user_id"
|
|
@@ -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/spec/dummy/db/schema.rb
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
#
|
|
12
12
|
# It's strongly recommended to check this file into your version control system.
|
|
13
13
|
|
|
14
|
-
ActiveRecord::Schema.define(:version =>
|
|
14
|
+
ActiveRecord::Schema.define(:version => 20121116141016) do
|
|
15
15
|
|
|
16
16
|
create_table "alchemy_attachments", :force => true do |t|
|
|
17
17
|
t.string "name"
|
|
@@ -20,8 +20,9 @@ ActiveRecord::Schema.define(:version => 20121026104128) do
|
|
|
20
20
|
t.integer "size"
|
|
21
21
|
t.integer "creator_id"
|
|
22
22
|
t.integer "updater_id"
|
|
23
|
-
t.datetime "created_at",
|
|
24
|
-
t.datetime "updated_at",
|
|
23
|
+
t.datetime "created_at", :null => false
|
|
24
|
+
t.datetime "updated_at", :null => false
|
|
25
|
+
t.text "cached_tag_list"
|
|
25
26
|
end
|
|
26
27
|
|
|
27
28
|
create_table "alchemy_cells", :force => true do |t|
|
|
@@ -49,14 +50,15 @@ ActiveRecord::Schema.define(:version => 20121026104128) do
|
|
|
49
50
|
t.string "name"
|
|
50
51
|
t.integer "position"
|
|
51
52
|
t.integer "page_id"
|
|
52
|
-
t.boolean "public",
|
|
53
|
-
t.boolean "folded",
|
|
54
|
-
t.boolean "unique",
|
|
55
|
-
t.datetime "created_at",
|
|
56
|
-
t.datetime "updated_at",
|
|
53
|
+
t.boolean "public", :default => true
|
|
54
|
+
t.boolean "folded", :default => false
|
|
55
|
+
t.boolean "unique", :default => false
|
|
56
|
+
t.datetime "created_at", :null => false
|
|
57
|
+
t.datetime "updated_at", :null => false
|
|
57
58
|
t.integer "creator_id"
|
|
58
59
|
t.integer "updater_id"
|
|
59
60
|
t.integer "cell_id"
|
|
61
|
+
t.text "cached_tag_list"
|
|
60
62
|
end
|
|
61
63
|
|
|
62
64
|
add_index "alchemy_elements", ["page_id", "position"], :name => "index_elements_on_page_id_and_position"
|
|
@@ -66,18 +68,6 @@ ActiveRecord::Schema.define(:version => 20121026104128) do
|
|
|
66
68
|
t.integer "page_id"
|
|
67
69
|
end
|
|
68
70
|
|
|
69
|
-
create_table "alchemy_essence_audios", :force => true do |t|
|
|
70
|
-
t.integer "attachment_id"
|
|
71
|
-
t.integer "width", :default => 400
|
|
72
|
-
t.integer "height", :default => 300
|
|
73
|
-
t.boolean "show_eq", :default => true
|
|
74
|
-
t.boolean "show_navigation", :default => true
|
|
75
|
-
t.integer "creator_id"
|
|
76
|
-
t.integer "updater_id"
|
|
77
|
-
t.datetime "created_at", :null => false
|
|
78
|
-
t.datetime "updated_at", :null => false
|
|
79
|
-
end
|
|
80
|
-
|
|
81
71
|
create_table "alchemy_essence_booleans", :force => true do |t|
|
|
82
72
|
t.boolean "value"
|
|
83
73
|
t.datetime "created_at", :null => false
|
|
@@ -106,17 +96,6 @@ ActiveRecord::Schema.define(:version => 20121026104128) do
|
|
|
106
96
|
t.datetime "updated_at", :null => false
|
|
107
97
|
end
|
|
108
98
|
|
|
109
|
-
create_table "alchemy_essence_flashes", :force => true do |t|
|
|
110
|
-
t.integer "attachment_id"
|
|
111
|
-
t.integer "width", :default => 400
|
|
112
|
-
t.integer "height", :default => 300
|
|
113
|
-
t.string "player_version", :default => "9.0.28"
|
|
114
|
-
t.integer "creator_id"
|
|
115
|
-
t.integer "updater_id"
|
|
116
|
-
t.datetime "created_at", :null => false
|
|
117
|
-
t.datetime "updated_at", :null => false
|
|
118
|
-
end
|
|
119
|
-
|
|
120
99
|
create_table "alchemy_essence_htmls", :force => true do |t|
|
|
121
100
|
t.text "source"
|
|
122
101
|
t.integer "creator_id"
|
|
@@ -125,6 +104,17 @@ ActiveRecord::Schema.define(:version => 20121026104128) do
|
|
|
125
104
|
t.datetime "updated_at", :null => false
|
|
126
105
|
end
|
|
127
106
|
|
|
107
|
+
create_table "alchemy_essence_links", :force => true do |t|
|
|
108
|
+
t.string "link"
|
|
109
|
+
t.string "link_title"
|
|
110
|
+
t.string "link_target"
|
|
111
|
+
t.string "link_class_name"
|
|
112
|
+
t.datetime "created_at", :null => false
|
|
113
|
+
t.datetime "updated_at", :null => false
|
|
114
|
+
t.integer "creator_id"
|
|
115
|
+
t.integer "updater_id"
|
|
116
|
+
end
|
|
117
|
+
|
|
128
118
|
create_table "alchemy_essence_pictures", :force => true do |t|
|
|
129
119
|
t.integer "picture_id"
|
|
130
120
|
t.string "caption"
|
|
@@ -179,19 +169,6 @@ ActiveRecord::Schema.define(:version => 20121026104128) do
|
|
|
179
169
|
t.datetime "updated_at", :null => false
|
|
180
170
|
end
|
|
181
171
|
|
|
182
|
-
create_table "alchemy_essence_videos", :force => true do |t|
|
|
183
|
-
t.integer "attachment_id"
|
|
184
|
-
t.integer "width"
|
|
185
|
-
t.integer "height"
|
|
186
|
-
t.boolean "allow_fullscreen", :default => true
|
|
187
|
-
t.boolean "auto_play", :default => false
|
|
188
|
-
t.boolean "show_navigation", :default => true
|
|
189
|
-
t.integer "creator_id"
|
|
190
|
-
t.integer "updater_id"
|
|
191
|
-
t.datetime "created_at", :null => false
|
|
192
|
-
t.datetime "updated_at", :null => false
|
|
193
|
-
end
|
|
194
|
-
|
|
195
172
|
create_table "alchemy_folded_pages", :force => true do |t|
|
|
196
173
|
t.integer "page_id"
|
|
197
174
|
t.integer "user_id"
|
|
@@ -242,6 +219,7 @@ ActiveRecord::Schema.define(:version => 20121026104128) do
|
|
|
242
219
|
t.integer "creator_id"
|
|
243
220
|
t.integer "updater_id"
|
|
244
221
|
t.integer "language_id"
|
|
222
|
+
t.text "cached_tag_list"
|
|
245
223
|
end
|
|
246
224
|
|
|
247
225
|
add_index "alchemy_pages", ["language_id"], :name => "index_pages_on_language_id"
|
|
@@ -258,7 +236,7 @@ ActiveRecord::Schema.define(:version => 20121026104128) do
|
|
|
258
236
|
t.integer "creator_id"
|
|
259
237
|
t.integer "updater_id"
|
|
260
238
|
t.string "upload_hash"
|
|
261
|
-
t.
|
|
239
|
+
t.text "cached_tag_list"
|
|
262
240
|
end
|
|
263
241
|
|
|
264
242
|
create_table "alchemy_users", :force => true do |t|
|
|
@@ -285,6 +263,7 @@ ActiveRecord::Schema.define(:version => 20121026104128) do
|
|
|
285
263
|
t.datetime "updated_at", :null => false
|
|
286
264
|
t.integer "creator_id"
|
|
287
265
|
t.integer "updater_id"
|
|
266
|
+
t.text "cached_tag_list"
|
|
288
267
|
end
|
|
289
268
|
|
|
290
269
|
add_index "alchemy_users", ["perishable_token"], :name => "index_users_on_perishable_token"
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
include Alchemy::ElementsHelper
|
|
4
|
+
|
|
5
|
+
module Alchemy
|
|
6
|
+
describe ElementsBlockHelper do
|
|
7
|
+
let(:page) { FactoryGirl.create(:public_page) }
|
|
8
|
+
let(:element) { FactoryGirl.create(:element, page: page, tag_list: 'foo, bar') }
|
|
9
|
+
let(:expected_wrapper_tag) { "div.#{element.name}##{element_dom_id(element)}" }
|
|
10
|
+
|
|
11
|
+
describe '#element_view_for' do
|
|
12
|
+
it "should yield an instance of ElementViewHelper" do
|
|
13
|
+
expect { |b| element_view_for(element, &b) }.
|
|
14
|
+
to yield_with_args(ElementsBlockHelper::ElementViewHelper)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should wrap its output in a DOM element" do
|
|
18
|
+
element_view_for(element).
|
|
19
|
+
should have_css expected_wrapper_tag
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should change the wrapping DOM element according to parameters" do
|
|
23
|
+
element_view_for(element, tag: 'span', class: 'some_class', id: 'some_id').
|
|
24
|
+
should have_css 'span.some_class#some_id'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should include the element's tags in the wrapper DOM element" do
|
|
28
|
+
element_view_for(element).
|
|
29
|
+
should have_css "#{expected_wrapper_tag}[data-element-tags='foo bar']"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should use the provided tags formatter to format tags" do
|
|
33
|
+
element_view_for(element, tags_formatter: lambda { |tags| tags.join ", " }).
|
|
34
|
+
should have_css "#{expected_wrapper_tag}[data-element-tags='foo, bar']"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should include the contents rendered by the block passed to it" do
|
|
38
|
+
element_view_for(element) do
|
|
39
|
+
'view'
|
|
40
|
+
end.should have_content 'view'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context "when/if preview mode is not active" do
|
|
44
|
+
subject { element_view_for(element) }
|
|
45
|
+
it { should have_css expected_wrapper_tag }
|
|
46
|
+
it { should_not have_css "#{expected_wrapper_tag}[data-alchemy-element]" }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context "when/if preview mode is active" do
|
|
50
|
+
before do
|
|
51
|
+
assign(:preview_mode, true)
|
|
52
|
+
assign(:page, page)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
subject { helper.element_view_for(element) }
|
|
56
|
+
it { should have_css "#{expected_wrapper_tag}[data-alchemy-element='#{element.id}']" }
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe '#element_editor_for' do
|
|
61
|
+
it "should yield an instance of ElementEditorHelper" do
|
|
62
|
+
expect { |b| element_editor_for(element, &b) }.
|
|
63
|
+
to yield_with_args(ElementsBlockHelper::ElementEditorHelper)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should not add any extra elements" do
|
|
67
|
+
element_editor_for(element) do
|
|
68
|
+
'view'
|
|
69
|
+
end.should == 'view'
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe ElementsBlockHelper::ElementViewHelper do
|
|
74
|
+
let(:scope) { mock }
|
|
75
|
+
subject { ElementsBlockHelper::ElementViewHelper.new(scope, element: element) }
|
|
76
|
+
|
|
77
|
+
it 'should have a reference to the specified element' do
|
|
78
|
+
subject.element == element
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe '#render' do
|
|
82
|
+
it 'should delegate to the render_essence_view_by_name helper' do
|
|
83
|
+
scope.should_receive(:render_essence_view_by_name).with(element, "title", foo: 'bar')
|
|
84
|
+
subject.render :title, foo: 'bar'
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
describe '#content' do
|
|
89
|
+
it "should delegate to the element's #content_by_name method" do
|
|
90
|
+
element.should_receive(:content_by_name).with(:title)
|
|
91
|
+
subject.content :title
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
describe '#ingredient' do
|
|
96
|
+
it "should delegate to the element's #ingredient method" do
|
|
97
|
+
element.should_receive(:ingredient).with(:title)
|
|
98
|
+
subject.ingredient :title
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe '#has?' do
|
|
103
|
+
it "should delegate to the element's #has_ingredient? method" do
|
|
104
|
+
element.should_receive(:has_ingredient?).with(:title)
|
|
105
|
+
subject.has? :title
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
describe '#essence' do
|
|
110
|
+
it "should provide the specified content essence" do
|
|
111
|
+
subject.should_receive(:content).with(:title).
|
|
112
|
+
and_return(mock('content', :essence => mock('essence')))
|
|
113
|
+
|
|
114
|
+
subject.essence :title
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
describe ElementsBlockHelper::ElementEditorHelper do
|
|
120
|
+
let(:scope) { mock }
|
|
121
|
+
subject { ElementsBlockHelper::ElementEditorHelper.new(scope, element: element) }
|
|
122
|
+
|
|
123
|
+
it 'should have a reference to the specified element' do
|
|
124
|
+
subject.element == element
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
describe '#edit' do
|
|
128
|
+
it "should delegate to the render_essence_editor_by_name helper" do
|
|
129
|
+
scope.should_receive(:render_essence_editor_by_name).with(element, "title", foo: 'bar')
|
|
130
|
+
subject.edit :title, foo: 'bar'
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
@@ -158,14 +158,52 @@ describe Alchemy::ElementsHelper do
|
|
|
158
158
|
end
|
|
159
159
|
|
|
160
160
|
context "in preview mode" do
|
|
161
|
+
describe '#element_preview_code_attributes' do
|
|
162
|
+
it "should return the data-alchemy-element HTML attribute for element" do
|
|
163
|
+
@preview_mode = true
|
|
164
|
+
helper.element_preview_code_attributes(@element).should == {:'data-alchemy-element' => @element.id}
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it "should return an empty hash if not in preview_mode" do
|
|
168
|
+
helper.element_preview_code_attributes(@element).should == {}
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
describe '#element_preview_code' do
|
|
173
|
+
it "should return the data-alchemy-element HTML attribute for element" do
|
|
174
|
+
assign(:preview_mode, true)
|
|
175
|
+
helper.element_preview_code(@element).should == " data-alchemy-element=\"#{@element.id}\""
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "should not return the data-alchemy-element HTML attribute if not in preview_mode" do
|
|
179
|
+
helper.element_preview_code(@element).should_not == " data-alchemy-element=\"#{@element.id}\""
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
describe '#element_tags' do
|
|
185
|
+
|
|
186
|
+
context "element having tags" do
|
|
187
|
+
before { @element.tag_list = "peter, lustig"; @element.save! }
|
|
161
188
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
189
|
+
context "with no formatter lambda given" do
|
|
190
|
+
it "should return tag list as HTML data attribute" do
|
|
191
|
+
helper.element_tags(@element).should == " data-element-tags=\"peter lustig\""
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
context "with a formatter lambda given" do
|
|
196
|
+
it "should return a properly formatted HTML data attribute" do
|
|
197
|
+
helper.element_tags(@element, :formatter => lambda { |tags| tags.join ", " }).
|
|
198
|
+
should == " data-element-tags=\"peter, lustig\""
|
|
199
|
+
end
|
|
200
|
+
end
|
|
165
201
|
end
|
|
166
202
|
|
|
167
|
-
|
|
168
|
-
|
|
203
|
+
context "element not having tags" do
|
|
204
|
+
it "should return empty string" do
|
|
205
|
+
helper.element_tags(@element).should be_blank
|
|
206
|
+
end
|
|
169
207
|
end
|
|
170
208
|
|
|
171
209
|
end
|