alchemy_cms 2.1.12 → 2.2.rc1
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/.travis.yml +1 -1
- data/Gemfile +20 -16
- data/README.md +11 -7
- data/alchemy_cms.gemspec +31 -29
- data/app/assets/javascripts/alchemy/alchemy.base.js +234 -233
- data/app/assets/javascripts/alchemy/alchemy.buttons.js +26 -26
- data/app/assets/javascripts/alchemy/alchemy.datepicker.js +32 -32
- data/app/assets/javascripts/alchemy/alchemy.dirty.js +78 -78
- data/app/assets/javascripts/alchemy/alchemy.dragndrop.js +103 -103
- data/app/assets/javascripts/alchemy/alchemy.element_editor_selector.js +84 -84
- data/app/assets/javascripts/alchemy/alchemy.elements_window.js +88 -88
- data/app/assets/javascripts/alchemy/alchemy.file_progress.js +92 -0
- data/app/assets/javascripts/alchemy/alchemy.growler.js +23 -23
- data/app/assets/javascripts/alchemy/alchemy.html5.js +23 -0
- data/app/assets/javascripts/alchemy/alchemy.image_cropper.js +53 -52
- data/app/assets/javascripts/alchemy/alchemy.jquery_loader.js +33 -30
- data/app/assets/javascripts/alchemy/alchemy.js +2 -0
- data/app/assets/javascripts/alchemy/alchemy.js_extensions.js +14 -14
- data/app/assets/javascripts/alchemy/alchemy.link_overlay.js.coffee +181 -0
- data/app/assets/javascripts/alchemy/alchemy.menubar.js +48 -48
- data/app/assets/javascripts/alchemy/alchemy.page_sorter.js +39 -39
- data/app/assets/javascripts/alchemy/alchemy.preview.js +81 -83
- data/app/assets/javascripts/alchemy/alchemy.preview_window.js +86 -86
- data/app/assets/javascripts/alchemy/alchemy.routes.js.erb +23 -23
- data/app/assets/javascripts/alchemy/alchemy.swf_upload.js +208 -353
- data/app/assets/javascripts/alchemy/alchemy.uploader.js +279 -0
- data/app/assets/javascripts/alchemy/alchemy.windows.js +268 -268
- data/app/assets/javascripts/tiny_mce/plugins/alchemy_link/editor_plugin.js +42 -42
- data/app/assets/stylesheets/alchemy/_defaults.scss +89 -89
- data/app/assets/stylesheets/alchemy/base.css.scss +790 -804
- data/app/assets/stylesheets/alchemy/buttons.css.scss +263 -264
- data/app/assets/stylesheets/alchemy/dashboard.css.scss +66 -66
- data/app/assets/stylesheets/alchemy/elements.css.scss +575 -564
- data/app/assets/stylesheets/alchemy/flash.css.scss +45 -45
- data/app/assets/stylesheets/alchemy/frame.css.scss +262 -262
- data/app/assets/stylesheets/alchemy/icons.css.scss +86 -86
- data/app/assets/stylesheets/alchemy/jquery-ui.alchemy.css.scss +706 -707
- data/app/assets/stylesheets/alchemy/jquery.Jcrop.css.scss +46 -27
- data/app/assets/stylesheets/alchemy/jquery.sb.css.scss +107 -107
- data/app/assets/stylesheets/alchemy/login.css.scss +40 -38
- data/app/assets/stylesheets/alchemy/menubar.css.scss +84 -82
- data/app/assets/stylesheets/alchemy/modules.css.scss +9 -9
- data/app/assets/stylesheets/alchemy/pagination.css.scss +49 -49
- data/app/assets/stylesheets/alchemy/print.css +7 -7
- data/app/assets/stylesheets/alchemy/sitemap.css.scss +185 -154
- data/app/assets/stylesheets/alchemy/standard_set.css +205 -206
- data/app/assets/stylesheets/alchemy/tables.css.scss +94 -60
- data/app/assets/stylesheets/alchemy/tinymce_content.css.scss +34 -34
- data/app/assets/stylesheets/alchemy/tinymce_dialog.css.scss +177 -177
- data/app/assets/stylesheets/alchemy/upload.css.scss +68 -45
- data/app/assets/stylesheets/tiny_mce/plugins/inlinepopups/skins/alchemy/window.css.scss +222 -221
- data/app/controllers/alchemy/admin/attachments_controller.rb +100 -100
- data/app/controllers/alchemy/admin/base_controller.rb +116 -116
- data/app/controllers/alchemy/admin/clipboard_controller.rb +44 -44
- data/app/controllers/alchemy/admin/contents_controller.rb +55 -55
- data/app/controllers/alchemy/admin/dashboard_controller.rb +12 -11
- data/app/controllers/alchemy/admin/elements_controller.rb +109 -109
- data/app/controllers/alchemy/admin/essence_audios_controller.rb +8 -8
- data/app/controllers/alchemy/admin/essence_files_controller.rb +20 -20
- data/app/controllers/alchemy/admin/essence_flashes_controller.rb +8 -8
- data/app/controllers/alchemy/admin/essence_pictures_controller.rb +81 -81
- data/app/controllers/alchemy/admin/essence_videos_controller.rb +8 -8
- data/app/controllers/alchemy/admin/languages_controller.rb +16 -4
- data/app/controllers/alchemy/admin/layoutpages_controller.rb +9 -9
- data/app/controllers/alchemy/admin/pages_controller.rb +249 -248
- data/app/controllers/alchemy/admin/pictures_controller.rb +105 -105
- data/app/controllers/alchemy/admin/resources_controller.rb +111 -166
- data/app/controllers/alchemy/admin/trash_controller.rb +18 -18
- data/app/controllers/alchemy/admin/users_controller.rb +69 -69
- data/app/controllers/alchemy/attachments_controller.rb +27 -27
- data/app/controllers/alchemy/base_controller.rb +159 -155
- data/app/controllers/alchemy/elements_controller.rb +16 -16
- data/app/controllers/alchemy/messages_controller.rb +59 -59
- data/app/controllers/alchemy/pages_controller.rb +194 -198
- data/app/controllers/alchemy/pictures_controller.rb +57 -57
- data/app/controllers/alchemy/user_sessions_controller.rb +70 -70
- data/app/helpers/alchemy/admin/attachments_helper.rb +7 -7
- data/app/helpers/alchemy/admin/base_helper.rb +425 -425
- data/app/helpers/alchemy/admin/contents_helper.rb +72 -72
- data/app/helpers/alchemy/admin/elements_helper.rb +108 -107
- data/app/helpers/alchemy/admin/essences_helper.rb +108 -108
- data/app/helpers/alchemy/admin/pages_helper.rb +42 -42
- data/app/helpers/alchemy/admin/pictures_helper.rb +26 -26
- data/app/helpers/alchemy/base_helper.rb +90 -90
- data/app/helpers/alchemy/elements_helper.rb +167 -168
- data/app/helpers/alchemy/essences_helper.rb +133 -133
- data/app/helpers/alchemy/pages_helper.rb +515 -526
- data/app/helpers/alchemy/pictures_helper.rb +19 -0
- data/app/mailers/alchemy/messages.rb +13 -13
- data/app/mailers/alchemy/notifications.rb +19 -19
- data/app/models/alchemy.rb +3 -3
- data/app/models/alchemy/attachment.rb +52 -78
- data/app/models/alchemy/cell.rb +48 -48
- data/app/models/alchemy/content.rb +196 -196
- data/app/models/alchemy/element.rb +500 -490
- data/app/models/alchemy/essence_audio.rb +7 -7
- data/app/models/alchemy/essence_date.rb +10 -10
- data/app/models/alchemy/essence_file.rb +7 -7
- data/app/models/alchemy/essence_flash.rb +6 -6
- data/app/models/alchemy/essence_html.rb +9 -9
- data/app/models/alchemy/essence_picture.rb +17 -17
- data/app/models/alchemy/essence_richtext.rb +53 -53
- data/app/models/alchemy/essence_text.rb +21 -21
- data/app/models/alchemy/essence_video.rb +7 -7
- data/app/models/alchemy/folded_page.rb +3 -3
- data/app/models/alchemy/language.rb +91 -91
- data/app/models/alchemy/language/code.rb +14 -14
- data/app/models/alchemy/message.rb +48 -45
- data/app/models/alchemy/page.rb +555 -558
- data/app/models/alchemy/picture.rb +100 -99
- data/app/models/alchemy/user.rb +76 -74
- data/app/models/alchemy/user_session.rb +8 -8
- data/app/sweepers/alchemy/content_sweeper.rb +15 -15
- data/app/sweepers/alchemy/pages_sweeper.rb +50 -50
- data/app/sweepers/alchemy/pictures_sweeper.rb +14 -14
- data/app/views/alchemy/admin/attachments/_archive_overlay.html.erb +23 -23
- data/app/views/alchemy/admin/attachments/_attachment.html.erb +56 -56
- data/app/views/alchemy/admin/attachments/_file_to_assign.html.erb +15 -15
- data/app/views/alchemy/admin/attachments/_files_list.html.erb +16 -16
- data/app/views/alchemy/admin/attachments/create.js.erb +2 -2
- data/app/views/alchemy/admin/attachments/destroy.js.erb +3 -3
- data/app/views/alchemy/admin/attachments/edit.html.erb +10 -10
- data/app/views/alchemy/admin/attachments/index.html.erb +14 -14
- data/app/views/alchemy/admin/attachments/new.html.erb +9 -9
- data/app/views/alchemy/admin/clipboard/index.html.erb +21 -21
- data/app/views/alchemy/admin/clipboard/insert.js.erb +5 -5
- data/app/views/alchemy/admin/contents/_missing.html.erb +1 -1
- data/app/views/alchemy/admin/contents/create.js.erb +33 -33
- data/app/views/alchemy/admin/contents/destroy.js.erb +5 -5
- data/app/views/alchemy/admin/contents/new.html.erb +13 -13
- data/app/views/alchemy/admin/contents/order.js.erb +2 -2
- data/app/views/alchemy/admin/dashboard/index.html.erb +96 -92
- data/app/views/alchemy/admin/elements/_add_content.html.erb +12 -12
- data/app/views/alchemy/admin/elements/_element.html.erb +3 -3
- data/app/views/alchemy/admin/elements/_new_element_form.html.erb +28 -28
- data/app/views/alchemy/admin/elements/_picture_editor.html.erb +21 -21
- data/app/views/alchemy/admin/elements/create.js.erb +32 -32
- data/app/views/alchemy/admin/elements/index.html.erb +2 -2
- data/app/views/alchemy/admin/elements/new.html.erb +31 -31
- data/app/views/alchemy/admin/elements/order.js.erb +3 -3
- data/app/views/alchemy/admin/elements/trash.js.erb +13 -13
- data/app/views/alchemy/admin/elements/update.js.erb +6 -6
- data/app/views/alchemy/admin/essence_files/assign.js.erb +6 -6
- data/app/views/alchemy/admin/essence_pictures/crop.html.erb +32 -32
- data/app/views/alchemy/admin/essence_pictures/destroy.js.erb +1 -1
- data/app/views/alchemy/admin/essence_pictures/edit.html.erb +1 -1
- data/app/views/alchemy/admin/essence_pictures/update.js.erb +11 -11
- data/app/views/alchemy/admin/languages/_form.html.erb +51 -45
- data/app/views/alchemy/admin/languages/_language.html.erb +45 -45
- data/app/views/alchemy/admin/languages/_table.html.erb +25 -25
- data/app/views/alchemy/admin/layoutpages/index.html.erb +35 -35
- data/app/views/alchemy/admin/pages/_create_language_form.html.erb +42 -42
- data/app/views/alchemy/admin/pages/_external_link.html.erb +1 -1
- data/app/views/alchemy/admin/pages/_new_page_form.html.erb +27 -27
- data/app/views/alchemy/admin/pages/_page.html.erb +112 -112
- data/app/views/alchemy/admin/pages/_sitemap.html.erb +1 -1
- data/app/views/alchemy/admin/pages/configure.html.erb +71 -69
- data/app/views/alchemy/admin/pages/configure_external.html.erb +38 -38
- data/app/views/alchemy/admin/pages/destroy.js.erb +10 -10
- data/app/views/alchemy/admin/pages/edit.html.erb +165 -165
- data/app/views/alchemy/admin/pages/fold.js.erb +2 -2
- data/app/views/alchemy/admin/pages/index.html.erb +66 -66
- data/app/views/alchemy/admin/pages/locked.html.erb +1 -1
- data/app/views/alchemy/admin/pages/new.html.erb +40 -40
- data/app/views/alchemy/admin/pages/sort.js.erb +4 -4
- data/app/views/alchemy/admin/pages/unlock.js.erb +6 -6
- data/app/views/alchemy/admin/pages/update.js.erb +19 -19
- data/app/views/alchemy/admin/partials/_flash.html.erb +2 -2
- data/app/views/alchemy/admin/partials/_flash_notices.html.erb +1 -1
- data/app/views/alchemy/admin/partials/_flash_upload.html.erb +38 -0
- data/app/views/alchemy/admin/partials/_language_tree_select.html.erb +15 -15
- data/app/views/alchemy/admin/partials/_main_navigation_entry.html.erb +8 -8
- data/app/views/alchemy/admin/partials/_remote_search_form.html.erb +35 -35
- data/app/views/alchemy/admin/partials/_search_form.html.erb +14 -14
- data/app/views/alchemy/admin/partials/_sub_navigation_tab.html.erb +6 -6
- data/app/views/alchemy/admin/partials/_upload_form.html.erb +56 -118
- data/app/views/alchemy/admin/pictures/_archive_overlay.html.erb +11 -11
- data/app/views/alchemy/admin/pictures/_filter_and_size_bar.html.erb +71 -71
- data/app/views/alchemy/admin/pictures/_picture.html.erb +32 -32
- data/app/views/alchemy/admin/pictures/_picture_to_assign.html.erb +26 -26
- data/app/views/alchemy/admin/pictures/_pictures_list.html.erb +6 -6
- data/app/views/alchemy/admin/pictures/create.js.erb +7 -7
- data/app/views/alchemy/admin/pictures/index.html.erb +67 -67
- data/app/views/alchemy/admin/pictures/show_in_window.html.erb +5 -4
- data/app/views/alchemy/admin/resources/_form.html.erb +25 -19
- data/app/views/alchemy/admin/resources/_resource.html.erb +37 -36
- data/app/views/alchemy/admin/resources/_table.html.erb +17 -17
- data/app/views/alchemy/admin/resources/destroy.js.erb +1 -1
- data/app/views/alchemy/admin/resources/index.html.erb +14 -14
- data/app/views/alchemy/admin/trash/index.html.erb +20 -20
- data/app/views/alchemy/admin/users/_table.html.erb +52 -52
- data/app/views/alchemy/admin/users/_user.html.erb +35 -36
- data/app/views/alchemy/admin/users/index.html.erb +26 -27
- data/app/views/alchemy/base/error_notice.html.erb +2 -2
- data/app/views/alchemy/base/update.js.erb +1 -1
- data/app/views/alchemy/elements/_contactform_view.html.erb +76 -76
- data/app/views/alchemy/elements/_download_view.html.erb +1 -1
- data/app/views/alchemy/elements/_editor_not_found.html.erb +3 -3
- data/app/views/alchemy/elements/_searchresult_view.html.erb +2 -2
- data/app/views/alchemy/elements/_sitemap_editor.html.erb +1 -1
- data/app/views/alchemy/essences/_essence_audio_view.html.erb +13 -13
- data/app/views/alchemy/essences/_essence_date_editor.html.erb +10 -10
- data/app/views/alchemy/essences/_essence_file_editor.html.erb +62 -62
- data/app/views/alchemy/essences/_essence_file_view.html.erb +8 -8
- data/app/views/alchemy/essences/_essence_flash_view.html.erb +19 -19
- data/app/views/alchemy/essences/_essence_html_editor.html.erb +6 -6
- data/app/views/alchemy/essences/_essence_picture_editor.html.erb +73 -73
- data/app/views/alchemy/essences/_essence_picture_view.html.erb +34 -34
- data/app/views/alchemy/essences/_essence_richtext_editor.html.erb +7 -7
- data/app/views/alchemy/essences/_essence_text_editor.html.erb +8 -8
- data/app/views/alchemy/navigation/_image_link.html.erb +12 -12
- data/app/views/alchemy/navigation/_link.html.erb +13 -13
- data/app/views/alchemy/navigation/_renderer.html.erb +17 -17
- data/app/views/alchemy/page_layouts/_layout_footer.html.erb +1 -1
- data/app/views/alchemy/page_layouts/_layout_header.html.erb +1 -1
- data/app/views/alchemy/pages/show.rss.builder +14 -14
- data/app/views/alchemy/search/_result.html.erb +7 -7
- data/app/views/alchemy/user_sessions/leave.html.erb +9 -9
- data/app/views/alchemy/user_sessions/login.html.erb +39 -39
- data/app/views/alchemy/user_sessions/logout.html.erb +1 -1
- data/app/views/layouts/alchemy/admin.html.erb +81 -81
- data/app/views/layouts/alchemy/login.html.erb +36 -36
- data/app/views/layouts/alchemy/pages.html.erb +48 -27
- data/bin/alchemy +136 -134
- data/config/alchemy/config.yml +13 -9
- data/config/locales/alchemy.de.yml +24 -30
- data/config/locales/alchemy.en.yml +11 -28
- data/config/routes.rb +146 -146
- data/db/migrate/20100607193638_create_essence_pictures.rb +3 -3
- data/db/migrate/20101109150312_alter_pages_visible_column_default.rb +1 -1
- data/db/migrate/20101109151812_create_languages.rb +3 -3
- data/db/migrate/20110115123343_remove_css_class_default_from_essence_pictures.rb +3 -3
- data/db/migrate/20110224105120_change_pages_visible_default.rb +3 -3
- data/db/migrate/20110228182659_remove_default_page_layout_from_pages.rb +2 -2
- data/db/migrate/20110414163140_remove_display_name_from_elements.rb +3 -3
- data/db/migrate/20110511100516_rename_essence_texts_title_to_link_title.rb +2 -2
- data/db/migrate/20110529130500_add_cell_id_to_elements.rb +3 -3
- data/db/migrate/20110530102804_change_pages_page_layout_column.rb +3 -3
- data/db/migrate/20110711142057_change_open_link_in_new_window_to_link_target.rb +1 -1
- data/db/migrate/20111116125112_namespace_alchemy_models.rb +21 -21
- data/lib/alchemy/auth_engine.rb +5 -5
- data/lib/alchemy/capistrano.rb +64 -64
- data/lib/alchemy/config.rb +47 -44
- data/lib/alchemy/engine.rb +41 -41
- data/lib/alchemy/essence.rb +50 -51
- data/lib/alchemy/i18n.rb +48 -48
- data/lib/alchemy/modules.rb +30 -30
- data/lib/alchemy/mount_point.rb +6 -6
- data/lib/alchemy/page_layout.rb +94 -93
- data/lib/alchemy/resource.rb +82 -0
- data/lib/alchemy/resources_helper.rb +56 -0
- data/lib/alchemy/scoped_pagination_url_helper.rb +8 -8
- data/lib/alchemy/seeder.rb +88 -88
- data/lib/alchemy/tinymce.rb +49 -49
- data/lib/alchemy/upgrader.rb +103 -103
- data/lib/alchemy/version.rb +1 -1
- data/lib/alchemy_cms.rb +26 -27
- data/lib/extensions/action_view.rb +1 -1
- data/lib/extensions/array.rb +3 -3
- data/lib/extensions/hash.rb +3 -3
- data/lib/middleware/flash_session_cookie.rb +1 -1
- data/lib/rails/generators/alchemy/deploy_script/deploy_script_generator.rb +24 -24
- data/lib/rails/generators/alchemy/elements/elements_generator.rb +7 -7
- data/lib/rails/generators/alchemy/elements/templates/view.html.erb +17 -17
- data/lib/rails/generators/alchemy/page_layouts/page_layouts_generator.rb +6 -6
- data/lib/rails/generators/alchemy/plugin/templates/authorization_rules.rb +8 -8
- data/lib/rails/generators/alchemy/scaffold/files/pages.html.erb +7 -7
- data/lib/rails/generators/alchemy/scaffold/scaffold_generator.rb +36 -36
- data/lib/rails/templates/alchemy.rb +1 -1
- data/lib/tasks/ferret.rake +2 -2
- data/lib/tasks/fleximage.rake +32 -32
- data/lib/tasks/install.rake +12 -12
- data/lib/tasks/upgrade.rake +4 -4
- data/spec/controllers/admin/clipboard_controller_spec.rb +43 -43
- data/spec/controllers/admin/contents_controller_spec.rb +22 -22
- data/spec/controllers/admin/elements_controller_spec.rb +13 -13
- data/spec/controllers/admin/languages_controller_spec.rb +31 -0
- data/spec/controllers/admin/pages_controller_spec.rb +10 -41
- data/spec/controllers/admin/resources_controller_spec.rb +19 -0
- data/spec/controllers/admin/trash_controller_spec.rb +11 -11
- data/spec/controllers/base_controller_spec.rb +46 -46
- data/spec/controllers/pages_controller_spec.rb +102 -92
- data/spec/dummy/app/controllers/admin/events_controller.rb +3 -0
- data/spec/dummy/app/controllers/errors_controller.rb +5 -0
- data/spec/dummy/app/models/event.rb +3 -0
- data/spec/dummy/config.ru +1 -1
- data/spec/dummy/config/application.rb +3 -0
- data/spec/dummy/config/authorization_rules.rb +7 -0
- data/spec/dummy/config/environments/development.rb +8 -1
- data/spec/dummy/config/environments/production.rb +1 -1
- data/spec/dummy/config/environments/test.rb +5 -2
- data/spec/dummy/config/routes.rb +9 -1
- data/spec/dummy/db/schema.rb +47 -35
- data/spec/dummy/public/404.html +19 -7
- data/spec/dummy/public/404.html.bak +26 -0
- data/spec/dummy/public/422.html +19 -7
- data/spec/dummy/public/500.html +19 -7
- data/spec/dummy/script/rails +2 -2
- data/spec/factories.rb +76 -76
- data/spec/helpers/admin/base_helper_spec.rb +21 -21
- data/spec/helpers/admin/contents_helper_spec.rb +14 -14
- data/spec/helpers/admin/elements_helper_spec.rb +40 -40
- data/spec/helpers/admin/essences_helper_spec.rb +7 -7
- data/spec/helpers/elements_helper_spec.rb +154 -154
- data/spec/helpers/essences_helper_spec.rb +10 -10
- data/spec/helpers/pages_helper_spec.rb +369 -372
- data/spec/helpers/pictures_helper_spec.rb +14 -0
- data/spec/helpers/url_helpers_spec.rb +29 -34
- data/spec/integration/admin/pages_controller_spec.rb +50 -50
- data/spec/integration/admin/resources_integration_spec.rb +100 -0
- data/spec/integration/navigation_spec.rb +1 -1
- data/spec/integration/pages_controller_spec.rb +205 -207
- data/spec/integration/security_spec.rb +47 -47
- data/spec/javascripts/alchemy/link_overlay_spec.js.coffee +42 -0
- data/spec/javascripts/alchemy_integration_spec.coffee +12 -0
- data/spec/javascripts/fixtures/select.html +3 -0
- data/spec/javascripts/helpers/.gitkeep +0 -0
- data/spec/javascripts/helpers/jasmine-jquery-1.3.1.js +289 -0
- data/spec/javascripts/helpers/mock-ajax.js +207 -0
- data/spec/javascripts/helpers/test_responses/test_responses.js +1 -0
- data/spec/javascripts/spec.css +3 -0
- data/spec/javascripts/spec.js +2 -0
- data/spec/libraries/resource_spec.rb +122 -0
- data/spec/libraries/resources_helper_spec.rb +105 -0
- data/spec/models/content_spec.rb +67 -67
- data/spec/models/element_spec.rb +133 -133
- data/spec/models/essence_picture_spec.rb +5 -5
- data/spec/models/essence_richtext_spec.rb +4 -4
- data/spec/models/language_spec.rb +89 -89
- data/spec/models/page_spec.rb +436 -506
- data/spec/models/picture_spec.rb +34 -34
- data/spec/models/user_spec.rb +2 -2
- data/spec/page_layout_spec.rb +24 -20
- data/spec/routing_spec.rb +253 -253
- data/spec/spec_helper.rb +51 -50
- data/spec/support/alchemy/controller_hacks.rb +25 -25
- data/spec/support/alchemy/specs_helpers.rb +25 -25
- data/spec/support/integration_spec_helper.rb +24 -0
- data/vendor/assets/javascripts/jquery_plugins/jquery.html5uploader.js +271 -0
- data/vendor/assets/javascripts/jquery_plugins/jquery.in-place-edit.js +86 -85
- data/vendor/assets/javascripts/jquery_plugins/jquery.ui.nestedSortable.js +380 -377
- data/vendor/assets/javascripts/jquery_plugins/jquery.ui.tabspaging.js +285 -279
- data/vendor/assets/javascripts/swfupload/SWFObject License.txt +3 -3
- data/vendor/assets/javascripts/swfupload/swfupload.cookies.js +47 -47
- data/vendor/assets/javascripts/swfupload/swfupload.js +612 -612
- data/vendor/assets/javascripts/swfupload/swfupload.queue.js +93 -93
- data/vendor/assets/javascripts/swfupload/swfupload.speed.js +337 -337
- data/vendor/assets/javascripts/swfupload/swfupload.swfobject.js +706 -102
- data/vendor/assets/javascripts/tiny_mce/license.txt +6 -6
- data/vendor/assets/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm +97 -97
- data/vendor/assets/javascripts/tiny_mce/plugins/inlinepopups/template.htm +386 -376
- data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pastetext.js +30 -30
- data/vendor/assets/javascripts/tiny_mce/plugins/paste/js/pasteword.js +45 -45
- data/vendor/assets/javascripts/tiny_mce/plugins/paste/pastetext.htm +20 -17
- data/vendor/assets/javascripts/tiny_mce/plugins/paste/pasteword.htm +12 -12
- data/vendor/assets/javascripts/tiny_mce/plugins/table/cell.htm +183 -173
- data/vendor/assets/javascripts/tiny_mce/plugins/table/css/cell.css +4 -4
- data/vendor/assets/javascripts/tiny_mce/plugins/table/css/row.css +7 -7
- data/vendor/assets/javascripts/tiny_mce/plugins/table/css/table.css +3 -3
- data/vendor/assets/javascripts/tiny_mce/plugins/table/js/cell.js +282 -280
- data/vendor/assets/javascripts/tiny_mce/plugins/table/js/merge_cells.js +15 -15
- data/vendor/assets/javascripts/tiny_mce/plugins/table/js/row.js +204 -204
- data/vendor/assets/javascripts/tiny_mce/plugins/table/js/table.js +435 -435
- data/vendor/assets/javascripts/tiny_mce/plugins/table/merge_cells.htm +24 -22
- data/vendor/assets/javascripts/tiny_mce/plugins/table/row.htm +144 -136
- data/vendor/assets/javascripts/tiny_mce/plugins/table/table.htm +184 -168
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/about.htm +62 -46
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/anchor.htm +17 -16
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/charmap.htm +56 -47
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/color_picker.htm +67 -54
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/editor_template.js +852 -1
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/image.htm +79 -69
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/about.js +48 -48
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/anchor.js +28 -28
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/charmap.js +317 -317
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/color_picker.js +248 -246
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/image.js +246 -246
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/link.js +146 -146
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/js/source_editor.js +31 -31
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de.js +1 -1
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/de_dlg.js +1 -1
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en.js +1 -1
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js +1 -1
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/link.htm +53 -46
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/shortcuts.htm +57 -45
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/content.css +182 -47
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css +399 -92
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/default/ui.css +891 -187
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/content.css +102 -24
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +377 -78
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css +452 -77
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css +167 -45
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css +399 -92
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css +890 -190
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +33 -7
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +15 -4
- data/vendor/assets/javascripts/tiny_mce/themes/advanced/source_editor.htm +18 -15
- data/vendor/assets/javascripts/tiny_mce/utils/editable_selects.js +46 -46
- data/vendor/assets/javascripts/tiny_mce/utils/form_utils.js +124 -124
- data/vendor/assets/javascripts/tiny_mce/utils/mctabs.js +112 -112
- data/vendor/assets/javascripts/tiny_mce/utils/validate.js +213 -213
- metadata +102 -115
- data/app/assets/javascripts/alchemy/alchemy.link_overlay.js +0 -216
- data/lib/tasks/routes.rake +0 -29
- data/spec/integration/admin/resources_spec.rb +0 -19
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Alchemy::PicturesHelper do
|
|
4
|
+
|
|
5
|
+
describe "alchemy_picture_path" do
|
|
6
|
+
|
|
7
|
+
it "should route to show_picture_path" do
|
|
8
|
+
pic = mock_model("Picture", :urlname => 'cute-kitten', :id => 1)
|
|
9
|
+
helper.alchemy_picture_path(pic).should == '/alchemy/pictures/1/show/cute-kitten.jpg'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
@@ -2,39 +2,34 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe "URL generating" do
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
it "should generate a url string for zoomed image" do
|
|
36
|
-
p = zoom_picture_path(:id => 3, :name => "kitten", :format => :jpg)
|
|
37
|
-
p.should == "/alchemy/pictures/3/zoom/kitten.jpg"
|
|
38
|
-
end
|
|
5
|
+
it "should generate a url string for cropped picture" do
|
|
6
|
+
p = show_picture_path(:id => 3, :crop => "crop", :size => "100x33", :name => "kitten", :format => "jpg")
|
|
7
|
+
p.should == "/alchemy/pictures/3/show/100x33/crop/kitten.jpg"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should generate a url string for cropped and masked picture" do
|
|
11
|
+
p = show_picture_path(:id => 3, :crop => "crop", :crop_from => "0x0", :crop_size => "900x300", :size => "100x33", :name => "kitten", :format => :jpg)
|
|
12
|
+
p.should == "/alchemy/pictures/3/show/100x33/crop/0x0/900x300/kitten.jpg"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should generate a url string for cropped thumbnail" do
|
|
16
|
+
p = thumbnail_path(:id => 3, :crop => "crop", :size => "100x33", :name => "kitten", :format => :jpg)
|
|
17
|
+
p.should == "/alchemy/pictures/3/thumbnails/100x33/crop/kitten.jpg"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should generate a url string for thumbnail with default name and format" do
|
|
21
|
+
p = thumbnail_path(:id => 3, :size => "100x33")
|
|
22
|
+
p.should == "/alchemy/pictures/3/thumbnails/100x33/thumbnail.png"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should generate a url string for cropped and masked thumbnail" do
|
|
26
|
+
p = thumbnail_path(:id => 3, :crop_from => "0x0", :crop_size => "900x300", :size => "100x33", :name => "kitten", :format => :jpg)
|
|
27
|
+
p.should == "/alchemy/pictures/3/thumbnails/100x33/0x0/900x300/kitten.jpg"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should generate a url string for zoomed image" do
|
|
31
|
+
p = zoom_picture_path(:id => 3, :name => "kitten", :format => :jpg)
|
|
32
|
+
p.should == "/alchemy/pictures/3/zoom/kitten.jpg"
|
|
33
|
+
end
|
|
39
34
|
|
|
40
35
|
end
|
|
@@ -1,73 +1,73 @@
|
|
|
1
1
|
# Skipping on Travis-CI, because capybara-webkit does not install on travis.
|
|
2
2
|
unless ENV["CI"]
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
require 'spec_helper'
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
describe Alchemy::Admin::PagesController, :js => true do
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
describe "language tree switching" do
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
context "in a multilangual environment" do
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
before(:all) do
|
|
13
|
+
Factory.build(:admin_user).save_without_session_maintenance
|
|
14
|
+
@language = Factory(:language)
|
|
15
|
+
@german_root = Factory(:language_root_page, :language => Alchemy::Language.get_default, :name => 'Deutsch')
|
|
16
|
+
@klingonian_root = Factory(:language_root_page, :name => 'Klingonian')
|
|
17
|
+
end
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
it "one should be able to switch the language tree" do
|
|
20
|
+
login_into_alchemy
|
|
21
|
+
visit('/alchemy/admin/pages')
|
|
22
|
+
page.select 'Klingonian', :from => 'language'
|
|
23
|
+
page.should have_selector('#sitemap .sitemap_pagename_link', :text => 'Klingonian')
|
|
24
|
+
end
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
after(:all) {
|
|
27
|
+
@language.destroy
|
|
28
|
+
@klingonian_root.delete
|
|
29
|
+
@german_root.delete
|
|
30
|
+
}
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
end
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
context "with no language root page" do
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
before(:all) do
|
|
37
|
+
Factory.build(:admin_user).save_without_session_maintenance
|
|
38
|
+
@language = Factory(:language)
|
|
39
|
+
end
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
it "it should display the form for creating language root" do
|
|
42
|
+
login_into_alchemy
|
|
43
|
+
visit('/alchemy/admin/pages')
|
|
44
|
+
page.select 'Klingonian', :from => 'language'
|
|
45
|
+
page.should have_content('This language tree does not exist')
|
|
46
|
+
end
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
after(:all) {
|
|
49
|
+
@language.destroy
|
|
50
|
+
}
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
end
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
end
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
describe "flush complete page cache" do
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
before(:all) do
|
|
59
|
+
Factory.build(:admin_user).save_without_session_maintenance
|
|
60
|
+
end
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
it "should remove the cache of all pages" do
|
|
63
|
+
login_into_alchemy
|
|
64
|
+
visit '/alchemy/admin/pages'
|
|
65
|
+
click_link 'Flush page cache'
|
|
66
|
+
page.should have_content('Page cache flushed')
|
|
67
|
+
end
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
end
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
end
|
|
72
72
|
|
|
73
73
|
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'support/integration_spec_helper'
|
|
3
|
+
|
|
4
|
+
describe "Resources" do
|
|
5
|
+
|
|
6
|
+
before(:all) do
|
|
7
|
+
Event.create!(:name => 'My Event',
|
|
8
|
+
:hidden_name => 'not shown',
|
|
9
|
+
:starts_at => DateTime.new(2012, 03, 02, 8, 15),
|
|
10
|
+
:ends_at => DateTime.new(2012, 03, 02, 19, 30),
|
|
11
|
+
:description => "something\nfancy",
|
|
12
|
+
:published => false,
|
|
13
|
+
:entrance_fee => 12.32)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "index view" do
|
|
17
|
+
|
|
18
|
+
it "should have a button for creating a new resource items" do
|
|
19
|
+
without_access_control { visit '/admin/events' }
|
|
20
|
+
page.should have_selector('#toolbar div.button_with_label a.icon_button span.icon.create')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should list existing items" do
|
|
24
|
+
without_access_control {
|
|
25
|
+
visit '/admin/events'
|
|
26
|
+
page.should have_content("My Event")
|
|
27
|
+
page.should have_content("something fancy")
|
|
28
|
+
page.should have_content("12.32")
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should list existing resource-items nicely formatted"
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe "form for creating and updating items" do
|
|
37
|
+
it "renders an input field according to the attribute's type"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe "create resource item" do
|
|
41
|
+
|
|
42
|
+
context "when form filled with valid data" do
|
|
43
|
+
it "lists the new item" do
|
|
44
|
+
without_access_control {
|
|
45
|
+
create_admin_user
|
|
46
|
+
login_with_admin_user
|
|
47
|
+
visit '/admin/events/new'
|
|
48
|
+
fill_in 'event_name', :with => 'My second event'
|
|
49
|
+
fill_in 'event_starts_at', :with => DateTime.new(2012, 03, 03, 20, 00)
|
|
50
|
+
click_on 'Save'
|
|
51
|
+
page.should have_content "My second event"
|
|
52
|
+
page.should have_content "2012-03-03"
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context "when form filled with invalid data" do
|
|
58
|
+
it "shows the form again" do
|
|
59
|
+
without_access_control {
|
|
60
|
+
create_admin_user
|
|
61
|
+
login_with_admin_user
|
|
62
|
+
visit '/admin/events/new'
|
|
63
|
+
fill_in 'event_name', :with => '' #invalid!
|
|
64
|
+
click_on 'Save'
|
|
65
|
+
page.should have_selector "input#event_name"
|
|
66
|
+
}
|
|
67
|
+
end
|
|
68
|
+
it "lists invalid fields"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe "updating an item" do
|
|
74
|
+
it "shows the updated value"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe "destroying an item" do
|
|
78
|
+
it "should'n be on the list anymore", :js => true do
|
|
79
|
+
pending "Needs js, but doesn't work, neither with selenium nor webkit.
|
|
80
|
+
When trying to create an user inside the 'without-access-control'-block
|
|
81
|
+
it's saved but not found anymore when trying to login"
|
|
82
|
+
|
|
83
|
+
Event.create!(:name => 'My second Event',
|
|
84
|
+
:starts_at => DateTime.new(2012, 03, 02, 8, 15),
|
|
85
|
+
:ends_at => DateTime.new(2012, 03, 02, 19, 30),
|
|
86
|
+
:description => "something\nfancy",
|
|
87
|
+
:published => false,
|
|
88
|
+
:entrance_fee => 12.32)
|
|
89
|
+
|
|
90
|
+
without_access_control {
|
|
91
|
+
create_admin_user
|
|
92
|
+
visit '/admin/events'
|
|
93
|
+
click_link 'Delete'
|
|
94
|
+
page.should have_content "My Event"
|
|
95
|
+
page.should_not have_content "My second Event"
|
|
96
|
+
}
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
@@ -1,256 +1,254 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe Alchemy::PagesController do
|
|
4
|
-
|
|
5
|
-
before(:each) do
|
|
6
|
-
@default_language = Alchemy::Language.get_default
|
|
7
|
-
@default_language_root = Factory(:language_root_page, :language => @default_language, :name => 'Home')
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
describe "#show" do
|
|
11
|
-
|
|
12
|
-
it "should include all its elements and contents" do
|
|
13
|
-
p = Factory(:public_page, :language => @default_language)
|
|
14
|
-
article = p.elements.find_by_name('article')
|
|
15
|
-
article.content_by_name('intro').essence.update_attributes(:body => 'Welcome to Peters Petshop', :public => true)
|
|
16
|
-
visit '/alchemy/a-public-page'
|
|
17
|
-
within('div#content div.article div.intro') { page.should have_content('Welcome to Peters Petshop') }
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
it "should show the navigation with all visible pages" do
|
|
21
|
-
pages = [
|
|
22
|
-
Factory(:public_page, :language => @default_language, :visible => true, :name => 'Page 1', :parent_id => @default_language_root.id),
|
|
23
|
-
Factory(:public_page, :language => @default_language, :visible => true, :name => 'Page 2', :parent_id => @default_language_root.id)
|
|
24
|
-
]
|
|
25
|
-
visit '/alchemy/'
|
|
26
|
-
within('div#navigation ul') { page.should have_selector('li a[href="/alchemy/page-1"], li a[href="/alchemy/page-2"]') }
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
context "when a global page with the same urlname as the requested page exists in the language tree" do
|
|
30
|
-
|
|
31
|
-
it "should render the content page, not the global page" do
|
|
32
|
-
globalpage = Factory(:public_page, :layoutpage => true, :language => @default_language, :name => "samename", :urlname => "samename", :parent_id => @default_language_root.id)
|
|
33
|
-
contentpage = Factory(:public_page, :layoutpage => false, :language => @default_language, :name => "samename", :urlname => "samename", :parent_id => @default_language_root.id)
|
|
34
|
-
article = contentpage.elements.find_by_name('article')
|
|
35
|
-
article.content_by_name('intro').essence.update_attributes(:body => 'rendered on contentpage', :public => true)
|
|
36
|
-
visit("/alchemy/samename")
|
|
37
|
-
within('div#content div.article div.intro') { page.should have_content('rendered on contentpage') }
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
describe "fulltext search" do
|
|
45
|
-
|
|
46
|
-
before(:each) do
|
|
47
|
-
@page = Factory(:public_page, :language => @default_language, :visible => true, :name => 'Page 1', :parent_id => @default_language_root.id)
|
|
48
|
-
@element = Factory(:element, :name => 'article', :page => @page)
|
|
49
|
-
Factory(:public_page, :language => @default_language, :name => 'Suche', :page_layout => 'search', :parent_id => @default_language_root.id)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "should have a correct path in the form tag" do
|
|
53
|
-
visit('/alchemy/suche')
|
|
54
|
-
page.should have_selector('div#content form[action="/alchemy/suche"]')
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
context "performing the search" do
|
|
58
|
-
|
|
59
|
-
it "should display search results for richtext essences" do
|
|
60
|
-
@element.content_by_name('text').essence.update_attributes(:body => '<p>Welcome to Peters Petshop</p>', :public => true)
|
|
61
|
-
visit('/alchemy/suche?query=Petshop')
|
|
62
|
-
within('div#content .search_result') { page.should have_content('Petshop') }
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "should display search results for text essences" do
|
|
66
|
-
@element.content_by_name('intro').essence.update_attributes(:body => 'Welcome to Peters Petshop', :public => true)
|
|
67
|
-
visit('/alchemy/suche?query=Petshop')
|
|
68
|
-
within('div#content .search_result') { page.should have_content('Petshop') }
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "should not find contents placed on global-pages (layoutpage => true)" do
|
|
72
|
-
@page.update_attributes(:layoutpage => true)
|
|
73
|
-
@element.content_by_name('intro').essence.update_attributes(:body => 'Welcome to Peters Petshop', :public => true)
|
|
74
|
-
visit('/alchemy/suche?query=Petshop')
|
|
75
|
-
within('div#content') { page.should have_css('h2.no_search_results') }
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "should not find contents placed on unpublished pages (public => false)" do
|
|
79
|
-
@page.update_attributes(:public => false)
|
|
80
|
-
@element.content_by_name('intro').essence.update_attributes(:body => 'Welcome to Peters Petshop', :public => true)
|
|
81
|
-
visit('/alchemy/suche?query=Petshop')
|
|
82
|
-
within('div#content') { page.should have_css('h2.no_search_results') }
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should not find contents placed on restricted pages (restricted => true)" do
|
|
86
|
-
@page.update_attributes(:restricted => true)
|
|
87
|
-
@element.content_by_name('intro').essence.update_attributes(:body => 'Welcome to Peters Petshop', :public => true)
|
|
88
|
-
visit('/alchemy/suche?query=Petshop')
|
|
89
|
-
within('div#content') { page.should have_css('h2.no_search_results') }
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
describe "redirecting" do
|
|
97
4
|
|
|
98
|
-
|
|
5
|
+
before(:each) do
|
|
6
|
+
@default_language = Alchemy::Language.get_default
|
|
7
|
+
@default_language_root = Factory(:language_root_page, :language => @default_language, :name => 'Home')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "#show" do
|
|
11
|
+
|
|
12
|
+
it "should include all its elements and contents" do
|
|
13
|
+
p = Factory(:public_page, :language => @default_language)
|
|
14
|
+
article = p.elements.find_by_name('article')
|
|
15
|
+
article.content_by_name('intro').essence.update_attributes(:body => 'Welcome to Peters Petshop', :public => true)
|
|
16
|
+
visit '/alchemy/a-public-page'
|
|
17
|
+
within('div#content div.article div.intro') { page.should have_content('Welcome to Peters Petshop') }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should show the navigation with all visible pages" do
|
|
21
|
+
pages = [
|
|
22
|
+
Factory(:public_page, :language => @default_language, :visible => true, :name => 'Page 1', :parent_id => @default_language_root.id),
|
|
23
|
+
Factory(:public_page, :language => @default_language, :visible => true, :name => 'Page 2', :parent_id => @default_language_root.id)
|
|
24
|
+
]
|
|
25
|
+
visit '/alchemy/'
|
|
26
|
+
within('div#navigation ul') { page.should have_selector('li a[href="/alchemy/page-1"], li a[href="/alchemy/page-2"]') }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe "fulltext search" do
|
|
32
|
+
|
|
33
|
+
before(:each) do
|
|
34
|
+
@page = Factory(:public_page, :language => @default_language, :visible => true, :name => 'Page 1', :parent_id => @default_language_root.id)
|
|
35
|
+
@element = Factory(:element, :name => 'article', :page => @page)
|
|
36
|
+
Factory(:public_page, :language => @default_language, :name => 'Suche', :page_layout => 'search', :parent_id => @default_language_root.id)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should have a correct path in the form tag" do
|
|
40
|
+
visit('/alchemy/suche')
|
|
41
|
+
page.should have_selector('div#content form[action="/alchemy/suche"]')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "performing the search" do
|
|
45
|
+
|
|
46
|
+
it "should display search results for richtext essences" do
|
|
47
|
+
@element.content_by_name('text').essence.update_attributes(:body => '<p>Welcome to Peters Petshop</p>', :public => true)
|
|
48
|
+
visit('/alchemy/suche?query=Petshop')
|
|
49
|
+
within('div#content .search_result') { page.should have_content('Petshop') }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should display search results for text essences" do
|
|
53
|
+
@element.content_by_name('intro').essence.update_attributes(:body => 'Welcome to Peters Petshop', :public => true)
|
|
54
|
+
visit('/alchemy/suche?query=Petshop')
|
|
55
|
+
within('div#content .search_result') { page.should have_content('Petshop') }
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should not find contents placed on global-pages (layoutpage => true)" do
|
|
59
|
+
@page.update_attributes(:layoutpage => true)
|
|
60
|
+
@element.content_by_name('intro').essence.update_attributes(:body => 'Welcome to Peters Petshop', :public => true)
|
|
61
|
+
visit('/alchemy/suche?query=Petshop')
|
|
62
|
+
within('div#content') { page.should have_css('h2.no_search_results') }
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should not find contents placed on unpublished pages (public => false)" do
|
|
66
|
+
@page.update_attributes(:public => false)
|
|
67
|
+
@element.content_by_name('intro').essence.update_attributes(:body => 'Welcome to Peters Petshop', :public => true)
|
|
68
|
+
visit('/alchemy/suche?query=Petshop')
|
|
69
|
+
within('div#content') { page.should have_css('h2.no_search_results') }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should not find contents placed on restricted pages (restricted => true)" do
|
|
73
|
+
@page.update_attributes(:restricted => true)
|
|
74
|
+
@element.content_by_name('intro').essence.update_attributes(:body => 'Welcome to Peters Petshop', :public => true)
|
|
75
|
+
visit('/alchemy/suche?query=Petshop')
|
|
76
|
+
within('div#content') { page.should have_css('h2.no_search_results') }
|
|
77
|
+
end
|
|
99
78
|
|
|
100
|
-
|
|
101
|
-
@page = Factory(:public_page)
|
|
102
|
-
Alchemy::Config.stub!(:get) { |arg| arg == :url_nesting ? true : Alchemy::Config.parameter(arg) }
|
|
103
|
-
end
|
|
79
|
+
end
|
|
104
80
|
|
|
105
|
-
|
|
106
|
-
visit '/alchemy/a-public-page'
|
|
107
|
-
page.current_path.should == '/alchemy/de/a-public-page'
|
|
108
|
-
end
|
|
81
|
+
end
|
|
109
82
|
|
|
110
|
-
|
|
83
|
+
describe "redirecting" do
|
|
111
84
|
|
|
112
|
-
|
|
113
|
-
@page.update_attributes(:public => false, :name => 'Not Public', :urlname => '')
|
|
114
|
-
@child = Factory(:public_page, :name => 'Public Child', :parent_id => @page.id)
|
|
115
|
-
Alchemy::Config.stub!(:get) { |arg| arg == :url_nesting ? false : Alchemy::Config.parameter(arg) }
|
|
116
|
-
end
|
|
85
|
+
context "in multi language mode" do
|
|
117
86
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
87
|
+
before(:each) do
|
|
88
|
+
@page = Factory(:public_page)
|
|
89
|
+
Alchemy::Config.stub!(:get) { |arg| arg == :url_nesting ? true : Alchemy::Config.parameter(arg) }
|
|
90
|
+
end
|
|
122
91
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
92
|
+
it "should redirect to url with nested language code" do
|
|
93
|
+
visit '/alchemy/a-public-page'
|
|
94
|
+
page.current_path.should == '/alchemy/de/a-public-page'
|
|
95
|
+
end
|
|
127
96
|
|
|
128
|
-
|
|
97
|
+
context "should redirect to public child" do
|
|
129
98
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
99
|
+
before(:each) do
|
|
100
|
+
@page.update_attributes(:public => false, :name => 'Not Public', :urlname => '')
|
|
101
|
+
@child = Factory(:public_page, :name => 'Public Child', :parent_id => @page.id)
|
|
102
|
+
Alchemy::Config.stub!(:get) { |arg| arg == :url_nesting ? false : Alchemy::Config.parameter(arg) }
|
|
103
|
+
end
|
|
134
104
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
105
|
+
it "if requested page is unpublished" do
|
|
106
|
+
visit '/alchemy/kl/not-public'
|
|
107
|
+
page.current_path.should == '/alchemy/kl/public-child'
|
|
108
|
+
end
|
|
139
109
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
110
|
+
it "with nested language code, if requested page is unpublished and url has no language code" do
|
|
111
|
+
visit '/alchemy/not-public'
|
|
112
|
+
page.current_path.should == '/alchemy/kl/public-child'
|
|
113
|
+
end
|
|
144
114
|
|
|
145
|
-
|
|
115
|
+
end
|
|
146
116
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
end
|
|
117
|
+
it "should redirect to pages url, if requested url is index url" do
|
|
118
|
+
visit '/alchemy/'
|
|
119
|
+
page.current_path.should == '/alchemy/de/home'
|
|
120
|
+
end
|
|
152
121
|
|
|
153
|
-
|
|
122
|
+
it "should redirect to pages url, if requested url is only the language code" do
|
|
123
|
+
visit '/alchemy/de'
|
|
124
|
+
page.current_path.should == '/alchemy/de/home'
|
|
125
|
+
end
|
|
154
126
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
127
|
+
it "should keep additional params" do
|
|
128
|
+
visit '/alchemy/a-public-page?query=Peter'
|
|
129
|
+
page.current_url.should match(/\?query=Peter/)
|
|
130
|
+
end
|
|
158
131
|
|
|
159
|
-
|
|
132
|
+
context "with url nesting" do
|
|
160
133
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
134
|
+
before(:each) do
|
|
135
|
+
@level1 = Factory(:public_page, :parent_id => @default_language_root.id, :name => 'catalog', :language => @default_language)
|
|
136
|
+
@level2 = Factory(:public_page, :parent_id => @level1.id, :name => 'products', :language => @default_language)
|
|
137
|
+
@level3 = Factory(:public_page, :parent_id => @level2.id, :name => 'screwdriver', :language => @default_language)
|
|
138
|
+
end
|
|
165
139
|
|
|
166
|
-
|
|
167
|
-
visit "/alchemy/de/catalog"
|
|
168
|
-
page.status_code.should == 200
|
|
169
|
-
page.current_path.should == "/alchemy/de/catalog"
|
|
170
|
-
end
|
|
140
|
+
context "enabled" do
|
|
171
141
|
|
|
172
|
-
|
|
142
|
+
before(:each) do
|
|
143
|
+
Alchemy::Config.stub!(:get) { |arg| arg == :url_nesting ? true : Alchemy::Config.parameter(arg) }
|
|
144
|
+
end
|
|
173
145
|
|
|
174
|
-
|
|
146
|
+
context "requesting a non nested url" do
|
|
175
147
|
|
|
176
|
-
|
|
148
|
+
it "should redirect to nested url" do
|
|
149
|
+
visit "/alchemy/de/screwdriver"
|
|
150
|
+
page.current_path.should == '/alchemy/de/catalog/products/screwdriver'
|
|
151
|
+
end
|
|
177
152
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
153
|
+
it "should only redirect to nested url if page is nested" do
|
|
154
|
+
visit "/alchemy/de/catalog"
|
|
155
|
+
page.status_code.should == 200
|
|
156
|
+
page.current_path.should == "/alchemy/de/catalog"
|
|
157
|
+
end
|
|
181
158
|
|
|
182
|
-
|
|
159
|
+
end
|
|
183
160
|
|
|
184
|
-
|
|
185
|
-
visit "/alchemy/de/catalog/products/screwdriver"
|
|
186
|
-
page.current_path.should == "/alchemy/de/screwdriver"
|
|
187
|
-
end
|
|
161
|
+
end
|
|
188
162
|
|
|
189
|
-
|
|
163
|
+
context "disabled" do
|
|
190
164
|
|
|
191
|
-
|
|
165
|
+
before(:each) do
|
|
166
|
+
Alchemy::Config.stub!(:get) { |arg| arg == :url_nesting ? false : Alchemy::Config.parameter(arg) }
|
|
167
|
+
end
|
|
192
168
|
|
|
193
|
-
|
|
169
|
+
context "requesting a nested url" do
|
|
194
170
|
|
|
195
|
-
|
|
171
|
+
it "should redirect to not nested url" do
|
|
172
|
+
visit "/alchemy/de/catalog/products/screwdriver"
|
|
173
|
+
page.current_path.should == "/alchemy/de/screwdriver"
|
|
174
|
+
end
|
|
196
175
|
|
|
197
|
-
|
|
176
|
+
end
|
|
198
177
|
|
|
199
|
-
|
|
200
|
-
@page = Factory(:public_page, :language => @default_language, :parent_id => @default_language_root.id)
|
|
201
|
-
Alchemy::Config.stub!(:get) { |arg| arg == :url_nesting ? false : Alchemy::Config.parameter(arg) }
|
|
202
|
-
end
|
|
178
|
+
end
|
|
203
179
|
|
|
204
|
-
|
|
205
|
-
visit '/alchemy/de/a-public-page'
|
|
206
|
-
page.current_path.should == '/alchemy/a-public-page'
|
|
207
|
-
end
|
|
180
|
+
end
|
|
208
181
|
|
|
209
|
-
|
|
182
|
+
end
|
|
210
183
|
|
|
211
|
-
|
|
212
|
-
get show_page_path(:urlname => 'a-public-page')
|
|
213
|
-
controller.session[:language_id].should == Alchemy::Language.get_default.id
|
|
214
|
-
end
|
|
184
|
+
context "not in multi language mode" do
|
|
215
185
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
186
|
+
before(:each) do
|
|
187
|
+
@page = Factory(:public_page, :language => @default_language, :parent_id => @default_language_root.id)
|
|
188
|
+
Alchemy::Config.stub!(:get) { |arg| arg == :url_nesting ? false : Alchemy::Config.parameter(arg) }
|
|
189
|
+
end
|
|
220
190
|
|
|
221
|
-
|
|
191
|
+
it "should redirect from nested language code url to normal url" do
|
|
192
|
+
visit '/alchemy/de/a-public-page'
|
|
193
|
+
page.current_path.should == '/alchemy/a-public-page'
|
|
194
|
+
end
|
|
222
195
|
|
|
223
|
-
|
|
196
|
+
context "with no lang parameter" do
|
|
224
197
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
198
|
+
it "should have defaults language language_id in the session" do
|
|
199
|
+
get show_page_path(:urlname => 'a-public-page')
|
|
200
|
+
controller.session[:language_id].should == Alchemy::Language.get_default.id
|
|
201
|
+
end
|
|
229
202
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
203
|
+
it "should have defaults language language_code in the session" do
|
|
204
|
+
get show_page_path(:urlname => 'a-public-page')
|
|
205
|
+
controller.session[:language_code].should == Alchemy::Language.get_default.code
|
|
206
|
+
end
|
|
234
207
|
|
|
235
|
-
|
|
236
|
-
visit '/alchemy/de/not-public'
|
|
237
|
-
page.current_path.should == '/alchemy/public-child'
|
|
238
|
-
end
|
|
208
|
+
end
|
|
239
209
|
|
|
240
|
-
|
|
210
|
+
context "should redirect to public child" do
|
|
241
211
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
212
|
+
before(:each) do
|
|
213
|
+
@page.update_attributes(:public => false, :name => 'Not Public', :urlname => '')
|
|
214
|
+
@child = Factory(:public_page, :name => 'Public Child', :parent_id => @page.id, :language => @default_language)
|
|
215
|
+
end
|
|
246
216
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
217
|
+
it "if requested page is unpublished" do
|
|
218
|
+
visit '/alchemy/not-public'
|
|
219
|
+
page.current_path.should == '/alchemy/public-child'
|
|
220
|
+
end
|
|
251
221
|
|
|
252
|
-
|
|
222
|
+
it "with normal url, if requested url has nested language code and is not public" do
|
|
223
|
+
visit '/alchemy/de/not-public'
|
|
224
|
+
page.current_path.should == '/alchemy/public-child'
|
|
225
|
+
end
|
|
253
226
|
|
|
254
|
-
|
|
227
|
+
end
|
|
255
228
|
|
|
229
|
+
it "should redirect to pages url, if requested url is index url" do
|
|
230
|
+
visit '/alchemy/'
|
|
231
|
+
page.current_path.should == '/alchemy/home'
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
it "should keep additional params" do
|
|
235
|
+
visit '/alchemy/de/a-public-page?query=Peter'
|
|
236
|
+
page.current_url.should match(/\?query=Peter/)
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
describe "Handling of non-existing pages" do
|
|
244
|
+
|
|
245
|
+
context "404-Errors are handled by Rails now, so no need to test anymore.
|
|
246
|
+
However, it still serves as documentation how they can be handled, so we leave it here" do
|
|
247
|
+
|
|
248
|
+
it "should render public/404.html when it exists"
|
|
249
|
+
it "can be handled by matching /404 and routing it to a controller of choice when no public/404.html exists"
|
|
250
|
+
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
end
|
|
256
254
|
end
|