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.
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