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.
Files changed (219) hide show
  1. data/.gitignore +3 -1
  2. data/.rspec +1 -2
  3. data/.travis.yml +11 -0
  4. data/.yardopts +0 -1
  5. data/Gemfile +1 -2
  6. data/README.md +14 -0
  7. data/alchemy_cms.gemspec +4 -2
  8. data/app/controllers/admin/clipboard_controller.rb +8 -9
  9. data/app/controllers/admin/contents_controller.rb +4 -2
  10. data/app/controllers/admin/essence_pictures_controller.rb +2 -2
  11. data/app/controllers/admin/layoutpages_controller.rb +2 -0
  12. data/app/controllers/admin/pages_controller.rb +5 -5
  13. data/app/controllers/admin/pictures_controller.rb +2 -1
  14. data/app/controllers/admin/trash_controller.rb +2 -0
  15. data/app/controllers/alchemy_controller.rb +10 -4
  16. data/app/controllers/elements_controller.rb +1 -1
  17. data/app/helpers/admin/elements_helper.rb +32 -1
  18. data/app/helpers/alchemy_helper.rb +15 -818
  19. data/app/helpers/contents_helper.rb +69 -0
  20. data/app/helpers/elements_helper.rb +161 -0
  21. data/app/helpers/essences_helper.rb +167 -0
  22. data/app/helpers/pages_helper.rb +401 -19
  23. data/app/models/attachment.rb +4 -0
  24. data/app/models/element.rb +27 -14
  25. data/app/models/page.rb +75 -38
  26. data/app/views/admin/essence_pictures/destroy.js.erb +1 -1
  27. data/app/views/admin/pages/_create_language_form.html.erb +2 -1
  28. data/app/views/admin/pages/new.html.erb +1 -1
  29. data/app/views/admin/pages/update.js.erb +1 -1
  30. data/app/views/admin/partials/_upload_form.html.erb +2 -2
  31. data/app/views/admin/pictures/index.html.erb +7 -4
  32. data/app/views/essences/_essence_picture_editor.html.erb +1 -3
  33. data/app/views/layouts/alchemy.html.erb +59 -59
  34. data/app/views/layouts/pages.html.erb +2 -4
  35. data/app/views/{partials/_navigation_image_link.html.erb → navigation/_image_link.html.erb} +0 -0
  36. data/app/views/{partials/_navigation_link.html.erb → navigation/_link.html.erb} +1 -1
  37. data/app/views/{partials/_navigation_renderer.html.erb → navigation/_renderer.html.erb} +0 -0
  38. data/app/views/page_layouts/_contact.html.erb +1 -1
  39. data/app/views/page_layouts/_external.html.erb +0 -1
  40. data/app/views/page_layouts/_intro.html.erb +1 -1
  41. data/app/views/page_layouts/_news.html.erb +1 -1
  42. data/app/views/page_layouts/_search.html.erb +1 -1
  43. data/app/views/page_layouts/_standard.html.erb +1 -1
  44. data/assets/images/icons.png +0 -0
  45. data/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +49 -31
  46. data/assets/stylesheets/alchemy.css +111 -91
  47. data/assets/stylesheets/elements.css +12 -16
  48. data/bin/alchemy +1 -1
  49. data/config/alchemy/config.yml +4 -0
  50. data/config/initializers/tinymce_hammer.rb +1 -0
  51. data/config/locales/de.yml +3 -1
  52. data/config/locales/en.yml +2 -0
  53. data/config/routes.rb +6 -4
  54. data/lib/alchemy/capistrano.rb +4 -7
  55. data/lib/alchemy/page_layout.rb +12 -8
  56. data/lib/alchemy/version.rb +1 -1
  57. data/spec/controllers/admin/clipboard_controller_spec.rb +23 -0
  58. data/spec/dummy/db/schema.rb +9 -9
  59. data/spec/factories.rb +24 -6
  60. data/spec/helpers/admin/elements_helper_spec.rb +20 -0
  61. data/spec/helpers/alchemy_helper_spec.rb +41 -0
  62. data/spec/helpers/contents_helper_spec.rb +27 -0
  63. data/spec/helpers/elements_helper_spec.rb +39 -0
  64. data/spec/helpers/essences_helper_spec.rb +49 -0
  65. data/spec/helpers/pages_helper_spec.rb +140 -0
  66. data/spec/integration/security_spec.rb +1 -1
  67. data/spec/integration/standardset_spec.rb +29 -0
  68. data/spec/models/element_spec.rb +49 -0
  69. data/spec/{language_spec.rb → models/language_spec.rb} +0 -0
  70. data/spec/models/page_spec.rb +139 -0
  71. data/spec/{user_spec.rb → models/user_spec.rb} +0 -0
  72. data/spec/page_layout_spec.rb +21 -0
  73. data/spec/routing_spec.rb +53 -0
  74. data/spec/spec_helper.rb +12 -11
  75. metadata +54 -303
  76. data/spec/dummy/config/alchemy/config.yml +0 -199
  77. data/spec/dummy/config/alchemy/elements.yml +0 -91
  78. data/spec/dummy/config/alchemy/page_layouts.yml +0 -29
  79. data/spec/dummy/public/images/alchemy/ajax_loader.gif +0 -0
  80. data/spec/dummy/public/images/alchemy/alchemy-logo.png +0 -0
  81. data/spec/dummy/public/images/alchemy/flags.png +0 -0
  82. data/spec/dummy/public/images/alchemy/gui/navi-tab.png +0 -0
  83. data/spec/dummy/public/images/alchemy/gui/shading.png +0 -0
  84. data/spec/dummy/public/images/alchemy/gui/shading_90.png +0 -0
  85. data/spec/dummy/public/images/alchemy/gui/toggle.png +0 -0
  86. data/spec/dummy/public/images/alchemy/icons.png +0 -0
  87. data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow.gif +0 -0
  88. data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg.gif +0 -0
  89. data/spec/dummy/public/images/alchemy/jquery-sb/select_arrow_bg_hover.gif +0 -0
  90. data/spec/dummy/public/images/alchemy/jquery-ui/ui-icons_666666_256x240.png +0 -0
  91. data/spec/dummy/public/images/alchemy/placeholder.png +0 -0
  92. data/spec/dummy/public/images/alchemy/swfupload/browse_button.png +0 -0
  93. data/spec/dummy/public/javascripts/alchemy/alchemy.element_editor_selector.js +0 -88
  94. data/spec/dummy/public/javascripts/alchemy/alchemy.growler.js +0 -44
  95. data/spec/dummy/public/javascripts/alchemy/alchemy.image_cropper.js +0 -56
  96. data/spec/dummy/public/javascripts/alchemy/alchemy.js +0 -892
  97. data/spec/dummy/public/javascripts/alchemy/alchemy.link_overlay.js +0 -221
  98. data/spec/dummy/public/javascripts/alchemy/alchemy.page_sorter.js +0 -42
  99. data/spec/dummy/public/javascripts/alchemy/alchemy.preview.js +0 -145
  100. data/spec/dummy/public/javascripts/alchemy/jquery-ui.js +0 -428
  101. data/spec/dummy/public/javascripts/alchemy/jquery.Jcrop.min.js +0 -246
  102. data/spec/dummy/public/javascripts/alchemy/jquery.dialogextend.min.js +0 -8
  103. data/spec/dummy/public/javascripts/alchemy/jquery.in-place-edit.js +0 -171
  104. data/spec/dummy/public/javascripts/alchemy/jquery.js +0 -18
  105. data/spec/dummy/public/javascripts/alchemy/jquery.rails.js +0 -315
  106. data/spec/dummy/public/javascripts/alchemy/jquery.sb.min.js +0 -14
  107. data/spec/dummy/public/javascripts/alchemy/jquery.scrollTo-1.4.2-min.js +0 -11
  108. data/spec/dummy/public/javascripts/alchemy/jquery.ui.nestedSortable.js +0 -291
  109. data/spec/dummy/public/javascripts/alchemy/jquery.ui.tabspaging.js +0 -281
  110. data/spec/dummy/public/javascripts/alchemy/swfupload/fileprogress.js +0 -203
  111. data/spec/dummy/public/javascripts/alchemy/swfupload/handlers.js +0 -171
  112. data/spec/dummy/public/javascripts/alchemy/swfupload/queue.js +0 -98
  113. data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.js +0 -980
  114. data/spec/dummy/public/javascripts/alchemy/swfupload/swfupload.swf +0 -0
  115. data/spec/dummy/public/javascripts/alchemy/tiny_mce/jquery.tinymce.js +0 -1
  116. data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/de.js +0 -1
  117. data/spec/dummy/public/javascripts/alchemy/tiny_mce/langs/en.js +0 -223
  118. data/spec/dummy/public/javascripts/alchemy/tiny_mce/license.txt +0 -504
  119. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/editor_plugin.js +0 -43
  120. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/de.js +0 -4
  121. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/alchemy_link/langs/en.js +0 -4
  122. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/editor_plugin.js +0 -1
  123. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/fullscreen/fullscreen.htm +0 -109
  124. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/editor_plugin.js +0 -1
  125. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +0 -402
  126. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/inlinepopups/template.htm +0 -387
  127. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/lists/editor_plugin.js +0 -1
  128. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/editor_plugin.js +0 -1
  129. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pastetext.js +0 -36
  130. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/js/pasteword.js +0 -51
  131. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/de_dlg.js +0 -1
  132. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/langs/en_dlg.js +0 -5
  133. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pastetext.htm +0 -27
  134. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/paste/pasteword.htm +0 -21
  135. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/cell.htm +0 -180
  136. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/cell.css +0 -17
  137. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/row.css +0 -25
  138. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/css/table.css +0 -13
  139. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/editor_plugin.js +0 -1
  140. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/cell.js +0 -319
  141. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/merge_cells.js +0 -27
  142. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/row.js +0 -237
  143. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/js/table.js +0 -450
  144. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/de_dlg.js +0 -1
  145. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/langs/en_dlg.js +0 -75
  146. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/merge_cells.htm +0 -32
  147. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/row.htm +0 -158
  148. data/spec/dummy/public/javascripts/alchemy/tiny_mce/plugins/table/table.htm +0 -188
  149. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/about.htm +0 -52
  150. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/anchor.htm +0 -26
  151. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/charmap.htm +0 -51
  152. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/color_picker.htm +0 -74
  153. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/editor_template.js +0 -1
  154. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/image.htm +0 -80
  155. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
  156. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/flash.gif +0 -0
  157. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/icons.gif +0 -0
  158. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/iframe.gif +0 -0
  159. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
  160. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
  161. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
  162. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
  163. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/trans.gif +0 -0
  164. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/video.gif +0 -0
  165. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
  166. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/about.js +0 -73
  167. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/anchor.js +0 -42
  168. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/charmap.js +0 -355
  169. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/color_picker.js +0 -329
  170. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/image.js +0 -247
  171. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/link.js +0 -153
  172. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/js/source_editor.js +0 -56
  173. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de.js +0 -1
  174. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/de_dlg.js +0 -1
  175. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en.js +0 -68
  176. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/langs/en_dlg.js +0 -54
  177. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/link.htm +0 -57
  178. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/shortcuts.htm +0 -47
  179. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/content.css +0 -47
  180. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/dialog.css +0 -117
  181. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
  182. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
  183. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
  184. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
  185. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
  186. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
  187. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/default/ui.css +0 -214
  188. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/content.css +0 -23
  189. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +0 -105
  190. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/highcontrast/ui.css +0 -102
  191. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/content.css +0 -46
  192. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/dialog.css +0 -117
  193. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
  194. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
  195. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
  196. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui.css +0 -217
  197. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +0 -8
  198. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +0 -5
  199. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/advanced/source_editor.htm +0 -25
  200. data/spec/dummy/public/javascripts/alchemy/tiny_mce/themes/simple/langs/de.js +0 -1
  201. data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce.js +0 -1
  202. data/spec/dummy/public/javascripts/alchemy/tiny_mce/tiny_mce_popup.js +0 -5
  203. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/editable_selects.js +0 -70
  204. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/form_utils.js +0 -210
  205. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/mctabs.js +0 -162
  206. data/spec/dummy/public/javascripts/alchemy/tiny_mce/utils/validate.js +0 -252
  207. data/spec/dummy/public/stylesheets/alchemy/Jcrop.gif +0 -0
  208. data/spec/dummy/public/stylesheets/alchemy/alchemy.css +0 -3653
  209. data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_content.css +0 -94
  210. data/spec/dummy/public/stylesheets/alchemy/alchemy_tinymce_dialog.css +0 -415
  211. data/spec/dummy/public/stylesheets/alchemy/default/img/tabs.gif +0 -0
  212. data/spec/dummy/public/stylesheets/alchemy/elements.css +0 -900
  213. data/spec/dummy/public/stylesheets/alchemy/flags.css +0 -1
  214. data/spec/dummy/public/stylesheets/alchemy/ie6.css +0 -18
  215. data/spec/dummy/public/stylesheets/alchemy/jquery-ui-1.8.7.alchemy.css +0 -2023
  216. data/spec/dummy/public/stylesheets/alchemy/jquery.Jcrop.css +0 -35
  217. data/spec/dummy/public/stylesheets/alchemy/jquery.sb.css +0 -244
  218. data/spec/dummy/public/stylesheets/alchemy/standard_set.css +0 -374
  219. 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 -112px -40px;
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: -29px -104px;
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: 3px;
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 -144px -40px;
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 -32px -40px;
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 -64px -40px;
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 -48px -40px;
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 -80px -40px;
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 -96px -40px;
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: 3px;
799
+ margin: 1px;
804
800
  }
