browsercms 3.1.5 → 3.3.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/cms/base_controller.rb +3 -3
- data/app/controllers/cms/content_block_controller.rb +2 -2
- data/app/controllers/cms/content_controller.rb +5 -4
- data/app/controllers/cms/error_handling.rb +1 -1
- data/app/controllers/cms/routes_controller.rb +4 -5
- data/app/controllers/cms/section_nodes_controller.rb +1 -6
- data/app/controllers/cms/sections_controller.rb +2 -3
- data/app/controllers/cms/tasks_controller.rb +3 -0
- data/app/controllers/cms/users_controller.rb +1 -1
- data/app/helpers/cms/application_helper.rb +137 -34
- data/app/helpers/cms/form_builder.rb +33 -21
- data/app/helpers/cms/page_helper.rb +43 -10
- data/app/helpers/cms/path_helper.rb +1 -1
- data/app/helpers/cms/rendering_helper.rb +3 -4
- data/app/helpers/cms/section_nodes_helper.rb +5 -43
- data/app/models/abstract_file_block.rb +1 -16
- data/app/models/attachment.rb +57 -22
- data/app/models/category.rb +4 -4
- data/app/models/category_type.rb +2 -2
- data/app/models/cms/view_context.rb +46 -0
- data/app/models/connector.rb +7 -6
- data/app/models/content_type.rb +3 -3
- data/app/models/dynamic_view.rb +1 -1
- data/app/models/email_message.rb +2 -2
- data/app/models/file_block.rb +12 -0
- data/app/models/group.rb +4 -4
- data/app/models/group_type.rb +4 -4
- data/app/models/html_block.rb +1 -1
- data/app/models/image_block.rb +12 -0
- data/app/models/link.rb +22 -5
- data/app/models/page.rb +87 -46
- data/app/models/page_route.rb +61 -6
- data/app/models/permission.rb +1 -1
- data/app/models/portlet.rb +14 -4
- data/app/models/section.rb +48 -86
- data/app/models/section_node.rb +25 -40
- data/app/models/site.rb +1 -1
- data/app/models/tag.rb +1 -1
- data/app/models/task.rb +8 -7
- data/app/models/user.rb +2 -7
- data/app/portlets/forgot_password_portlet.rb +6 -2
- data/app/portlets/reset_password_portlet.rb +1 -1
- data/app/views/cms/blocks/_toolbar.html.erb +1 -1
- data/app/views/cms/blocks/_toolbar_for_collection.html.erb +3 -6
- data/app/views/cms/blocks/_toolbar_for_member.html.erb +3 -5
- data/app/views/cms/blocks/edit.html.erb +4 -4
- data/app/views/cms/blocks/index.html.erb +7 -7
- data/app/views/cms/blocks/new.html.erb +4 -4
- data/app/views/cms/blocks/show.html.erb +2 -2
- data/app/views/cms/blocks/usages.html.erb +2 -2
- data/app/views/cms/blocks/versions.html.erb +4 -4
- data/app/views/cms/cache/show.html.erb +2 -2
- data/app/views/cms/categories/_form.html.erb +2 -2
- data/app/views/cms/connectors/new.html.erb +6 -8
- data/app/views/cms/content/no_page.html.erb +1 -1
- data/app/views/cms/content/show.html.erb +2 -7
- data/app/views/cms/dashboard/_page_drafts.html.erb +1 -1
- data/app/views/cms/dashboard/_tasks.html.erb +1 -1
- data/app/views/cms/dashboard/index.html.erb +1 -1
- data/app/views/cms/dynamic_views/_form.html.erb +2 -2
- data/app/views/cms/dynamic_views/index.html.erb +7 -10
- data/app/views/cms/email_messages/show.html.erb +2 -2
- data/app/views/cms/file_blocks/_form.html.erb +4 -4
- data/app/views/cms/form_builder/_cms_fancy_drop_down.html.erb +2 -2
- data/app/views/cms/form_builder/_cms_file_field.html.erb +2 -2
- data/app/views/cms/form_builder/_cms_tag_list.html.erb +2 -2
- data/app/views/cms/form_builder/_cms_text_editor.html.erb +2 -2
- data/app/views/cms/groups/_form.html.erb +5 -5
- data/app/views/cms/groups/_permissions.html.erb +4 -4
- data/app/views/cms/groups/_sections.html.erb +1 -2
- data/app/views/cms/groups/index.html.erb +1 -1
- data/app/views/cms/html_blocks/render.html.erb +1 -1
- data/app/views/cms/image_blocks/_form.html.erb +4 -5
- data/app/views/cms/links/_form.html.erb +1 -1
- data/app/views/cms/links/edit.html.erb +2 -2
- data/app/views/cms/links/new.html.erb +2 -2
- data/app/views/cms/page_routes/_form.html.erb +2 -2
- data/app/views/cms/page_routes/index.html.erb +6 -9
- data/app/views/cms/page_routes/show.html.erb +5 -8
- data/app/views/cms/pages/_edit_connector.html.erb +1 -1
- data/app/views/cms/pages/_form.html.erb +3 -3
- data/app/views/cms/pages/edit.html.erb +2 -2
- data/app/views/cms/pages/new.html.erb +7 -7
- data/app/views/cms/pages/versions.html.erb +4 -4
- data/app/views/cms/redirects/_form.html.erb +2 -2
- data/app/views/cms/redirects/index.html.erb +8 -7
- data/app/views/cms/routes/index.html.erb +2 -2
- data/app/views/cms/section_nodes/_link.html.erb +3 -6
- data/app/views/cms/section_nodes/_node.html.erb +4 -13
- data/app/views/cms/section_nodes/_page.html.erb +7 -13
- data/app/views/cms/section_nodes/_section.html.erb +8 -24
- data/app/views/cms/section_nodes/_section_node.html.erb +10 -0
- data/app/views/cms/section_nodes/index.html.erb +18 -30
- data/app/views/cms/sections/_form.html.erb +4 -6
- data/app/views/cms/sections/edit.html.erb +2 -2
- data/app/views/cms/sections/index.html.erb +3 -3
- data/app/views/cms/sections/new.html.erb +3 -3
- data/app/views/cms/sessions/new.html.erb +3 -3
- data/app/views/cms/shared/_pagination.html.erb +1 -1
- data/app/views/cms/shared/error.html.erb +1 -1
- data/app/views/cms/tags/render.html.erb +2 -2
- data/app/views/cms/tasks/new.html.erb +4 -4
- data/app/views/cms/users/_form.html.erb +3 -3
- data/app/views/cms/users/_toolbar.html.erb +3 -3
- data/app/views/cms/users/change_password.html.erb +5 -5
- data/app/views/cms/users/edit.html.erb +2 -2
- data/app/views/cms/users/index.html.erb +4 -4
- data/app/views/cms/users/new.html.erb +2 -2
- data/app/views/cms/users/show.html.erb +16 -16
- data/app/views/layouts/_cms_toolbar.html.erb +5 -5
- data/app/views/layouts/_page_toolbar.html.erb +11 -11
- data/app/views/layouts/cms/_footer.erb +1 -1
- data/app/views/layouts/cms/_head.html.erb +2 -6
- data/app/views/layouts/cms/administration.html.erb +32 -32
- data/app/views/layouts/cms/content_library.html.erb +5 -5
- data/app/views/layouts/cms/toolbar.html.erb +1 -1
- data/app/views/portlets/email_page/render.html.erb +2 -2
- data/app/views/portlets/forgot_password/render.html.erb +1 -1
- data/app/views/portlets/login/render.html.erb +4 -2
- data/app/views/portlets/reset_password/render.html.erb +1 -1
- data/app/views/tests/pretend/open_with_layout.html.erb +1 -1
- data/bin/bcms +0 -0
- data/bin/bcms-upgrade +232 -0
- data/bin/browsercms +2 -2
- data/browsercms.gemspec +16 -14
- data/db/migrate/20100705083859_browsercms_3_3_0.rb +56 -0
- data/db/seeds.rb +58 -0
- data/doc/guides/html/authentication.html +448 -192
- data/doc/guides/html/build_it_yourself.html +454 -175
- data/doc/guides/html/building_modules.html +451 -220
- data/doc/guides/html/building_templates.html +448 -498
- data/doc/guides/html/content_blocks.html +450 -470
- data/doc/guides/html/customizing_browsercms.html +453 -169
- data/doc/guides/html/deployment_guide.html +443 -82
- data/doc/guides/html/files/bcmsorg.js +28 -0
- data/doc/guides/html/files/clearfix.css +8 -0
- data/doc/guides/html/files/cufon.js +7 -0
- data/doc/guides/html/files/global.css +190 -0
- data/doc/guides/html/files/helvetica.js +91 -0
- data/doc/guides/html/files/jquery.js +11 -0
- data/doc/guides/html/getting_started.html +454 -213
- data/doc/guides/html/index.html +454 -174
- data/doc/guides/html/installing_modules.html +454 -186
- data/doc/guides/html/portlets.html +451 -232
- data/doc/guides/html/user_guide.html +452 -270
- data/doc/guides/html/writing_guides.html +454 -161
- data/lib/acts_as_list.rb +1 -1
- data/lib/browsercms.rb +10 -6
- data/lib/cms/acts.rb +7 -0
- data/lib/cms/authentication.rb +4 -0
- data/lib/cms/authentication/controller.rb +1 -1
- data/lib/cms/behaviors.rb +1 -1
- data/lib/cms/behaviors/archiving.rb +2 -2
- data/lib/cms/behaviors/attaching.rb +28 -43
- data/lib/cms/behaviors/categorizing.rb +1 -1
- data/lib/cms/behaviors/connecting.rb +27 -12
- data/lib/cms/behaviors/dynamic_attributes.rb +8 -5
- data/lib/cms/behaviors/hiding.rb +2 -2
- data/lib/cms/behaviors/publishing.rb +32 -22
- data/lib/cms/behaviors/rendering.rb +41 -18
- data/lib/cms/behaviors/searching.rb +1 -1
- data/lib/cms/behaviors/soft_deleting.rb +58 -29
- data/lib/cms/behaviors/taggable.rb +1 -1
- data/lib/cms/behaviors/userstamping.rb +5 -4
- data/lib/cms/behaviors/versioning.rb +192 -111
- data/lib/cms/content_rendering_support.rb +3 -3
- data/lib/cms/date_picker.rb +23 -0
- data/lib/cms/engine.rb +46 -0
- data/lib/cms/extensions.rb +1 -1
- data/lib/cms/extensions/active_record/errors.rb +2 -2
- data/lib/cms/extensions/hash.rb +4 -2
- data/lib/cms/extensions/string.rb +7 -2
- data/lib/cms/init.rb +32 -21
- data/lib/cms/module.rb +22 -0
- data/lib/cms/module_installation.rb +38 -0
- data/lib/cms/routes.rb +127 -115
- data/lib/cms/version.rb +2 -2
- data/lib/generators/browser_cms.rb +12 -0
- data/lib/generators/browser_cms/cms/USAGE +2 -0
- data/lib/generators/browser_cms/cms/cms_generator.rb +36 -0
- data/{rails_generators/browser_cms → lib/generators/browser_cms/cms}/templates/README +0 -0
- data/{rails_generators/browser_cms_demo_site → lib/generators/browser_cms/demo_site}/USAGE +0 -0
- data/lib/generators/browser_cms/demo_site/demo_site_generator.rb +138 -0
- data/lib/generators/browser_cms/demo_site/templates/demo_site.rake +11 -0
- data/{rails_generators/browser_cms_demo_site/templates/migration.rb → lib/generators/browser_cms/demo_site/templates/migration.erb} +2 -8
- data/lib/generators/cms/content_block/USAGE +22 -0
- data/lib/generators/cms/content_block/content_block_generator.rb +55 -0
- data/{rails_generators → lib/generators/cms}/content_block/templates/_form.html.erb +0 -0
- data/{rails_generators → lib/generators/cms}/content_block/templates/content_block.rb +0 -0
- data/{rails_generators → lib/generators/cms}/content_block/templates/controller.rb +0 -0
- data/{rails_generators → lib/generators/cms}/content_block/templates/functional_test.erb +0 -0
- data/{rails_generators/content_block/templates/migration.rb → lib/generators/cms/content_block/templates/migration.erb} +1 -1
- data/{rails_generators → lib/generators/cms}/content_block/templates/render.html.erb +0 -0
- data/{rails_generators → lib/generators/cms}/content_block/templates/unit_test.erb +0 -0
- data/lib/generators/cms/install/USAGE +8 -0
- data/lib/generators/cms/install/install_generator.rb +20 -0
- data/{rails_generators → lib/generators/cms}/portlet/USAGE +3 -16
- data/lib/generators/cms/portlet/portlet_generator.rb +38 -0
- data/{rails_generators → lib/generators/cms}/portlet/templates/_form.html.erb +0 -0
- data/{rails_generators → lib/generators/cms}/portlet/templates/portlet.rb +0 -0
- data/{rails_generators → lib/generators/cms}/portlet/templates/portlet_helper.rb +0 -0
- data/{rails_generators → lib/generators/cms}/portlet/templates/render.html.erb +0 -0
- data/{rails_generators → lib/generators/cms}/portlet/templates/unit_test.erb +0 -0
- data/{rails_generators → lib/generators/cms}/template/USAGE +1 -1
- data/lib/generators/cms/template/template_generator.rb +18 -0
- data/lib/generators/cms/template/templates/template.erb +2 -0
- data/lib/generators/cms/upgrade_module/README.txt +3 -0
- data/lib/generators/cms/upgrade_module/templates/20100705083859_browsercms_3_3_0.rb +56 -0
- data/lib/generators/cms/upgrade_module/templates/README +1 -0
- data/lib/generators/cms/upgrade_module/templates/USAGE.erb +10 -0
- data/lib/generators/cms/upgrade_module/templates/build_gem.rake +5 -0
- data/lib/generators/cms/upgrade_module/templates/engine.erb +7 -0
- data/lib/generators/cms/upgrade_module/templates/gemspec.erb +25 -0
- data/lib/generators/cms/upgrade_module/templates/gitignore.erb +11 -0
- data/lib/generators/cms/upgrade_module/templates/install.erb +9 -0
- data/lib/generators/cms/upgrade_module/templates/module_file.erb +3 -0
- data/lib/generators/cms/upgrade_module/templates/routes.erb +7 -0
- data/lib/generators/cms/upgrade_module/upgrade_module_generator.rb +61 -0
- data/lib/tasks/build_gem.rake +1 -0
- data/lib/tasks/cms.rake +34 -6
- data/lib/tasks/cucumber.rake +53 -0
- data/lib/tasks/db.rake +2 -2
- data/public/javascripts/cms/application.js +144 -135
- data/public/javascripts/cms/sitemap.js +383 -357
- data/public/javascripts/jquery-ui.js +782 -591
- data/public/javascripts/jquery.cookie.js +38 -43
- data/public/javascripts/jquery.js +13 -8
- data/public/javascripts/jquery.taglist.js +7 -0
- data/public/stylesheets/cms/date_picker.css +49 -40
- data/rails/init.rb +2 -3
- data/templates/blank.rb +13 -7
- data/templates/demo.rb +15 -7
- data/templates/module.rb +12 -75
- metadata +87 -407
- data/app/helpers/cms/content_block_helper.rb +0 -27
- data/app/views/layouts/cms/thickbox.html.erb +0 -24
- data/db/migrate/20120117144039_browsercms315.rb +0 -94
- data/db/migrate/20121114172307_load_seeds.rb +0 -70
- data/lib/cms/addressable.rb +0 -83
- data/lib/cms/error_pages.rb +0 -8
- data/public/images/cms/thickbox/loadingAnimation.gif +0 -0
- data/public/images/cms/thickbox/macFFBgHack.png +0 -0
- data/public/javascripts/jquery.contextMenu.js +0 -211
- data/public/javascripts/jquery.dimensions.js +0 -119
- data/public/javascripts/jquery.thickbox.js +0 -10
- data/public/stylesheets/cms/jquery.contextMenu.css +0 -61
- data/public/stylesheets/cms/thickbox.css +0 -163
- data/rails_generators/browser_cms/USAGE +0 -2
- data/rails_generators/browser_cms/browser_cms_generator.rb +0 -35
- data/rails_generators/browser_cms_demo_site/browser_cms_demo_site_generator.rb +0 -63
- data/rails_generators/content_block/USAGE +0 -32
- data/rails_generators/content_block/content_block_generator.rb +0 -69
- data/rails_generators/portlet/portlet_generator.rb +0 -35
- data/rails_generators/template/template_generator.rb +0 -18
- data/rails_generators/template/templates/template.erb +0 -3
- data/test/custom_assertions.rb +0 -74
- data/test/factories.rb +0 -111
- data/test/factories/sitemap_factories.rb +0 -28
- data/test/fixtures/connectors.yml +0 -97
- data/test/fixtures/content_type_groups.yml +0 -13
- data/test/fixtures/content_types.yml +0 -50
- data/test/fixtures/dynamic_view_versions.yml +0 -26
- data/test/fixtures/dynamic_views.yml +0 -26
- data/test/fixtures/group_permissions.yml +0 -16
- data/test/fixtures/group_sections.yml +0 -31
- data/test/fixtures/group_type_permissions.yml +0 -11
- data/test/fixtures/group_types.yml +0 -25
- data/test/fixtures/groups.yml +0 -25
- data/test/fixtures/html_block_versions.yml +0 -67
- data/test/fixtures/html_blocks.yml +0 -63
- data/test/fixtures/page_versions.yml +0 -265
- data/test/fixtures/pages.yml +0 -85
- data/test/fixtures/permissions.yml +0 -28
- data/test/fixtures/section_nodes.yml +0 -46
- data/test/fixtures/sections.yml +0 -19
- data/test/fixtures/sites.yml +0 -9
- data/test/fixtures/user_group_memberships.yml +0 -11
- data/test/fixtures/users.yml +0 -15
- data/test/functional/cms/cache_controller_test.rb +0 -14
- data/test/functional/cms/categories_controller_test.rb +0 -25
- data/test/functional/cms/connectors_controller_test.rb +0 -60
- data/test/functional/cms/content_block_controller_test.rb +0 -120
- data/test/functional/cms/content_controller_test.rb +0 -439
- data/test/functional/cms/content_types_controller_test.rb +0 -18
- data/test/functional/cms/dashboard_controller_test.rb +0 -16
- data/test/functional/cms/dynamic_views_controller_test.rb +0 -52
- data/test/functional/cms/file_blocks_controller_test.rb +0 -52
- data/test/functional/cms/groups_controller_test.rb +0 -50
- data/test/functional/cms/home_controller_test.rb +0 -156
- data/test/functional/cms/html_blocks_controller_test.rb +0 -164
- data/test/functional/cms/image_blocks_controller_test.rb +0 -82
- data/test/functional/cms/links_controller_test.rb +0 -148
- data/test/functional/cms/pages_controller_test.rb +0 -227
- data/test/functional/cms/portlets_controller_test.rb +0 -67
- data/test/functional/cms/section_nodes_controller_test.rb +0 -112
- data/test/functional/cms/sections_controller_test.rb +0 -227
- data/test/functional/cms/sessions_controller_test.rb +0 -76
- data/test/functional/cms/toolbar_controller_test.rb +0 -64
- data/test/functional/cms/users_controller_test.rb +0 -231
- data/test/functional/tests/pretend_controller_test.rb +0 -57
- data/test/integration/cms/ckeditor_test.rb +0 -30
- data/test/integration/cms/password_management_test.rb +0 -56
- data/test/integration/login_test.rb +0 -14
- data/test/integration/sitemap_performance_test.rb +0 -26
- data/test/selenium-core/Blank.html +0 -7
- data/test/selenium-core/InjectedRemoteRunner.html +0 -8
- data/test/selenium-core/RemoteRunner.html +0 -110
- data/test/selenium-core/SeleniumLog.html +0 -109
- data/test/selenium-core/TestPrompt.html +0 -145
- data/test/selenium-core/TestRunner-splash.html +0 -55
- data/test/selenium-core/TestRunner.hta +0 -176
- data/test/selenium-core/TestRunner.html +0 -176
- data/test/selenium-core/domviewer/butmin.gif +0 -0
- data/test/selenium-core/domviewer/butplus.gif +0 -0
- data/test/selenium-core/domviewer/domviewer.css +0 -298
- data/test/selenium-core/domviewer/domviewer.html +0 -16
- data/test/selenium-core/domviewer/selenium-domviewer.js +0 -205
- data/test/selenium-core/icons/all.png +0 -0
- data/test/selenium-core/icons/continue.png +0 -0
- data/test/selenium-core/icons/continue_disabled.png +0 -0
- data/test/selenium-core/icons/pause.png +0 -0
- data/test/selenium-core/icons/pause_disabled.png +0 -0
- data/test/selenium-core/icons/selected.png +0 -0
- data/test/selenium-core/icons/step.png +0 -0
- data/test/selenium-core/icons/step_disabled.png +0 -0
- data/test/selenium-core/iedoc-core.xml +0 -1515
- data/test/selenium-core/iedoc.xml +0 -1469
- data/test/selenium-core/lib/cssQuery/cssQuery-p.js +0 -6
- data/test/selenium-core/lib/cssQuery/src/cssQuery-level2.js +0 -142
- data/test/selenium-core/lib/cssQuery/src/cssQuery-level3.js +0 -150
- data/test/selenium-core/lib/cssQuery/src/cssQuery-standard.js +0 -53
- data/test/selenium-core/lib/cssQuery/src/cssQuery.js +0 -356
- data/test/selenium-core/lib/prototype.js +0 -2006
- data/test/selenium-core/lib/scriptaculous/builder.js +0 -101
- data/test/selenium-core/lib/scriptaculous/controls.js +0 -815
- data/test/selenium-core/lib/scriptaculous/dragdrop.js +0 -915
- data/test/selenium-core/lib/scriptaculous/effects.js +0 -958
- data/test/selenium-core/lib/scriptaculous/scriptaculous.js +0 -47
- data/test/selenium-core/lib/scriptaculous/slider.js +0 -283
- data/test/selenium-core/lib/scriptaculous/unittest.js +0 -383
- data/test/selenium-core/scripts/find_matching_child.js +0 -69
- data/test/selenium-core/scripts/htmlutils.js +0 -894
- data/test/selenium-core/scripts/injection.html +0 -72
- data/test/selenium-core/scripts/js2html.js +0 -70
- data/test/selenium-core/scripts/narcissus-defs.js +0 -175
- data/test/selenium-core/scripts/narcissus-exec.js +0 -1054
- data/test/selenium-core/scripts/narcissus-parse.js +0 -1003
- data/test/selenium-core/scripts/se2html.js +0 -63
- data/test/selenium-core/scripts/selenium-api.js +0 -2409
- data/test/selenium-core/scripts/selenium-browserbot.js +0 -2203
- data/test/selenium-core/scripts/selenium-browserdetect.js +0 -150
- data/test/selenium-core/scripts/selenium-commandhandlers.js +0 -377
- data/test/selenium-core/scripts/selenium-executionloop.js +0 -175
- data/test/selenium-core/scripts/selenium-logging.js +0 -147
- data/test/selenium-core/scripts/selenium-remoterunner.js +0 -571
- data/test/selenium-core/scripts/selenium-testrunner.js +0 -1333
- data/test/selenium-core/scripts/selenium-version.js +0 -5
- data/test/selenium-core/scripts/user-extensions.js +0 -3
- data/test/selenium-core/scripts/user-extensions.js.sample +0 -75
- data/test/selenium-core/scripts/xmlextras.js +0 -153
- data/test/selenium-core/selenium-logo.png +0 -0
- data/test/selenium-core/selenium-test.css +0 -43
- data/test/selenium-core/selenium.css +0 -299
- data/test/selenium-core/xpath/dom.js +0 -428
- data/test/selenium-core/xpath/misc.js +0 -252
- data/test/selenium-core/xpath/xpath.js +0 -2223
- data/test/selenium/_login_as_cmsadmin.rsel +0 -4
- data/test/selenium/dashboard.rsel +0 -5
- data/test/selenium/html_blocks.rsel +0 -4
- data/test/selenium/login/failed_login.rsel +0 -8
- data/test/selenium/login/successful_login.rsel +0 -9
- data/test/selenium/page_templates.rsel +0 -12
- data/test/selenium/pages/edit_properties.rsel +0 -5
- data/test/selenium/site/view_home_page.rsel +0 -4
- data/test/selenium/sitemap/move_page.rsel +0 -9
- data/test/selenium/sitemap/open_section.rsel +0 -6
- data/test/selenium/sitemap/select_page.rsel +0 -12
- data/test/selenium/sitemap/select_section.rsel +0 -17
- data/test/test_helper.rb +0 -193
- data/test/test_logging.rb +0 -67
- data/test/unit/behaviors/attaching_test.rb +0 -357
- data/test/unit/behaviors/connectable_test.rb +0 -29
- data/test/unit/behaviors/dynamic_attributes_test.rb +0 -38
- data/test/unit/behaviors/publishable_test.rb +0 -84
- data/test/unit/behaviors/searching_test.rb +0 -102
- data/test/unit/behaviors/taggable_test.rb +0 -109
- data/test/unit/behaviors/versioning_test.rb +0 -36
- data/test/unit/extensions/active_record/base_test.rb +0 -10
- data/test/unit/extensions/hash_test.rb +0 -17
- data/test/unit/extensions/integer_test.rb +0 -10
- data/test/unit/helpers/application_helper_test.rb +0 -77
- data/test/unit/helpers/form_builder_test.rb +0 -36
- data/test/unit/helpers/menu_helper_test.rb +0 -242
- data/test/unit/helpers/page_helper_test.rb +0 -67
- data/test/unit/helpers/path_helper_test.rb +0 -57
- data/test/unit/lib/acts_as_content_page_test.rb +0 -72
- data/test/unit/lib/cms/authentication/controller_test.rb +0 -20
- data/test/unit/lib/cms/sitemap_test.rb +0 -206
- data/test/unit/lib/cms_domain_support_test.rb +0 -43
- data/test/unit/lib/command_line_test.rb +0 -70
- data/test/unit/lib/content_block_test.rb +0 -203
- data/test/unit/lib/content_rendering_support_test.rb +0 -40
- data/test/unit/lib/generators_test.rb +0 -40
- data/test/unit/lib/routes_test.rb +0 -57
- data/test/unit/models/attachment_test.rb +0 -116
- data/test/unit/models/category_test.rb +0 -40
- data/test/unit/models/category_type_test.rb +0 -8
- data/test/unit/models/connector_test.rb +0 -152
- data/test/unit/models/content_type_test.rb +0 -56
- data/test/unit/models/email_page_portlet_test.rb +0 -14
- data/test/unit/models/file_block_test.rb +0 -230
- data/test/unit/models/group_test.rb +0 -13
- data/test/unit/models/html_block_test.rb +0 -102
- data/test/unit/models/link_test.rb +0 -52
- data/test/unit/models/page_partial_test.rb +0 -29
- data/test/unit/models/page_route_test.rb +0 -29
- data/test/unit/models/page_template_test.rb +0 -40
- data/test/unit/models/page_test.rb +0 -792
- data/test/unit/models/permission_test.rb +0 -10
- data/test/unit/models/portlet_test.rb +0 -69
- data/test/unit/models/sections_test.rb +0 -264
- data/test/unit/models/site_test.rb +0 -50
- data/test/unit/models/task_test.rb +0 -141
- data/test/unit/models/user_test.rb +0 -352
- data/test/unit/schema_statements_test.rb +0 -41
@@ -1,477 +1,457 @@
|
|
1
|
-
<!DOCTYPE
|
2
|
-
<html
|
3
|
-
|
4
|
-
|
5
|
-
<
|
6
|
-
<
|
7
|
-
<
|
8
|
-
<
|
9
|
-
<
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
}
|
16
|
-
|
17
|
-
#page {
|
18
|
-
margin: 0 auto;
|
19
|
-
text-align: left;
|
20
|
-
width: 1000px;
|
21
|
-
}
|
22
|
-
|
23
|
-
#header {
|
24
|
-
height: 110px;
|
25
|
-
}
|
26
|
-
|
27
|
-
div.top_cap {
|
28
|
-
background: transparent url(images/top_cap.png) no-repeat scroll 0 0;
|
29
|
-
height: 10px;
|
30
|
-
}
|
31
|
-
|
32
|
-
#contentwrap {
|
33
|
-
background: transparent url(images/dot.png) repeat scroll 0 0;
|
34
|
-
float: left;
|
35
|
-
width: 1000px;
|
36
|
-
}
|
37
|
-
|
38
|
-
div.bottom_cap {
|
39
|
-
background: transparent url(images/bottom_cap.png) no-repeat scroll 0 0;
|
40
|
-
height: 9px;
|
41
|
-
}
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2
|
+
<html class="cufon-active cufon-ready" xml:lang="en"
|
3
|
+
xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
6
|
+
<meta name="keywords" content="">
|
7
|
+
<meta name="description" content="">
|
8
|
+
<link href="files/clearfix.css" media="screen,projection" rel="stylesheet" type="text/css">
|
9
|
+
<link href="files/global.css" media="screen,projection" rel="stylesheet" type="text/css">
|
10
|
+
<script src="files/jquery.js" type="text/javascript"></script>
|
11
|
+
<script src="files/cufon.js" type="text/javascript"></script>
|
12
|
+
<style type="text/css">cufon {
|
13
|
+
text-indent: 0 !important;
|
14
|
+
}
|
42
15
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
<
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
<
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
<
|
158
|
-
<
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
</
|
197
|
-
|
198
|
-
<
|
199
|
-
|
200
|
-
<
|
201
|
-
|
202
|
-
<
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
<
|
207
|
-
|
208
|
-
|
209
|
-
<
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
<
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
16
|
+
@media screen, projection {
|
17
|
+
cufon {
|
18
|
+
display: inline !important;
|
19
|
+
display: inline-block !important;
|
20
|
+
position: relative !important;
|
21
|
+
vertical-align: middle !important;
|
22
|
+
font-size: 1px !important;
|
23
|
+
line-height: 1px !important;
|
24
|
+
}
|
25
|
+
|
26
|
+
cufon cufontext {
|
27
|
+
display: -moz-inline-box !important;
|
28
|
+
display: inline-block !important;
|
29
|
+
width: 0 !important;
|
30
|
+
height: 0 !important;
|
31
|
+
overflow: hidden !important;
|
32
|
+
text-indent: -10000in !important;
|
33
|
+
}
|
34
|
+
|
35
|
+
cufon canvas {
|
36
|
+
position: relative !important;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
@media print {
|
41
|
+
cufon {
|
42
|
+
padding: 0 !important;
|
43
|
+
}
|
44
|
+
|
45
|
+
cufon canvas {
|
46
|
+
display: none !important;
|
47
|
+
}
|
48
|
+
}</style>
|
49
|
+
<script src="files/helvetica.js" type="text/javascript"></script>
|
50
|
+
<script src="files/bcmsorg.js" type="text/javascript"></script>
|
51
|
+
<title>Table of Contents</title>
|
52
|
+
</head>
|
53
|
+
<body>
|
54
|
+
|
55
|
+
<div id="container">
|
56
|
+
<div id="header">
|
57
|
+
<h1 id="logo"><a href="http://www.staging.browsercms.org/"
|
58
|
+
title="Return to Home Page">Table of Contents</a></h1>
|
59
|
+
|
60
|
+
<div id="topnav">
|
61
|
+
<ul>
|
62
|
+
<li><a href="/">Home</a></li>
|
63
|
+
<li><a href="/demo">Demo</a></li>
|
64
|
+
<li><a href="/documentation" class="active">Documentation</a></li>
|
65
|
+
<li><a href="/extending">Extending</a></li>
|
66
|
+
<li><a href="/support">Support</a></li>
|
67
|
+
<li><a href="/blog">Blog</a></li>
|
68
|
+
<li><a href="/download">Download</a></li>
|
69
|
+
</ul>
|
70
|
+
|
71
|
+
</div>
|
72
|
+
</div>
|
73
|
+
<div id="content" class="clearfix">
|
74
|
+
<div id="subnav">
|
75
|
+
<ul class="breadcrumbs">
|
76
|
+
<li class="first first-child"><a
|
77
|
+
href="http://www.staging.browsercms.org/documentation">Documentation</a></li>
|
78
|
+
<li><a href="http://www.staging.browsercms.org/documentation/guides">Guides</a></li>
|
79
|
+
<li class="last-child">Table of Contents</li>
|
80
|
+
</ul>
|
81
|
+
</div>
|
82
|
+
<div id="sidenav_doc">
|
83
|
+
<h2 class="alt">
|
84
|
+
<cufon style="width: 58px; height: 23px;" alt="Table "
|
85
|
+
class="cufon cufon-canvas">
|
86
|
+
<canvas style="width: 77px; height: 23px;
|
87
|
+
top: 1px; left: -1px;" height="23" width="77"></canvas>
|
88
|
+
<cufontext>Table</cufontext>
|
89
|
+
</cufon>
|
90
|
+
<cufon
|
91
|
+
style="width: 25px; height: 23px;" alt="of " class="cufon cufon-canvas">
|
92
|
+
<canvas
|
93
|
+
style="width: 43px; height: 23px; top: 1px; left: -1px;" height="23"
|
94
|
+
width="43"></canvas>
|
95
|
+
<cufontext>of</cufontext>
|
96
|
+
</cufon>
|
97
|
+
<cufon
|
98
|
+
style="width: 84px; height: 23px;" alt="Contents" class="cufon
|
99
|
+
cufon-canvas">
|
100
|
+
<canvas style="width: 98px; height: 23px; top: 1px; left:
|
101
|
+
-1px;" height="23" width="98"></canvas>
|
102
|
+
<cufontext>Contents</cufontext>
|
103
|
+
</cufon>
|
104
|
+
</h2>
|
105
|
+
<div id="menu" class="menu">
|
106
|
+
<ul>
|
107
|
+
<li id="section_6" class="depth-1 first open first-child">
|
108
|
+
<a
|
109
|
+
href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/installing-browsercms">Installing
|
110
|
+
BrowserCMS</a>
|
111
|
+
<ul>
|
112
|
+
<li id="page_11" class="depth-2 first last last-child
|
113
|
+
first-child">
|
114
|
+
<a
|
115
|
+
href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/installing-browsercms/things-you-need-first">Things
|
116
|
+
you need first</a>
|
117
|
+
</li>
|
118
|
+
</ul>
|
119
|
+
</li>
|
120
|
+
<li id="section_7" class="depth-1 last open final">
|
121
|
+
<a
|
122
|
+
href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/trying-out-browsercms">Trying
|
123
|
+
Out BrowserCMS</a>
|
124
|
+
<ul>
|
125
|
+
<li id="page_14" class="depth-2 first first-child">
|
126
|
+
<a
|
127
|
+
href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/trying-out-browsercms/with-sqlite3">With
|
128
|
+
SQLite3</a>
|
129
|
+
</li>
|
130
|
+
<li id="page_15" class="depth-2">
|
131
|
+
<a
|
132
|
+
href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/trying-out-browsercms/with-mysql">With
|
133
|
+
MySQL</a>
|
134
|
+
</li>
|
135
|
+
<li id="page_16" class="depth-2 last last-child final">
|
136
|
+
<a
|
137
|
+
href="http://www.staging.browsercms.org/documentation/guides/table-of-contents/trying-out-browsercms/using-your-site">Using
|
138
|
+
your Site</a>
|
139
|
+
</li>
|
140
|
+
</ul>
|
141
|
+
</li>
|
142
|
+
</ul>
|
143
|
+
</div>
|
144
|
+
|
145
|
+
</div>
|
146
|
+
<div id="main_doc">
|
147
|
+
|
148
|
+
<h2>
|
149
|
+
<cufon style="width: 73px; height: 23px;" alt="Header "
|
150
|
+
class="cufon cufon-canvas">
|
151
|
+
<canvas style="width: 92px; height: 23px;
|
152
|
+
top: 1px; left: -1px;" height="23" width="92"></canvas>
|
153
|
+
<cufontext>Header
|
154
|
+
</cufontext>
|
155
|
+
</cufon>
|
156
|
+
<cufon style="width: 12px; height: 23px;" alt="2"
|
157
|
+
class="cufon cufon-canvas">
|
158
|
+
<canvas style="width: 25px; height: 23px;
|
159
|
+
top: 1px; left: -1px;" height="23" width="25"></canvas>
|
160
|
+
<cufontext>2</cufontext>
|
161
|
+
</cufon>
|
162
|
+
</h2>
|
163
|
+
<h2 class="alt">
|
164
|
+
<cufon style="width: 73px; height: 23px;" alt="Header "
|
165
|
+
class="cufon cufon-canvas">
|
166
|
+
<canvas style="width: 92px; height: 23px;
|
167
|
+
top: 1px; left: -1px;" height="23" width="92"></canvas>
|
168
|
+
<cufontext>Header
|
169
|
+
</cufontext>
|
170
|
+
</cufon>
|
171
|
+
<cufon style="width: 18px; height: 23px;" alt="2 "
|
172
|
+
class="cufon cufon-canvas">
|
173
|
+
<canvas style="width: 36px; height: 23px;
|
174
|
+
top: 1px; left: -1px;" height="23" width="36"></canvas>
|
175
|
+
<cufontext>2</cufontext>
|
176
|
+
</cufon>
|
177
|
+
<cufon
|
178
|
+
style="width: 27px; height: 23px;" alt="Alt" class="cufon cufon-canvas">
|
179
|
+
<canvas
|
180
|
+
style="width: 44px; height: 23px; top: 1px; left: -1px;" height="23"
|
181
|
+
width="44"></canvas>
|
182
|
+
<cufontext>Alt</cufontext>
|
183
|
+
</cufon>
|
184
|
+
</h2>
|
185
|
+
<h2 class="brdr">
|
186
|
+
<cufon style="width: 73px; height: 23px;" alt="Header "
|
187
|
+
class="cufon cufon-canvas">
|
188
|
+
<canvas style="width: 92px; height: 23px;
|
189
|
+
top: 1px; left: -1px;" height="23" width="92"></canvas>
|
190
|
+
<cufontext>Header
|
191
|
+
</cufontext>
|
192
|
+
</cufon>
|
193
|
+
<cufon style="width: 18px; height: 23px;" alt="2 "
|
194
|
+
class="cufon cufon-canvas">
|
195
|
+
<canvas style="width: 36px; height: 23px;
|
196
|
+
top: 1px; left: -1px;" height="23" width="36"></canvas>
|
197
|
+
<cufontext>2</cufontext>
|
198
|
+
</cufon>
|
199
|
+
<cufon
|
200
|
+
style="width: 91px; height: 23px;" alt="Underline" class="cufon
|
201
|
+
cufon-canvas">
|
202
|
+
<canvas style="width: 104px; height: 23px; top: 1px; left:
|
203
|
+
-1px;" height="23" width="104"></canvas>
|
204
|
+
<cufontext>Underline</cufontext>
|
205
|
+
</cufon>
|
206
|
+
</h2>
|
207
|
+
<h3>
|
208
|
+
<cufon style="width: 51px; height: 16px;" alt="Header " class="cufon
|
209
|
+
cufon-canvas">
|
210
|
+
<canvas style="width: 64px; height: 16px; top: 0px; left:
|
211
|
+
0px;" height="16" width="64"></canvas>
|
212
|
+
<cufontext>Header</cufontext>
|
213
|
+
</cufon>
|
214
|
+
<cufon
|
215
|
+
style="width: 8px; height: 16px;" alt="3" class="cufon cufon-canvas">
|
216
|
+
<canvas
|
217
|
+
style="width: 18px; height: 16px; top: 0px; left: 0px;" height="16"
|
218
|
+
width="18"></canvas>
|
219
|
+
<cufontext>3</cufontext>
|
220
|
+
</cufon>
|
221
|
+
</h3>
|
222
|
+
<h3 class="alt">
|
223
|
+
<cufon style="width: 51px; height: 16px;" alt="Header "
|
224
|
+
class="cufon cufon-canvas">
|
225
|
+
<canvas style="width: 64px; height: 16px;
|
226
|
+
top: 0px; left: 0px;" height="16" width="64"></canvas>
|
227
|
+
<cufontext>Header</cufontext>
|
228
|
+
</cufon>
|
229
|
+
<cufon
|
230
|
+
style="width: 12px; height: 16px;" alt="3 " class="cufon cufon-canvas">
|
231
|
+
<canvas
|
232
|
+
style="width: 25px; height: 16px; top: 0px; left: 0px;" height="16"
|
233
|
+
width="25"></canvas>
|
234
|
+
<cufontext>3</cufontext>
|
235
|
+
</cufon>
|
236
|
+
<cufon
|
237
|
+
style="width: 19px; height: 16px;" alt="Alt" class="cufon cufon-canvas">
|
238
|
+
<canvas
|
239
|
+
style="width: 31px; height: 16px; top: 0px; left: 0px;" height="16"
|
240
|
+
width="31"></canvas>
|
241
|
+
<cufontext>Alt</cufontext>
|
242
|
+
</cufon>
|
243
|
+
</h3>
|
244
|
+
<h3 class="brdr">
|
245
|
+
<cufon style="width: 51px; height: 16px;" alt="Header "
|
246
|
+
class="cufon cufon-canvas">
|
247
|
+
<canvas style="width: 64px; height: 16px;
|
248
|
+
top: 0px; left: 0px;" height="16" width="64"></canvas>
|
249
|
+
<cufontext>Header</cufontext>
|
250
|
+
</cufon>
|
251
|
+
<cufon
|
252
|
+
style="width: 12px; height: 16px;" alt="3 " class="cufon cufon-canvas">
|
253
|
+
<canvas
|
254
|
+
style="width: 25px; height: 16px; top: 0px; left: 0px;" height="16"
|
255
|
+
width="25"></canvas>
|
256
|
+
<cufontext>3</cufontext>
|
257
|
+
</cufon>
|
258
|
+
<cufon
|
259
|
+
style="width: 63px; height: 16px;" alt="Underline" class="cufon
|
260
|
+
cufon-canvas">
|
261
|
+
<canvas style="width: 73px; height: 16px; top: 0px; left:
|
262
|
+
0px;" height="16" width="73"></canvas>
|
263
|
+
<cufontext>Underline</cufontext>
|
264
|
+
</cufon>
|
265
|
+
</h3>
|
266
|
+
<h4>
|
267
|
+
<cufon style="width: 45px; height: 14px;" alt="Header " class="cufon
|
268
|
+
cufon-canvas">
|
269
|
+
<canvas style="width: 56px; height: 14px; top: 0px; left:
|
270
|
+
0px;" height="14" width="56"></canvas>
|
271
|
+
<cufontext>Header</cufontext>
|
272
|
+
</cufon>
|
273
|
+
<cufon
|
274
|
+
style="width: 7px; height: 14px;" alt="4" class="cufon cufon-canvas">
|
275
|
+
<canvas
|
276
|
+
style="width: 15px; height: 14px; top: 0px; left: 0px;" height="14"
|
277
|
+
width="15"></canvas>
|
278
|
+
<cufontext>4</cufontext>
|
279
|
+
</cufon>
|
280
|
+
</h4>
|
281
|
+
<h4 class="alt">
|
282
|
+
<cufon style="width: 45px; height: 14px;" alt="Header "
|
283
|
+
class="cufon cufon-canvas">
|
284
|
+
<canvas style="width: 56px; height: 14px;
|
285
|
+
top: 0px; left: 0px;" height="14" width="56"></canvas>
|
286
|
+
<cufontext>Header</cufontext>
|
287
|
+
</cufon>
|
288
|
+
<cufon
|
289
|
+
style="width: 11px; height: 14px;" alt="4 " class="cufon cufon-canvas">
|
290
|
+
<canvas
|
291
|
+
style="width: 22px; height: 14px; top: 0px; left: 0px;" height="14"
|
292
|
+
width="22"></canvas>
|
293
|
+
<cufontext>4</cufontext>
|
294
|
+
</cufon>
|
295
|
+
<cufon
|
296
|
+
style="width: 16px; height: 14px;" alt="Alt" class="cufon cufon-canvas">
|
297
|
+
<canvas
|
298
|
+
style="width: 27px; height: 14px; top: 0px; left: 0px;" height="14"
|
299
|
+
width="27"></canvas>
|
300
|
+
<cufontext>Alt</cufontext>
|
301
|
+
</cufon>
|
302
|
+
</h4>
|
303
|
+
<h4 class="brdr">
|
304
|
+
<cufon style="width: 45px; height: 14px;" alt="Header "
|
305
|
+
class="cufon cufon-canvas">
|
306
|
+
<canvas style="width: 56px; height: 14px;
|
307
|
+
top: 0px; left: 0px;" height="14" width="56"></canvas>
|
308
|
+
<cufontext>Header</cufontext>
|
309
|
+
</cufon>
|
310
|
+
<cufon
|
311
|
+
style="width: 11px; height: 14px;" alt="4 " class="cufon cufon-canvas">
|
312
|
+
<canvas
|
313
|
+
style="width: 22px; height: 14px; top: 0px; left: 0px;" height="14"
|
314
|
+
width="22"></canvas>
|
315
|
+
<cufontext>4</cufontext>
|
316
|
+
</cufon>
|
317
|
+
<cufon
|
318
|
+
style="width: 55px; height: 14px;" alt="Underline" class="cufon
|
319
|
+
cufon-canvas">
|
320
|
+
<canvas style="width: 64px; height: 14px; top: 0px; left:
|
321
|
+
0px;" height="14" width="64"></canvas>
|
322
|
+
<cufontext>Underline</cufontext>
|
323
|
+
</cufon>
|
324
|
+
</h4>
|
325
|
+
<h5>
|
326
|
+
<cufon style="width: 35px; height: 11px;" alt="Header " class="cufon
|
327
|
+
cufon-canvas">
|
328
|
+
<canvas style="width: 44px; height: 11px; top: 0px; left:
|
329
|
+
0px;" height="11" width="44"></canvas>
|
330
|
+
<cufontext>Header</cufontext>
|
331
|
+
</cufon>
|
332
|
+
<cufon
|
333
|
+
style="width: 6px; height: 11px;" alt="5" class="cufon cufon-canvas">
|
334
|
+
<canvas
|
335
|
+
style="width: 12px; height: 11px; top: 0px; left: 0px;" height="11"
|
336
|
+
width="12"></canvas>
|
337
|
+
<cufontext>5</cufontext>
|
338
|
+
</cufon>
|
339
|
+
</h5>
|
340
|
+
<h5 class="alt">
|
341
|
+
<cufon style="width: 35px; height: 11px;" alt="Header "
|
342
|
+
class="cufon cufon-canvas">
|
343
|
+
<canvas style="width: 44px; height: 11px;
|
344
|
+
top: 0px; left: 0px;" height="11" width="44"></canvas>
|
345
|
+
<cufontext>Header</cufontext>
|
346
|
+
</cufon>
|
347
|
+
<cufon
|
348
|
+
style="width: 9px; height: 11px;" alt="5 " class="cufon cufon-canvas">
|
349
|
+
<canvas
|
350
|
+
style="width: 18px; height: 11px; top: 0px; left: 0px;" height="11"
|
351
|
+
width="18"></canvas>
|
352
|
+
<cufontext>5</cufontext>
|
353
|
+
</cufon>
|
354
|
+
<cufon
|
355
|
+
style="width: 13px; height: 11px;" alt="Alt" class="cufon cufon-canvas">
|
356
|
+
<canvas
|
357
|
+
style="width: 21px; height: 11px; top: 0px; left: 0px;" height="11"
|
358
|
+
width="21"></canvas>
|
359
|
+
<cufontext>Alt</cufontext>
|
360
|
+
</cufon>
|
361
|
+
</h5>
|
362
|
+
<h5 class="brdr">
|
363
|
+
<cufon style="width: 35px; height: 11px;" alt="Header "
|
364
|
+
class="cufon cufon-canvas">
|
365
|
+
<canvas style="width: 44px; height: 11px;
|
366
|
+
top: 0px; left: 0px;" height="11" width="44"></canvas>
|
367
|
+
<cufontext>Header</cufontext>
|
368
|
+
</cufon>
|
369
|
+
<cufon
|
370
|
+
style="width: 9px; height: 11px;" alt="5 " class="cufon cufon-canvas">
|
371
|
+
<canvas
|
372
|
+
style="width: 18px; height: 11px; top: 0px; left: 0px;" height="11"
|
373
|
+
width="18"></canvas>
|
374
|
+
<cufontext>5</cufontext>
|
375
|
+
</cufon>
|
376
|
+
<cufon
|
377
|
+
style="width: 44px; height: 11px;" alt="Underline" class="cufon
|
378
|
+
cufon-canvas">
|
379
|
+
<canvas style="width: 50px; height: 11px; top: 0px; left:
|
380
|
+
0px;" height="11" width="50"></canvas>
|
381
|
+
<cufontext>Underline</cufontext>
|
382
|
+
</cufon>
|
383
|
+
</h5>
|
384
|
+
<p>
|
385
|
+
<code>I am code<br>
|
386
|
+
I can expand as needed<br>
|
387
|
+
with my content<br>
|
388
|
+
</code></p>
|
389
|
+
|
390
|
+
<p>
|
391
|
+
<code class="mono">I am monotone code<br>
|
392
|
+
I can expand too<br>
|
393
|
+
</code></p>
|
394
|
+
|
395
|
+
<div class="info">
|
396
|
+
I am info<br>
|
397
|
+
again, can expand with content<br>
|
398
|
+
as I grow
|
399
|
+
</div>
|
400
|
+
<div class="warn">
|
401
|
+
I am warning<br>
|
402
|
+
repetition is nice when it <br>
|
403
|
+
comes to demonstrating expansion<br>
|
404
|
+
of elements
|
405
|
+
</div>
|
406
|
+
<ul class="list">
|
407
|
+
<li class="first-child">
|
408
|
+
list item 1
|
409
|
+
</li>
|
410
|
+
<li class="last-child">
|
411
|
+
list item 2
|
412
|
+
</li>
|
296
413
|
</ul>
|
297
|
-
<
|
298
|
-
<
|
299
|
-
|
300
|
-
|
301
|
-
<
|
302
|
-
|
303
|
-
|
304
|
-
<li>Any block can only ever have one attribute of type ‘Attachment’. The field name must be ‘Attachment’, though you can change the label shown on the form field.</li>
|
414
|
+
<ul class="disc">
|
415
|
+
<li class="first-child">
|
416
|
+
disc list item 1
|
417
|
+
</li>
|
418
|
+
<li class="last-child">
|
419
|
+
disc list item 2
|
420
|
+
</li>
|
305
421
|
</ul>
|
306
|
-
<
|
307
|
-
<
|
308
|
-
|
309
|
-
|
310
|
-
<
|
311
|
-
|
312
|
-
|
313
|
-
<p>Let’s assume we want to require that users will specify a price when they add a new product. Add the following to the block.</p>
|
314
|
-
<div class="code_container"><code class="ruby">class Product < ActiveRecord::Base
|
315
|
-
validates_presence_of :price
|
316
|
-
end</code></div>
|
317
|
-
<p>Then open up <tt>/cms/products</tt> in your browser and click <em>Add New Content</em>. Leave the price empty and try to save the block. The <span class="caps">CMS</span> will check the product has a price, and will display an error message if it’s not included. It will also highlight the field to indicate where the error is.</p>
|
318
|
-
<p>See the <a href="http://guides.rubyonrails.org/activerecord_validations_callbacks.html#validations-overview">ActiveRecord Validation</a> Guide for a more detailed list of supported validations.</p>
|
319
|
-
<h3 id="customizing-the-form">4 Customizing the Form</h3>
|
320
|
-
<p>The form created for us is good enough, but suppose we want change it up a bit. For example, I would like to add some instructions to our price field to indicated that it’s a required integer (whole dollars only) and put it last in the order. We can do this by editing the <tt>app/views/cms/_form.html.erb</tt> partial.</p>
|
321
|
-
<p>Here’s what our Form looks like:</p>
|
322
|
-
<div class="code_container"><code class="html"><%= f.cms_text_field :name %>
|
323
|
-
<%= f.cms_text_field :price %>
|
324
|
-
<%= f.cms_text_editor :description %></code></div>
|
325
|
-
<p>Switching the order is easy. Just move the :price line after the :description line. There is also an easy way to add instructions to any given field by adding a :instructions option to it. Change the <tt>_form.html.erb</tt> to the following:</p>
|
326
|
-
<div class="code_container"><code class="html"><%= f.cms_text_field :name %>
|
327
|
-
<%= f.cms_text_editor :description %>
|
328
|
-
<%= f.cms_text_field :price, :instructions=>"Required. Must be an integer (i.e. 1, not 1.0)" %></code></div>
|
329
|
-
<p>Refresh the <tt>/cms/products/new</tt> page to see the changes to the form. The price field show now appear last and will have helpful instructions written out below the text field. All form fields should support an <tt>:instructions</tt> option.</p>
|
330
|
-
<h3 id="changing-the-view">5 Changing the View</h3>
|
331
|
-
<p>As mentioned before, each content block has a single view that will be used to render the <span class="caps">HTML</span> when this product is placed directly on a page. For our Product block, this file is <tt>app/views/cms/products/render.html.erb</tt>. Open up that file and you should see the following:</p>
|
332
|
-
<div class="code_container"><code class="html"><p><b>Name:</b> <%= @content_block.name %></p>
|
333
|
-
<p><b>Price:</b> <%= @content_block.price %></p>
|
334
|
-
<p><b>Description:</b> <%= @content_block.description %></p></code></div>
|
335
|
-
<p>This is a reasonable start, but its likely you will want to change this if you start placing Products onto pages. Let’s go ahead and alter this file to see how it works. Alter it to match the following:</p>
|
336
|
-
<div class="code_container"><code class="html"><p><b><%= @content_block.name %></b> $<%= @content_block.price %>.00</p>
|
337
|
-
<p><%= @content_block.description %></p></code></div>
|
338
|
-
<p>Then open the <tt>/cms/products/1</tt> <span class="caps">URL</span> in your browser and see what a single product looks like. This isn’t the only way to alter how a block looks, as Portlets can also find and display blocks using different views. And if you don’t plan to use Products individually, you can likely skip this step and just build the portlets you need.</p>
|
339
|
-
<h3 id="adding-more-attributes">6 Adding more attributes</h3>
|
340
|
-
<p>When working with blocks, its easiest if you know all your attributes before you generate the block. However, you can still add additional attributes after you have generated the block. To add a new field to a block, you will need to make the following changes:</p>
|
341
|
-
<ul>
|
342
|
-
<li>Add the attribute via a migration.</li>
|
343
|
-
<li>Add the field to the form.</li>
|
422
|
+
<ul class="flat-list">
|
423
|
+
<li class="first-child">
|
424
|
+
flat-list item 1
|
425
|
+
</li>
|
426
|
+
<li class="last-child">
|
427
|
+
flat-list item 2
|
428
|
+
</li>
|
344
429
|
</ul>
|
345
|
-
<p
|
346
|
-
|
347
|
-
<p>To add a column to an existing block, run the following command:</p>
|
348
|
-
<div class="code_container"><code class="html">$ script/generate migration update_products</code></div>
|
349
|
-
<p>This will generate a single file <tt>db/migrate/20100129000441_update_products.rb</tt>. Open up that file, alter it to match the following:</p>
|
350
|
-
<div class="code_container"><code class="ruby">class UpdateProducts < ActiveRecord::Migration
|
351
|
-
def self.up
|
352
|
-
add_content_column :products, :size, :string
|
353
|
-
end
|
430
|
+
<p class="clearfix">
|
431
|
+
clearing paragraph block (has margins)</p>
|
354
432
|
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
end
|
359
|
-
end</code></div>
|
360
|
-
<p>BrowserCMS adds a new migration method called <tt>add_content_column</tt>, which you can use to add the column to the correct tables. Run <tt>rake db:migrate</tt> to add the column to the database.</p>
|
361
|
-
<div class='note'><p>One of the differences between a typical Rails Active Record and a <span class="caps">CMS</span> Content Block is that content blocks are versioned, meaning they keep track of every change made to them. To do this requires an additional table to keep all the older states. For example, there are two tables for our Product, <tt>products</tt> and <tt>product_versions</tt>. So when you add a new column, it must be added to both tables, which <tt>add_content_column</tt> does for you.</p></div>
|
362
|
-
<h4 id="add-field-to-form">6.2 Add Field to Form</h4>
|
363
|
-
<p>We want to add a selectbox to the form which will allow our user to choose from S, M, L or XL. Open the <tt>app/views/cms/products/_form.html.erb</tt> and add a new field <tt>cms_drop_down</tt> like this:</p>
|
364
|
-
<div class="code_container"><code class="html"><%= f.cms_text_field :name %>
|
365
|
-
<%= f.cms_drop_down :size, ["S", "M", "L", "XL"] %>
|
366
|
-
<%= f.cms_text_editor :description %>
|
367
|
-
<%= f.cms_text_field :price, :instructions=>"Required. Must be an integer (i.e. 1, not 1.0)" %></code></div>
|
368
|
-
<p>This will render a styled select box which will present the four choices and store the value as a string. Open <tt>/cms/products/new</tt> and you should see the following:</p>
|
369
|
-
<p><img src="images/content_blocks/add_field_to_form.png" alt="" /></p>
|
370
|
-
<h3 id="renaming-content-types">7 Renaming Content Types</h3>
|
371
|
-
<p>When you generate a content block, by default it will use the name of the class as the ‘Display Name’ through out the user interface. In the content library in the content type menu you see ‘Products’ and the page says ‘View Product’. In some cases, the name of the class may be different that how you want it displayed, or you might want to relabel it without rewriting your code.</p>
|
372
|
-
<p>You can set the display_name of a given content type by defining a new method in your block. Suppose we wanted to rename our <tt>Product</tt> Block from “Product” to “Book” throughout the UI. Edit the <tt>app/model/product.rb</tt> to add the following method.</p>
|
373
|
-
<div class="code_container"><code class="ruby">class Product < ActiveRecord::Base
|
374
|
-
# ...
|
375
|
-
def self.display_name
|
376
|
-
"Book"
|
377
|
-
end
|
378
|
-
end</code></div>
|
379
|
-
<p>BrowserCMS will use whatever value is returned by <tt>display_name</tt> in the UI for singular labels (i.e. Add New Book). It will automatically pluralize <tt>display_name</tt> as well. If you want to explicitly set the plural form of your block, you can do so by adding the following method to the block.</p>
|
380
|
-
<div class="code_container"><code class="ruby">class Product < ActiveRecord::Base
|
381
|
-
# ...
|
382
|
-
def self.display_name_plural
|
383
|
-
"Bookz"
|
384
|
-
end
|
385
|
-
end</code></div>
|
386
|
-
<div class='note'><p>This will not change the path to manage the block. I.e. even after change from “Product” to “Book”, the route for viewing a Product will be <tt>/cms/products/1</tt>, not <tt>/cms/books/1</tt>.</p></div>
|
387
|
-
<h3 id="grouping-related-blocks">8 Grouping Related Blocks</h3>
|
388
|
-
<p>As you define new Content Blocks in your project, you will notice that each new one will appear in its own group on the Content Types menu of the Content Library. By default, each Block will be assigned to its own group. It’s often a good idea to group several related Content Blocks together into a single group to keep users understand which types belong together. Open the <tt>db/migrate/20100128194303_create_products.rb</tt> migration file, which is where the ‘Group’ name is set.</p>
|
389
|
-
<div class="code_container"><code class="ruby">class CreateProducts < ActiveRecord::Migration
|
390
|
-
def self.up
|
391
|
-
# ...
|
392
|
-
ContentType.create!(:name => "Product", :group_name => "Product")
|
393
|
-
end
|
394
|
-
# ...
|
395
|
-
end</code></div>
|
396
|
-
<p>When a new <tt>ContentType</tt> is created, it determines which group_name is used. By default, the group name will be the same as the block name. Change the <tt>:group_name=>"Product"</tt> to <tt>:group_name=>"Store"</tt>, then run the following command to drop and rebuild the database using the migrations <tt>rake db:drop db:create db:migrate</tt></p>
|
397
|
-
<div class='note'><p>This technique is an easy way to just toss out all your development data and start over. Often times, its quicker to just edit an existing migration and rerun them all, rather than create a ton of little migrations just for changes to your local database.</p></div>
|
398
|
-
<h4 id="adding-a-second-block-to-store-group">8.1 Adding a Second Block to ‘Store’ Group</h4>
|
399
|
-
<p>Now that we have renamed our Group from ‘Product’ to ‘Store’, lets add another block to the ‘Store’. Run the following:</p>
|
400
|
-
<div class="code_container"><code class="html">$ script/generate content_block ShippingMethod name:string insured:boolean</code></div>
|
401
|
-
<p>Before running the migration, edit the <tt>db/migrate/20100129154902_create_shipping_methods.rb</tt> file to alter the following line:</p>
|
402
|
-
<div class="code_container"><code class="ruby">class CreateShippingMethods < ActiveRecord::Migration
|
403
|
-
def self.up
|
404
|
-
# ...
|
405
|
-
ContentType.create!(:name => "ShippingMethod", :group_name => "Store")
|
406
|
-
end
|
433
|
+
<div class="clearfix">
|
434
|
+
cleearing regular block (no margins)
|
435
|
+
</div>
|
407
436
|
|
408
|
-
# ...
|
409
|
-
end</code></div>
|
410
|
-
<p>Now run the migration to add the Shipping Method block. Open your browser to <tt>/cms/products</tt> and your Content Types menu should look like this:</p>
|
411
|
-
<p><img src="images/content_blocks/add_second_block.png" alt="" /></p>
|
412
|
-
<h3 id="associations-between-blocks">9 Associations between Blocks</h3>
|
413
|
-
<p>Since Content Blocks are Active Record objects, they can be associated with each other like any models can. This includes the commonly used <tt>belongs_to</tt> and <tt>has_many</tt> associations. You can see the <a href="http://guides.rubyonrails.org/association_basics.html">Active Record Associations Guide</a> for details on how associations work.</p>
|
414
|
-
<p>When you associate Content Blocks, you will need to determine how you allow users to edit content. For instance, if our <tt>Product</tt> had a <tt>belongs_to</tt> relationship with a <tt>Category</tt> object you can use a <tt>cms_drop_down</tt> Field that allows users to select a single category.</p>
|
415
|
-
<p>In some cases, you may need to build your own form fields for more complex relationships (Like javascript based controls). You can use the basic Rails <tt>FormBuilder</tt> methods to construct new Fields. To get things to look right (with labels and alignments), you should start with the html used to generate other fields and work backwards from there.</p>
|
416
|
-
<div class='note'><p><strong>Understanding Versioning:</strong> It’s important to recognize how versioning works with respect to related blocks. Versioning will keep track of the state of each block everytime the row is saved, but does not keep track of the relationships between blocks. So if I update our <tt>Product</tt> block, then renamed the <tt>Category</tt> block it’s related to, reverting that <tt>Product</tt> will not undo the Category name change.</p></div>
|
417
|
-
<h3 id="field-types">10 Field Types</h3>
|
418
|
-
<p>This section servers as a quick reference of the field types that Content Blocks can have. Fields are the html widgets you use to edit properties on blocks. The complete list of available fields is:</p>
|
419
|
-
<ul>
|
420
|
-
<li>Text Fields (<tt>cms_text_field</tt>)</li>
|
421
|
-
<li>Text Areas (<tt>cms_text_area</tt>)</li>
|
422
|
-
<li>Check box (<tt>cms_check_box</tt>)</li>
|
423
|
-
<li>Drop Down / Selects (<tt>cms_drop_down</tt>)</li>
|
424
|
-
<li>Text Editor (<tt>cms_text_editor</tt>)</li>
|
425
|
-
<li>Attachment (<tt>cms_file_field</tt>)</li>
|
426
|
-
<li>Tag List (<tt>cms_tag_list</tt>)</li>
|
427
|
-
<li>Date Picker (<tt>cms_date_picker</tt>)</li>
|
428
|
-
<li>Date Time Select (<tt>cms_datetime_select</tt>)</li>
|
429
|
-
</ul>
|
430
|
-
<h4 id="select--cms-drop-down">10.1 Select / <tt>cms_drop_down</tt></h4>
|
431
|
-
<p>This is similar to the traditional ‘select’ helper, it renders a stylized select control which allows users to choose one item from a list.</p>
|
432
|
-
<p>In _form.html.erb:</p>
|
433
|
-
<div class="code_container"><code class="html"><%= f.cms_drop_down :category_id, Category.all(:order => "name").map{|c| [c.name, c.id]},
|
434
|
-
:prompt => "Select a Category", :label => "Category",
|
435
|
-
:instructions=>"Determines which category is used on the homepage." %></code></div>
|
436
|
-
<p>In product.rb:</p>
|
437
|
-
<div class="code_container"><code class="ruby">class Product < ActiveRecord::Base
|
438
|
-
belongs_to :category
|
439
|
-
end</code></div>
|
440
|
-
<h4 id="attachments--cms-file-field">10.2 Attachments / <tt>cms_file_field</tt></h4>
|
441
|
-
<p>Each content block can have a single file attachment, which will allow users to upload files into the content repository. After uploading, the file will be
|
442
|
-
stored in a section within the <span class="caps">CMS</span>. Since sections determine permissions, this will allow you to control which users can access the file itself. Attached files
|
443
|
-
will have their own versioning history, which will keep track of changes.</p>
|
444
|
-
<p>This helper will create a stylized file upload file. An uploaded file will be associated with the content_block to which it is attached.</p>
|
445
|
-
<p>In _form.html.erb (View)</p>
|
446
|
-
<div class="code_container"><code class="html"><%= f.cms_file_field :attachment_file, :label => "File" %></code></div>
|
447
|
-
<p>In product.rb (Block)</p>
|
448
|
-
<div class="code_container"><code class="ruby">class Product < ActiveRecord::Base
|
449
|
-
acts_as_content_block :belongs_to_attachment => true
|
450
|
-
end</code></div>
|
451
|
-
<p>In create_products.rb (Migration)</p>
|
452
|
-
<div class="code_container"><code class="ruby">create_content_table :products do |t|
|
453
|
-
t.belongs_to :attachment
|
454
|
-
t.integer :attachment_version
|
455
|
-
end</code></div>
|
456
|
-
<ol>
|
457
|
-
<li>To Do – Add additional examples of other Fields (like cms_drop_down with example of relationships)</li>
|
458
|
-
</ol>
|
459
|
-
<h3 id="controllers">11 Controllers</h3>
|
460
|
-
<p>Each block is will also have an associated Controller, which gives it the same <span class="caps">CRUD</span> methods that a typical Rails resource would have, along with a few others (like publishing and reverting). By default, the generated controller inherits all this behavior from <tt>Cms::ContentBlockController</tt> and is therefore pretty empty. Like so:</p>
|
461
|
-
<div class="code_container"><code class="ruby">class Cms::ProductsController < Cms::ContentBlockController
|
462
|
-
end</code></div>
|
463
|
-
<p>If you want to define new methods (or override the existing methods) you can do so by editing this controller.</p>
|
464
|
-
<h4 id="public-controllers">11.1 Public Controllers</h4>
|
465
|
-
<p>The above controller is intended to handle only admin related actions. If you want to create a controller to use in the front end of your application, create a products controller that is not in the <span class="caps">CMS</span> namespace, so as not to conflict the <span class="caps">CMS</span> functionality.</p>
|
466
|
-
</td>
|
467
|
-
</tr>
|
468
|
-
</table>
|
469
|
-
</div>
|
470
|
-
</div>
|
471
|
-
<br clear="all"/>
|
472
|
-
<div class="bottom_cap"></div>
|
473
|
-
</div>
|
474
|
-
</div>
|
475
|
-
</body>
|
476
|
-
</html>
|
477
437
|
|
438
|
+
</div>
|
439
|
+
</div>
|
440
|
+
<div id="footer">
|
441
|
+
<ul>
|
442
|
+
<li class="first-child"><a href="">BrowserMedia Home</a></li>
|
443
|
+
<li><a href="">BrowserCMS Home</a></li>
|
444
|
+
<li><a href="">Sitemap</a></li>
|
445
|
+
<li class="last-child"><a href="">Contact Us</a></li>
|
446
|
+
</ul>
|
447
|
+
<p class="copynotice">© 1998-2010 BrowserMedia, LLC. All Rights
|
448
|
+
Reserved.</p>
|
449
|
+
</div>
|
450
|
+
</div>
|
451
|
+
<script type="text/javascript">
|
452
|
+
//<![CDATA[
|
453
|
+
bcmsOrg.init();
|
454
|
+
//]]>
|
455
|
+
</script>
|
456
|
+
</body>
|
457
|
+
</html>
|