alchemy_cms 2.0.pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +7 -0
- data/.yardopts +6 -0
- data/Gemfile +8 -0
- data/LICENSE +619 -0
- data/README.md +113 -0
- data/Rakefile +30 -0
- data/TODO.txt +1 -0
- data/alchemy.gemspec +36 -0
- data/app/controllers/admin/attachments_controller.rb +119 -0
- data/app/controllers/admin/clipboard_controller.rb +43 -0
- data/app/controllers/admin/contents_controller.rb +69 -0
- data/app/controllers/admin/elements_controller.rb +137 -0
- data/app/controllers/admin/essence_audios_controller.rb +14 -0
- data/app/controllers/admin/essence_files_controller.rb +35 -0
- data/app/controllers/admin/essence_flashes_controller.rb +14 -0
- data/app/controllers/admin/essence_pictures_controller.rb +89 -0
- data/app/controllers/admin/essence_videos_controller.rb +14 -0
- data/app/controllers/admin/languages_controller.rb +70 -0
- data/app/controllers/admin/layoutpages_controller.rb +11 -0
- data/app/controllers/admin/pages_controller.rb +244 -0
- data/app/controllers/admin/pictures_controller.rb +132 -0
- data/app/controllers/admin/trash_controller.rb +25 -0
- data/app/controllers/admin/users_controller.rb +75 -0
- data/app/controllers/admin_controller.rb +78 -0
- data/app/controllers/alchemy_controller.rb +239 -0
- data/app/controllers/attachments_controller.rb +30 -0
- data/app/controllers/elements_controller.rb +18 -0
- data/app/controllers/messages_controller.rb +98 -0
- data/app/controllers/pages_controller.rb +137 -0
- data/app/controllers/pictures_controller.rb +68 -0
- data/app/helpers/admin/attachments_helper.rb +7 -0
- data/app/helpers/admin/elements_helper.rb +28 -0
- data/app/helpers/admin/pages_helper.rb +3 -0
- data/app/helpers/admin/pictures_helper.rb +26 -0
- data/app/helpers/alchemy_helper.rb +1168 -0
- data/app/helpers/elements_helper.rb +2 -0
- data/app/helpers/errors_helper.rb +37 -0
- data/app/helpers/layout_helper.rb +37 -0
- data/app/helpers/pages_helper.rb +141 -0
- data/app/mailers/messages.rb +15 -0
- data/app/mailers/notifications.rb +23 -0
- data/app/models/attachment.rb +73 -0
- data/app/models/cell.rb +63 -0
- data/app/models/content.rb +145 -0
- data/app/models/element.rb +423 -0
- data/app/models/essence_audio.rb +17 -0
- data/app/models/essence_date.rb +20 -0
- data/app/models/essence_file.rb +17 -0
- data/app/models/essence_flash.rb +15 -0
- data/app/models/essence_html.rb +19 -0
- data/app/models/essence_picture.rb +27 -0
- data/app/models/essence_richtext.rb +50 -0
- data/app/models/essence_text.rb +28 -0
- data/app/models/essence_video.rb +17 -0
- data/app/models/folded_page.rb +3 -0
- data/app/models/language.rb +75 -0
- data/app/models/message.rb +57 -0
- data/app/models/page.rb +501 -0
- data/app/models/picture.rb +100 -0
- data/app/models/user.rb +72 -0
- data/app/models/user_session.rb +10 -0
- data/app/sweepers/content_sweeper.rb +20 -0
- data/app/sweepers/pages_sweeper.rb +46 -0
- data/app/sweepers/pictures_sweeper.rb +20 -0
- data/app/views/_contact.html.erb +3 -0
- data/app/views/_intro.html.erb +3 -0
- data/app/views/_news.html.erb +3 -0
- data/app/views/_newsletter_layout.html.erb +1 -0
- data/app/views/_search.html.erb +3 -0
- data/app/views/_standard.html.erb +1 -0
- data/app/views/admin/attachments/_attachment.html.erb +58 -0
- data/app/views/admin/attachments/_file_to_assign.html.erb +20 -0
- data/app/views/admin/attachments/_files_list.html.erb +24 -0
- data/app/views/admin/attachments/archive_overlay.html.erb +8 -0
- data/app/views/admin/attachments/create.js.erb +6 -0
- data/app/views/admin/attachments/edit.html.erb +12 -0
- data/app/views/admin/attachments/index.html.erb +30 -0
- data/app/views/admin/attachments/new.html.erb +11 -0
- data/app/views/admin/clipboard/clear.js.erb +6 -0
- data/app/views/admin/clipboard/index.html.erb +19 -0
- data/app/views/admin/clipboard/insert.js.erb +14 -0
- data/app/views/admin/clipboard/remove.js.erb +10 -0
- data/app/views/admin/contents/_missing.html.erb +20 -0
- data/app/views/admin/contents/create.js.erb +93 -0
- data/app/views/admin/contents/new.html.erb +15 -0
- data/app/views/admin/elements/_add_content.html.erb +16 -0
- data/app/views/admin/elements/_element.html.erb +22 -0
- data/app/views/admin/elements/_element_foot.html.erb +35 -0
- data/app/views/admin/elements/_element_head.html.erb +29 -0
- data/app/views/admin/elements/_elements_select.html.erb +8 -0
- data/app/views/admin/elements/_new_element_form.html.erb +25 -0
- data/app/views/admin/elements/_picture_editor.html.erb +25 -0
- data/app/views/admin/elements/create.js.erb +20 -0
- data/app/views/admin/elements/destroy.js.erb +6 -0
- data/app/views/admin/elements/fold.js.erb +37 -0
- data/app/views/admin/elements/index.html.erb +33 -0
- data/app/views/admin/elements/list.js.erb +20 -0
- data/app/views/admin/elements/new.html.erb +33 -0
- data/app/views/admin/elements/order.js.erb +7 -0
- data/app/views/admin/elements/trash.js.erb +13 -0
- data/app/views/admin/elements/update.js.erb +10 -0
- data/app/views/admin/essence_files/edit.html.erb +91 -0
- data/app/views/admin/essence_pictures/assign.js.erb +15 -0
- data/app/views/admin/essence_pictures/crop.html.erb +36 -0
- data/app/views/admin/essence_pictures/destroy.js.erb +17 -0
- data/app/views/admin/essence_pictures/edit.html.erb +75 -0
- data/app/views/admin/essence_pictures/update.js.erb +16 -0
- data/app/views/admin/index.html.erb +92 -0
- data/app/views/admin/infos.html.erb +5 -0
- data/app/views/admin/languages/_form.html.erb +34 -0
- data/app/views/admin/languages/_language.html.erb +35 -0
- data/app/views/admin/languages/edit.html.erb +1 -0
- data/app/views/admin/languages/index.html.erb +41 -0
- data/app/views/admin/languages/new.html.erb +1 -0
- data/app/views/admin/layoutpages/_layoutpage.html.erb +80 -0
- data/app/views/admin/layoutpages/index.html.erb +75 -0
- data/app/views/admin/leave.html.erb +11 -0
- data/app/views/admin/login.html.erb +46 -0
- data/app/views/admin/logout.html.erb +5 -0
- data/app/views/admin/pages/_contactform_links.html.erb +66 -0
- data/app/views/admin/pages/_create_language_form.html.erb +42 -0
- data/app/views/admin/pages/_external_link.html.erb +54 -0
- data/app/views/admin/pages/_file_link.html.erb +52 -0
- data/app/views/admin/pages/_internal_link.html.erb +47 -0
- data/app/views/admin/pages/_new_page_form.html.erb +29 -0
- data/app/views/admin/pages/_page.html.erb +114 -0
- data/app/views/admin/pages/_page_for_links.html.erb +43 -0
- data/app/views/admin/pages/_page_infos.html.erb +3 -0
- data/app/views/admin/pages/_page_status.html.erb +9 -0
- data/app/views/admin/pages/_sitemap.html.erb +99 -0
- data/app/views/admin/pages/configure.html.erb +71 -0
- data/app/views/admin/pages/configure_external.html.erb +40 -0
- data/app/views/admin/pages/destroy.js.erb +12 -0
- data/app/views/admin/pages/edit.html.erb +185 -0
- data/app/views/admin/pages/flush.js.erb +2 -0
- data/app/views/admin/pages/fold.js.erb +4 -0
- data/app/views/admin/pages/index.html.erb +108 -0
- data/app/views/admin/pages/link.html.erb +30 -0
- data/app/views/admin/pages/locked.html.erb +3 -0
- data/app/views/admin/pages/new.html.erb +50 -0
- data/app/views/admin/pages/show.html.erb +1 -0
- data/app/views/admin/pages/sort.js.erb +6 -0
- data/app/views/admin/pages/unlock.js.erb +8 -0
- data/app/views/admin/pages/update.js.erb +19 -0
- data/app/views/admin/partials/_flash.html.erb +4 -0
- data/app/views/admin/partials/_flash_notices.html.erb +5 -0
- data/app/views/admin/partials/_mainnavigation_entry.html.erb +27 -0
- data/app/views/admin/partials/_pagination_links.html.erb +7 -0
- data/app/views/admin/partials/_per_page_links.html.erb +17 -0
- data/app/views/admin/partials/_remote_pagination_links.html.erb +11 -0
- data/app/views/admin/partials/_remote_search_form.html.erb +36 -0
- data/app/views/admin/partials/_search_form.html.erb +17 -0
- data/app/views/admin/partials/_sub_navigation.html.erb +14 -0
- data/app/views/admin/partials/_upload_form.html.erb +116 -0
- data/app/views/admin/pictures/_archive_overlay_images.html.erb +17 -0
- data/app/views/admin/pictures/_filter_and_size_bar.html.erb +88 -0
- data/app/views/admin/pictures/_picture.html.erb +36 -0
- data/app/views/admin/pictures/_picture_to_assign.html.erb +32 -0
- data/app/views/admin/pictures/_pictures_list.html.erb +12 -0
- data/app/views/admin/pictures/archive_overlay.html.erb +3 -0
- data/app/views/admin/pictures/create.js.erb +12 -0
- data/app/views/admin/pictures/index.html.erb +56 -0
- data/app/views/admin/pictures/new.html.erb +11 -0
- data/app/views/admin/pictures/show_in_window.html.erb +1 -0
- data/app/views/admin/pictures/update.js.erb +11 -0
- data/app/views/admin/signup.html.erb +16 -0
- data/app/views/admin/trash/index.html.erb +25 -0
- data/app/views/admin/users/_table.html.erb +54 -0
- data/app/views/admin/users/_user.html.erb +36 -0
- data/app/views/admin/users/edit.html.erb +6 -0
- data/app/views/admin/users/index.html.erb +41 -0
- data/app/views/admin/users/new.html.erb +6 -0
- data/app/views/attachments/show.html.erb +1 -0
- data/app/views/elements/_article_editor.html.erb +4 -0
- data/app/views/elements/_article_view.html.erb +25 -0
- data/app/views/elements/_bild_editor.html.erb +1 -0
- data/app/views/elements/_bild_text_editor.html.erb +2 -0
- data/app/views/elements/_bild_text_view.html.erb +9 -0
- data/app/views/elements/_bild_view.html.erb +9 -0
- data/app/views/elements/_claim_editor.html.erb +1 -0
- data/app/views/elements/_claim_view.html.erb +1 -0
- data/app/views/elements/_contactform_editor.html.erb +7 -0
- data/app/views/elements/_contactform_view.html.erb +92 -0
- data/app/views/elements/_editor_not_found.html.erb +5 -0
- data/app/views/elements/_footnote_editor.html.erb +1 -0
- data/app/views/elements/_footnote_view.html.erb +5 -0
- data/app/views/elements/_header_editor.html.erb +1 -0
- data/app/views/elements/_header_view.html.erb +1 -0
- data/app/views/elements/_headline_editor.html.erb +1 -0
- data/app/views/elements/_headline_view.html.erb +1 -0
- data/app/views/elements/_image_mosaic_editor.html.erb +2 -0
- data/app/views/elements/_image_mosaic_view.html.erb +12 -0
- data/app/views/elements/_intro_editor.html.erb +1 -0
- data/app/views/elements/_intro_image_text_editor.html.erb +3 -0
- data/app/views/elements/_intro_image_text_view.html.erb +16 -0
- data/app/views/elements/_intro_view.html.erb +3 -0
- data/app/views/elements/_news_editor.html.erb +3 -0
- data/app/views/elements/_news_view.html.erb +11 -0
- data/app/views/elements/_searchresult_editor.html.erb +1 -0
- data/app/views/elements/_searchresult_view.html.erb +42 -0
- data/app/views/elements/_sitemap_editor.html.erb +3 -0
- data/app/views/elements/_sitemap_view.html.erb +38 -0
- data/app/views/elements/_sitename_editor.html.erb +1 -0
- data/app/views/elements/_sitename_view.html.erb +1 -0
- data/app/views/elements/_subheadline_editor.html.erb +1 -0
- data/app/views/elements/_subheadline_view.html.erb +5 -0
- data/app/views/elements/_text_editor.html.erb +1 -0
- data/app/views/elements/_text_view.html.erb +3 -0
- data/app/views/elements/_view_not_found.html.erb +1 -0
- data/app/views/elements/show.html.erb +6 -0
- data/app/views/elements/show.js.erb +11 -0
- data/app/views/essences/_essence_audio_editor.html.erb +1 -0
- data/app/views/essences/_essence_audio_view.html.erb +33 -0
- data/app/views/essences/_essence_date_editor.html.erb +12 -0
- data/app/views/essences/_essence_date_view.html.erb +7 -0
- data/app/views/essences/_essence_file_editor.html.erb +63 -0
- data/app/views/essences/_essence_file_view.html.erb +6 -0
- data/app/views/essences/_essence_flash_editor.html.erb +1 -0
- data/app/views/essences/_essence_flash_view.html.erb +26 -0
- data/app/views/essences/_essence_html_editor.html.erb +8 -0
- data/app/views/essences/_essence_html_view.html.erb +1 -0
- data/app/views/essences/_essence_picture_editor.html.erb +70 -0
- data/app/views/essences/_essence_picture_tools.html.erb +60 -0
- data/app/views/essences/_essence_picture_view.html.erb +42 -0
- data/app/views/essences/_essence_richtext_editor.html.erb +9 -0
- data/app/views/essences/_essence_richtext_view.html.erb +5 -0
- data/app/views/essences/_essence_text_editor.html.erb +82 -0
- data/app/views/essences/_essence_text_view.html.erb +11 -0
- data/app/views/essences/_essence_video_editor.html.erb +1 -0
- data/app/views/essences/_essence_video_view.html.erb +35 -0
- data/app/views/layouts/alchemy.html.erb +60 -0
- data/app/views/layouts/login.html.erb +60 -0
- data/app/views/layouts/pages.html.erb +31 -0
- data/app/views/layouts/sitemap.xml.erb +4 -0
- data/app/views/messages/mail.text.erb +10 -0
- data/app/views/messages/new.html.erb +1 -0
- data/app/views/notifications/admin_user_created.text.erb +13 -0
- data/app/views/notifications/registered_user_created.text.erb +10 -0
- data/app/views/page_layouts/_contact.html.erb +14 -0
- data/app/views/page_layouts/_external.html.erb +1 -0
- data/app/views/page_layouts/_intro.html.erb +14 -0
- data/app/views/page_layouts/_layout_footer.html.erb +14 -0
- data/app/views/page_layouts/_layout_header.html.erb +14 -0
- data/app/views/page_layouts/_news.html.erb +14 -0
- data/app/views/page_layouts/_newsletter_layout.html.erb +1 -0
- data/app/views/page_layouts/_search.html.erb +14 -0
- data/app/views/page_layouts/_standard.html.erb +14 -0
- data/app/views/pages/show.html.erb +1 -0
- data/app/views/pages/show.rss.builder +27 -0
- data/app/views/pages/sitemap.xml.erb +8 -0
- data/app/views/partials/_navigation_image_link.html.erb +14 -0
- data/app/views/partials/_navigation_link.html.erb +20 -0
- data/app/views/partials/_navigation_renderer.html.erb +23 -0
- data/app/views/pictures/show.gif.flexi +19 -0
- data/app/views/pictures/show.jpg.flexi +19 -0
- data/app/views/pictures/show.png.flexi +19 -0
- data/app/views/pictures/thumbnail.png.flexi +13 -0
- data/app/views/pictures/zoom.png.flexi +3 -0
- data/assets/images/ajax_loader.gif +0 -0
- data/assets/images/alchemy-logo.png +0 -0
- data/assets/images/flags.png +0 -0
- data/assets/images/gui/navi-tab.png +0 -0
- data/assets/images/gui/shading.png +0 -0
- data/assets/images/gui/shading_90.png +0 -0
- data/assets/images/gui/toggle.png +0 -0
- data/assets/images/icons.png +0 -0
- data/assets/images/jquery-sb/select_arrow.gif +0 -0
- data/assets/images/jquery-sb/select_arrow_bg.gif +0 -0
- data/assets/images/jquery-sb/select_arrow_bg_hover.gif +0 -0
- data/assets/images/jquery-ui/ui-icons_666666_256x240.png +0 -0
- data/assets/images/placeholder.png +0 -0
- data/assets/images/swfupload/browse_button.png +0 -0
- data/assets/javascripts/alchemy.element_editor_selector.js +88 -0
- data/assets/javascripts/alchemy.growler.js +44 -0
- data/assets/javascripts/alchemy.image_cropper.js +56 -0
- data/assets/javascripts/alchemy.js +892 -0
- data/assets/javascripts/alchemy.link_overlay.js +221 -0
- data/assets/javascripts/alchemy.page_sorter.js +42 -0
- data/assets/javascripts/alchemy.preview.js +145 -0
- data/assets/javascripts/jquery-ui.js +428 -0
- data/assets/javascripts/jquery.Jcrop.min.js +246 -0
- data/assets/javascripts/jquery.dialogextend.min.js +8 -0
- data/assets/javascripts/jquery.in-place-edit.js +171 -0
- data/assets/javascripts/jquery.js +18 -0
- data/assets/javascripts/jquery.rails.js +315 -0
- data/assets/javascripts/jquery.sb.min.js +14 -0
- data/assets/javascripts/jquery.scrollTo-1.4.2-min.js +11 -0
- data/assets/javascripts/jquery.ui.nestedSortable.js +291 -0
- data/assets/javascripts/jquery.ui.tabspaging.js +281 -0
- data/assets/javascripts/swfupload/fileprogress.js +203 -0
- data/assets/javascripts/swfupload/handlers.js +171 -0
- data/assets/javascripts/swfupload/queue.js +98 -0
- data/assets/javascripts/swfupload/swfupload.js +980 -0
- data/assets/javascripts/swfupload/swfupload.swf +0 -0
- data/assets/javascripts/tiny_mce/jquery.tinymce.js +1 -0
- data/assets/javascripts/tiny_mce/langs/de.js +1 -0
- data/assets/javascripts/tiny_mce/langs/en.js +223 -0
- data/assets/javascripts/tiny_mce/license.txt +504 -0
- data/assets/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +43 -0
- data/assets/javascripts/tiny_mce/plugins/alchemy_link/langs/de.js +4 -0
- data/assets/javascripts/tiny_mce/plugins/alchemy_link/langs/en.js +4 -0
- data/assets/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js +1 -0
- data/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +109 -0
- data/assets/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
- data/assets/javascripts/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css +402 -0
- data/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +387 -0
- data/assets/javascripts/tiny_mce/plugins/lists/editor_plugin.js +1 -0
- data/assets/javascripts/tiny_mce/plugins/paste/editor_plugin.js +1 -0
- data/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +36 -0
- data/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +51 -0
- data/assets/javascripts/tiny_mce/plugins/paste/langs/de_dlg.js +1 -0
- data/assets/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js +5 -0
- data/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +27 -0
- data/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +21 -0
- data/assets/javascripts/tiny_mce/plugins/table/cell.htm +180 -0
- data/assets/javascripts/tiny_mce/plugins/table/css/cell.css +17 -0
- data/assets/javascripts/tiny_mce/plugins/table/css/row.css +25 -0
- data/assets/javascripts/tiny_mce/plugins/table/css/table.css +13 -0
- data/assets/javascripts/tiny_mce/plugins/table/editor_plugin.js +1 -0
- data/assets/javascripts/tiny_mce/plugins/table/js/cell.js +319 -0
- data/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +27 -0
- data/assets/javascripts/tiny_mce/plugins/table/js/row.js +237 -0
- data/assets/javascripts/tiny_mce/plugins/table/js/table.js +450 -0
- data/assets/javascripts/tiny_mce/plugins/table/langs/de_dlg.js +1 -0
- data/assets/javascripts/tiny_mce/plugins/table/langs/en_dlg.js +75 -0
- data/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +32 -0
- data/assets/javascripts/tiny_mce/plugins/table/row.htm +158 -0
- data/assets/javascripts/tiny_mce/plugins/table/table.htm +188 -0
- data/assets/javascripts/tiny_mce/themes/advanced/about.htm +52 -0
- data/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +26 -0
- data/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +51 -0
- data/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +74 -0
- data/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +1 -0
- data/assets/javascripts/tiny_mce/themes/advanced/image.htm +80 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/flash.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/iframe.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/trans.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/video.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/js/about.js +73 -0
- data/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +42 -0
- data/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +355 -0
- data/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +329 -0
- data/assets/javascripts/tiny_mce/themes/advanced/js/image.js +247 -0
- data/assets/javascripts/tiny_mce/themes/advanced/js/link.js +153 -0
- data/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +56 -0
- data/assets/javascripts/tiny_mce/themes/advanced/langs/de.js +1 -0
- data/assets/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +1 -0
- data/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +68 -0
- data/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +54 -0
- data/assets/javascripts/tiny_mce/themes/advanced/link.htm +57 -0
- data/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +47 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +47 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +117 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +214 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +23 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +105 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +46 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +117 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +217 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
- data/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
- data/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +25 -0
- data/assets/javascripts/tiny_mce/themes/simple/langs/de.js +1 -0
- data/assets/javascripts/tiny_mce/tiny_mce.js +1 -0
- data/assets/javascripts/tiny_mce/tiny_mce_popup.js +5 -0
- data/assets/javascripts/tiny_mce/utils/editable_selects.js +70 -0
- data/assets/javascripts/tiny_mce/utils/form_utils.js +210 -0
- data/assets/javascripts/tiny_mce/utils/mctabs.js +162 -0
- data/assets/javascripts/tiny_mce/utils/validate.js +252 -0
- data/assets/stylesheets/Jcrop.gif +0 -0
- data/assets/stylesheets/alchemy.css +3629 -0
- data/assets/stylesheets/alchemy_tinymce_content.css +94 -0
- data/assets/stylesheets/alchemy_tinymce_dialog.css +415 -0
- data/assets/stylesheets/default/img/tabs.gif +0 -0
- data/assets/stylesheets/elements.css +900 -0
- data/assets/stylesheets/flags.css +1 -0
- data/assets/stylesheets/ie6.css +18 -0
- data/assets/stylesheets/jquery-ui-1.8.7.alchemy.css +2023 -0
- data/assets/stylesheets/jquery.Jcrop.css +35 -0
- data/assets/stylesheets/jquery.sb.css +244 -0
- data/assets/stylesheets/standard_set.css +374 -0
- data/bin/alchemy +347 -0
- data/config/alchemy/config.yml +199 -0
- data/config/alchemy/elements.yml +219 -0
- data/config/alchemy/page_layouts.yml +65 -0
- data/config/asset_packages.yml +32 -0
- data/config/authorization_rules.rb +96 -0
- data/config/initializers/authorization.rb +4 -0
- data/config/initializers/cache_storage.rb +1 -0
- data/config/initializers/fast_gettext.rb +2 -0
- data/config/initializers/tiny_mce_hammer.rb +32 -0
- data/config/locales/de.yml +370 -0
- data/config/locales/en.yml +364 -0
- data/config/routes.rb +141 -0
- data/db/migrate/20100607143125_create_pages.rb +34 -0
- data/db/migrate/20100607144254_create_elements.rb +20 -0
- data/db/migrate/20100607145256_create_contents.rb +18 -0
- data/db/migrate/20100607145719_create_users.rb +32 -0
- data/db/migrate/20100607150611_create_pictures.rb +16 -0
- data/db/migrate/20100607150812_create_attachments.rb +16 -0
- data/db/migrate/20100607153647_create_folded_pages.rb +13 -0
- data/db/migrate/20100607161345_create_essence_texts.rb +19 -0
- data/db/migrate/20100607162339_create_elements_pages.rb +12 -0
- data/db/migrate/20100607193638_create_essence_pictures.rb +23 -0
- data/db/migrate/20100607193646_create_essence_richtexts.rb +16 -0
- data/db/migrate/20100607193653_create_essence_htmls.rb +13 -0
- data/db/migrate/20100609111653_create_essence_dates.rb +13 -0
- data/db/migrate/20100609111809_create_essence_files.rb +15 -0
- data/db/migrate/20100609111821_create_essence_flashes.rb +16 -0
- data/db/migrate/20100609111837_create_essence_videos.rb +18 -0
- data/db/migrate/20100616150753_create_essence_audios.rb +17 -0
- data/db/migrate/20100812085225_add_crop_from_and_crop_size_to_essence_pictures.rb +11 -0
- data/db/migrate/20100909140701_change_essence_htmls_source_column_type.rb +9 -0
- data/db/migrate/20101109150312_alter_pages_visible_column_default.rb +9 -0
- data/db/migrate/20101109151812_create_languages.rb +19 -0
- data/db/migrate/20101216151419_add_language_id_to_pages.rb +19 -0
- data/db/migrate/20101216155216_add_index_to_languages.rb +9 -0
- data/db/migrate/20101216173323_add_default_to_languages.rb +9 -0
- data/db/migrate/20101218130049_add_urlname_index_to_pages.rb +9 -0
- data/db/migrate/20110115123343_remove_css_class_default_from_essence_pictures.rb +11 -0
- data/db/migrate/20110224105120_change_pages_visible_default.rb +11 -0
- data/db/migrate/20110228182659_remove_default_page_layout_from_pages.rb +11 -0
- data/db/migrate/20110414163140_remove_display_name_from_elements.rb +11 -0
- data/db/migrate/20110511100516_rename_essence_texts_title_to_link_title.rb +9 -0
- data/db/migrate/20110529130429_create_cells.rb +14 -0
- data/db/migrate/20110529130500_add_cell_id_to_elements.rb +11 -0
- data/db/migrate/20110530102804_change_pages_page_layout_column.rb +11 -0
- data/db/migrate/20110707190728_add_render_size_to_essence_pictures.rb +9 -0
- data/db/migrate/20110711142057_change_open_link_in_new_window_to_link_target.rb +19 -0
- data/lib/alchemy.rb +24 -0
- data/lib/alchemy/config.rb +51 -0
- data/lib/alchemy/controller.rb +79 -0
- data/lib/alchemy/engine.rb +29 -0
- data/lib/alchemy/essence.rb +178 -0
- data/lib/alchemy/file_utilz.rb +73 -0
- data/lib/alchemy/page_layout.rb +66 -0
- data/lib/alchemy/remote_pagination_link_renderer.rb +17 -0
- data/lib/alchemy/seeder.rb +112 -0
- data/lib/alchemy/version.rb +5 -0
- data/lib/extensions/action_view.rb +17 -0
- data/lib/extensions/array.rb +25 -0
- data/lib/extensions/hash.rb +34 -0
- data/lib/middleware/flash_session_cookie.rb +22 -0
- data/lib/rails/generators/alchemy/elements/elements_generator.rb +35 -0
- data/lib/rails/generators/alchemy/elements/templates/editor.html.erb +9 -0
- data/lib/rails/generators/alchemy/elements/templates/view.html.erb +21 -0
- data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +32 -0
- data/lib/rails/generators/alchemy/page_layouts/templates/layout.html.erb +1 -0
- data/lib/rails/generators/alchemy/plugin/plugin_generator.rb +29 -0
- data/lib/rails/generators/alchemy/plugin/templates/authorization_rules.rb +5 -0
- data/lib/rails/generators/alchemy/plugin/templates/config.yml +30 -0
- data/lib/rails/generators/alchemy/plugin/templates/init.rb +4 -0
- data/lib/rails/generators/alchemy/plugin/templates/routes.rb +4 -0
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +35 -0
- data/lib/rails/generators/alchemy/scaffold/templates/elements.yml +91 -0
- data/lib/rails/generators/alchemy/scaffold/templates/page_layouts.yml +29 -0
- data/lib/rails/templates/alchemy.rb +14 -0
- data/lib/tasks/fleximage.rake +154 -0
- data/lib/tasks/gettext.rake +75 -0
- data/lib/tasks/install.rake +123 -0
- data/lib/tasks/upgrade.rake +211 -0
- data/lib/translation_extras/alchemy_core_modules.rb +11 -0
- data/lib/vendor/i18n_label.rb +23 -0
- data/locale/alchemy.pot +1728 -0
- data/locale/de/LC_MESSAGES/alchemy.mo +0 -0
- data/locale/de/alchemy.po +1774 -0
- data/locale/en/LC_MESSAGES/alchemy.mo +0 -0
- data/locale/en/alchemy.po +1742 -0
- data/locale/missing_translations.rb +4 -0
- data/locale/model_attributes.rb +56 -0
- data/recipes/alchemy_capistrano_tasks.rb +83 -0
- metadata +769 -0
@@ -0,0 +1,423 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'acts_as_list'
|
3
|
+
|
4
|
+
class Element < ActiveRecord::Base
|
5
|
+
|
6
|
+
# All Elements inside a cell are a list. All Elements not in cell are in the cell_id.nil list.
|
7
|
+
acts_as_list :scope => [:page_id, :cell_id]
|
8
|
+
stampable :stamper_class_name => :user
|
9
|
+
|
10
|
+
has_many :contents, :order => :position, :dependent => :destroy
|
11
|
+
belongs_to :cell
|
12
|
+
belongs_to :page
|
13
|
+
has_and_belongs_to_many :to_be_sweeped_pages, :class_name => 'Page', :uniq => true
|
14
|
+
|
15
|
+
validates_uniqueness_of :position, :scope => [:page_id, :cell_id]
|
16
|
+
validates_presence_of :name, :on => :create, :message => N_("Please choose an element.")
|
17
|
+
|
18
|
+
attr_accessor :create_contents_after_create
|
19
|
+
after_create :create_contents, :unless => Proc.new { |m| m.create_contents_after_create == false }
|
20
|
+
|
21
|
+
# TODO: add a trashed column to elements table
|
22
|
+
scope :trashed, where(:page_id => nil).order('updated_at DESC')
|
23
|
+
|
24
|
+
# Returns next Element on self.page or nil. Pass a Element.name to get next of this kind.
|
25
|
+
def next(name = nil)
|
26
|
+
if name.nil?
|
27
|
+
find_conditions = ["public = 1 AND page_id = ? AND position > ?", self.page.id, self.position]
|
28
|
+
else
|
29
|
+
find_conditions = ["public = 1 AND page_id = ? AND name = ? AND position > ?", self.page.id, name, self.position]
|
30
|
+
end
|
31
|
+
self.class.where(find_conditions).order("position ASC").limit(1)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns previous Element on self.page or nil. Pass a Element.name to get previous of this kind.
|
35
|
+
def prev(name = nil)
|
36
|
+
if name.nil?
|
37
|
+
find_conditions = ["public = 1 AND page_id = ? AND position < ?", self.page.id, self.position]
|
38
|
+
else
|
39
|
+
find_conditions = ["public = 1 AND page_id = ? AND name = ? AND position < ?", self.page.id, name, self.position]
|
40
|
+
end
|
41
|
+
self.class.where(find_conditions).order("position DESC").limit(1)
|
42
|
+
end
|
43
|
+
|
44
|
+
def store_page page
|
45
|
+
unless self.to_be_sweeped_pages.include? page
|
46
|
+
self.to_be_sweeped_pages << page
|
47
|
+
self.save
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# nullifies the page_id aka. trashs it.
|
52
|
+
def trash
|
53
|
+
self.page_id = nil
|
54
|
+
self.folded = true
|
55
|
+
self.save(false)
|
56
|
+
end
|
57
|
+
|
58
|
+
def trashed?
|
59
|
+
page_id.nil?
|
60
|
+
end
|
61
|
+
|
62
|
+
def content_by_name(name)
|
63
|
+
self.contents.find_by_name(name)
|
64
|
+
end
|
65
|
+
|
66
|
+
def content_by_type(essence_type)
|
67
|
+
self.contents.find_by_essence_type(essence_type)
|
68
|
+
end
|
69
|
+
|
70
|
+
def all_contents_by_name(name)
|
71
|
+
self.contents.find_all_by_name(name)
|
72
|
+
end
|
73
|
+
|
74
|
+
def all_contents_by_type(essence_type)
|
75
|
+
self.contents.find_all_by_essence_type(essence_type)
|
76
|
+
end
|
77
|
+
|
78
|
+
# Inits a new element for page as described in /config/alchemy/elements.yml from element_name
|
79
|
+
def self.new_from_scratch(attributes)
|
80
|
+
attributes.stringify_keys!
|
81
|
+
return Element.new if attributes['name'].blank?
|
82
|
+
element_descriptions = Element.descriptions
|
83
|
+
return if element_descriptions.blank?
|
84
|
+
element_scratch = element_descriptions.select{ |m| m["name"] == attributes['name'].split('#').first }.first
|
85
|
+
element = Element.new(
|
86
|
+
element_scratch.except('contents', 'available_contents', 'display_name').merge({
|
87
|
+
:page_id => attributes['page_id']
|
88
|
+
})
|
89
|
+
)
|
90
|
+
element
|
91
|
+
end
|
92
|
+
|
93
|
+
# Inits a new element for page as described in /config/alchemy/elements.yml from element_name and saves it
|
94
|
+
def self.create_from_scratch(attributes)
|
95
|
+
element = Element.new_from_scratch(attributes)
|
96
|
+
element.save if element
|
97
|
+
return element
|
98
|
+
end
|
99
|
+
|
100
|
+
# pastes a element from the clipboard in the session to page
|
101
|
+
def self.paste_from_clipboard(page_id, element, method, position)
|
102
|
+
copy = self.copy(element, :page_id => page_id)
|
103
|
+
copy.insert_at(position)
|
104
|
+
if method == "move" && copy.valid?
|
105
|
+
element.destroy
|
106
|
+
end
|
107
|
+
copy
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.descriptions
|
111
|
+
if File.exists? "#{Rails.root}/config/alchemy/elements.yml"
|
112
|
+
@elements = YAML.load_file( "#{Rails.root}/config/alchemy/elements.yml" )
|
113
|
+
elsif File.exists? "#{Rails.root}/vendor/plugins/alchemy/config/alchemy/elements.yml"
|
114
|
+
@elements = YAML.load_file( "#{Rails.root}/vendor/plugins/alchemy/config/alchemy/elements.yml" )
|
115
|
+
else
|
116
|
+
raise "Could not read config/alchemy/elements.yml"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def self.definitions
|
121
|
+
self.descriptions
|
122
|
+
end
|
123
|
+
|
124
|
+
# Returns the array with the hashes for all element contents in the elements.yml file
|
125
|
+
def content_descriptions
|
126
|
+
return nil if description.blank?
|
127
|
+
description['contents']
|
128
|
+
end
|
129
|
+
|
130
|
+
# Returns the array with the hashes for all element available_contents in the elements.yml file
|
131
|
+
def available_content_descriptions
|
132
|
+
return nil if description.blank?
|
133
|
+
description['available_contents']
|
134
|
+
end
|
135
|
+
|
136
|
+
# Returns the description for given content_name
|
137
|
+
def content_description_for(content_name)
|
138
|
+
if content_descriptions.blank?
|
139
|
+
logger.warn("\n+++++++++++ Warning: Element #{self.name} is missing the content description for #{content_name}\n")
|
140
|
+
return nil
|
141
|
+
else
|
142
|
+
content_descriptions.detect { |d| d['name'] == content_name }
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
# Returns the description for given content_name inside the available_contents
|
147
|
+
def available_content_description_for(content_name)
|
148
|
+
return nil if available_content_descriptions.blank?
|
149
|
+
available_content_descriptions.detect { |d| d['name'] == content_name }
|
150
|
+
end
|
151
|
+
|
152
|
+
# returns the description of the element with my name in element.yml
|
153
|
+
def description
|
154
|
+
return nil if Element.descriptions.blank?
|
155
|
+
Element.descriptions.detect{ |d| d['name'] == self.name }
|
156
|
+
end
|
157
|
+
|
158
|
+
# Human name for displaying in selectboxes and element editor views.
|
159
|
+
# The name is beeing translated from elements name value as described in config/alchemy/elements.yml
|
160
|
+
#
|
161
|
+
# Translate the name in your config/locales language file. Example:
|
162
|
+
#
|
163
|
+
# de:
|
164
|
+
# element_names:
|
165
|
+
# contactform: 'Kontakt Formular'
|
166
|
+
#
|
167
|
+
# If no translation is found the capitalized name is used!
|
168
|
+
#
|
169
|
+
def display_name
|
170
|
+
return name.capitalize if description.blank?
|
171
|
+
I18n.t("alchemy.element_names.#{description['name']}", :default => name.capitalize)
|
172
|
+
end
|
173
|
+
|
174
|
+
# Gets the preview text from the first Content found in the +elements.yml+ Element description file.
|
175
|
+
# You can flag a Content as +take_me_for_preview+ to take this as preview.
|
176
|
+
def preview_text(maxlength = 30)
|
177
|
+
return "" if description.blank?
|
178
|
+
my_contents = description["contents"]
|
179
|
+
return "" if my_contents.blank?
|
180
|
+
content_flagged_as_preview = my_contents.select{ |a| a["take_me_for_preview"] }.first
|
181
|
+
if content_flagged_as_preview.blank?
|
182
|
+
content_to_take_as_preview = my_contents.first
|
183
|
+
else
|
184
|
+
content_to_take_as_preview = content_flagged_as_preview
|
185
|
+
end
|
186
|
+
preview_content = self.contents.select{ |content| content.name == content_to_take_as_preview["name"] }.first
|
187
|
+
return "" if preview_content.blank? || preview_content.essence.blank?
|
188
|
+
text = preview_content.essence.preview_text(maxlength)
|
189
|
+
text.size > maxlength ? "#{text[0..maxlength]}..." : text
|
190
|
+
end
|
191
|
+
|
192
|
+
# Generates a preview text containing Element#display_name and Element#preview_text.
|
193
|
+
# It is displayed inside the head of the Element in the Elements.list overlay window from the Alchemy Admin::Page#edit view.
|
194
|
+
#
|
195
|
+
# === Example
|
196
|
+
#
|
197
|
+
# A Element described as:
|
198
|
+
#
|
199
|
+
# - name: funky_element
|
200
|
+
# display_name: Funky Element
|
201
|
+
# contents:
|
202
|
+
# - name: headline
|
203
|
+
# type: EssenceText
|
204
|
+
# - name: text
|
205
|
+
# type EssenceRichtext
|
206
|
+
# take_me_for_preview: true
|
207
|
+
#
|
208
|
+
# With "I want to tell you a funky story" as stripped_body for the EssenceRichtext Content produces:
|
209
|
+
#
|
210
|
+
# Funky Element: I want to tell ...
|
211
|
+
#
|
212
|
+
# Options:
|
213
|
+
#
|
214
|
+
# maxlength(integer). [Default 30] : Length of characters after the text will be cut off.
|
215
|
+
#
|
216
|
+
def display_name_with_preview_text(maxlength = 30)
|
217
|
+
"#{display_name}: #{preview_text(maxlength)}"
|
218
|
+
end
|
219
|
+
|
220
|
+
def dom_id
|
221
|
+
"#{name}_#{id}"
|
222
|
+
end
|
223
|
+
|
224
|
+
# List all elements by from page_layout
|
225
|
+
def self.elements_for_layout(layout)
|
226
|
+
element_descriptions = Element.descriptions
|
227
|
+
elements = []
|
228
|
+
page_layout = Alchemy::PageLayout.get(layout)
|
229
|
+
layout_elements = page_layout["elements"]
|
230
|
+
return element_descriptions if layout_elements == "all"
|
231
|
+
element_descriptions.each do |element|
|
232
|
+
if layout_elements.include?(element["name"])
|
233
|
+
elements << element
|
234
|
+
end
|
235
|
+
end
|
236
|
+
return elements
|
237
|
+
end
|
238
|
+
|
239
|
+
def self.get_from_clipboard(clipboard)
|
240
|
+
return nil if clipboard.blank?
|
241
|
+
self.find_by_id(clipboard[:element_id])
|
242
|
+
end
|
243
|
+
|
244
|
+
def self.all_from_clipboard(clipboard)
|
245
|
+
return [] if clipboard.nil?
|
246
|
+
self.find_all_by_id(clipboard)
|
247
|
+
end
|
248
|
+
|
249
|
+
def self.all_from_clipboard_for_page(clipboard, page)
|
250
|
+
return [] if clipboard.nil? || page.nil?
|
251
|
+
allowed_elements = self.all_for_page(page)
|
252
|
+
clipboard_elements = self.all_from_clipboard(clipboard)
|
253
|
+
allowed_element_names = allowed_elements.collect { |e| e['name'] }
|
254
|
+
clipboard_elements.select { |ce| allowed_element_names.include?(ce.name) }
|
255
|
+
end
|
256
|
+
|
257
|
+
# returns the collection of available essence_types that can be created for this element depending on its description in elements.yml
|
258
|
+
def available_contents
|
259
|
+
description['available_contents']
|
260
|
+
end
|
261
|
+
|
262
|
+
# Returns the contents ingredient for passed content name.
|
263
|
+
def ingredient(name)
|
264
|
+
content = content_by_name(name)
|
265
|
+
return nil if content.blank?
|
266
|
+
content.ingredient
|
267
|
+
end
|
268
|
+
|
269
|
+
def save_contents(params)
|
270
|
+
contents.each do |content|
|
271
|
+
unless content.save_essence(params[:contents]["content_#{content.id}"], :public => !params["public"].nil?)
|
272
|
+
errors.add(:base, :essence_validation_failed)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
return errors.blank?
|
276
|
+
end
|
277
|
+
|
278
|
+
def essences
|
279
|
+
return [] if contents.blank?
|
280
|
+
contents.collect(&:essence)
|
281
|
+
end
|
282
|
+
|
283
|
+
# Returns all essence_errors in the format:
|
284
|
+
#
|
285
|
+
# {
|
286
|
+
# essence.content.name => [error_message_for_validation_1, error_message_for_validation_2]
|
287
|
+
# }
|
288
|
+
#
|
289
|
+
# Get translated error messages with Element#essence_error_messages
|
290
|
+
#
|
291
|
+
def essence_errors
|
292
|
+
essence_errors = {}
|
293
|
+
essences.each do |essence|
|
294
|
+
unless essence.essence_errors.blank?
|
295
|
+
essence_errors[essence.content.name] = essence.essence_errors
|
296
|
+
end
|
297
|
+
end
|
298
|
+
essence_errors
|
299
|
+
end
|
300
|
+
|
301
|
+
# Essence validation errors messages are translated via I18n.
|
302
|
+
# Inside your translation file add translations like:
|
303
|
+
#
|
304
|
+
# alchemy:
|
305
|
+
# content_validations:
|
306
|
+
# name_of_the_element:
|
307
|
+
# name_of_the_content:
|
308
|
+
# validation_error_type: Error Message
|
309
|
+
#
|
310
|
+
# validation_error_type has to be one of:
|
311
|
+
#
|
312
|
+
# * blank
|
313
|
+
# * taken
|
314
|
+
# * wrong_format
|
315
|
+
#
|
316
|
+
# Example:
|
317
|
+
#
|
318
|
+
# de:
|
319
|
+
# alchemy:
|
320
|
+
# content_validations:
|
321
|
+
# contact:
|
322
|
+
# email:
|
323
|
+
# wrong_format: 'Die Email hat nicht das richtige Format'
|
324
|
+
#
|
325
|
+
def essence_error_messages
|
326
|
+
messages = []
|
327
|
+
essence_errors.each do |content_name, errors|
|
328
|
+
errors.each do |error|
|
329
|
+
messages << I18n.t(
|
330
|
+
"alchemy.content_validations.#{self.name}.#{content_name}.#{error}",
|
331
|
+
:default => [
|
332
|
+
"alchemy.content_validations.fields.#{content_name}.#{error}".to_sym,
|
333
|
+
"alchemy.content_validations.errors.#{error}".to_sym
|
334
|
+
]
|
335
|
+
) % {:field => Content.translated_label_for(content_name)}
|
336
|
+
end
|
337
|
+
end
|
338
|
+
messages
|
339
|
+
end
|
340
|
+
|
341
|
+
def contents_with_errors
|
342
|
+
contents.select(&:essence_validation_failed?)
|
343
|
+
end
|
344
|
+
|
345
|
+
def has_validations?
|
346
|
+
!contents.detect(&:has_validations?).blank?
|
347
|
+
end
|
348
|
+
|
349
|
+
def rtf_contents
|
350
|
+
contents.select { |content| content.essence_type == 'EssenceRichtext' }
|
351
|
+
end
|
352
|
+
alias_method :richtext_contents, :rtf_contents
|
353
|
+
|
354
|
+
# The name of the cell the element could be placed in.
|
355
|
+
def belonging_cellname
|
356
|
+
cellname = Cell.name_for_element(name)
|
357
|
+
if cellname.blank?
|
358
|
+
return 'for_other_elements'
|
359
|
+
else
|
360
|
+
return cellname
|
361
|
+
end
|
362
|
+
end
|
363
|
+
|
364
|
+
private
|
365
|
+
|
366
|
+
# List all elements for page_layout
|
367
|
+
def self.all_for_page(page)
|
368
|
+
# if page_layout has cells, collect elements from cells and group them by cellname
|
369
|
+
page_layout = Alchemy::PageLayout.get(page.page_layout)
|
370
|
+
if page_layout.blank?
|
371
|
+
logger.warn "\n++++++\nWARNING! Could not find page_layout description for page: #{page.name}\n++++++++\n"
|
372
|
+
return []
|
373
|
+
end
|
374
|
+
elements_for_layout = []
|
375
|
+
elements_for_layout += all_definitions_for(page_layout['elements'])
|
376
|
+
return [] if elements_for_layout.blank?
|
377
|
+
# all unique elements from this layout
|
378
|
+
unique_elements = elements_for_layout.select{ |m| m["unique"] == true }
|
379
|
+
elements_already_on_the_page = page.elements
|
380
|
+
# delete all elements from the elements that could be placed that are unique and already and the page
|
381
|
+
unique_elements.each do |unique_element|
|
382
|
+
elements_already_on_the_page.each do |already_placed_element|
|
383
|
+
if already_placed_element.name == unique_element["name"]
|
384
|
+
elements_for_layout.delete(unique_element)
|
385
|
+
end
|
386
|
+
end
|
387
|
+
end
|
388
|
+
return elements_for_layout
|
389
|
+
end
|
390
|
+
|
391
|
+
def self.all_definitions_for(element_names)
|
392
|
+
if element_names.to_s == "all"
|
393
|
+
return element_descriptions
|
394
|
+
else
|
395
|
+
return definitions.select { |e| element_names.include? e['name'] }
|
396
|
+
end
|
397
|
+
end
|
398
|
+
|
399
|
+
# makes a copy of source and makes copies of the contents from source
|
400
|
+
def self.copy(source, differences = {})
|
401
|
+
attributes = source.attributes.except("id").merge(differences)
|
402
|
+
element = self.create!(attributes.merge(:create_contents_after_create => false, :id => nil, :position => nil))
|
403
|
+
source.contents.each do |content|
|
404
|
+
new_content = Content.copy(content, :element_id => element.id)
|
405
|
+
new_content.move_to_bottom
|
406
|
+
end
|
407
|
+
element
|
408
|
+
end
|
409
|
+
|
410
|
+
# creates the contents for this element as described in the elements.yml
|
411
|
+
def create_contents
|
412
|
+
element_scratch = description
|
413
|
+
contents = []
|
414
|
+
if element_scratch["contents"].blank?
|
415
|
+
logger.warn "\n++++++\nWARNING! Could not find any content descriptions for element: #{self.name}\n++++++++\n"
|
416
|
+
else
|
417
|
+
element_scratch["contents"].each do |content_hash|
|
418
|
+
contents << Content.create_from_scratch(self, content_hash.symbolize_keys)
|
419
|
+
end
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class EssenceAudio < ActiveRecord::Base
|
2
|
+
|
3
|
+
acts_as_essence(
|
4
|
+
:ingredient_column => :attachment,
|
5
|
+
:preview_text_method => :name
|
6
|
+
)
|
7
|
+
|
8
|
+
belongs_to :attachment
|
9
|
+
|
10
|
+
# Saves the ingredient
|
11
|
+
def save_ingredient(params, options = {})
|
12
|
+
return true if params.blank?
|
13
|
+
self.attachment_id = params["attachment_id"].to_s
|
14
|
+
self.save
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class EssenceDate < ActiveRecord::Base
|
2
|
+
|
3
|
+
acts_as_essence(
|
4
|
+
:ingredient_column => :date
|
5
|
+
)
|
6
|
+
|
7
|
+
# Returns self.date for the Element#preview_text method.
|
8
|
+
def preview_text(foo=nil)
|
9
|
+
return "" if date.blank?
|
10
|
+
I18n.l(date)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Saves the ingredient
|
14
|
+
def save_ingredient(params, options = {})
|
15
|
+
return true if params.blank?
|
16
|
+
self.date = DateTime.parse(params['date'].values.join('-'))
|
17
|
+
self.save
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|