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