805
801
 
806
802
  div.element_editor div.error {
@@ -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
 
@@ -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',
@@ -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"
@@ -188,6 +188,8 @@ en:
188
188
  image/jpeg: 'JPG-Image'
189
189
  video/x-msvideo: 'AVI-Video'
190
190
  image/tiff: 'TIFF-Image'
191
+ 'text/x-vcard': 'vCard'
192
+ application/vcard: 'vCard'
191
193
 
192
194
  link_target_options:
193
195
  default: Same Window
@@ -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 => Regexp.new(Language.all_codes_for_published.join('|'))},
32
+ :constraints => {:lang => /[a-z]{2}/},
33
33
  :as => :show_language_root
34
34
  match '(/:lang)/:urlname(.:format)' => 'pages#show',
35
- :constraints => {:lang => Regexp.new(Language.all_codes_for_published.join('|'))},
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
 
@@ -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}/public/uploads/*"
32
- run "ln -nfs #{shared_path}/uploads/pictures/ #{current_path}/uploads/pictures"
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/ #{current_path}/public/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/ #{current_path}/index"
34
+ run "ln -nfs #{shared_path}/index #{current_path}/"
38
35
  end
39
36
 
40
37
  end
@@ -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
- if File.exists? "#{Rails.root}/config/alchemy/page_layouts.yml"
17
- layouts = YAML.load_file( "#{Rails.root}/config/alchemy/page_layouts.yml" )
18
- elsif File.exists? "#{Rails.root}/vendor/plugins/alchemy/config/alchemy/page_layouts.yml"
19
- layouts = YAML.load_file( "#{Rails.root}/vendor/plugins/alchemy/config/alchemy/page_layouts.yml" )
20
- else
21
- raise LoadError, "Could not find page_layouts.yml file! Please run: rails generate alchemy:scaffold"
22
- end
23
- layouts
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
@@ -1,5 +1,5 @@
1
1
  module Alchemy
2
2
 
3
- VERSION = "2.0.rc3"
3
+ VERSION = "2.0.rc4"
4
4
 
5
5
  end
@@ -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
@@ -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", :limit => 255
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", :default => false
209
- t.boolean "public", :default => false
210
- t.boolean "locked", :default => false
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", :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
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"
@@ -28,16 +28,34 @@ FactoryGirl.define do
28
28
  code "kl"
29
29
  name 'Klingonian'
30
30
  default false
31
- frontpage_name 'tuq'
31
+ frontpage_name 'Tuq'
32
32
  page_layout 'intro'
33
33
  public true
34
34
  end
35
-
35
+
36
36
  factory :page do
37
- name "tuq"
38
- page_layout "intro"
39
- association :language
40
- public false
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