alchemy_cms 2.0.rc3 → 2.0.rc4
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 +3 -1
- data/.rspec +1 -2
- data/.travis.yml +11 -0
- data/.yardopts +0 -1
- data/Gemfile +1 -2
- data/README.md +14 -0
- data/alchemy_cms.gemspec +4 -2
- data/app/controllers/admin/clipboard_controller.rb +8 -9
- data/app/controllers/admin/contents_controller.rb +4 -2
- data/app/controllers/admin/essence_pictures_controller.rb +2 -2
- data/app/controllers/admin/layoutpages_controller.rb +2 -0
- data/app/controllers/admin/pages_controller.rb +5 -5
- data/app/controllers/admin/pictures_controller.rb +2 -1
- data/app/controllers/admin/trash_controller.rb +2 -0
- data/app/controllers/alchemy_controller.rb +10 -4
- data/app/controllers/elements_controller.rb +1 -1
- data/app/helpers/admin/elements_helper.rb +32 -1
- data/app/helpers/alchemy_helper.rb +15 -818
- data/app/helpers/contents_helper.rb +69 -0
- data/app/helpers/elements_helper.rb +161 -0
- data/app/helpers/essences_helper.rb +167 -0
- data/app/helpers/pages_helper.rb +401 -19
- data/app/models/attachment.rb +4 -0
- data/app/models/element.rb +27 -14
- data/app/models/page.rb +75 -38
- data/app/views/admin/essence_pictures/destroy.js.erb +1 -1
- data/app/views/admin/pages/_create_language_form.html.erb +2 -1
- data/app/views/admin/pages/new.html.erb +1 -1
- data/app/views/admin/pages/update.js.erb +1 -1
- data/app/views/admin/partials/_upload_form.html.erb +2 -2
- data/app/views/admin/pictures/index.html.erb +7 -4
- data/app/views/essences/_essence_picture_editor.html.erb +1 -3
- data/app/views/layouts/alchemy.html.erb +59 -59
- data/app/views/layouts/pages.html.erb +2 -4
- data/app/views/{partials/_navigation_image_link.html.erb → navigation/_image_link.html.erb} +0 -0
- data/app/views/{partials/_navigation_link.html.erb → navigation/_link.html.erb} +1 -1
- data/app/views/{partials/_navigation_renderer.html.erb → navigation/_renderer.html.erb} +0 -0
- data/app/views/page_layouts/_contact.html.erb +1 -1
- data/app/views/page_layouts/_external.html.erb +0 -1
- data/app/views/page_layouts/_intro.html.erb +1 -1
- data/app/views/page_layouts/_news.html.erb +1 -1
- data/app/views/page_layouts/_search.html.erb +1 -1
- data/app/views/page_layouts/_standard.html.erb +1 -1
- data/assets/images/icons.png +0 -0
- data/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +49 -31
- data/assets/stylesheets/alchemy.css +111 -91
- data/assets/stylesheets/elements.css +12 -16
- data/bin/alchemy +1 -1
- data/config/alchemy/config.yml +4 -0
- data/config/initializers/tinymce_hammer.rb +1 -0
- data/config/locales/de.yml +3 -1
- data/config/locales/en.yml +2 -0
- data/config/routes.rb +6 -4
- data/lib/alchemy/capistrano.rb +4 -7
- data/lib/alchemy/page_layout.rb +12 -8
- data/lib/alchemy/version.rb +1 -1
- data/spec/controllers/admin/clipboard_controller_spec.rb +23 -0
- data/spec/dummy/db/schema.rb +9 -9
- data/spec/factories.rb +24 -6
- data/spec/helpers/admin/elements_helper_spec.rb +20 -0
- data/spec/helpers/alchemy_helper_spec.rb +41 -0
- data/spec/helpers/contents_helper_spec.rb +27 -0
- data/spec/helpers/elements_helper_spec.rb +39 -0
- data/spec/helpers/essences_helper_spec.rb +49 -0
- data/spec/helpers/pages_helper_spec.rb +140 -0
- data/spec/integration/security_spec.rb +1 -1
- data/spec/integration/standardset_spec.rb +29 -0
- data/spec/models/element_spec.rb +49 -0
- data/spec/{language_spec.rb → models/language_spec.rb} +0 -0
- data/spec/models/page_spec.rb +139 -0
- data/spec/{user_spec.rb → models/user_spec.rb} +0 -0
- data/spec/page_layout_spec.rb +21 -0
- data/spec/routing_spec.rb +53 -0
- data/spec/spec_helper.rb +12 -11
- metadata +54 -303
- data/spec/dummy/config/alchemy/config.yml +0 -199
- data/spec/dummy/config/alchemy/elements.yml +0 -91
- data/spec/dummy/config/alchemy/page_layouts.yml +0 -29
- data/spec/dummy/public/images/alchemy/ajax_loader.gif +0 -0
- data/spec/dummy/public/images/alchemy/alchemy-logo.png +0 -0
- data/spec/dummy/public/images/alchemy/flags.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/navi-tab.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/shading.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/shading_90.png +0 -0
- data/spec/dummy/public/images/alchemy/gui/toggle.png +0 -0
- data/spec/dummy/public/images/alchemy/icons.png +0 -0
- data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow.gif +0 -0
- data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg.gif +0 -0
- data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg_hover.gif +0 -0
- data/spec/dummy/public/images/alchemy/jquery-ui/ui-icons_666666_256x240.png +0 -0
- data/spec/dummy/public/images/alchemy/placeholder.png +0 -0
- data/spec/dummy/public/images/alchemy/swfupload/browse_button.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/alchemy.element_editor_selector.js +0 -88
- data/spec/dummy/public/javascripts/alchemy/alchemy.growler.js +0 -44
- data/spec/dummy/public/javascripts/alchemy/alchemy.image_cropper.js +0 -56
- data/spec/dummy/public/javascripts/alchemy/alchemy.js +0 -892
- data/spec/dummy/public/javascripts/alchemy/alchemy.link_overlay.js +0 -221
- data/spec/dummy/public/javascripts/alchemy/alchemy.page_sorter.js +0 -42
- data/spec/dummy/public/javascripts/alchemy/alchemy.preview.js +0 -145
- data/spec/dummy/public/javascripts/alchemy/jquery-ui.js +0 -428
- data/spec/dummy/public/javascripts/alchemy/jquery.Jcrop.min.js +0 -246
- data/spec/dummy/public/javascripts/alchemy/jquery.dialogextend.min.js +0 -8
- data/spec/dummy/public/javascripts/alchemy/jquery.in-place-edit.js +0 -171
- data/spec/dummy/public/javascripts/alchemy/jquery.js +0 -18
- data/spec/dummy/public/javascripts/alchemy/jquery.rails.js +0 -315
- data/spec/dummy/public/javascripts/alchemy/jquery.sb.min.js +0 -14
- data/spec/dummy/public/javascripts/alchemy/jquery.scrollTo-1.4.2-min.js +0 -11
- data/spec/dummy/public/javascripts/alchemy/jquery.ui.nestedSortable.js +0 -291
- data/spec/dummy/public/javascripts/alchemy/jquery.ui.tabspaging.js +0 -281
- data/spec/dummy/public/javascripts/alchemy/swfupload/fileprogress.js +0 -203
- data/spec/dummy/public/javascripts/alchemy/swfupload/handlers.js +0 -171
- data/spec/dummy/public/javascripts/alchemy/swfupload/queue.js +0 -98
- data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.js +0 -980
- data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.swf +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/jquery.tinymce.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/de.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/en.js +0 -223
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/license.txt +0 -504
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/editor_plugin.js +0 -43
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/de.js +0 -4
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/en.js +0 -4
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -109
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +0 -402
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/template.htm +0 -387
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/lists/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pastetext.js +0 -36
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pasteword.js +0 -51
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/de_dlg.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/en_dlg.js +0 -5
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pastetext.htm +0 -27
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pasteword.htm +0 -21
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/cell.htm +0 -180
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/cell.css +0 -17
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/row.css +0 -25
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/table.css +0 -13
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/editor_plugin.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/cell.js +0 -319
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/merge_cells.js +0 -27
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/row.js +0 -237
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/table.js +0 -450
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/de_dlg.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/en_dlg.js +0 -75
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/merge_cells.htm +0 -32
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/row.htm +0 -158
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/table.htm +0 -188
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/about.htm +0 -52
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/anchor.htm +0 -26
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/charmap.htm +0 -51
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/color_picker.htm +0 -74
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/editor_template.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/image.htm +0 -80
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/flash.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/iframe.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/trans.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/video.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/about.js +0 -73
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/anchor.js +0 -42
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/charmap.js +0 -355
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/color_picker.js +0 -329
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/image.js +0 -247
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/link.js +0 -153
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/source_editor.js +0 -56
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de_dlg.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en.js +0 -68
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en_dlg.js +0 -54
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/link.htm +0 -57
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/shortcuts.htm +0 -47
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/content.css +0 -47
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/dialog.css +0 -117
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/ui.css +0 -214
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/content.css +0 -23
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +0 -105
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/ui.css +0 -102
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/content.css +0 -46
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/dialog.css +0 -117
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui.css +0 -217
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +0 -8
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +0 -5
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/source_editor.htm +0 -25
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/simple/langs/de.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce.js +0 -1
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce_popup.js +0 -5
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/editable_selects.js +0 -70
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/form_utils.js +0 -210
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/mctabs.js +0 -162
- data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/validate.js +0 -252
- data/spec/dummy/public/stylesheets/alchemy/Jcrop.gif +0 -0
- data/spec/dummy/public/stylesheets/alchemy/alchemy.css +0 -3653
- data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_content.css +0 -94
- data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_dialog.css +0 -415
- data/spec/dummy/public/stylesheets/alchemy/default/img/tabs.gif +0 -0
- data/spec/dummy/public/stylesheets/alchemy/elements.css +0 -900
- data/spec/dummy/public/stylesheets/alchemy/flags.css +0 -1
- data/spec/dummy/public/stylesheets/alchemy/ie6.css +0 -18
- data/spec/dummy/public/stylesheets/alchemy/jquery-ui-1.8.7.alchemy.css +0 -2023
- data/spec/dummy/public/stylesheets/alchemy/jquery.Jcrop.css +0 -35
- data/spec/dummy/public/stylesheets/alchemy/jquery.sb.css +0 -244
- data/spec/dummy/public/stylesheets/alchemy/standard_set.css +0 -374
- data/spec/page_spec.rb +0 -50
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
/* @override http://localhost:3000/stylesheets/alchemy/elements.css */
|
|
2
|
-
|
|
3
1
|
/* @override
|
|
2
|
+
http://localhost:3000/stylesheets/alchemy/elements.css
|
|
4
3
|
http://0.0.0.0:3000/stylesheets/alchemy/elements.css
|
|
5
4
|
http://localhost:3000/stylesheets/alchemy/elements.css
|
|
6
5
|
*/
|
|
@@ -63,7 +62,7 @@ img.add_element_spinner {
|
|
|
63
62
|
position: absolute;
|
|
64
63
|
top: 0;
|
|
65
64
|
left: 0;
|
|
66
|
-
background: url(/images/alchemy/icons.png) no-repeat -
|
|
65
|
+
background: url(/images/alchemy/icons.png) no-repeat -224px -72px;
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
.element_handle span.icon {
|
|
@@ -74,7 +73,7 @@ img.add_element_spinner {
|
|
|
74
73
|
}
|
|
75
74
|
|
|
76
75
|
.element_handle span.icon.element_dirty {
|
|
77
|
-
background-position: -
|
|
76
|
+
background-position: -160px -166px;
|
|
78
77
|
}
|
|
79
78
|
|
|
80
79
|
div.element_foot span.element_public {
|
|
@@ -105,7 +104,7 @@ div.element_foot span.element_public {
|
|
|
105
104
|
|
|
106
105
|
.add_content {
|
|
107
106
|
float: left;
|
|
108
|
-
margin:
|
|
107
|
+
margin: 1px;
|
|
109
108
|
width: 111px;
|
|
110
109
|
padding: 4px;
|
|
111
110
|
background-color: #f0e8d7;
|
|
@@ -129,7 +128,7 @@ div.element_foot span.element_public {
|
|
|
129
128
|
}
|
|
130
129
|
|
|
131
130
|
.add_content a .icon.assign {
|
|
132
|
-
background: url(/images/alchemy/icons.png) no-repeat -
|
|
131
|
+
background: url(/images/alchemy/icons.png) no-repeat -288px -72px;
|
|
133
132
|
position: absolute;
|
|
134
133
|
top: 52px;
|
|
135
134
|
left: 47px;
|
|
@@ -226,15 +225,15 @@ span.element_tools_icons {
|
|
|
226
225
|
}
|
|
227
226
|
|
|
228
227
|
a.delete_element_button {
|
|
229
|
-
background: url(/images/alchemy/icons.png) no-repeat -
|
|
228
|
+
background: url(/images/alchemy/icons.png) no-repeat -63px -72px;
|
|
230
229
|
}
|
|
231
230
|
|
|
232
231
|
a.element_copy_button {
|
|
233
|
-
background: url(/images/alchemy/icons.png) no-repeat -
|
|
232
|
+
background: url(/images/alchemy/icons.png) no-repeat -128px -72px;
|
|
234
233
|
}
|
|
235
234
|
|
|
236
235
|
a.element_move_button {
|
|
237
|
-
background: url(/images/alchemy/icons.png) no-repeat -
|
|
236
|
+
background: url(/images/alchemy/icons.png) no-repeat -97px -72px;
|
|
238
237
|
}
|
|
239
238
|
|
|
240
239
|
.element_head {
|
|
@@ -256,17 +255,14 @@ form.add_gallery_to_index {
|
|
|
256
255
|
|
|
257
256
|
div.picture_gallery_images {
|
|
258
257
|
margin-top: 8px;
|
|
259
|
-
height: 100%;
|
|
260
|
-
padding-top: 1px;
|
|
261
|
-
padding-bottom: 2px;
|
|
262
258
|
overflow: hidden;
|
|
263
259
|
margin-bottom: 8px;
|
|
264
260
|
border: 1px inset #cecece;
|
|
265
|
-
padding-left: 2px;
|
|
266
261
|
-webkit-border-radius: 3px;
|
|
267
262
|
-moz-border-radius: 3px;
|
|
268
263
|
border-radius: 3px;
|
|
269
264
|
background-color: #e5dcca;
|
|
265
|
+
padding: 1px;
|
|
270
266
|
}
|
|
271
267
|
|
|
272
268
|
div.picture_thumbnail div.picture_image img.img_paddingtop {
|
|
@@ -352,7 +348,7 @@ div.content_editor a.icon_button.unlink {
|
|
|
352
348
|
}
|
|
353
349
|
|
|
354
350
|
a.expand_element {
|
|
355
|
-
background: url(/images/alchemy/icons.png) no-repeat -
|
|
351
|
+
background: url(/images/alchemy/icons.png) no-repeat -160px -72px;
|
|
356
352
|
height: 16px;
|
|
357
353
|
width: 16px;
|
|
358
354
|
text-decoration: none;
|
|
@@ -361,7 +357,7 @@ a.expand_element {
|
|
|
361
357
|
}
|
|
362
358
|
|
|
363
359
|
a.fold_element {
|
|
364
|
-
background: url(/images/alchemy/icons.png) no-repeat -
|
|
360
|
+
background: url(/images/alchemy/icons.png) no-repeat -192px -72px;
|
|
365
361
|
height: 16px;
|
|
366
362
|
width: 16px;
|
|
367
363
|
text-decoration: none;
|
|
@@ -800,7 +796,7 @@ textarea {
|
|
|
800
796
|
width: 111px;
|
|
801
797
|
height: 115px;
|
|
802
798
|
padding: 4px;
|
|
803
|
-
margin:
|
|
799
|
+
margin: 1px;
|
|
804
800
|
}
|
|
805
801
|
|
|
806
802
|
div.element_editor div.error {
|
data/bin/alchemy
CHANGED
|
@@ -18,7 +18,7 @@ class Alchemy < Thor
|
|
|
18
18
|
|
|
19
19
|
say "Installing...", :yellow
|
|
20
20
|
|
|
21
|
-
if system "rails new #{project} -m #{File.join(File.dirname(__FILE__), '..', 'lib', 'rails', 'templates', 'alchemy.rb')} -d mysql -JT"
|
|
21
|
+
if system "rails _3.0.10_ new #{project} -m #{File.join(File.dirname(__FILE__), '..', 'lib', 'rails', 'templates', 'alchemy.rb')} -d mysql -JT"
|
|
22
22
|
|
|
23
23
|
@application = project
|
|
24
24
|
|
data/config/alchemy/config.yml
CHANGED
|
@@ -115,9 +115,13 @@ default_language:
|
|
|
115
115
|
:user_roles: [registered, author, editor, admin]
|
|
116
116
|
|
|
117
117
|
# === Uploader Settings
|
|
118
|
+
# Set an upload limit in megabytes which counts for all uploads together.
|
|
119
|
+
# Set a file size limit in megabytes for a per file limit.
|
|
118
120
|
# Allow filetypes to upload.
|
|
119
121
|
# Pass * to allow all kind of files.
|
|
120
122
|
:uploader:
|
|
123
|
+
:upload_limit: 500
|
|
124
|
+
:file_size_limit: 100
|
|
121
125
|
:allowed_filetypes:
|
|
122
126
|
:pictures: [jpg, jpeg, gif, png, psd, pdf]
|
|
123
127
|
:attachments: [*]
|
|
@@ -18,6 +18,7 @@ if defined?(Tinymce::Hammer)
|
|
|
18
18
|
:width => "100%",
|
|
19
19
|
:theme_advanced_resizing => true,
|
|
20
20
|
:theme_advanced_resize_horizontal => false,
|
|
21
|
+
:theme_advanced_resizing_min_height => '185',
|
|
21
22
|
:theme_advanced_toolbar_align => 'left',
|
|
22
23
|
:theme_advanced_toolbar_location => 'top',
|
|
23
24
|
:theme_advanced_statusbar_location => 'bottom',
|
data/config/locales/de.yml
CHANGED
|
@@ -202,6 +202,8 @@ de:
|
|
|
202
202
|
video/x-msvideo: 'AVI-Video'
|
|
203
203
|
video/x-ms-wmv: 'Windows Media Video'
|
|
204
204
|
image/tiff: 'TIFF-Bild'
|
|
205
|
+
'text/x-vcard': 'vCard'
|
|
206
|
+
application/vcard: 'vCard'
|
|
205
207
|
|
|
206
208
|
link_target_options:
|
|
207
209
|
default: gleichem Fenster
|
|
@@ -323,7 +325,7 @@ de:
|
|
|
323
325
|
inclusion: "%{attribute} ist kein gültiger Wert"
|
|
324
326
|
exclusion: "%{attribute} ist nicht verfügbar"
|
|
325
327
|
invalid: "%{attribute} ist nicht gültig"
|
|
326
|
-
record_invalid: 'Validierung ist fehlgeschlagen'
|
|
328
|
+
record_invalid: 'Validierung von %{errors} ist fehlgeschlagen'
|
|
327
329
|
confirmation: "%{attribute} stimmt nicht mit der Bestätigung überein"
|
|
328
330
|
accepted: "%{attribute} muss akzeptiert werden"
|
|
329
331
|
empty: "%{attribute} muss ausgefüllt werden"
|
data/config/locales/en.yml
CHANGED
data/config/routes.rb
CHANGED
|
@@ -14,7 +14,7 @@ Rails.application.routes.draw do
|
|
|
14
14
|
:as => :leave_admin
|
|
15
15
|
match '/admin/logout' => 'admin#logout',
|
|
16
16
|
:as => :logout
|
|
17
|
-
match '/attachment/:id/download/:name' => 'attachments#download',
|
|
17
|
+
match '/attachment/:id/download(/:name)(.:suffix)' => 'attachments#download',
|
|
18
18
|
:as => :download_attachment
|
|
19
19
|
match '/attachment/:id/show' => 'attachments#show',
|
|
20
20
|
:as => :show_attachment
|
|
@@ -29,12 +29,14 @@ Rails.application.routes.draw do
|
|
|
29
29
|
match '/pictures/thumbnails/:id/:size(/:crop_from)(/:crop_size)/thumbnail.png' => 'pictures#thumbnail',
|
|
30
30
|
:as => :thumbnail, :defaults => { :format => 'png' }
|
|
31
31
|
match '/:lang' => 'pages#show',
|
|
32
|
-
:constraints => {:lang =>
|
|
32
|
+
:constraints => {:lang => /[a-z]{2}/},
|
|
33
33
|
:as => :show_language_root
|
|
34
34
|
match '(/:lang)/:urlname(.:format)' => 'pages#show',
|
|
35
|
-
:constraints => {:lang =>
|
|
35
|
+
:constraints => {:lang => /[a-z]{2}/},
|
|
36
36
|
:as => :show_page
|
|
37
|
-
|
|
37
|
+
match '/wa_files/download/:id' => 'attachments#download'
|
|
38
|
+
match '/uploads/files/0000/:id/:name(.:suffix)' => 'attachments#download'
|
|
39
|
+
|
|
38
40
|
resources :user_sessions
|
|
39
41
|
resources :elements, :only => :show
|
|
40
42
|
|
data/lib/alchemy/capistrano.rb
CHANGED
|
@@ -16,11 +16,9 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
|
16
16
|
# Call after deploy:setup like +after "deploy:setup", "alchemy:create_shared_folders"+ in your +deploy.rb+.
|
|
17
17
|
desc "Creates the uploads and picture cache directory in the shared folder. Call after deploy:setup"
|
|
18
18
|
task :create, :roles => :app do
|
|
19
|
-
run "mkdir -p #{shared_path}/uploads"
|
|
20
19
|
run "mkdir -p #{shared_path}/index"
|
|
21
20
|
run "mkdir -p #{shared_path}/uploads/pictures"
|
|
22
21
|
run "mkdir -p #{shared_path}/uploads/attachments"
|
|
23
|
-
run "mkdir -p #{shared_path}/cache"
|
|
24
22
|
run "mkdir -p #{shared_path}/cache/pictures"
|
|
25
23
|
end
|
|
26
24
|
|
|
@@ -28,13 +26,12 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
|
28
26
|
# Call after deploy:symlink like +after "deploy:symlink", "alchemy:symlink_folders"+ in your +deploy.rb+.
|
|
29
27
|
desc "Sets the symlinks for uploads, picture cache and ferret index folder. Call after deploy:symlink"
|
|
30
28
|
task :symlink, :roles => :app do
|
|
31
|
-
run "rm -rf #{current_path}/
|
|
32
|
-
run "ln -nfs #{shared_path}/uploads
|
|
33
|
-
run "ln -nfs #{shared_path}/uploads/attachments/ #{current_path}/uploads/attachments"
|
|
29
|
+
run "rm -rf #{current_path}/uploads"
|
|
30
|
+
run "ln -nfs #{shared_path}/uploads #{current_path}/"
|
|
34
31
|
run "rm -rf #{current_path}/public/pictures"
|
|
35
|
-
run "ln -nfs #{shared_path}/cache/pictures
|
|
32
|
+
run "ln -nfs #{shared_path}/cache/pictures #{current_path}/public/"
|
|
36
33
|
run "rm -rf #{current_path}/index"
|
|
37
|
-
run "ln -nfs #{shared_path}/index
|
|
34
|
+
run "ln -nfs #{shared_path}/index #{current_path}/"
|
|
38
35
|
end
|
|
39
36
|
|
|
40
37
|
end
|
data/lib/alchemy/page_layout.rb
CHANGED
|
@@ -13,14 +13,18 @@ module Alchemy
|
|
|
13
13
|
|
|
14
14
|
# Returns the page_layout.yml file. Tries to first load from config/alchemy and if not found from vendor/plugins/alchemy/config/alchemy.
|
|
15
15
|
def self.get_layouts
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
if File.exists? "#{Rails.root}/config/alchemy/page_layouts.yml"
|
|
17
|
+
layouts = YAML.load_file( "#{Rails.root}/config/alchemy/page_layouts.yml" )
|
|
18
|
+
end
|
|
19
|
+
if !layouts
|
|
20
|
+
if File.exists?(File.join(File.dirname(__FILE__), "../../config/alchemy/page_layouts.yml"))
|
|
21
|
+
layouts = YAML.load_file( File.join(File.dirname(__FILE__), "../../config/alchemy/page_layouts.yml") )
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
if !layouts
|
|
25
|
+
raise LoadError, "Could not find page_layouts.yml file! Please run: rails generate alchemy:scaffold"
|
|
26
|
+
end
|
|
27
|
+
layouts
|
|
24
28
|
end
|
|
25
29
|
|
|
26
30
|
# Returns the page_layout description found by name in page_layouts.yml
|
data/lib/alchemy/version.rb
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Admin::ClipboardController do
|
|
4
|
+
|
|
5
|
+
before(:each) do
|
|
6
|
+
activate_authlogic
|
|
7
|
+
UserSession.create FactoryGirl.create(:admin_user)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
context "clipboard" do
|
|
11
|
+
|
|
12
|
+
it "should not insert the same element twice" do
|
|
13
|
+
pending "We have to spec our models before we write integration tests"
|
|
14
|
+
@page = FactoryGirl.create(:page, :parent_id => Page.rootpage.id)
|
|
15
|
+
@element = FactoryGirl.create(:element, :page => @page)
|
|
16
|
+
post(:insert, {:remarkable_type => 'element', :remarkable_id => element.id, :format => :js})
|
|
17
|
+
post(:insert, {:remarkable_type => 'element', :remarkable_id => element.id, :format => :js})
|
|
18
|
+
session[:clipboard][:elements].should == [element.id]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
data/spec/dummy/db/schema.rb
CHANGED
|
@@ -197,7 +197,7 @@ ActiveRecord::Schema.define(:version => 20110919110451) do
|
|
|
197
197
|
t.string "urlname"
|
|
198
198
|
t.string "title"
|
|
199
199
|
t.string "language_code"
|
|
200
|
-
t.boolean "language_root"
|
|
200
|
+
t.boolean "language_root"
|
|
201
201
|
t.string "page_layout"
|
|
202
202
|
t.text "meta_keywords"
|
|
203
203
|
t.text "meta_description"
|
|
@@ -205,15 +205,15 @@ ActiveRecord::Schema.define(:version => 20110919110451) do
|
|
|
205
205
|
t.integer "rgt"
|
|
206
206
|
t.integer "parent_id"
|
|
207
207
|
t.integer "depth"
|
|
208
|
-
t.boolean "visible",
|
|
209
|
-
t.boolean "public",
|
|
210
|
-
t.boolean "locked",
|
|
208
|
+
t.boolean "visible", :default => false
|
|
209
|
+
t.boolean "public", :default => false
|
|
210
|
+
t.boolean "locked", :default => false
|
|
211
211
|
t.integer "locked_by"
|
|
212
|
-
t.boolean "restricted",
|
|
213
|
-
t.boolean "robot_index",
|
|
214
|
-
t.boolean "robot_follow",
|
|
215
|
-
t.boolean "sitemap",
|
|
216
|
-
t.boolean "layoutpage",
|
|
212
|
+
t.boolean "restricted", :default => false
|
|
213
|
+
t.boolean "robot_index", :default => true
|
|
214
|
+
t.boolean "robot_follow", :default => true
|
|
215
|
+
t.boolean "sitemap", :default => true
|
|
216
|
+
t.boolean "layoutpage", :default => false
|
|
217
217
|
t.datetime "created_at"
|
|
218
218
|
t.datetime "updated_at"
|
|
219
219
|
t.integer "creator_id"
|
data/spec/factories.rb
CHANGED
|
@@ -28,16 +28,34 @@ FactoryGirl.define do
|
|
|
28
28
|
code "kl"
|
|
29
29
|
name 'Klingonian'
|
|
30
30
|
default false
|
|
31
|
-
frontpage_name '
|
|
31
|
+
frontpage_name 'Tuq'
|
|
32
32
|
page_layout 'intro'
|
|
33
33
|
public true
|
|
34
34
|
end
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
factory :page do
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
language { Language.find_by_code('kl') || Factory(:language) }
|
|
38
|
+
name "A Page"
|
|
39
|
+
parent_id { Factory(:language_root_page).id }
|
|
40
|
+
page_layout "standard"
|
|
41
|
+
|
|
42
|
+
factory :language_root_page do
|
|
43
|
+
name 'Klingonian'
|
|
44
|
+
page_layout 'intro'
|
|
45
|
+
language_root true
|
|
46
|
+
public true
|
|
47
|
+
parent_id { Page.root.id }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
factory :public_page do
|
|
51
|
+
name "A Public Page"
|
|
52
|
+
public true
|
|
53
|
+
end
|
|
54
|
+
|
|
41
55
|
end
|
|
42
56
|
|
|
57
|
+
factory :element do
|
|
58
|
+
name 'article'
|
|
59
|
+
end
|
|
60
|
+
|
|
43
61
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
include AlchemyHelper
|
|
4
|
+
|
|
5
|
+
describe Admin::ElementsHelper do
|
|
6
|
+
|
|
7
|
+
before(:each) do
|
|
8
|
+
@page = Factory(:public_page)
|
|
9
|
+
@element = Factory(:element, :page => @page)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should render an element editor partial" do
|
|
13
|
+
helper.render_editor(@element).should match(/class="content_editor".+id="essence_text_11"/)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should render a picture editor partial" do
|
|
17
|
+
helper.render_picture_editor(@element).should match(/class="essence_picture_editor"/)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe AlchemyHelper do
|
|
4
|
+
|
|
5
|
+
context "maximum amount of images option" do
|
|
6
|
+
|
|
7
|
+
before(:each) do
|
|
8
|
+
@options = {}
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context "with max_images option" do
|
|
12
|
+
|
|
13
|
+
it "should return nil for empty string" do
|
|
14
|
+
@options[:max_images] = ""
|
|
15
|
+
max_image_count.should be(nil)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should return an integer for string number" do
|
|
19
|
+
@options[:max_images] = "1"
|
|
20
|
+
max_image_count.should be(1)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context "with maximum_amount_of_images option" do
|
|
26
|
+
|
|
27
|
+
it "should return nil for empty string" do
|
|
28
|
+
@options[:maximum_amount_of_images] = ""
|
|
29
|
+
max_image_count.should be(nil)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should return an integer for string number" do
|
|
33
|
+
@options[:maximum_amount_of_images] = "1"
|
|
34
|
+
max_image_count.should be(1)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
include AlchemyHelper
|
|
4
|
+
|
|
5
|
+
describe ContentsHelper do
|
|
6
|
+
|
|
7
|
+
before(:each) do
|
|
8
|
+
@element = Factory(:element)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should render a dom id" do
|
|
12
|
+
content_dom_id(@element.contents.first).should == "essence_text_1"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should render the content name" do
|
|
16
|
+
render_content_name(@element.contents.first).should == "Einleitung"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should render a link to add new content to element" do
|
|
20
|
+
render_new_content_link(@element).should match(/Alchemy.openWindow.+\/admin\/elements\/1\/contents\/new/m)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should render a link to create a content in element" do
|
|
24
|
+
render_create_content_link(@element).should match(/a.+href.*admin\/contents.+class.+button new_content_link.*data-method.+post/)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|