zena 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +18 -0
- data/README.txt +133 -0
- data/app/controllers/application_controller.rb +3 -0
- data/app/controllers/comments_controller.rb +141 -0
- data/app/controllers/data_entries_controller.rb +81 -0
- data/app/controllers/discussions_controller.rb +48 -0
- data/app/controllers/documents_controller.rb +136 -0
- data/app/controllers/groups_controller.rb +99 -0
- data/app/controllers/iformats_controller.rb +78 -0
- data/app/controllers/links_controller.rb +98 -0
- data/app/controllers/nodes_controller.rb +497 -0
- data/app/controllers/preferences_controller.rb +52 -0
- data/app/controllers/relations_controller.rb +95 -0
- data/app/controllers/sessions_controller.rb +41 -0
- data/app/controllers/sites_controller.rb +112 -0
- data/app/controllers/users_controller.rb +139 -0
- data/app/controllers/versions_controller.rb +268 -0
- data/app/controllers/virtual_classes_controller.rb +95 -0
- data/app/helpers/application_helper.rb +4 -0
- data/app/helpers/documents_helper.rb +13 -0
- data/app/helpers/nodes_helper.rb +20 -0
- data/app/helpers/versions_helper.rb +18 -0
- data/app/models/book.rb +242 -0
- data/app/models/cache.rb +52 -0
- data/app/models/cached_page.rb +134 -0
- data/app/models/comment.rb +125 -0
- data/app/models/contact.rb +32 -0
- data/app/models/contact_content.rb +70 -0
- data/app/models/contact_version.rb +40 -0
- data/app/models/data_entry.rb +162 -0
- data/app/models/discussion.rb +65 -0
- data/app/models/document.rb +146 -0
- data/app/models/document_content.rb +186 -0
- data/app/models/document_version.rb +13 -0
- data/app/models/dyn_attribute.rb +4 -0
- data/app/models/group.rb +142 -0
- data/app/models/iformat.rb +146 -0
- data/app/models/image.rb +96 -0
- data/app/models/image_content.rb +189 -0
- data/app/models/image_version.rb +21 -0
- data/app/models/link.rb +121 -0
- data/app/models/node.rb +1752 -0
- data/app/models/note.rb +58 -0
- data/app/models/page.rb +53 -0
- data/app/models/project.rb +10 -0
- data/app/models/reference.rb +18 -0
- data/app/models/relation.rb +18 -0
- data/app/models/relation_proxy.rb +379 -0
- data/app/models/section.rb +5 -0
- data/app/models/site.rb +355 -0
- data/app/models/skin.rb +20 -0
- data/app/models/template.rb +134 -0
- data/app/models/template_content.rb +112 -0
- data/app/models/template_version.rb +37 -0
- data/app/models/text_document.rb +162 -0
- data/app/models/text_document_content.rb +46 -0
- data/app/models/text_document_version.rb +21 -0
- data/app/models/user.rb +412 -0
- data/app/models/version.rb +328 -0
- data/app/models/virtual_class.rb +134 -0
- data/app/models/zip.rb +6 -0
- data/app/views/comments/_add.rhtml +6 -0
- data/app/views/comments/_bin.rhtml +5 -0
- data/app/views/comments/_form.rhtml +26 -0
- data/app/views/comments/_li.rhtml +13 -0
- data/app/views/comments/_li_simple.rhtml +3 -0
- data/app/views/comments/_list.rhtml +13 -0
- data/app/views/comments/create.rjs +32 -0
- data/app/views/comments/edit.rjs +2 -0
- data/app/views/comments/empty_bin.rjs +1 -0
- data/app/views/comments/index.rhtml +12 -0
- data/app/views/comments/publish.rjs +7 -0
- data/app/views/comments/remove.rjs +9 -0
- data/app/views/comments/reply_to.rjs +2 -0
- data/app/views/comments/update.rjs +1 -0
- data/app/views/data_entries/_li.html.erb +9 -0
- data/app/views/data_entries/create.rjs +1 -0
- data/app/views/data_entries/destroy.rjs +1 -0
- data/app/views/data_entries/edit.rjs +1 -0
- data/app/views/data_entries/index.html.erb +5 -0
- data/app/views/data_entries/show.html.erb +5 -0
- data/app/views/data_entries/show.rjs +1 -0
- data/app/views/data_entries/update.rjs +1 -0
- data/app/views/discussions/_add.rhtml +6 -0
- data/app/views/discussions/_form.rhtml +21 -0
- data/app/views/discussions/_li.rhtml +9 -0
- data/app/views/discussions/_list.rhtml +4 -0
- data/app/views/discussions/create.rjs +10 -0
- data/app/views/discussions/remove.rjs +7 -0
- data/app/views/discussions/show.rjs +1 -0
- data/app/views/discussions/update.rjs +2 -0
- data/app/views/documents/_crop.rhtml +10 -0
- data/app/views/documents/crop_form.rjs +4 -0
- data/app/views/documents/new.rhtml +18 -0
- data/app/views/documents/show.rhtml +17 -0
- data/app/views/groups/_add.rhtml +6 -0
- data/app/views/groups/_form.rhtml +44 -0
- data/app/views/groups/_li.rhtml +13 -0
- data/app/views/groups/create.rjs +8 -0
- data/app/views/groups/destroy.rjs +2 -0
- data/app/views/groups/edit.html.erb +5 -0
- data/app/views/groups/index.rhtml +6 -0
- data/app/views/groups/show.html.erb +5 -0
- data/app/views/groups/show.rjs +1 -0
- data/app/views/iformats/_add.rhtml +6 -0
- data/app/views/iformats/_form.rhtml +29 -0
- data/app/views/iformats/_li.rhtml +15 -0
- data/app/views/iformats/create.rjs +8 -0
- data/app/views/iformats/destroy.rjs +11 -0
- data/app/views/iformats/edit.html.erb +5 -0
- data/app/views/iformats/index.rhtml +7 -0
- data/app/views/iformats/show.html.erb +5 -0
- data/app/views/iformats/show.rjs +1 -0
- data/app/views/iformats/update.rjs +5 -0
- data/app/views/image/_title.rhtml +8 -0
- data/app/views/links/_add.rhtml +6 -0
- data/app/views/links/_form.rhtml +34 -0
- data/app/views/links/_li.rhtml +7 -0
- data/app/views/links/_list.rhtml +9 -0
- data/app/views/links/create.rjs +5 -0
- data/app/views/links/destroy.rjs +11 -0
- data/app/views/links/show.rjs +5 -0
- data/app/views/nodes/404.html +15 -0
- data/app/views/nodes/500.html +15 -0
- data/app/views/nodes/_dates.rhtml +13 -0
- data/app/views/nodes/_edit_attribute.rhtml +32 -0
- data/app/views/nodes/_gallery.rhtml +16 -0
- data/app/views/nodes/_groups.rhtml +25 -0
- data/app/views/nodes/_import_results.rhtml +20 -0
- data/app/views/nodes/_list_nodes.rhtml +9 -0
- data/app/views/nodes/_parent.rhtml +15 -0
- data/app/views/nodes/_position.rhtml +22 -0
- data/app/views/nodes/_results.rhtml +29 -0
- data/app/views/nodes/_show_attr.rhtml +6 -0
- data/app/views/nodes/_table.rhtml +14 -0
- data/app/views/nodes/clear_order.rjs +7 -0
- data/app/views/nodes/create.rjs +17 -0
- data/app/views/nodes/drive.rjs +2 -0
- data/app/views/nodes/drop.rjs +1 -0
- data/app/views/nodes/edit.html.erb +17 -0
- data/app/views/nodes/edit.rjs +7 -0
- data/app/views/nodes/import.rhtml +10 -0
- data/app/views/nodes/save_text.rjs +13 -0
- data/app/views/nodes/search.rjs +3 -0
- data/app/views/nodes/show.rjs +1 -0
- data/app/views/nodes/table_update.rjs +8 -0
- data/app/views/nodes/update.rjs +29 -0
- data/app/views/nodes/zafu.rjs +1 -0
- data/app/views/relations/_add.erb +6 -0
- data/app/views/relations/_form.erb +43 -0
- data/app/views/relations/_li.erb +16 -0
- data/app/views/relations/create.rjs +8 -0
- data/app/views/relations/destroy.rjs +6 -0
- data/app/views/relations/edit.erb +2 -0
- data/app/views/relations/index.erb +6 -0
- data/app/views/relations/new.erb +2 -0
- data/app/views/relations/show.rjs +1 -0
- data/app/views/relations/update.rjs +5 -0
- data/app/views/search/_form.rhtml +13 -0
- data/app/views/sites/_form.erb +37 -0
- data/app/views/sites/_li.erb +13 -0
- data/app/views/sites/clear_cache.rjs +2 -0
- data/app/views/sites/edit.erb +2 -0
- data/app/views/sites/index.erb +6 -0
- data/app/views/sites/show.rjs +1 -0
- data/app/views/sites/update.rjs +5 -0
- data/app/views/sites/zena_up.html.erb +11 -0
- data/app/views/templates/defaults/+adminLayout.zafu +69 -0
- data/app/views/templates/defaults/+login.zafu +32 -0
- data/app/views/templates/document_create_tabs/_file.rhtml +13 -0
- data/app/views/templates/document_create_tabs/_import.rhtml +9 -0
- data/app/views/templates/document_create_tabs/_template.rhtml +22 -0
- data/app/views/templates/document_create_tabs/_text_doc.rhtml +14 -0
- data/app/views/templates/drive_tabs/_drive.rhtml +11 -0
- data/app/views/templates/drive_tabs/_help.rhtml +0 -0
- data/app/views/templates/drive_tabs/_links.rhtml +8 -0
- data/app/views/templates/edit_tabs/_contact.rhtml +8 -0
- data/app/views/templates/edit_tabs/_custom.rhtml +6 -0
- data/app/views/templates/edit_tabs/_document.rhtml +8 -0
- data/app/views/templates/edit_tabs/_help.rhtml +7 -0
- data/app/views/templates/edit_tabs/_image.rhtml +19 -0
- data/app/views/templates/edit_tabs/_template.rhtml +8 -0
- data/app/views/templates/edit_tabs/_text.rhtml +1 -0
- data/app/views/templates/edit_tabs/_textdocument.rhtml +16 -0
- data/app/views/templates/edit_tabs/_title.rhtml +27 -0
- data/app/views/users/_add.rhtml +6 -0
- data/app/views/users/_form.rhtml +49 -0
- data/app/views/users/_li.rhtml +18 -0
- data/app/views/users/change_info.rjs +7 -0
- data/app/views/users/change_password.rjs +7 -0
- data/app/views/users/create.rjs +8 -0
- data/app/views/users/index.rhtml +7 -0
- data/app/views/users/preferences.html.erb +40 -0
- data/app/views/users/show.rjs +1 -0
- data/app/views/users/update.rjs +16 -0
- data/app/views/versions/_li.rhtml +3 -0
- data/app/views/versions/_list.rhtml +5 -0
- data/app/views/versions/_tr.rhtml +10 -0
- data/app/views/versions/backup.rjs +16 -0
- data/app/views/versions/css_preview.rjs +2 -0
- data/app/views/versions/destroy.rjs +6 -0
- data/app/views/versions/diff.rjs +3 -0
- data/app/views/versions/edit.rhtml +55 -0
- data/app/views/versions/preview.rjs +9 -0
- data/app/views/versions/show.rjs +5 -0
- data/app/views/versions/update.rjs +9 -0
- data/app/views/virtual_classes/_add.erb +6 -0
- data/app/views/virtual_classes/_form.erb +30 -0
- data/app/views/virtual_classes/_li.erb +12 -0
- data/app/views/virtual_classes/create.rjs +8 -0
- data/app/views/virtual_classes/destroy.rjs +6 -0
- data/app/views/virtual_classes/index.erb +7 -0
- data/app/views/virtual_classes/new.erb +2 -0
- data/app/views/virtual_classes/show.rjs +1 -0
- data/app/views/virtual_classes/update.rjs +5 -0
- data/bin/zena +5 -0
- data/bricks/captcha/MIT-LICENSE +19 -0
- data/bricks/captcha/README +11 -0
- data/bricks/captcha/patch/application_controller.rb +10 -0
- data/bricks/captcha/patch/application_helper.rb +32 -0
- data/bricks/captcha/patch/site.rb +2 -0
- data/bricks/captcha/zafu/captcha.rb +29 -0
- data/bricks/math/patch/application_helper.rb +95 -0
- data/bricks/tags/README +31 -0
- data/bricks/tags/lib/has_tags.rb +164 -0
- data/bricks/tags/patch/node.rb +15 -0
- data/bricks/tags/test/sites/zena/links.yml +11 -0
- data/bricks/tags/test/unit/tags_test.rb +103 -0
- data/bricks/tags/test/zafu/tags.yml +28 -0
- data/bricks/toto.zip +0 -0
- data/config/awstats.conf.rhtml +1497 -0
- data/config/boot.rb +109 -0
- data/config/database.rhtml +25 -0
- data/config/database.yml +40 -0
- data/config/database_example.yml +27 -0
- data/config/deploy.rb +382 -0
- data/config/deploy_config_example.rb +7 -0
- data/config/environment.rb +13 -0
- data/config/environments/development.rb +21 -0
- data/config/environments/production.rb +27 -0
- data/config/environments/test.rb +22 -0
- data/config/gems.yml +46 -0
- data/config/httpd.rhtml +18 -0
- data/config/initializers/mime_types.rb +10 -0
- data/config/initializers/zena.rb +1 -0
- data/config/locales/de.yml +120 -0
- data/config/locales/fr-CH.yml +123 -0
- data/config/locales/fr.yml +123 -0
- data/config/mongrel_upload_progress.conf +7 -0
- data/config/routes.rb +3 -0
- data/config/start.html +44 -0
- data/config/stats.vhost.rhtml +40 -0
- data/config/vhost.rhtml +84 -0
- data/config/vhost_www.rhtml +10 -0
- data/config/zena.rb +39 -0
- data/db/init/base/help.en.zml +94 -0
- data/db/init/base/help.fr.zml +88 -0
- data/db/init/base/skins.zml +3 -0
- data/db/init/base/skins/default.zml +10 -0
- data/db/init/base/skins/default/Node-+adminLayout.zafu +45 -0
- data/db/init/base/skins/default/Node-+index.zafu +1 -0
- data/db/init/base/skins/default/Node-+login.zafu +25 -0
- data/db/init/base/skins/default/Node-+notFound.zafu +14 -0
- data/db/init/base/skins/default/Node-+popupLayout.zafu +39 -0
- data/db/init/base/skins/default/Node-+search.zafu +20 -0
- data/db/init/base/skins/default/Node-tree.zafu +19 -0
- data/db/init/base/skins/default/Node.zafu +95 -0
- data/db/init/base/skins/default/Project.zafu +8 -0
- data/db/init/base/skins/default/favicon.png +0 -0
- data/db/init/base/skins/default/notes.zafu +22 -0
- data/db/init/base/skins/default/style.css +80 -0
- data/db/migrate/001_create_base.rb +156 -0
- data/db/migrate/002_add_time_zone_to_users.rb +9 -0
- data/db/migrate/003_add_custom_base_flag.rb +11 -0
- data/db/migrate/004_rename_template_skin.rb +9 -0
- data/db/migrate/005_create_cached_pages.rb +20 -0
- data/db/migrate/006_create_sites.rb +60 -0
- data/db/migrate/007_replace_id_by_zip.rb +17 -0
- data/db/migrate/008_user_status.rb +10 -0
- data/db/migrate/009_fulltext.rb +13 -0
- data/db/migrate/010_create_template_content.rb +17 -0
- data/db/migrate/011_project_to_section.rb +9 -0
- data/db/migrate/012_add_project_id.rb +12 -0
- data/db/migrate/013_remove_defaults.rb +29 -0
- data/db/migrate/014_add_sort_field.rb +10 -0
- data/db/migrate/015_add_dyn_attributes.rb +18 -0
- data/db/migrate/016_remove_translations.rb +20 -0
- data/db/migrate/017_rename_authorize.rb +9 -0
- data/db/migrate/018_add_auth_option.rb +9 -0
- data/db/migrate/019_remove_user_status.rb +25 -0
- data/db/migrate/020_create_participation.rb +30 -0
- data/db/migrate/021_create_relations.rb +23 -0
- data/db/migrate/022_create_virtual_classes.rb +20 -0
- data/db/migrate/023_ip_on_anonymous_comment.rb +9 -0
- data/db/migrate/024_correct_vclass_kpath.rb +11 -0
- data/db/migrate/025_move_tag_into_vclass.rb +13 -0
- data/db/migrate/026_rename_templates.rb +47 -0
- data/db/migrate/027_add_country_to_contacts.rb +9 -0
- data/db/migrate/028_change_size_of_conten_type_field.rb +9 -0
- data/db/migrate/029_create_data_entries.rb +21 -0
- data/db/migrate/030_redit_auto_publish_site_settings.rb +13 -0
- data/db/migrate/031_create_iformats.rb +21 -0
- data/db/migrate/032_caches_context_as_hash.rb +10 -0
- data/db/migrate/033_documents_kpath_change.rb +17 -0
- data/db/migrate/034_change_file_storage.rb +38 -0
- data/db/migrate/035_add_status_to_link.rb +13 -0
- data/db/migrate/036_add_flag_fields_on_nodes.rb +11 -0
- data/db/migrate/037_add_auto_create_discussion_to_v_class.rb +11 -0
- data/db/migrate/038_create_site_attributes.rb +15 -0
- data/db/migrate/039_default_position.rb +10 -0
- data/db/migrate/040_second_value_for_data_entry.rb +11 -0
- data/db/migrate/041_add_attributes_to_v_class.rb +9 -0
- data/db/migrate/042_fix_position_should_be_float.rb +8 -0
- data/db/migrate/043_move_user_lang_into_participation.rb +15 -0
- data/db/migrate/044_remove_monolingual_site_option.rb +9 -0
- data/db/migrate/045_avoid_star_in_templates.rb +13 -0
- data/db/migrate/046_fix_zazen_image_tag.rb +47 -0
- data/db/migrate/047_change_default_link_id_to_zero.rb +12 -0
- data/db/migrate/048_link_source_target_can_be_null.rb +11 -0
- data/db/migrate/049_fix_publish_from_is_null.rb +9 -0
- data/db/migrate/050_date_in_links.rb +9 -0
- data/db/migrate/051_add_exif_tags_to_images.rb +9 -0
- data/db/migrate/20090825201159_insert_zero_link.rb +8 -0
- data/db/migrate/20090825201200_merge_bricks_migrations_with_std_migrations.rb +19 -0
- data/db/migrate/20090924141459_zafu_fix_sept09.rb +19 -0
- data/db/migrate/20090927125912_allow_null_in_text_fields.rb +17 -0
- data/db/migrate/20090928133440_no_more_private_nodes.rb +25 -0
- data/db/migrate/20090928143754_version_status_change.rb +24 -0
- data/db/migrate/20091001084025_change_status_values_for_comments.rb +22 -0
- data/db/migrate/20091009084057_add_vhash_in_node.rb +13 -0
- data/db/migrate/20091013100351_rename_publish_group_to_drive_group.rb +12 -0
- data/db/migrate/20091014130833_fix_template_title.rb +16 -0
- data/db/migrate/20091014183726_merge_participation_into_users.rb +21 -0
- data/db/production.sqlite3 +0 -0
- data/db/schema.rb +281 -0
- data/lib/base_additions.rb +7 -0
- data/lib/bricks/patcher.rb +68 -0
- data/lib/comment_query.rb +92 -0
- data/lib/core_ext/date_time.rb +5 -0
- data/lib/core_ext/dir.rb +12 -0
- data/lib/core_ext/fixnum.rb +20 -0
- data/lib/core_ext/string.rb +74 -0
- data/lib/exif_data.rb +54 -0
- data/lib/fix_rails_layouts.rb +9 -0
- data/lib/gettext_strings.rb +160 -0
- data/lib/image_builder.rb +325 -0
- data/lib/log_recorder/lib/log_recorder.rb +138 -0
- data/lib/log_recorder/test/log_recorder_test.rb +0 -0
- data/lib/parser.rb +1 -0
- data/lib/tasks/capistrano.rake +99 -0
- data/lib/tasks/zena.rake +358 -0
- data/lib/tasks/zena.rb +2 -0
- data/lib/upload_progress_server.rb +24 -0
- data/lib/webdav_adapter.rb +172 -0
- data/lib/zafu_parser.rb +3 -0
- data/lib/zazen_parser.rb +1 -0
- data/lib/zena.rb +398 -0
- data/lib/zena/acts/multiversion.rb +755 -0
- data/lib/zena/acts/secure.rb +774 -0
- data/lib/zena/app.rb +39 -0
- data/lib/zena/code_syntax.rb +275 -0
- data/lib/zena/controller/test_case.rb +32 -0
- data/lib/zena/db.rb +252 -0
- data/lib/zena/fix/mysql_connection.rb +17 -0
- data/lib/zena/foxy_parser.rb +845 -0
- data/lib/zena/migrator.rb +109 -0
- data/lib/zena/parser.rb +601 -0
- data/lib/zena/parser/zafu_rules.rb +232 -0
- data/lib/zena/parser/zafu_tags.rb +197 -0
- data/lib/zena/parser/zazen_rules.rb +427 -0
- data/lib/zena/parser/zazen_tags.rb +44 -0
- data/lib/zena/parser/zena_rules.rb +29 -0
- data/lib/zena/parser/zena_tags.rb +3559 -0
- data/lib/zena/root.rb +3 -0
- data/lib/zena/routes.rb +73 -0
- data/lib/zena/test_controller.rb +74 -0
- data/lib/zena/unit/test_case.rb +24 -0
- data/lib/zena/use/ajax.rb +119 -0
- data/lib/zena/use/authentification.rb +120 -0
- data/lib/zena/use/calendar.rb +130 -0
- data/lib/zena/use/custom_queries/complex.host.yml +173 -0
- data/lib/zena/use/dates.rb +230 -0
- data/lib/zena/use/dyn_attributes.rb +256 -0
- data/lib/zena/use/error_rendering.rb +52 -0
- data/lib/zena/use/fixtures.rb +133 -0
- data/lib/zena/use/grid.rb +148 -0
- data/lib/zena/use/html_tags.rb +603 -0
- data/lib/zena/use/i18n.rb +247 -0
- data/lib/zena/use/nested_attributes_alias.rb +201 -0
- data/lib/zena/use/node_query_finders.rb +491 -0
- data/lib/zena/use/refactor.rb +231 -0
- data/lib/zena/use/relations.rb +360 -0
- data/lib/zena/use/rendering.rb +248 -0
- data/lib/zena/use/test_helper.rb +151 -0
- data/lib/zena/use/urls.rb +180 -0
- data/lib/zena/use/zafu.rb +549 -0
- data/lib/zena/use/zazen.rb +230 -0
- data/lib/zena/view/test_case.rb +23 -0
- data/locale/en/LC_MESSAGES/zena.mo +0 -0
- data/locale/en/zena.po +2116 -0
- data/locale/fr/LC_MESSAGES/zena.mo +0 -0
- data/locale/fr/zena.po +2172 -0
- data/locale/zena.pot +1915 -0
- data/public/calendar/calendar-brown.css +225 -0
- data/public/calendar/calendar-setup.js +153 -0
- data/public/calendar/calendar.js +1817 -0
- data/public/calendar/iconCalendar.gif +0 -0
- data/public/calendar/lang/calendar-en-utf8.js +128 -0
- data/public/calendar/lang/calendar-fr-utf8.js +120 -0
- data/public/calendar/lang/lang.zip +0 -0
- data/public/dispatch.cgi +10 -0
- data/public/dispatch.fcgi +24 -0
- data/public/dispatch.rb +10 -0
- data/public/favicon.ico +0 -0
- data/public/images/accept.png +0 -0
- data/public/images/action.png +0 -0
- data/public/images/add.png +0 -0
- data/public/images/ajax-loader.gif +0 -0
- data/public/images/anchor.png +0 -0
- data/public/images/application.png +0 -0
- data/public/images/application_add.png +0 -0
- data/public/images/application_cascade.png +0 -0
- data/public/images/application_delete.png +0 -0
- data/public/images/application_double.png +0 -0
- data/public/images/application_edit.png +0 -0
- data/public/images/application_error.png +0 -0
- data/public/images/application_form.png +0 -0
- data/public/images/application_form_add.png +0 -0
- data/public/images/application_form_delete.png +0 -0
- data/public/images/application_form_edit.png +0 -0
- data/public/images/application_form_magnify.png +0 -0
- data/public/images/application_get.png +0 -0
- data/public/images/application_go.png +0 -0
- data/public/images/application_home.png +0 -0
- data/public/images/application_key.png +0 -0
- data/public/images/application_lightning.png +0 -0
- data/public/images/application_link.png +0 -0
- data/public/images/application_osx.png +0 -0
- data/public/images/application_osx_terminal.png +0 -0
- data/public/images/application_put.png +0 -0
- data/public/images/application_side_boxes.png +0 -0
- data/public/images/application_side_contract.png +0 -0
- data/public/images/application_side_expand.png +0 -0
- data/public/images/application_side_list.png +0 -0
- data/public/images/application_side_tree.png +0 -0
- data/public/images/application_split.png +0 -0
- data/public/images/application_tile_horizontal.png +0 -0
- data/public/images/application_tile_vertical.png +0 -0
- data/public/images/application_view_columns.png +0 -0
- data/public/images/application_view_detail.png +0 -0
- data/public/images/application_view_gallery.png +0 -0
- data/public/images/application_view_icons.png +0 -0
- data/public/images/application_view_list.png +0 -0
- data/public/images/application_view_tile.png +0 -0
- data/public/images/application_xp.png +0 -0
- data/public/images/application_xp_terminal.png +0 -0
- data/public/images/arrow_branch.png +0 -0
- data/public/images/arrow_divide.png +0 -0
- data/public/images/arrow_down.png +0 -0
- data/public/images/arrow_in.png +0 -0
- data/public/images/arrow_inout.png +0 -0
- data/public/images/arrow_join.png +0 -0
- data/public/images/arrow_left.png +0 -0
- data/public/images/arrow_merge.png +0 -0
- data/public/images/arrow_out.png +0 -0
- data/public/images/arrow_redo.png +0 -0
- data/public/images/arrow_refresh.png +0 -0
- data/public/images/arrow_refresh_small.png +0 -0
- data/public/images/arrow_right.png +0 -0
- data/public/images/arrow_rotate_anticlockwise.png +0 -0
- data/public/images/arrow_rotate_clockwise.png +0 -0
- data/public/images/arrow_switch.png +0 -0
- data/public/images/arrow_turn_left.png +0 -0
- data/public/images/arrow_turn_right.png +0 -0
- data/public/images/arrow_undo.png +0 -0
- data/public/images/arrow_up.png +0 -0
- data/public/images/asterisk_orange.png +0 -0
- data/public/images/asterisk_yellow.png +0 -0
- data/public/images/attach.png +0 -0
- data/public/images/award_star_add.png +0 -0
- data/public/images/award_star_bronze_1.png +0 -0
- data/public/images/award_star_bronze_2.png +0 -0
- data/public/images/award_star_bronze_3.png +0 -0
- data/public/images/award_star_delete.png +0 -0
- data/public/images/award_star_gold_1.png +0 -0
- data/public/images/award_star_gold_2.png +0 -0
- data/public/images/award_star_gold_3.png +0 -0
- data/public/images/award_star_silver_1.png +0 -0
- data/public/images/award_star_silver_2.png +0 -0
- data/public/images/award_star_silver_3.png +0 -0
- data/public/images/basket.png +0 -0
- data/public/images/basket_add.png +0 -0
- data/public/images/basket_delete.png +0 -0
- data/public/images/basket_edit.png +0 -0
- data/public/images/basket_error.png +0 -0
- data/public/images/basket_go.png +0 -0
- data/public/images/basket_put.png +0 -0
- data/public/images/basket_remove.png +0 -0
- data/public/images/bell.png +0 -0
- data/public/images/bell_add.png +0 -0
- data/public/images/bell_delete.png +0 -0
- data/public/images/bell_error.png +0 -0
- data/public/images/bell_go.png +0 -0
- data/public/images/bell_link.png +0 -0
- data/public/images/bin.png +0 -0
- data/public/images/bin_closed.png +0 -0
- data/public/images/bin_empty.gif +0 -0
- data/public/images/bin_empty.png +0 -0
- data/public/images/bin_full.gif +0 -0
- data/public/images/bomb.png +0 -0
- data/public/images/book.png +0 -0
- data/public/images/book_add.png +0 -0
- data/public/images/book_addresses.png +0 -0
- data/public/images/book_delete.png +0 -0
- data/public/images/book_edit.png +0 -0
- data/public/images/book_error.png +0 -0
- data/public/images/book_go.png +0 -0
- data/public/images/book_key.png +0 -0
- data/public/images/book_link.png +0 -0
- data/public/images/book_next.png +0 -0
- data/public/images/book_open.png +0 -0
- data/public/images/book_previous.png +0 -0
- data/public/images/box.png +0 -0
- data/public/images/brick.png +0 -0
- data/public/images/brick_add.png +0 -0
- data/public/images/brick_delete.png +0 -0
- data/public/images/brick_edit.png +0 -0
- data/public/images/brick_error.png +0 -0
- data/public/images/brick_go.png +0 -0
- data/public/images/brick_link.png +0 -0
- data/public/images/bricks.png +0 -0
- data/public/images/briefcase.png +0 -0
- data/public/images/bug.png +0 -0
- data/public/images/bug_add.png +0 -0
- data/public/images/bug_delete.png +0 -0
- data/public/images/bug_edit.png +0 -0
- data/public/images/bug_error.png +0 -0
- data/public/images/bug_go.png +0 -0
- data/public/images/bug_link.png +0 -0
- data/public/images/building.png +0 -0
- data/public/images/building_add.png +0 -0
- data/public/images/building_delete.png +0 -0
- data/public/images/building_edit.png +0 -0
- data/public/images/building_error.png +0 -0
- data/public/images/building_go.png +0 -0
- data/public/images/building_key.png +0 -0
- data/public/images/building_link.png +0 -0
- data/public/images/bullet_add.png +0 -0
- data/public/images/bullet_arrow_bottom.png +0 -0
- data/public/images/bullet_arrow_down.png +0 -0
- data/public/images/bullet_arrow_top.png +0 -0
- data/public/images/bullet_arrow_up.png +0 -0
- data/public/images/bullet_black.png +0 -0
- data/public/images/bullet_blue.png +0 -0
- data/public/images/bullet_delete.png +0 -0
- data/public/images/bullet_disk.png +0 -0
- data/public/images/bullet_error.png +0 -0
- data/public/images/bullet_feed.png +0 -0
- data/public/images/bullet_go.png +0 -0
- data/public/images/bullet_green.png +0 -0
- data/public/images/bullet_key.png +0 -0
- data/public/images/bullet_orange.png +0 -0
- data/public/images/bullet_picture.png +0 -0
- data/public/images/bullet_pink.png +0 -0
- data/public/images/bullet_purple.png +0 -0
- data/public/images/bullet_red.png +0 -0
- data/public/images/bullet_star.png +0 -0
- data/public/images/bullet_toggle_minus.png +0 -0
- data/public/images/bullet_toggle_plus.png +0 -0
- data/public/images/bullet_white.png +0 -0
- data/public/images/bullet_wrench.png +0 -0
- data/public/images/bullet_yellow.png +0 -0
- data/public/images/cake.png +0 -0
- data/public/images/calculator.png +0 -0
- data/public/images/calculator_add.png +0 -0
- data/public/images/calculator_delete.png +0 -0
- data/public/images/calculator_edit.png +0 -0
- data/public/images/calculator_error.png +0 -0
- data/public/images/calculator_link.png +0 -0
- data/public/images/calendar.png +0 -0
- data/public/images/calendar_add.png +0 -0
- data/public/images/calendar_delete.png +0 -0
- data/public/images/calendar_edit.png +0 -0
- data/public/images/calendar_link.png +0 -0
- data/public/images/calendar_view_day.png +0 -0
- data/public/images/calendar_view_month.png +0 -0
- data/public/images/calendar_view_week.png +0 -0
- data/public/images/camera.png +0 -0
- data/public/images/camera_add.png +0 -0
- data/public/images/camera_delete.png +0 -0
- data/public/images/camera_edit.png +0 -0
- data/public/images/camera_error.png +0 -0
- data/public/images/camera_go.png +0 -0
- data/public/images/camera_link.png +0 -0
- data/public/images/camera_small.png +0 -0
- data/public/images/cancel.png +0 -0
- data/public/images/car.png +0 -0
- data/public/images/car_add.png +0 -0
- data/public/images/car_delete.png +0 -0
- data/public/images/cart.png +0 -0
- data/public/images/cart_add.png +0 -0
- data/public/images/cart_delete.png +0 -0
- data/public/images/cart_edit.png +0 -0
- data/public/images/cart_error.png +0 -0
- data/public/images/cart_go.png +0 -0
- data/public/images/cart_put.png +0 -0
- data/public/images/cart_remove.png +0 -0
- data/public/images/cd.png +0 -0
- data/public/images/cd_add.png +0 -0
- data/public/images/cd_burn.png +0 -0
- data/public/images/cd_delete.png +0 -0
- data/public/images/cd_edit.png +0 -0
- data/public/images/cd_eject.png +0 -0
- data/public/images/cd_go.png +0 -0
- data/public/images/chart_bar.png +0 -0
- data/public/images/chart_bar_add.png +0 -0
- data/public/images/chart_bar_delete.png +0 -0
- data/public/images/chart_bar_edit.png +0 -0
- data/public/images/chart_bar_error.png +0 -0
- data/public/images/chart_bar_link.png +0 -0
- data/public/images/chart_curve.png +0 -0
- data/public/images/chart_curve_add.png +0 -0
- data/public/images/chart_curve_delete.png +0 -0
- data/public/images/chart_curve_edit.png +0 -0
- data/public/images/chart_curve_error.png +0 -0
- data/public/images/chart_curve_go.png +0 -0
- data/public/images/chart_curve_link.png +0 -0
- data/public/images/chart_line.png +0 -0
- data/public/images/chart_line_add.png +0 -0
- data/public/images/chart_line_delete.png +0 -0
- data/public/images/chart_line_edit.png +0 -0
- data/public/images/chart_line_error.png +0 -0
- data/public/images/chart_line_link.png +0 -0
- data/public/images/chart_organisation.png +0 -0
- data/public/images/chart_organisation_add.png +0 -0
- data/public/images/chart_organisation_delete.png +0 -0
- data/public/images/chart_pie.png +0 -0
- data/public/images/chart_pie_add.png +0 -0
- data/public/images/chart_pie_delete.png +0 -0
- data/public/images/chart_pie_edit.png +0 -0
- data/public/images/chart_pie_error.png +0 -0
- data/public/images/chart_pie_link.png +0 -0
- data/public/images/clock.png +0 -0
- data/public/images/clock_add.png +0 -0
- data/public/images/clock_delete.png +0 -0
- data/public/images/clock_edit.png +0 -0
- data/public/images/clock_error.png +0 -0
- data/public/images/clock_go.png +0 -0
- data/public/images/clock_link.png +0 -0
- data/public/images/clock_pause.png +0 -0
- data/public/images/clock_play.png +0 -0
- data/public/images/clock_red.png +0 -0
- data/public/images/clock_stop.png +0 -0
- data/public/images/cog.png +0 -0
- data/public/images/cog_add.png +0 -0
- data/public/images/cog_delete.png +0 -0
- data/public/images/cog_edit.png +0 -0
- data/public/images/cog_error.png +0 -0
- data/public/images/cog_go.png +0 -0
- data/public/images/coins.png +0 -0
- data/public/images/coins_add.png +0 -0
- data/public/images/coins_delete.png +0 -0
- data/public/images/collection.png +0 -0
- data/public/images/color_swatch.png +0 -0
- data/public/images/color_wheel.png +0 -0
- data/public/images/column_add.png +0 -0
- data/public/images/column_delete.png +0 -0
- data/public/images/comment.png +0 -0
- data/public/images/comment_add.png +0 -0
- data/public/images/comment_delete.png +0 -0
- data/public/images/comment_edit.png +0 -0
- data/public/images/comments.png +0 -0
- data/public/images/comments_add.png +0 -0
- data/public/images/comments_delete.png +0 -0
- data/public/images/comments_red.png +0 -0
- data/public/images/compress.png +0 -0
- data/public/images/computer.png +0 -0
- data/public/images/computer_add.png +0 -0
- data/public/images/computer_delete.png +0 -0
- data/public/images/computer_edit.png +0 -0
- data/public/images/computer_error.png +0 -0
- data/public/images/computer_go.png +0 -0
- data/public/images/computer_key.png +0 -0
- data/public/images/computer_link.png +0 -0
- data/public/images/connect.png +0 -0
- data/public/images/contrast.png +0 -0
- data/public/images/contrast_decrease.png +0 -0
- data/public/images/contrast_high.png +0 -0
- data/public/images/contrast_increase.png +0 -0
- data/public/images/contrast_low.png +0 -0
- data/public/images/control_eject.png +0 -0
- data/public/images/control_eject_blue.png +0 -0
- data/public/images/control_end.png +0 -0
- data/public/images/control_end_blue.png +0 -0
- data/public/images/control_equalizer.png +0 -0
- data/public/images/control_equalizer_blue.png +0 -0
- data/public/images/control_fastforward.png +0 -0
- data/public/images/control_fastforward_blue.png +0 -0
- data/public/images/control_pause.png +0 -0
- data/public/images/control_pause_blue.png +0 -0
- data/public/images/control_play.png +0 -0
- data/public/images/control_play_blue.png +0 -0
- data/public/images/control_repeat.png +0 -0
- data/public/images/control_repeat_blue.png +0 -0
- data/public/images/control_rewind.png +0 -0
- data/public/images/control_rewind_blue.png +0 -0
- data/public/images/control_start.png +0 -0
- data/public/images/control_start_blue.png +0 -0
- data/public/images/control_stop.png +0 -0
- data/public/images/control_stop_blue.png +0 -0
- data/public/images/controller.png +0 -0
- data/public/images/controller_add.png +0 -0
- data/public/images/controller_delete.png +0 -0
- data/public/images/controller_error.png +0 -0
- data/public/images/creditcards.png +0 -0
- data/public/images/cross.png +0 -0
- data/public/images/css.png +0 -0
- data/public/images/css_add.png +0 -0
- data/public/images/css_delete.png +0 -0
- data/public/images/css_go.png +0 -0
- data/public/images/css_valid.png +0 -0
- data/public/images/cup.png +0 -0
- data/public/images/cup_add.png +0 -0
- data/public/images/cup_delete.png +0 -0
- data/public/images/cup_edit.png +0 -0
- data/public/images/cup_error.png +0 -0
- data/public/images/cup_go.png +0 -0
- data/public/images/cup_key.png +0 -0
- data/public/images/cup_link.png +0 -0
- data/public/images/cursor.png +0 -0
- data/public/images/cut.png +0 -0
- data/public/images/cut_red.png +0 -0
- data/public/images/database.png +0 -0
- data/public/images/database_add.png +0 -0
- data/public/images/database_connect.png +0 -0
- data/public/images/database_delete.png +0 -0
- data/public/images/database_edit.png +0 -0
- data/public/images/database_error.png +0 -0
- data/public/images/database_gear.png +0 -0
- data/public/images/database_go.png +0 -0
- data/public/images/database_key.png +0 -0
- data/public/images/database_lightning.png +0 -0
- data/public/images/database_link.png +0 -0
- data/public/images/database_refresh.png +0 -0
- data/public/images/database_save.png +0 -0
- data/public/images/database_table.png +0 -0
- data/public/images/date.png +0 -0
- data/public/images/date_add.png +0 -0
- data/public/images/date_delete.png +0 -0
- data/public/images/date_edit.png +0 -0
- data/public/images/date_error.png +0 -0
- data/public/images/date_go.png +0 -0
- data/public/images/date_link.png +0 -0
- data/public/images/date_magnify.png +0 -0
- data/public/images/date_next.png +0 -0
- data/public/images/date_previous.png +0 -0
- data/public/images/delete.png +0 -0
- data/public/images/disconnect.png +0 -0
- data/public/images/disk.png +0 -0
- data/public/images/disk_multiple.png +0 -0
- data/public/images/door.png +0 -0
- data/public/images/door_in.png +0 -0
- data/public/images/door_open.png +0 -0
- data/public/images/door_out.png +0 -0
- data/public/images/drink.png +0 -0
- data/public/images/drink_empty.png +0 -0
- data/public/images/drive.png +0 -0
- data/public/images/drive_add.png +0 -0
- data/public/images/drive_burn.png +0 -0
- data/public/images/drive_cd.png +0 -0
- data/public/images/drive_cd_empty.png +0 -0
- data/public/images/drive_delete.png +0 -0
- data/public/images/drive_disk.png +0 -0
- data/public/images/drive_edit.png +0 -0
- data/public/images/drive_error.png +0 -0
- data/public/images/drive_go.png +0 -0
- data/public/images/drive_key.png +0 -0
- data/public/images/drive_link.png +0 -0
- data/public/images/drive_magnify.png +0 -0
- data/public/images/drive_network.png +0 -0
- data/public/images/drive_rename.png +0 -0
- data/public/images/drive_user.png +0 -0
- data/public/images/drive_web.png +0 -0
- data/public/images/dvd.png +0 -0
- data/public/images/dvd_add.png +0 -0
- data/public/images/dvd_delete.png +0 -0
- data/public/images/dvd_edit.png +0 -0
- data/public/images/dvd_error.png +0 -0
- data/public/images/dvd_go.png +0 -0
- data/public/images/dvd_key.png +0 -0
- data/public/images/dvd_link.png +0 -0
- data/public/images/email.png +0 -0
- data/public/images/email_add.png +0 -0
- data/public/images/email_attach.png +0 -0
- data/public/images/email_delete.png +0 -0
- data/public/images/email_edit.png +0 -0
- data/public/images/email_error.png +0 -0
- data/public/images/email_go.png +0 -0
- data/public/images/email_link.png +0 -0
- data/public/images/email_open.png +0 -0
- data/public/images/email_open_image.png +0 -0
- data/public/images/emoticon_evilgrin.png +0 -0
- data/public/images/emoticon_grin.png +0 -0
- data/public/images/emoticon_happy.png +0 -0
- data/public/images/emoticon_smile.png +0 -0
- data/public/images/emoticon_surprised.png +0 -0
- data/public/images/emoticon_tongue.png +0 -0
- data/public/images/emoticon_unhappy.png +0 -0
- data/public/images/emoticon_waii.png +0 -0
- data/public/images/emoticon_wink.png +0 -0
- data/public/images/error.png +0 -0
- data/public/images/error_add.png +0 -0
- data/public/images/error_delete.png +0 -0
- data/public/images/error_go.png +0 -0
- data/public/images/exclamation.png +0 -0
- data/public/images/ext/contact.png +0 -0
- data/public/images/ext/contact_pv.png +0 -0
- data/public/images/ext/doc.png +0 -0
- data/public/images/ext/doc_tiny.png +0 -0
- data/public/images/ext/jpg.png +0 -0
- data/public/images/ext/jpg_tiny.png +0 -0
- data/public/images/ext/other.png +0 -0
- data/public/images/ext/other_pv.png +0 -0
- data/public/images/ext/other_tiny.png +0 -0
- data/public/images/ext/page.png +0 -0
- data/public/images/ext/page_pv.png +0 -0
- data/public/images/ext/page_tiny.png +0 -0
- data/public/images/ext/pdf.png +0 -0
- data/public/images/ext/pdf_pv.png +0 -0
- data/public/images/ext/pdf_tiny.png +0 -0
- data/public/images/ext/png.png +0 -0
- data/public/images/ext/png_tiny.png +0 -0
- data/public/images/ext/post.png +0 -0
- data/public/images/ext/post_pv.png +0 -0
- data/public/images/ext/post_tiny.png +0 -0
- data/public/images/ext/project.png +0 -0
- data/public/images/ext/project_pv.png +0 -0
- data/public/images/ext/project_tiny.png +0 -0
- data/public/images/ext/rtf.png +0 -0
- data/public/images/ext/rtf_tiny.png +0 -0
- data/public/images/ext/tag.png +0 -0
- data/public/images/ext/tag_pv.png +0 -0
- data/public/images/ext/xls.png +0 -0
- data/public/images/ext/xls_tiny.png +0 -0
- data/public/images/ext/zip.png +0 -0
- data/public/images/ext/zip_pv.png +0 -0
- data/public/images/ext/zip_tiny.png +0 -0
- data/public/images/eye.png +0 -0
- data/public/images/feed.png +0 -0
- data/public/images/feed_add.png +0 -0
- data/public/images/feed_delete.png +0 -0
- data/public/images/feed_disk.png +0 -0
- data/public/images/feed_edit.png +0 -0
- data/public/images/feed_error.png +0 -0
- data/public/images/feed_go.png +0 -0
- data/public/images/feed_key.png +0 -0
- data/public/images/feed_link.png +0 -0
- data/public/images/feed_magnify.png +0 -0
- data/public/images/female.png +0 -0
- data/public/images/film.png +0 -0
- data/public/images/film_add.png +0 -0
- data/public/images/film_delete.png +0 -0
- data/public/images/film_edit.png +0 -0
- data/public/images/film_error.png +0 -0
- data/public/images/film_go.png +0 -0
- data/public/images/film_key.png +0 -0
- data/public/images/film_link.png +0 -0
- data/public/images/film_save.png +0 -0
- data/public/images/find.png +0 -0
- data/public/images/flag_blue.png +0 -0
- data/public/images/flag_green.png +0 -0
- data/public/images/flag_orange.png +0 -0
- data/public/images/flag_pink.png +0 -0
- data/public/images/flag_purple.png +0 -0
- data/public/images/flag_red.png +0 -0
- data/public/images/flag_yellow.png +0 -0
- data/public/images/folder.png +0 -0
- data/public/images/folder_add.png +0 -0
- data/public/images/folder_bell.png +0 -0
- data/public/images/folder_brick.png +0 -0
- data/public/images/folder_bug.png +0 -0
- data/public/images/folder_camera.png +0 -0
- data/public/images/folder_database.png +0 -0
- data/public/images/folder_delete.png +0 -0
- data/public/images/folder_edit.png +0 -0
- data/public/images/folder_error.png +0 -0
- data/public/images/folder_explore.png +0 -0
- data/public/images/folder_feed.png +0 -0
- data/public/images/folder_find.png +0 -0
- data/public/images/folder_go.png +0 -0
- data/public/images/folder_heart.png +0 -0
- data/public/images/folder_image.png +0 -0
- data/public/images/folder_key.png +0 -0
- data/public/images/folder_lightbulb.png +0 -0
- data/public/images/folder_link.png +0 -0
- data/public/images/folder_magnify.png +0 -0
- data/public/images/folder_page.png +0 -0
- data/public/images/folder_page_white.png +0 -0
- data/public/images/folder_palette.png +0 -0
- data/public/images/folder_picture.png +0 -0
- data/public/images/folder_star.png +0 -0
- data/public/images/folder_table.png +0 -0
- data/public/images/folder_user.png +0 -0
- data/public/images/folder_wrench.png +0 -0
- data/public/images/font.png +0 -0
- data/public/images/font_add.png +0 -0
- data/public/images/font_delete.png +0 -0
- data/public/images/font_go.png +0 -0
- data/public/images/group.png +0 -0
- data/public/images/group_add.png +0 -0
- data/public/images/group_admin.png +0 -0
- data/public/images/group_delete.png +0 -0
- data/public/images/group_edit.png +0 -0
- data/public/images/group_error.png +0 -0
- data/public/images/group_gear.png +0 -0
- data/public/images/group_go.png +0 -0
- data/public/images/group_key.png +0 -0
- data/public/images/group_link.png +0 -0
- data/public/images/group_pub.png +0 -0
- data/public/images/group_site.png +0 -0
- data/public/images/heart.png +0 -0
- data/public/images/heart_add.png +0 -0
- data/public/images/heart_delete.png +0 -0
- data/public/images/help.png +0 -0
- data/public/images/home.png +0 -0
- data/public/images/hourglass.png +0 -0
- data/public/images/hourglass_add.png +0 -0
- data/public/images/hourglass_delete.png +0 -0
- data/public/images/hourglass_go.png +0 -0
- data/public/images/hourglass_link.png +0 -0
- data/public/images/house.png +0 -0
- data/public/images/house_go.png +0 -0
- data/public/images/house_link.png +0 -0
- data/public/images/html.png +0 -0
- data/public/images/html_add.png +0 -0
- data/public/images/html_delete.png +0 -0
- data/public/images/html_go.png +0 -0
- data/public/images/html_valid.png +0 -0
- data/public/images/image.png +0 -0
- data/public/images/image_add.png +0 -0
- data/public/images/image_delete.png +0 -0
- data/public/images/image_edit.png +0 -0
- data/public/images/image_link.png +0 -0
- data/public/images/images.png +0 -0
- data/public/images/img_not_found.png +0 -0
- data/public/images/information.png +0 -0
- data/public/images/ipod.png +0 -0
- data/public/images/ipod_cast.png +0 -0
- data/public/images/ipod_cast_add.png +0 -0
- data/public/images/ipod_cast_delete.png +0 -0
- data/public/images/ipod_sound.png +0 -0
- data/public/images/joystick.png +0 -0
- data/public/images/joystick_add.png +0 -0
- data/public/images/joystick_delete.png +0 -0
- data/public/images/joystick_error.png +0 -0
- data/public/images/key.png +0 -0
- data/public/images/key_add.png +0 -0
- data/public/images/key_delete.png +0 -0
- data/public/images/key_go.png +0 -0
- data/public/images/keyboard.png +0 -0
- data/public/images/keyboard_add.png +0 -0
- data/public/images/keyboard_delete.png +0 -0
- data/public/images/keyboard_magnify.png +0 -0
- data/public/images/latex_error.png +0 -0
- data/public/images/layers.png +0 -0
- data/public/images/layout.png +0 -0
- data/public/images/layout_add.png +0 -0
- data/public/images/layout_content.png +0 -0
- data/public/images/layout_delete.png +0 -0
- data/public/images/layout_edit.png +0 -0
- data/public/images/layout_error.png +0 -0
- data/public/images/layout_header.png +0 -0
- data/public/images/layout_link.png +0 -0
- data/public/images/layout_sidebar.png +0 -0
- data/public/images/lightbulb.png +0 -0
- data/public/images/lightbulb_add.png +0 -0
- data/public/images/lightbulb_delete.png +0 -0
- data/public/images/lightbulb_off.png +0 -0
- data/public/images/lightning.png +0 -0
- data/public/images/lightning_add.png +0 -0
- data/public/images/lightning_delete.png +0 -0
- data/public/images/lightning_go.png +0 -0
- data/public/images/link.png +0 -0
- data/public/images/link_add.png +0 -0
- data/public/images/link_break.png +0 -0
- data/public/images/link_delete.png +0 -0
- data/public/images/link_edit.png +0 -0
- data/public/images/link_error.png +0 -0
- data/public/images/link_go.png +0 -0
- data/public/images/lock.png +0 -0
- data/public/images/lock_add.png +0 -0
- data/public/images/lock_break.png +0 -0
- data/public/images/lock_delete.png +0 -0
- data/public/images/lock_edit.png +0 -0
- data/public/images/lock_go.png +0 -0
- data/public/images/lock_open.png +0 -0
- data/public/images/lorry.png +0 -0
- data/public/images/lorry_add.png +0 -0
- data/public/images/lorry_delete.png +0 -0
- data/public/images/lorry_error.png +0 -0
- data/public/images/lorry_flatbed.png +0 -0
- data/public/images/lorry_go.png +0 -0
- data/public/images/lorry_link.png +0 -0
- data/public/images/magifier_zoom_out.png +0 -0
- data/public/images/magnifier.png +0 -0
- data/public/images/magnifier_zoom_in.png +0 -0
- data/public/images/male.png +0 -0
- data/public/images/map.png +0 -0
- data/public/images/map_add.png +0 -0
- data/public/images/map_delete.png +0 -0
- data/public/images/map_edit.png +0 -0
- data/public/images/map_go.png +0 -0
- data/public/images/map_magnify.png +0 -0
- data/public/images/medal_bronze_1.png +0 -0
- data/public/images/medal_bronze_2.png +0 -0
- data/public/images/medal_bronze_3.png +0 -0
- data/public/images/medal_bronze_add.png +0 -0
- data/public/images/medal_bronze_delete.png +0 -0
- data/public/images/medal_gold_1.png +0 -0
- data/public/images/medal_gold_2.png +0 -0
- data/public/images/medal_gold_3.png +0 -0
- data/public/images/medal_gold_add.png +0 -0
- data/public/images/medal_gold_delete.png +0 -0
- data/public/images/medal_silver_1.png +0 -0
- data/public/images/medal_silver_2.png +0 -0
- data/public/images/medal_silver_3.png +0 -0
- data/public/images/medal_silver_add.png +0 -0
- data/public/images/medal_silver_delete.png +0 -0
- data/public/images/money.png +0 -0
- data/public/images/money_add.png +0 -0
- data/public/images/money_delete.png +0 -0
- data/public/images/money_dollar.png +0 -0
- data/public/images/money_euro.png +0 -0
- data/public/images/money_pound.png +0 -0
- data/public/images/money_yen.png +0 -0
- data/public/images/monitor.png +0 -0
- data/public/images/monitor_add.png +0 -0
- data/public/images/monitor_delete.png +0 -0
- data/public/images/monitor_edit.png +0 -0
- data/public/images/monitor_error.png +0 -0
- data/public/images/monitor_go.png +0 -0
- data/public/images/monitor_lightning.png +0 -0
- data/public/images/monitor_link.png +0 -0
- data/public/images/mouse.png +0 -0
- data/public/images/mouse_add.png +0 -0
- data/public/images/mouse_delete.png +0 -0
- data/public/images/mouse_error.png +0 -0
- data/public/images/music.png +0 -0
- data/public/images/new.png +0 -0
- data/public/images/newspaper.png +0 -0
- data/public/images/newspaper_add.png +0 -0
- data/public/images/newspaper_delete.png +0 -0
- data/public/images/newspaper_go.png +0 -0
- data/public/images/newspaper_link.png +0 -0
- data/public/images/note.png +0 -0
- data/public/images/note_add.png +0 -0
- data/public/images/note_delete.png +0 -0
- data/public/images/note_edit.png +0 -0
- data/public/images/note_error.png +0 -0
- data/public/images/note_go.png +0 -0
- data/public/images/overlays.png +0 -0
- data/public/images/package.png +0 -0
- data/public/images/package_add.png +0 -0
- data/public/images/package_delete.png +0 -0
- data/public/images/package_go.png +0 -0
- data/public/images/package_green.png +0 -0
- data/public/images/package_link.png +0 -0
- data/public/images/page.png +0 -0
- data/public/images/page_add.png +0 -0
- data/public/images/page_attach.png +0 -0
- data/public/images/page_code.png +0 -0
- data/public/images/page_copy.png +0 -0
- data/public/images/page_delete.png +0 -0
- data/public/images/page_edit.png +0 -0
- data/public/images/page_error.png +0 -0
- data/public/images/page_excel.png +0 -0
- data/public/images/page_find.png +0 -0
- data/public/images/page_gear.png +0 -0
- data/public/images/page_go.png +0 -0
- data/public/images/page_green.png +0 -0
- data/public/images/page_key.png +0 -0
- data/public/images/page_lightning.png +0 -0
- data/public/images/page_link.png +0 -0
- data/public/images/page_paintbrush.png +0 -0
- data/public/images/page_paste.png +0 -0
- data/public/images/page_red.png +0 -0
- data/public/images/page_refresh.png +0 -0
- data/public/images/page_save.png +0 -0
- data/public/images/page_white.png +0 -0
- data/public/images/page_white_acrobat.png +0 -0
- data/public/images/page_white_actionscript.png +0 -0
- data/public/images/page_white_add.png +0 -0
- data/public/images/page_white_c.png +0 -0
- data/public/images/page_white_camera.png +0 -0
- data/public/images/page_white_cd.png +0 -0
- data/public/images/page_white_code.png +0 -0
- data/public/images/page_white_code_red.png +0 -0
- data/public/images/page_white_coldfusion.png +0 -0
- data/public/images/page_white_compressed.png +0 -0
- data/public/images/page_white_copy.png +0 -0
- data/public/images/page_white_cplusplus.png +0 -0
- data/public/images/page_white_csharp.png +0 -0
- data/public/images/page_white_cup.png +0 -0
- data/public/images/page_white_database.png +0 -0
- data/public/images/page_white_delete.png +0 -0
- data/public/images/page_white_dvd.png +0 -0
- data/public/images/page_white_edit.png +0 -0
- data/public/images/page_white_error.png +0 -0
- data/public/images/page_white_excel.png +0 -0
- data/public/images/page_white_find.png +0 -0
- data/public/images/page_white_flash.png +0 -0
- data/public/images/page_white_freehand.png +0 -0
- data/public/images/page_white_gear.png +0 -0
- data/public/images/page_white_get.png +0 -0
- data/public/images/page_white_go.png +0 -0
- data/public/images/page_white_h.png +0 -0
- data/public/images/page_white_horizontal.png +0 -0
- data/public/images/page_white_key.png +0 -0
- data/public/images/page_white_lightning.png +0 -0
- data/public/images/page_white_link.png +0 -0
- data/public/images/page_white_magnify.png +0 -0
- data/public/images/page_white_medal.png +0 -0
- data/public/images/page_white_office.png +0 -0
- data/public/images/page_white_paint.png +0 -0
- data/public/images/page_white_paintbrush.png +0 -0
- data/public/images/page_white_paste.png +0 -0
- data/public/images/page_white_php.png +0 -0
- data/public/images/page_white_picture.png +0 -0
- data/public/images/page_white_powerpoint.png +0 -0
- data/public/images/page_white_put.png +0 -0
- data/public/images/page_white_ruby.png +0 -0
- data/public/images/page_white_stack.png +0 -0
- data/public/images/page_white_star.png +0 -0
- data/public/images/page_white_swoosh.png +0 -0
- data/public/images/page_white_text.png +0 -0
- data/public/images/page_white_text_width.png +0 -0
- data/public/images/page_white_tux.png +0 -0
- data/public/images/page_white_vector.png +0 -0
- data/public/images/page_white_visualstudio.png +0 -0
- data/public/images/page_white_width.png +0 -0
- data/public/images/page_white_word.png +0 -0
- data/public/images/page_white_world.png +0 -0
- data/public/images/page_white_wrench.png +0 -0
- data/public/images/page_white_zip.png +0 -0
- data/public/images/page_word.png +0 -0
- data/public/images/page_world.png +0 -0
- data/public/images/paintbrush.png +0 -0
- data/public/images/paintcan.png +0 -0
- data/public/images/palette.png +0 -0
- data/public/images/paste_plain.png +0 -0
- data/public/images/paste_word.png +0 -0
- data/public/images/pencil.png +0 -0
- data/public/images/pencil_add.png +0 -0
- data/public/images/pencil_delete.png +0 -0
- data/public/images/pencil_go.png +0 -0
- data/public/images/phone.png +0 -0
- data/public/images/phone_add.png +0 -0
- data/public/images/phone_delete.png +0 -0
- data/public/images/phone_sound.png +0 -0
- data/public/images/photo.png +0 -0
- data/public/images/photo_add.png +0 -0
- data/public/images/photo_blue.png +0 -0
- data/public/images/photo_delete.png +0 -0
- data/public/images/photo_grey.png +0 -0
- data/public/images/photo_link.png +0 -0
- data/public/images/photos.png +0 -0
- data/public/images/picture.png +0 -0
- data/public/images/picture_add.png +0 -0
- data/public/images/picture_delete.png +0 -0
- data/public/images/picture_edit.png +0 -0
- data/public/images/picture_empty.png +0 -0
- data/public/images/picture_error.png +0 -0
- data/public/images/picture_go.png +0 -0
- data/public/images/picture_key.png +0 -0
- data/public/images/picture_link.png +0 -0
- data/public/images/picture_save.png +0 -0
- data/public/images/pictures.png +0 -0
- data/public/images/pilcrow.png +0 -0
- data/public/images/pill.png +0 -0
- data/public/images/pill_add.png +0 -0
- data/public/images/pill_delete.png +0 -0
- data/public/images/pill_go.png +0 -0
- data/public/images/plugin.png +0 -0
- data/public/images/plugin_add.png +0 -0
- data/public/images/plugin_delete.png +0 -0
- data/public/images/plugin_disabled.png +0 -0
- data/public/images/plugin_edit.png +0 -0
- data/public/images/plugin_error.png +0 -0
- data/public/images/plugin_go.png +0 -0
- data/public/images/plugin_link.png +0 -0
- data/public/images/printer.png +0 -0
- data/public/images/printer_add.png +0 -0
- data/public/images/printer_delete.png +0 -0
- data/public/images/printer_empty.png +0 -0
- data/public/images/printer_error.png +0 -0
- data/public/images/project.png +0 -0
- data/public/images/rails.png +0 -0
- data/public/images/rainbow.png +0 -0
- data/public/images/report.png +0 -0
- data/public/images/report_add.png +0 -0
- data/public/images/report_delete.png +0 -0
- data/public/images/report_disk.png +0 -0
- data/public/images/report_edit.png +0 -0
- data/public/images/report_go.png +0 -0
- data/public/images/report_key.png +0 -0
- data/public/images/report_link.png +0 -0
- data/public/images/report_magnify.png +0 -0
- data/public/images/report_picture.png +0 -0
- data/public/images/report_user.png +0 -0
- data/public/images/report_word.png +0 -0
- data/public/images/resultset_first.png +0 -0
- data/public/images/resultset_last.png +0 -0
- data/public/images/resultset_next.png +0 -0
- data/public/images/resultset_previous.png +0 -0
- data/public/images/rosette.png +0 -0
- data/public/images/row_add.png +0 -0
- data/public/images/row_delete.png +0 -0
- data/public/images/rss.png +0 -0
- data/public/images/rss_add.png +0 -0
- data/public/images/rss_delete.png +0 -0
- data/public/images/rss_go.png +0 -0
- data/public/images/rss_valid.png +0 -0
- data/public/images/ruby.png +0 -0
- data/public/images/ruby_add.png +0 -0
- data/public/images/ruby_delete.png +0 -0
- data/public/images/ruby_gear.png +0 -0
- data/public/images/ruby_get.png +0 -0
- data/public/images/ruby_go.png +0 -0
- data/public/images/ruby_key.png +0 -0
- data/public/images/ruby_link.png +0 -0
- data/public/images/ruby_put.png +0 -0
- data/public/images/script.png +0 -0
- data/public/images/script_add.png +0 -0
- data/public/images/script_code.png +0 -0
- data/public/images/script_code_red.png +0 -0
- data/public/images/script_delete.png +0 -0
- data/public/images/script_edit.png +0 -0
- data/public/images/script_error.png +0 -0
- data/public/images/script_gear.png +0 -0
- data/public/images/script_go.png +0 -0
- data/public/images/script_key.png +0 -0
- data/public/images/script_lightning.png +0 -0
- data/public/images/script_link.png +0 -0
- data/public/images/script_palette.png +0 -0
- data/public/images/script_save.png +0 -0
- data/public/images/server.png +0 -0
- data/public/images/server_add.png +0 -0
- data/public/images/server_chart.png +0 -0
- data/public/images/server_compressed.png +0 -0
- data/public/images/server_connect.png +0 -0
- data/public/images/server_database.png +0 -0
- data/public/images/server_delete.png +0 -0
- data/public/images/server_edit.png +0 -0
- data/public/images/server_error.png +0 -0
- data/public/images/server_go.png +0 -0
- data/public/images/server_key.png +0 -0
- data/public/images/server_lightning.png +0 -0
- data/public/images/server_link.png +0 -0
- data/public/images/server_uncompressed.png +0 -0
- data/public/images/shading.png +0 -0
- data/public/images/shape_align_bottom.png +0 -0
- data/public/images/shape_align_center.png +0 -0
- data/public/images/shape_align_left.png +0 -0
- data/public/images/shape_align_middle.png +0 -0
- data/public/images/shape_align_right.png +0 -0
- data/public/images/shape_align_top.png +0 -0
- data/public/images/shape_flip_horizontal.png +0 -0
- data/public/images/shape_flip_vertical.png +0 -0
- data/public/images/shape_group.png +0 -0
- data/public/images/shape_handles.png +0 -0
- data/public/images/shape_move_back.png +0 -0
- data/public/images/shape_move_backwards.png +0 -0
- data/public/images/shape_move_forwards.png +0 -0
- data/public/images/shape_move_front.png +0 -0
- data/public/images/shape_rotate_anticlockwise.png +0 -0
- data/public/images/shape_rotate_clockwise.png +0 -0
- data/public/images/shape_square.png +0 -0
- data/public/images/shape_square_add.png +0 -0
- data/public/images/shape_square_delete.png +0 -0
- data/public/images/shape_square_edit.png +0 -0
- data/public/images/shape_square_error.png +0 -0
- data/public/images/shape_square_go.png +0 -0
- data/public/images/shape_square_key.png +0 -0
- data/public/images/shape_square_link.png +0 -0
- data/public/images/shape_ungroup.png +0 -0
- data/public/images/shield.png +0 -0
- data/public/images/shield_add.png +0 -0
- data/public/images/shield_delete.png +0 -0
- data/public/images/shield_go.png +0 -0
- data/public/images/silk.html +1495 -0
- data/public/images/sitemap.png +0 -0
- data/public/images/sitemap_color.png +0 -0
- data/public/images/sound.png +0 -0
- data/public/images/sound_add.png +0 -0
- data/public/images/sound_delete.png +0 -0
- data/public/images/sound_low.png +0 -0
- data/public/images/sound_mute.png +0 -0
- data/public/images/sound_none.png +0 -0
- data/public/images/spellcheck.png +0 -0
- data/public/images/sport_8ball.png +0 -0
- data/public/images/sport_basketball.png +0 -0
- data/public/images/sport_football.png +0 -0
- data/public/images/sport_golf.png +0 -0
- data/public/images/sport_raquet.png +0 -0
- data/public/images/sport_shuttlecock.png +0 -0
- data/public/images/sport_soccer.png +0 -0
- data/public/images/sport_tennis.png +0 -0
- data/public/images/star.png +0 -0
- data/public/images/status_away.png +0 -0
- data/public/images/status_busy.png +0 -0
- data/public/images/status_offline.png +0 -0
- data/public/images/status_online.png +0 -0
- data/public/images/stop.png +0 -0
- data/public/images/style.png +0 -0
- data/public/images/style_add.png +0 -0
- data/public/images/style_delete.png +0 -0
- data/public/images/style_edit.png +0 -0
- data/public/images/style_go.png +0 -0
- data/public/images/sum.png +0 -0
- data/public/images/swf/xspf/Main.as +55 -0
- data/public/images/swf/xspf/com/zuardi/musicplayer/MusicButton.as +557 -0
- data/public/images/swf/xspf/com/zuardi/musicplayer/MusicPlayer.as +118 -0
- data/public/images/swf/xspf/com/zuardi/musicplayer/Playlist.as +127 -0
- data/public/images/swf/xspf/com/zuardi/musicplayer/ProgressiveSlider.as +66 -0
- data/public/images/swf/xspf/license.txt +10 -0
- data/public/images/swf/xspf/musicplayer.swf +0 -0
- data/public/images/swf/xspf/musicplayer_f6.swf +0 -0
- data/public/images/swf/xspf/musicplayerbtn.fla +0 -0
- data/public/images/swf/xspf/parameters.as +39 -0
- data/public/images/tab.png +0 -0
- data/public/images/tab_add.png +0 -0
- data/public/images/tab_delete.png +0 -0
- data/public/images/tab_edit.png +0 -0
- data/public/images/tab_go.png +0 -0
- data/public/images/table.png +0 -0
- data/public/images/table_add.png +0 -0
- data/public/images/table_delete.png +0 -0
- data/public/images/table_edit.png +0 -0
- data/public/images/table_error.png +0 -0
- data/public/images/table_gear.png +0 -0
- data/public/images/table_go.png +0 -0
- data/public/images/table_key.png +0 -0
- data/public/images/table_lightning.png +0 -0
- data/public/images/table_link.png +0 -0
- data/public/images/table_multiple.png +0 -0
- data/public/images/table_refresh.png +0 -0
- data/public/images/table_relationship.png +0 -0
- data/public/images/table_row_delete.png +0 -0
- data/public/images/table_row_insert.png +0 -0
- data/public/images/table_save.png +0 -0
- data/public/images/table_sort.png +0 -0
- data/public/images/tag.png +0 -0
- data/public/images/tag_blue.png +0 -0
- data/public/images/tag_blue_add.png +0 -0
- data/public/images/tag_blue_delete.png +0 -0
- data/public/images/tag_blue_edit.png +0 -0
- data/public/images/tag_green.png +0 -0
- data/public/images/tag_orange.png +0 -0
- data/public/images/tag_pink.png +0 -0
- data/public/images/tag_purple.png +0 -0
- data/public/images/tag_red.png +0 -0
- data/public/images/tag_yellow.png +0 -0
- data/public/images/target.png +0 -0
- data/public/images/telephone.png +0 -0
- data/public/images/telephone_add.png +0 -0
- data/public/images/telephone_delete.png +0 -0
- data/public/images/telephone_edit.png +0 -0
- data/public/images/telephone_error.png +0 -0
- data/public/images/telephone_go.png +0 -0
- data/public/images/telephone_key.png +0 -0
- data/public/images/telephone_link.png +0 -0
- data/public/images/television.png +0 -0
- data/public/images/television_add.png +0 -0
- data/public/images/television_delete.png +0 -0
- data/public/images/text_align_center.png +0 -0
- data/public/images/text_align_justify.png +0 -0
- data/public/images/text_align_left.png +0 -0
- data/public/images/text_align_right.png +0 -0
- data/public/images/text_allcaps.png +0 -0
- data/public/images/text_bold.png +0 -0
- data/public/images/text_columns.png +0 -0
- data/public/images/text_dropcaps.png +0 -0
- data/public/images/text_heading_1.png +0 -0
- data/public/images/text_heading_2.png +0 -0
- data/public/images/text_heading_3.png +0 -0
- data/public/images/text_heading_4.png +0 -0
- data/public/images/text_heading_5.png +0 -0
- data/public/images/text_heading_6.png +0 -0
- data/public/images/text_horizontalrule.png +0 -0
- data/public/images/text_indent.png +0 -0
- data/public/images/text_indent_remove.png +0 -0
- data/public/images/text_italic.png +0 -0
- data/public/images/text_kerning.png +0 -0
- data/public/images/text_letter_omega.png +0 -0
- data/public/images/text_letterspacing.png +0 -0
- data/public/images/text_linespacing.png +0 -0
- data/public/images/text_list_bullets.png +0 -0
- data/public/images/text_list_numbers.png +0 -0
- data/public/images/text_lowercase.png +0 -0
- data/public/images/text_padding_bottom.png +0 -0
- data/public/images/text_padding_left.png +0 -0
- data/public/images/text_padding_right.png +0 -0
- data/public/images/text_padding_top.png +0 -0
- data/public/images/text_replace.png +0 -0
- data/public/images/text_signature.png +0 -0
- data/public/images/text_smallcaps.png +0 -0
- data/public/images/text_strikethrough.png +0 -0
- data/public/images/text_subscript.png +0 -0
- data/public/images/text_superscript.png +0 -0
- data/public/images/text_underline.png +0 -0
- data/public/images/text_uppercase.png +0 -0
- data/public/images/textfield.png +0 -0
- data/public/images/textfield_add.png +0 -0
- data/public/images/textfield_delete.png +0 -0
- data/public/images/textfield_key.png +0 -0
- data/public/images/textfield_rename.png +0 -0
- data/public/images/thumb_down.png +0 -0
- data/public/images/thumb_up.png +0 -0
- data/public/images/tick.png +0 -0
- data/public/images/time.png +0 -0
- data/public/images/time_add.png +0 -0
- data/public/images/time_delete.png +0 -0
- data/public/images/time_go.png +0 -0
- data/public/images/timeline_marker.png +0 -0
- data/public/images/transmit.png +0 -0
- data/public/images/transmit_add.png +0 -0
- data/public/images/transmit_blue.png +0 -0
- data/public/images/transmit_delete.png +0 -0
- data/public/images/transmit_edit.png +0 -0
- data/public/images/transmit_error.png +0 -0
- data/public/images/transmit_go.png +0 -0
- data/public/images/tux.png +0 -0
- data/public/images/user.png +0 -0
- data/public/images/user_add.png +0 -0
- data/public/images/user_admin.png +0 -0
- data/public/images/user_comment.png +0 -0
- data/public/images/user_delete.png +0 -0
- data/public/images/user_edit.png +0 -0
- data/public/images/user_female.png +0 -0
- data/public/images/user_go.png +0 -0
- data/public/images/user_gray.png +0 -0
- data/public/images/user_green.png +0 -0
- data/public/images/user_orange.png +0 -0
- data/public/images/user_pub.png +0 -0
- data/public/images/user_red.png +0 -0
- data/public/images/user_su.png +0 -0
- data/public/images/user_suit.png +0 -0
- data/public/images/validate.png +0 -0
- data/public/images/valider.png +0 -0
- data/public/images/vcard.png +0 -0
- data/public/images/vcard_add.png +0 -0
- data/public/images/vcard_delete.png +0 -0
- data/public/images/vcard_edit.png +0 -0
- data/public/images/vector.png +0 -0
- data/public/images/vector_add.png +0 -0
- data/public/images/vector_delete.png +0 -0
- data/public/images/wand.png +0 -0
- data/public/images/weather_clouds.png +0 -0
- data/public/images/weather_cloudy.png +0 -0
- data/public/images/weather_lightning.png +0 -0
- data/public/images/weather_rain.png +0 -0
- data/public/images/weather_snow.png +0 -0
- data/public/images/weather_sun.png +0 -0
- data/public/images/webcam.png +0 -0
- data/public/images/webcam_add.png +0 -0
- data/public/images/webcam_delete.png +0 -0
- data/public/images/webcam_error.png +0 -0
- data/public/images/world.png +0 -0
- data/public/images/world_add.png +0 -0
- data/public/images/world_delete.png +0 -0
- data/public/images/world_edit.png +0 -0
- data/public/images/world_go.png +0 -0
- data/public/images/world_link.png +0 -0
- data/public/images/wrench.png +0 -0
- data/public/images/wrench_orange.png +0 -0
- data/public/images/xhtml.png +0 -0
- data/public/images/xhtml_add.png +0 -0
- data/public/images/xhtml_delete.png +0 -0
- data/public/images/xhtml_go.png +0 -0
- data/public/images/xhtml_valid.png +0 -0
- data/public/images/zoom.png +0 -0
- data/public/images/zoom_in.png +0 -0
- data/public/images/zoom_out.png +0 -0
- data/public/img/logo.png +0 -0
- data/public/javascripts/application.js +2 -0
- data/public/javascripts/builder.js +136 -0
- data/public/javascripts/controls.js +965 -0
- data/public/javascripts/dragdrop.js +975 -0
- data/public/javascripts/effects.js +1130 -0
- data/public/javascripts/prototype.js +4320 -0
- data/public/javascripts/scriptaculous.js +60 -0
- data/public/javascripts/slider.js +275 -0
- data/public/javascripts/sound.js +55 -0
- data/public/javascripts/tablekit.js +965 -0
- data/public/javascripts/unittest.js +568 -0
- data/public/javascripts/upload-progress.js +133 -0
- data/public/javascripts/zena.js +501 -0
- data/public/robots.txt +1 -0
- data/public/stylesheets/admin.css +77 -0
- data/public/stylesheets/calendar.css +55 -0
- data/public/stylesheets/code.css +67 -0
- data/public/stylesheets/comment.css +43 -0
- data/public/stylesheets/csshover2.htc +121 -0
- data/public/stylesheets/default.css +85 -0
- data/public/stylesheets/popup.css +200 -0
- data/public/stylesheets/reset.css +33 -0
- data/public/stylesheets/search.css +19 -0
- data/public/stylesheets/upload-progress.css +4 -0
- data/public/stylesheets/wiki.css +100 -0
- data/public/stylesheets/zen.css +230 -0
- data/public/stylesheets/zena.css +78 -0
- data/rails/init.rb +2 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +34 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +292 -0
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +40 -0
- data/tasks/zentest.rake +36 -0
- data/test/fixtures/comments.yml +126 -0
- data/test/fixtures/contact_contents.yml +132 -0
- data/test/fixtures/data_entries.yml +65 -0
- data/test/fixtures/discussions.yml +48 -0
- data/test/fixtures/document_contents.yml +108 -0
- data/test/fixtures/dyn_attributes.yml +66 -0
- data/test/fixtures/files/Node-test.zafu +307 -0
- data/test/fixtures/files/bird.jpg +0 -0
- data/test/fixtures/files/bomb.png +0 -0
- data/test/fixtures/files/exif_sample.jpg +0 -0
- data/test/fixtures/files/flower.jpg +0 -0
- data/test/fixtures/files/forest.pdf +0 -0
- data/test/fixtures/files/import.tgz +0 -0
- data/test/fixtures/files/jet_30.zip +0 -0
- data/test/fixtures/files/lake.jpg +0 -0
- data/test/fixtures/files/letter.zip +0 -0
- data/test/fixtures/files/other.txt +1 -0
- data/test/fixtures/files/simple.zml.gz +0 -0
- data/test/fixtures/files/some.txt +1 -0
- data/test/fixtures/files/translations_de.yml +4 -0
- data/test/fixtures/files/translations_fr.yml +4 -0
- data/test/fixtures/files/tree.jpg +0 -0
- data/test/fixtures/files/water.pdf +0 -0
- data/test/fixtures/groups.yml +86 -0
- data/test/fixtures/groups_users.yml +81 -0
- data/test/fixtures/iformats.yml +28 -0
- data/test/fixtures/import/photos.en.zml +11 -0
- data/test/fixtures/import/photos/bird.jpg +0 -0
- data/test/fixtures/import/photos/bird.jpg.en.zml +1 -0
- data/test/fixtures/import/photos/bird.jpg.fr.zml +1 -0
- data/test/fixtures/import/photos/document.yml.en +4 -0
- data/test/fixtures/import/photos/document.yml.fr +4 -0
- data/test/fixtures/import/simple.zml +8 -0
- data/test/fixtures/links.yml +313 -0
- data/test/fixtures/nodes.yml +2592 -0
- data/test/fixtures/relations.yml +126 -0
- data/test/fixtures/sites.yml +58 -0
- data/test/fixtures/template_contents.yml +172 -0
- data/test/fixtures/users.yml +167 -0
- data/test/fixtures/versions.yml +1909 -0
- data/test/fixtures/virtual_classes.yml +87 -0
- data/test/fixtures/zips.yml +15 -0
- data/test/functional/application_controller_test.rb +136 -0
- data/test/functional/calendar_controller_test.rb +25 -0
- data/test/functional/comments_controller_test.rb +59 -0
- data/test/functional/data_entries_controller_test.rb +22 -0
- data/test/functional/discussion_controller_test.rb +20 -0
- data/test/functional/documents_controller_test.rb +155 -0
- data/test/functional/groups_controller_test.rb +109 -0
- data/test/functional/iformats_controller_test.rb +115 -0
- data/test/functional/links_controller_test.rb +26 -0
- data/test/functional/nodes_controller_test.rb +448 -0
- data/test/functional/note_controller_test.rb +53 -0
- data/test/functional/preferences_controller_test.rb +11 -0
- data/test/functional/relations_controller_test.rb +55 -0
- data/test/functional/search_controller_test.rb +41 -0
- data/test/functional/sessions_controller_test.rb +73 -0
- data/test/functional/sites_controller_test.rb +102 -0
- data/test/functional/users_controller_test.rb +28 -0
- data/test/functional/versions_controller_test.rb +99 -0
- data/test/functional/virtual_classes_controller_test.rb +62 -0
- data/test/helpers/node_query/basic.yml +149 -0
- data/test/helpers/node_query/comments.yml +18 -0
- data/test/helpers/node_query/complex.yml +98 -0
- data/test/helpers/node_query/filters.yml +105 -0
- data/test/helpers/node_query/relations.yml +43 -0
- data/test/helpers/node_query_test.rb +117 -0
- data/test/integration/multiple_hosts_test.rb +98 -0
- data/test/integration/multiversion_test.rb +164 -0
- data/test/integration/navigation_test.rb +283 -0
- data/test/sites/README +2 -0
- data/test/sites/complex/complex.png +0 -0
- data/test/sites/complex/groups.yml +9 -0
- data/test/sites/complex/links.yml +75 -0
- data/test/sites/complex/nodes.yml +253 -0
- data/test/sites/complex/relations.yml +11 -0
- data/test/sites/complex/sites.yml +13 -0
- data/test/sites/complex/users.yml +20 -0
- data/test/sites/complex/versions.yml +1 -0
- data/test/sites/complex/virtual_classes.yml +19 -0
- data/test/sites/ocean/contact_contents.yml +19 -0
- data/test/sites/ocean/groups.yml +9 -0
- data/test/sites/ocean/iformats.yml +7 -0
- data/test/sites/ocean/nodes.yml +36 -0
- data/test/sites/ocean/sites.yml +14 -0
- data/test/sites/ocean/template_contents.yml +8 -0
- data/test/sites/ocean/users.yml +33 -0
- data/test/sites/ocean/versions.yml +48 -0
- data/test/sites/zena/comments.yml +82 -0
- data/test/sites/zena/contact_contents.yml +55 -0
- data/test/sites/zena/data_entries.yml +42 -0
- data/test/sites/zena/discussions.yml +30 -0
- data/test/sites/zena/document_contents.yml +76 -0
- data/test/sites/zena/dyn_attributes.yml +43 -0
- data/test/sites/zena/groups.yml +11 -0
- data/test/sites/zena/iformats.yml +6 -0
- data/test/sites/zena/links.yml +49 -0
- data/test/sites/zena/nodes.yml +338 -0
- data/test/sites/zena/relations.yml +66 -0
- data/test/sites/zena/sites.yml +13 -0
- data/test/sites/zena/template_contents.yml +103 -0
- data/test/sites/zena/users.yml +48 -0
- data/test/sites/zena/versions.yml +558 -0
- data/test/sites/zena/virtual_classes.yml +23 -0
- data/test/test_helper.rb +62 -0
- data/test/test_zena.rb +138 -0
- data/test/unit/cache_test.rb +62 -0
- data/test/unit/cached_page_test.rb +165 -0
- data/test/unit/comment_test.rb +185 -0
- data/test/unit/contact_content_test.rb +33 -0
- data/test/unit/contact_test.rb +39 -0
- data/test/unit/contact_version_test.rb +48 -0
- data/test/unit/core_ext_test.rb +48 -0
- data/test/unit/data_entry_test.rb +92 -0
- data/test/unit/discussion_test.rb +59 -0
- data/test/unit/document_content_test.rb +110 -0
- data/test/unit/document_test.rb +234 -0
- data/test/unit/document_version_test.rb +11 -0
- data/test/unit/dyn_attributes_test.rb +229 -0
- data/test/unit/exif_data_test.rb +66 -0
- data/test/unit/group_test.rb +142 -0
- data/test/unit/iformat_test.rb +190 -0
- data/test/unit/image_builder_test.rb +214 -0
- data/test/unit/image_content_test.rb +154 -0
- data/test/unit/image_test.rb +311 -0
- data/test/unit/image_version_test.rb +18 -0
- data/test/unit/letter_test.rb +9 -0
- data/test/unit/link_test.rb +32 -0
- data/test/unit/multiversion_test.rb +1008 -0
- data/test/unit/node_test.rb +1578 -0
- data/test/unit/note_test.rb +85 -0
- data/test/unit/page_test.rb +79 -0
- data/test/unit/project_test.rb +32 -0
- data/test/unit/reference_test.rb +9 -0
- data/test/unit/relation_proxy_test.rb +409 -0
- data/test/unit/relation_test.rb +48 -0
- data/test/unit/section_test.rb +32 -0
- data/test/unit/secure_test.rb +939 -0
- data/test/unit/site_test.rb +236 -0
- data/test/unit/skin_test.rb +18 -0
- data/test/unit/template_content_test.rb +9 -0
- data/test/unit/template_test.rb +357 -0
- data/test/unit/template_version_test.rb +7 -0
- data/test/unit/text_document_content_test.rb +8 -0
- data/test/unit/text_document_test.rb +139 -0
- data/test/unit/text_document_version_test.rb +37 -0
- data/test/unit/user_test.rb +295 -0
- data/test/unit/version_test.rb +312 -0
- data/test/unit/virtual_class_test.rb +242 -0
- data/test/unit/zena/db_test.rb +94 -0
- data/test/unit/zena/parser/latex.yml +14 -0
- data/test/unit/zena/parser/zafu.yml +391 -0
- data/test/unit/zena/parser/zafu_asset.yml +43 -0
- data/test/unit/zena/parser/zafu_insight.yml +3 -0
- data/test/unit/zena/parser/zazen.yml +211 -0
- data/test/unit/zena/parser_test.rb +184 -0
- data/test/unit/zena/unit/test_case_test.rb +12 -0
- data/test/unit/zena/use/calendar_test.rb +49 -0
- data/test/unit/zena/use/dates_model_methods_test.rb +41 -0
- data/test/unit/zena/use/dates_string_methods_test.rb +94 -0
- data/test/unit/zena/use/dates_view_methods_test.rb +158 -0
- data/test/unit/zena/use/html_tags_test.rb +244 -0
- data/test/unit/zena/use/i18n_test.rb +34 -0
- data/test/unit/zena/use/nested_attributes_alias_model_test.rb +104 -0
- data/test/unit/zena/use/nested_attributes_alias_view_test.rb +99 -0
- data/test/unit/zena/use/refactor_test.rb +52 -0
- data/test/unit/zena/use/rendering_test.rb +23 -0
- data/test/unit/zena/use/urls_test.rb +119 -0
- data/test/unit/zena/use/zafu_test.rb +21 -0
- data/test/unit/zena/use/zazen_test.rb +230 -0
- data/test/unit/zena/zena_tags/ajax.yml +233 -0
- data/test/unit/zena/zena_tags/apphelper.yml +85 -0
- data/test/unit/zena/zena_tags/basic.yml +1295 -0
- data/test/unit/zena/zena_tags/complex.yml +249 -0
- data/test/unit/zena/zena_tags/data.yml +73 -0
- data/test/unit/zena/zena_tags/errors.yml +71 -0
- data/test/unit/zena/zena_tags/eval.yml +51 -0
- data/test/unit/zena/zena_tags/relations.yml +411 -0
- data/test/unit/zena/zena_tags/zazen.yml +84 -0
- data/test/unit/zena/zena_tags_test.rb +235 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +24 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +58 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +88 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +27 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +23 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +19 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +19 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +17 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +17 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +22 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +23 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +25 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +20 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +20 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +18 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +16 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +104 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +17 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +13 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +25 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +166 -0
- data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +304 -0
- data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +37 -0
- data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +53 -0
- data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +74 -0
- data/vendor/TextMate/Zena.tmbundle/info.plist +15 -0
- data/vendor/apache_upload/mod_upload_progress.c +813 -0
- data/vendor/bricks/20070122-172926.txt +282 -0
- data/vendor/plugins/ar_mysql_full_text/README +15 -0
- data/vendor/plugins/ar_mysql_full_text/init.rb +1 -0
- data/vendor/plugins/ar_mysql_full_text/lib/ar_mysql_full_text.rb +69 -0
- data/vendor/plugins/gettext_i18n_rails/README.markdown +139 -0
- data/vendor/plugins/gettext_i18n_rails/Rakefile +6 -0
- data/vendor/plugins/gettext_i18n_rails/init.rb +10 -0
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails.rb +21 -0
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/action_controller.rb +6 -0
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/active_record.rb +17 -0
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/backend.rb +47 -0
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/haml_parser.rb +43 -0
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/i18n_hacks.rb +10 -0
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/model_attributes_finder.rb +46 -0
- data/vendor/plugins/gettext_i18n_rails/lib/gettext_i18n_rails/ruby_gettext_extractor.rb +136 -0
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/action_controller_spec.rb +36 -0
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/active_record_spec.rb +50 -0
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails/backend_spec.rb +41 -0
- data/vendor/plugins/gettext_i18n_rails/spec/gettext_i18n_rails_spec.rb +43 -0
- data/vendor/plugins/gettext_i18n_rails/spec/spec_helper.rb +15 -0
- data/vendor/plugins/gettext_i18n_rails/tasks/gettext_rails_i18n.rake +73 -0
- data/vendor/plugins/responds_to_parent/MIT-LICENSE +20 -0
- data/vendor/plugins/responds_to_parent/README +42 -0
- data/vendor/plugins/responds_to_parent/Rakefile +22 -0
- data/vendor/plugins/responds_to_parent/init.rb +1 -0
- data/vendor/plugins/responds_to_parent/lib/responds_to_parent.rb +46 -0
- data/vendor/plugins/responds_to_parent/test/responds_to_parent_test.rb +115 -0
- data/vendor/plugins/rjs-assertions/MIT-LICENSE +20 -0
- data/vendor/plugins/rjs-assertions/README +64 -0
- data/vendor/plugins/rjs-assertions/init.rb +1 -0
- data/vendor/plugins/rjs-assertions/lib/rjs-assertions.rb +99 -0
- data/vendor/rails_patches/support_for_inverse_relationships_on_active_record_objects.diff +739 -0
- metadata +2075 -0
@@ -0,0 +1,1578 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class NodeTest < Zena::Unit::TestCase
|
4
|
+
|
5
|
+
NEW_DEFAULT = {
|
6
|
+
:name => 'hello',
|
7
|
+
:rgroup_id => Zena::FoxyParser::id('zena', 'public'),
|
8
|
+
:wgroup_id => Zena::FoxyParser::id('zena', 'workers'),
|
9
|
+
:dgroup_id => Zena::FoxyParser::id('zena', 'managers'),
|
10
|
+
:parent_id => Zena::FoxyParser::id('zena', 'cleanWater'),
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
def test_find_by_path
|
14
|
+
Node.connection.execute "UPDATE nodes SET fullpath = NULL, basepath = NULL WHERE id = #{nodes_id(:wiki)}"
|
15
|
+
login(:ant)
|
16
|
+
node = nodes(:wiki)
|
17
|
+
assert_nil node[:fullpath]
|
18
|
+
node = secure!(Node) { Node.find_by_path('projects/wiki') }
|
19
|
+
assert_equal 'projects/wiki', node.fullpath
|
20
|
+
node = secure!(Node) { Node.find_by_path('projects/wiki') }
|
21
|
+
assert_equal 'projects/wiki', node[:fullpath]
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_match_query
|
25
|
+
query = Node.match_query('smala')
|
26
|
+
assert_equal "nodes.name LIKE 'smala%'", query[:conditions]
|
27
|
+
query = Node.match_query('.', :node => nodes(:wiki))
|
28
|
+
assert_equal ["parent_id = ?", nodes_id(:wiki)], query[:conditions]
|
29
|
+
end
|
30
|
+
|
31
|
+
def transform_attributes_zazen_shortcut_v_text
|
32
|
+
login(:lion)
|
33
|
+
[
|
34
|
+
["Hi, this is just a simple \"test\"::w or \"\"::w+_life.rss. OK ?\n\n!:lake+_pv!",
|
35
|
+
"Hi, this is just a simple \"test\":25 or \"\":29_life.rss. OK ?\n\n!24_pv!"],
|
36
|
+
|
37
|
+
["Hi ![30,:lake+]! ![]!",
|
38
|
+
"Hi ![30,24]! ![]!"],
|
39
|
+
|
40
|
+
["Hi !{:bird,:lake+}! !{}!",
|
41
|
+
"Hi !{30,24}! !{}!"],
|
42
|
+
|
43
|
+
["Hi !30!::clean !:bird!::clean !:bird/nice bird!:21 !30_pv/hello ladies!:21",
|
44
|
+
"Hi !30!:21 !30!:21 !30/nice bird!:21 !30_pv/hello ladies!:21"],
|
45
|
+
|
46
|
+
["Hi, this is normal "":1/ just a\n\n* asf\n* asdf ![23,33]!",
|
47
|
+
"Hi, this is normal "":1/ just a\n\n* asf\n* asdf ![23,33]!"],
|
48
|
+
].each do |src,res|
|
49
|
+
assert_equal res, secure(Node) { Node.transform_attributes( 'v_text' => src )['v_text'] }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_transform_attributes
|
54
|
+
login(:tiger)
|
55
|
+
visitor[:time_zone] = "Europe/Zurich"
|
56
|
+
[
|
57
|
+
[{'parent_id' => 'lake+'},
|
58
|
+
{'parent_id' => nodes_id(:lake_jpg)}],
|
59
|
+
|
60
|
+
[{'d_super_id' => 'lake', 'd_other_id' => '11'},
|
61
|
+
{'d_super_id' => nodes_zip(:lake), 'd_other_id' => 11}],
|
62
|
+
|
63
|
+
[{'tag_ids' => "33,news"},
|
64
|
+
{'tag_ids' => [nodes_id(:art), nodes_id(:news)]}],
|
65
|
+
|
66
|
+
[{'parent_id' => '999', 'tag_ids' => "999,34,art"},
|
67
|
+
{'parent_id' => '999', 'tag_ids' => [nodes_id(:news),nodes_id(:art)]}],
|
68
|
+
|
69
|
+
[{'link' => {'hot' => {'other_id' => '22', 'date' => '2009-7-15 16:58' }}},
|
70
|
+
{'link' => {'hot' => {'other_id' => nodes_id(:status), 'date' => Time.gm(2009,7,15,16,58)}}}], # this should be 14:58 when #255 is fixed (tz support).
|
71
|
+
].each do |src,res|
|
72
|
+
assert_equal res, secure(Node) { Node.transform_attributes( src ) }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_get_fullpath
|
77
|
+
Node.connection.execute "UPDATE nodes SET fullpath = NULL, basepath = NULL WHERE id IN (#{nodes_id(:lake)},#{nodes_id(:cleanWater)})"
|
78
|
+
login(:ant)
|
79
|
+
node = secure!(Node) { nodes(:lake) }
|
80
|
+
parent = node.parent
|
81
|
+
assert_nil parent[:fullpath]
|
82
|
+
assert_nil node[:fullpath]
|
83
|
+
assert_equal 'projects/cleanWater/lakeAddress', node.fullpath
|
84
|
+
node.reload
|
85
|
+
assert_equal 'projects/cleanWater/lakeAddress', node[:fullpath]
|
86
|
+
parent.reload
|
87
|
+
assert_equal 'projects/cleanWater', parent[:fullpath]
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_get_fullpath_rebuild
|
91
|
+
login(:ant)
|
92
|
+
node = secure!(Node) { nodes(:lake) }
|
93
|
+
assert_equal 'projects/cleanWater/lakeAddress', node.fullpath
|
94
|
+
Node.connection.execute "UPDATE nodes SET parent_id = #{nodes_id(:collections)} WHERE id = #{node[:id]}"
|
95
|
+
node.reload
|
96
|
+
assert_equal 'projects/cleanWater/lakeAddress', node.fullpath
|
97
|
+
assert_equal 'collections/lakeAddress', node.fullpath(true)
|
98
|
+
end
|
99
|
+
|
100
|
+
def test_get_fullpath_after_private
|
101
|
+
Node.connection.execute "UPDATE nodes SET parent_id = #{nodes_id(:ant)} WHERE id = #{nodes_id(:status)}" # put 'status' page inside private 'ant' page
|
102
|
+
node = nil
|
103
|
+
login(:tiger)
|
104
|
+
assert_nothing_raised { node = secure!(Node) { nodes(:status) } }
|
105
|
+
assert_kind_of Node, node
|
106
|
+
assert_nothing_raised { node = secure!(Node) { Node.find_by_path('people/ant') } }
|
107
|
+
assert_nothing_raised { node = secure!(Node) { Node.find_by_path('people/ant/status')}}
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_fullpath_updated_on_parent_rename
|
111
|
+
login(:tiger)
|
112
|
+
node = secure!(Node) { nodes(:tiger) }
|
113
|
+
assert_equal 'people/tiger', node.fullpath
|
114
|
+
node = secure!(Node) { nodes(:tiger) }
|
115
|
+
assert_equal 'people/tiger', node[:fullpath] # make sure fullpath is cached
|
116
|
+
|
117
|
+
node = secure!(Node) { nodes(:people) }
|
118
|
+
assert node.update_attributes(:v_title => 'nice people')
|
119
|
+
assert node.publish
|
120
|
+
assert_equal 'nicePeople', node.name # sync name
|
121
|
+
node = secure!(Node) { nodes(:tiger) }
|
122
|
+
assert_nil node[:fullpath] # cache empty
|
123
|
+
assert_equal 'nicePeople/tiger', node.fullpath
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_rootpath
|
127
|
+
login(:ant)
|
128
|
+
node = secure!(Node) { nodes(:status) }
|
129
|
+
assert_equal 'zena/projects/cleanWater/status', node.rootpath
|
130
|
+
node = secure!(Node) { nodes(:zena) }
|
131
|
+
assert_equal 'zena', node.rootpath
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_basepath
|
135
|
+
login(:tiger)
|
136
|
+
node = secure!(Node) { nodes(:status) }
|
137
|
+
assert_equal 'projects/cleanWater', node.basepath
|
138
|
+
node = secure!(Node) { nodes(:projects) }
|
139
|
+
assert_equal '', node.basepath
|
140
|
+
node = secure!(Node) { nodes(:proposition) }
|
141
|
+
assert_equal '', node.basepath
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_ancestors
|
145
|
+
Node.connection.execute "UPDATE nodes SET parent_id = #{nodes_id(:proposition)} WHERE id = #{nodes_id(:bird_jpg)}"
|
146
|
+
login(:tiger)
|
147
|
+
node = secure!(Node) { nodes(:status) }
|
148
|
+
assert_equal ['zena', 'projects', 'cleanWater'], node.ancestors.map { |a| a[:name] }
|
149
|
+
node = secure!(Node) { nodes(:zena) }
|
150
|
+
assert_equal [], node.ancestors
|
151
|
+
node = secure!(Node) { nodes(:bird_jpg) }
|
152
|
+
prop = secure!(Node) { nodes(:proposition)}
|
153
|
+
assert_kind_of Node, prop
|
154
|
+
assert prop.can_read?
|
155
|
+
assert_equal ['zena', 'projects', 'secret', 'proposition'], node.ancestors.map { |a| a[:name] }
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_ancestors_infinit_loop
|
159
|
+
Node.connection.execute "UPDATE nodes SET parent_id = #{nodes_id(:status)} WHERE id = #{nodes_id(:cleanWater)}"
|
160
|
+
login(:ant)
|
161
|
+
node = secure!(Node) { nodes(:lake_jpg) }
|
162
|
+
assert_raise(Zena::InvalidRecord) { node.ancestors }
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_ancestor_in_hidden_project
|
166
|
+
login(:tiger)
|
167
|
+
node = secure!(Node) { nodes(:proposition) }
|
168
|
+
assert_kind_of Node, node
|
169
|
+
assert_equal ['zena', 'projects', 'secret'], node.ancestors.map { |a| a[:name] } # ant can view 'proposition' but not the project proposition is in
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_create_simplest
|
173
|
+
login(:ant)
|
174
|
+
test_page = secure!(Node) { Node.create(:name=>"yoba", :parent_id => nodes_id(:cleanWater), :inherit=>1 ) }
|
175
|
+
assert ! test_page.new_record? , "Not a new record"
|
176
|
+
assert_equal nodes_id(:cleanWater), test_page.parent[:id]
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_cannot_update_v_status
|
180
|
+
login(:ant)
|
181
|
+
test_page = secure!(Node) { nodes(:status) }
|
182
|
+
assert_equal 2, test_page.version.number
|
183
|
+
assert test_page.update_attributes( :v_status => Zena::Status[:pub], :v_title => "New funky title")
|
184
|
+
assert_equal 3, test_page.version.number
|
185
|
+
assert_equal Zena::Status[:red], test_page.version.status
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_new_bad_parent
|
189
|
+
login(:tiger)
|
190
|
+
attrs = NEW_DEFAULT.dup
|
191
|
+
attrs[:parent_id] = nodes_id(:proposition)
|
192
|
+
node = secure!(Page) { Page.new(attrs) }
|
193
|
+
assert node.save , "Save ok"
|
194
|
+
|
195
|
+
attrs[:parent_id] = nodes_id(:myDreams) # cannot write here
|
196
|
+
node = secure!(Page) { Page.new(attrs) }
|
197
|
+
assert ! node.save , "Save fails"
|
198
|
+
assert node.errors[:parent_id].any?
|
199
|
+
assert_equal 'invalid reference', node.errors[:parent_id]
|
200
|
+
|
201
|
+
attrs[:parent_id] = nodes_id(:cleanWater) # other parent ok
|
202
|
+
node = secure!(Page) { Page.new(attrs) }
|
203
|
+
assert node.save , "Save succeeds"
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_new_without_parent
|
207
|
+
login(:tiger)
|
208
|
+
attrs = NEW_DEFAULT.dup
|
209
|
+
attrs.delete(:parent_id)
|
210
|
+
node = secure!(Node) { Node.new(attrs) }
|
211
|
+
assert ! node.save , "Save fails"
|
212
|
+
assert node.errors[:parent_id].any?
|
213
|
+
assert_equal 'invalid reference', node.errors[:parent_id]
|
214
|
+
# page parent ok
|
215
|
+
assert node.new_record?
|
216
|
+
node = secure!(Node) { Node.new(attrs) }
|
217
|
+
node.parent_id = nodes_id(:lake)
|
218
|
+
assert node.save , "Save succeeds"
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_page_new_without_name
|
222
|
+
login(:tiger)
|
223
|
+
node = secure!(Node) { Node.new(:parent_id=>nodes_id(:cleanWater)) }
|
224
|
+
assert ! node.save, 'Save fails'
|
225
|
+
assert_equal 'can\'t be blank', node.errors[:name]
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_new_set_section_id
|
229
|
+
login(:tiger)
|
230
|
+
node = secure!(Page) { Page.create(:parent_id=>nodes_id(:people), :name=>'SuperPage')}
|
231
|
+
assert ! node.new_record?, 'Not a new record'
|
232
|
+
assert_equal nodes_id(:people), node[:section_id]
|
233
|
+
end
|
234
|
+
|
235
|
+
def toto_test_update_no_or_bad_parent
|
236
|
+
login(:ant)
|
237
|
+
node = secure!(Node) { nodes(:wiki) }
|
238
|
+
assert_kind_of Node, node
|
239
|
+
assert node.save , "Save succeeds"
|
240
|
+
node.parent_id = nil
|
241
|
+
assert ! node.save , "Save fails"
|
242
|
+
assert node.errors[:parent_id].any?
|
243
|
+
node = secure!(Node) { nodes(:wiki) }
|
244
|
+
node.parent_id = nodes_id(:wiki)
|
245
|
+
assert ! node.save , "Save fails"
|
246
|
+
assert node.errors[:parent_id].any?
|
247
|
+
node = secure!(Node) { nodes(:wiki) }
|
248
|
+
node.parent_id = nodes_id(:cleanWater)
|
249
|
+
assert ! node.save , "Save fails"
|
250
|
+
end
|
251
|
+
|
252
|
+
def test_update_bad_parent
|
253
|
+
login(:tiger)
|
254
|
+
node = secure!(Node) { nodes(:status) }
|
255
|
+
node[:parent_id] = nodes_id(:proposition)
|
256
|
+
assert node.save , "Save ok"
|
257
|
+
|
258
|
+
node = secure!(Node) { nodes(:status) }
|
259
|
+
node[:parent_id] = nodes_id(:myDreams) # cannot write here
|
260
|
+
assert ! node.save , "Save fails"
|
261
|
+
assert node.errors[:parent_id].any?
|
262
|
+
assert_equal "invalid reference", node.errors[:parent_id]
|
263
|
+
|
264
|
+
node = secure!(Node) { nodes(:status) }
|
265
|
+
node[:parent_id] = nodes_id(:projects) # parent ok
|
266
|
+
assert node.save , "Save succeeds"
|
267
|
+
end
|
268
|
+
|
269
|
+
def test_page_update_without_name
|
270
|
+
login(:tiger)
|
271
|
+
node = secure!(Node) { nodes(:status) }
|
272
|
+
node[:name] = nil
|
273
|
+
assert node.save, 'Save succeeds'
|
274
|
+
assert_equal 'statusTitle', node[:name]
|
275
|
+
node = secure!(Node) { nodes(:status) }
|
276
|
+
node[:name] = nil
|
277
|
+
node.version.title = ""
|
278
|
+
assert !node.save, 'Save fails'
|
279
|
+
assert_equal 'can\'t be blank', node.errors[:name]
|
280
|
+
end
|
281
|
+
|
282
|
+
def test_update_set_section_id
|
283
|
+
login(:tiger)
|
284
|
+
node = secure!(Node) { Node.find(nodes_id(:lion))}
|
285
|
+
assert_equal nodes_id(:people), node[:section_id]
|
286
|
+
node[:parent_id] = nodes_id(:zena)
|
287
|
+
node[:section_id] = nodes_id(:status)
|
288
|
+
assert node.save, 'Can save node'
|
289
|
+
node.reload
|
290
|
+
assert_equal nodes_id(:zena), node[:section_id]
|
291
|
+
end
|
292
|
+
|
293
|
+
def test_before_destroy
|
294
|
+
login(:tiger)
|
295
|
+
node = secure!(Node) { nodes(:projects) }
|
296
|
+
assert !node.destroy, "Cannot destroy"
|
297
|
+
assert_equal 'cannot be removed (contains subpages or data)', node.errors[:base]
|
298
|
+
node = secure!(Node) { nodes(:bananas) }
|
299
|
+
assert node.destroy, "Can destroy"
|
300
|
+
end
|
301
|
+
|
302
|
+
def test_cannot_destroy_has_private
|
303
|
+
login(:tiger)
|
304
|
+
node = secure!(Node) { nodes(:lion) }
|
305
|
+
assert_nil node.find(:all, 'pages'), "No subpages"
|
306
|
+
assert !node.destroy, "Cannot destroy"
|
307
|
+
assert_equal 'cannot be removed (contains subpages or data)', node.errors[:base]
|
308
|
+
end
|
309
|
+
|
310
|
+
def test_parent
|
311
|
+
login(:anon)
|
312
|
+
assert_equal nodes_id(:projects), secure!(Node) { nodes(:wiki) }.parent[:id]
|
313
|
+
end
|
314
|
+
|
315
|
+
def test_project
|
316
|
+
login(:anon)
|
317
|
+
assert_equal nodes_id(:zena), secure!(Node) { nodes(:people) }.project[:id]
|
318
|
+
assert_equal nodes_id(:cleanWater), secure!(Node) { nodes(:cleanWater) }.project[:id]
|
319
|
+
assert_equal nodes_id(:zena), secure!(Node) { nodes(:cleanWater) }.real_project[:id]
|
320
|
+
end
|
321
|
+
|
322
|
+
def test_section
|
323
|
+
login(:tiger)
|
324
|
+
assert_equal nodes_id(:people), secure!(Node) { nodes(:tiger) }.section[:id]
|
325
|
+
assert_equal nodes_id(:cleanWater), secure!(Node) { nodes(:cleanWater) }.project[:id]
|
326
|
+
assert_equal nodes_id(:zena), secure!(Node) { nodes(:cleanWater) }.real_project[:id]
|
327
|
+
end
|
328
|
+
|
329
|
+
def test_real_project
|
330
|
+
login(:ant)
|
331
|
+
node = secure!(Node) { nodes(:status) }
|
332
|
+
assert_equal nodes_id(:cleanWater), node.project[:id]
|
333
|
+
node = secure!(Node) { nodes(:cleanWater) }
|
334
|
+
assert_equal nodes_id(:cleanWater), node.project[:id]
|
335
|
+
assert_equal nodes_id(:zena), node.real_project[:id]
|
336
|
+
assert_equal nodes_id(:zena), node.real_project.real_project[:id]
|
337
|
+
end
|
338
|
+
|
339
|
+
def test_real_section
|
340
|
+
login(:tiger)
|
341
|
+
node = secure!(Node) { nodes(:tiger) }
|
342
|
+
assert_equal nodes_id(:people), node.section[:id]
|
343
|
+
node = secure!(Node) { nodes(:people) }
|
344
|
+
assert_equal nodes_id(:people), node.section[:id]
|
345
|
+
assert_equal nodes_id(:zena), node.real_section[:id]
|
346
|
+
assert_equal nodes_id(:zena), node.real_section.real_section[:id]
|
347
|
+
end
|
348
|
+
|
349
|
+
def test_new_child
|
350
|
+
login(:ant)
|
351
|
+
node = secure!(Node) { nodes(:cleanWater) }
|
352
|
+
child = node.new_child( :name => 'status', :class => Page )
|
353
|
+
assert ! child.save , "Save fails"
|
354
|
+
assert child.errors[:name].any?
|
355
|
+
|
356
|
+
child = node.new_child( :name => 'new_name', :class => Page )
|
357
|
+
assert child.save , "Save succeeds"
|
358
|
+
assert_equal Zena::Status[:red], child.version.status
|
359
|
+
assert_equal child[:user_id], users_id(:ant)
|
360
|
+
assert_equal node[:dgroup_id], child[:dgroup_id]
|
361
|
+
assert_equal node[:rgroup_id], child[:rgroup_id]
|
362
|
+
assert_equal node[:wgroup_id], child[:wgroup_id]
|
363
|
+
assert_equal node[:section_id], child[:section_id]
|
364
|
+
assert_equal 1, child[:inherit]
|
365
|
+
assert_equal node[:id], child[:parent_id]
|
366
|
+
end
|
367
|
+
|
368
|
+
def test_secure_find_by_path
|
369
|
+
login(:tiger)
|
370
|
+
node = secure!(Node) { Node.find_by_path('projects/secret') }
|
371
|
+
assert_kind_of Node, node
|
372
|
+
assert_kind_of User, node.instance_variable_get(:@visitor)
|
373
|
+
login(:ant)
|
374
|
+
assert_raise(ActiveRecord::RecordNotFound) { node = secure!(Node) { Node.find_by_path('projects/secret') }}
|
375
|
+
end
|
376
|
+
|
377
|
+
def test_author
|
378
|
+
login(:tiger)
|
379
|
+
node = secure!(Node) { nodes(:cleanWater) }
|
380
|
+
assert_equal node.user.contact_id, node.author[:id]
|
381
|
+
assert_equal 'Panther Tigris Sumatran', node.author.fullname
|
382
|
+
login(:anon)
|
383
|
+
node = secure!(Node) { nodes(:status) }
|
384
|
+
assert_equal 'Solenopsis Invicta', node.author.fullname
|
385
|
+
end
|
386
|
+
|
387
|
+
def test_ext
|
388
|
+
node = nodes(:status)
|
389
|
+
node[:name] = 'bob. and bob.jpg'
|
390
|
+
assert_equal 'jpg', node.ext
|
391
|
+
node[:name] = 'no ext'
|
392
|
+
assert_equal '', node.ext
|
393
|
+
node[:name] = ''
|
394
|
+
assert_equal '', node.ext
|
395
|
+
node[:name] = nil
|
396
|
+
assert_equal '', node.ext
|
397
|
+
end
|
398
|
+
|
399
|
+
def test_set_name_with_title
|
400
|
+
login(:tiger)
|
401
|
+
node = secure!(Node) { Node.create(NEW_DEFAULT.stringify_keys.merge('name' => '', 'v_title' => 'small bed')) }
|
402
|
+
assert_kind_of Node, node
|
403
|
+
assert !node.new_record?
|
404
|
+
assert_equal 'smallBed', node.name
|
405
|
+
end
|
406
|
+
|
407
|
+
def test_set_name
|
408
|
+
node = nodes(:wiki)
|
409
|
+
node.name = " J'aime l'aïl en août ! "
|
410
|
+
assert_equal 'JAimeLAilEnAout', node.name
|
411
|
+
assert_equal 'JAimeLAilEnAout', node[:name]
|
412
|
+
node.name = "LIEUX"
|
413
|
+
assert_equal 'LIEUX', node.name
|
414
|
+
end
|
415
|
+
|
416
|
+
|
417
|
+
def test_change_project_to_page
|
418
|
+
login(:tiger)
|
419
|
+
node = secure!(Node) { nodes(:cleanWater) }
|
420
|
+
assert node.update_attributes(:klass => 'Page')
|
421
|
+
node = secure!(Node) { nodes(:cleanWater) }
|
422
|
+
assert_kind_of Page, node
|
423
|
+
assert_equal 'NP', node[:kpath]
|
424
|
+
assert_equal nodes_id(:zena), node.get_project_id
|
425
|
+
assert_equal nodes_id(:zena), nodes(:status)[:project_id]
|
426
|
+
assert_equal nodes_id(:zena), nodes(:lake)[:project_id]
|
427
|
+
end
|
428
|
+
#
|
429
|
+
# def test_cannot_change_root
|
430
|
+
# login(:tiger)
|
431
|
+
# node = secure!(Node) { Node.find(visitor.site[:root_id]) }
|
432
|
+
# node = node.change_to(Page)
|
433
|
+
# assert_nil node
|
434
|
+
# node = secure!(Node) { Node.find(visitor.site[:root_id]) }
|
435
|
+
# assert_kind_of Section, node
|
436
|
+
# end
|
437
|
+
|
438
|
+
context 'A visitor in the drive group of the root node' do
|
439
|
+
setup do
|
440
|
+
login(:tiger)
|
441
|
+
@node = secure!(Node) { nodes(:zena) }
|
442
|
+
end
|
443
|
+
|
444
|
+
should 'be allowed to change groups' do
|
445
|
+
# root nodes do not have a parent_id !!
|
446
|
+
# reference = self
|
447
|
+
@node[:dgroup_id] = groups_id(:public)
|
448
|
+
assert @node.save
|
449
|
+
end
|
450
|
+
|
451
|
+
should 'be allowed to change attributes' do
|
452
|
+
assert @node.update_attributes(:name => 'vodou', :event_at => Time.now)
|
453
|
+
end
|
454
|
+
|
455
|
+
should 'not be allowed to set parent' do
|
456
|
+
assert_nil @node[:parent_id]
|
457
|
+
assert !@node.update_attributes(:parent_id => nodes_id(:status))
|
458
|
+
assert_equal 'root should not have a parent', @node.errors[:parent_id]
|
459
|
+
end
|
460
|
+
end
|
461
|
+
|
462
|
+
context 'A visitor with drive access' do
|
463
|
+
setup do
|
464
|
+
login(:tiger)
|
465
|
+
@node = secure!(Node) { nodes(:wiki) }
|
466
|
+
end
|
467
|
+
|
468
|
+
context 'on a published node with documents' do
|
469
|
+
|
470
|
+
should 'see a published node with published documents' do
|
471
|
+
assert_equal Zena::Status[:pub], @node.version.status
|
472
|
+
assert_equal Zena::Status[:pub], versions(:bird_jpg_en).status
|
473
|
+
assert_equal Zena::Status[:pub], versions(:flower_jpg_en).status
|
474
|
+
end
|
475
|
+
|
476
|
+
should 'unpublish documents when unpublishing node' do
|
477
|
+
assert @node.unpublish
|
478
|
+
assert_equal Zena::Status[:rem], versions(:bird_jpg_en).status
|
479
|
+
assert_equal Zena::Status[:rem], versions(:flower_jpg_en).status
|
480
|
+
end
|
481
|
+
end
|
482
|
+
|
483
|
+
context 'on a removed node with removed documents' do
|
484
|
+
setup do
|
485
|
+
@node.unpublish
|
486
|
+
@node = secure!(Node) { nodes(:wiki) }
|
487
|
+
end
|
488
|
+
|
489
|
+
should 'see a removed node with removed documents' do
|
490
|
+
assert_equal Zena::Status[:rem], @node.version.status
|
491
|
+
assert_equal Zena::Status[:rem], versions(:bird_jpg_en).status
|
492
|
+
assert_equal Zena::Status[:rem], versions(:flower_jpg_en).status
|
493
|
+
end
|
494
|
+
|
495
|
+
should 'publish documents when publishing node' do
|
496
|
+
assert @node.publish
|
497
|
+
assert_equal Zena::Status[:pub], versions(:bird_jpg_en).status
|
498
|
+
assert_equal Zena::Status[:pub], versions(:flower_jpg_en).status
|
499
|
+
end
|
500
|
+
end
|
501
|
+
|
502
|
+
context 'on a redaction node with documents in redaction status' do
|
503
|
+
setup do
|
504
|
+
@node.unpublish
|
505
|
+
@node.redit
|
506
|
+
@node = secure!(Node) { nodes(:wiki) }
|
507
|
+
end
|
508
|
+
|
509
|
+
should 'see redactions' do
|
510
|
+
assert_equal Zena::Status[:red], @node.version.status
|
511
|
+
assert_equal Zena::Status[:red], versions(:bird_jpg_en).status
|
512
|
+
assert_equal Zena::Status[:red], versions(:flower_jpg_en).status
|
513
|
+
end
|
514
|
+
|
515
|
+
should 'propose documents when proposing node' do
|
516
|
+
assert @node.propose
|
517
|
+
assert_equal Zena::Status[:prop_with], versions(:bird_jpg_en).status
|
518
|
+
assert_equal Zena::Status[:prop_with], versions(:flower_jpg_en).status
|
519
|
+
end
|
520
|
+
end
|
521
|
+
|
522
|
+
context 'on a proposition with proposed documents' do
|
523
|
+
setup do
|
524
|
+
@node.unpublish
|
525
|
+
@node.redit
|
526
|
+
@node.propose
|
527
|
+
@node = secure!(Node) { nodes(:wiki) }
|
528
|
+
end
|
529
|
+
|
530
|
+
should 'see propositions' do
|
531
|
+
assert_equal Zena::Status[:prop], @node.version.status
|
532
|
+
assert_equal Zena::Status[:prop_with], versions(:bird_jpg_en).status
|
533
|
+
assert_equal Zena::Status[:prop_with], versions(:flower_jpg_en).status
|
534
|
+
end
|
535
|
+
|
536
|
+
should 'refuse documents when refusing node' do
|
537
|
+
assert @node.refuse
|
538
|
+
assert_equal Zena::Status[:red], versions(:bird_jpg_en).status
|
539
|
+
assert_equal Zena::Status[:red], versions(:flower_jpg_en).status
|
540
|
+
end
|
541
|
+
end
|
542
|
+
end
|
543
|
+
|
544
|
+
|
545
|
+
def test_change_section_to_project
|
546
|
+
login(:lion)
|
547
|
+
node = secure!(Node) { nodes(:people) }
|
548
|
+
assert_equal node[:id], node.get_section_id
|
549
|
+
assert_equal nodes_id(:zena), node.get_project_id
|
550
|
+
|
551
|
+
assert node.update_attributes(:klass => "Project")
|
552
|
+
node = secure!(Node) { nodes(:people) }
|
553
|
+
assert_kind_of Project, node
|
554
|
+
assert_equal 'NPP', node[:kpath]
|
555
|
+
|
556
|
+
assert_equal nodes_id(:zena), node.get_section_id
|
557
|
+
assert_equal node[:id], node.get_project_id
|
558
|
+
|
559
|
+
assert_equal nodes_id(:zena), nodes(:ant).get_section_id # children inherit new section_id
|
560
|
+
assert_equal nodes_id(:zena), nodes(:myLife).get_section_id
|
561
|
+
assert_equal node[:id], nodes(:ant).get_project_id # children inherit new project_id
|
562
|
+
assert_equal node[:id], nodes(:myLife).get_project_id
|
563
|
+
end
|
564
|
+
|
565
|
+
def test_sync_section
|
566
|
+
login(:tiger)
|
567
|
+
node = secure!(Node) { nodes(:cleanWater) }
|
568
|
+
assert_equal nodes_id(:zena), node[:section_id]
|
569
|
+
node[:parent_id] = nodes_id(:projects)
|
570
|
+
assert node.save
|
571
|
+
assert_equal nodes_id(:zena), node[:section_id]
|
572
|
+
assert_equal nodes_id(:zena), nodes(:cleanWater)[:section_id]
|
573
|
+
end
|
574
|
+
|
575
|
+
def test_sync_project_for_node
|
576
|
+
login(:tiger)
|
577
|
+
node = secure!(Node) { nodes(:people) }
|
578
|
+
assert_equal nodes_id(:zena), node[:section_id]
|
579
|
+
assert_equal nodes_id(:zena ), node[:project_id]
|
580
|
+
node[:parent_id] = nodes_id(:cleanWater)
|
581
|
+
assert node.save
|
582
|
+
assert_equal nodes_id(:cleanWater), node[:project_id]
|
583
|
+
assert_equal nodes_id(:cleanWater), nodes(:people)[:project_id]
|
584
|
+
assert_equal nodes_id(:zena ), node[:section_id]
|
585
|
+
assert_equal nodes_id(:zena ), nodes(:people)[:section_id]
|
586
|
+
end
|
587
|
+
|
588
|
+
def test_sync_project_for_section
|
589
|
+
login(:tiger)
|
590
|
+
node = secure!(Node) { nodes(:people) }
|
591
|
+
assert_equal nodes_id(:people), node.get_section_id
|
592
|
+
assert_equal nodes_id(:zena ), node[:project_id]
|
593
|
+
node[:parent_id] = nodes_id(:cleanWater)
|
594
|
+
assert node.save
|
595
|
+
assert_equal nodes_id(:cleanWater), node[:project_id]
|
596
|
+
assert_equal nodes_id(:cleanWater), nodes(:people)[:project_id]
|
597
|
+
assert_equal nodes_id(:people), node.get_section_id
|
598
|
+
assert_equal nodes_id(:zena), nodes(:people)[:section_id]
|
599
|
+
end
|
600
|
+
|
601
|
+
def test_all_children
|
602
|
+
login(:tiger)
|
603
|
+
assert_nothing_raised { secure!(Node) { nodes(:ant) } }
|
604
|
+
nodes = secure!(Node) { nodes(:people).send(:all_children) }
|
605
|
+
people = secure!(Node) { nodes(:people) }
|
606
|
+
assert_equal 4, nodes.size
|
607
|
+
assert_equal 4, people.find(:all, 'children').size
|
608
|
+
assert_raise(NoMethodError) { people.all_children } # private method
|
609
|
+
end
|
610
|
+
|
611
|
+
def test_url_name
|
612
|
+
assert_equal "salutJEcrisAujourdHui", "salut j'écris: Aujourd'hui ".url_name!
|
613
|
+
assert_equal "a--BabMol", " à,--/ bab* mol".url_name!
|
614
|
+
assert_equal "07.11.2006-mardiProchain", "07.11.2006-mardi_prochain".url_name!
|
615
|
+
assert_equal "Node-+login", "Node-+login".url_name!
|
616
|
+
end
|
617
|
+
|
618
|
+
def test_tags
|
619
|
+
login(:lion)
|
620
|
+
@node = secure!(Node) { nodes(:status) }
|
621
|
+
assert_nothing_raised { @node.find(:all, 'set_tags') }
|
622
|
+
assert_nil @node.find(:all, 'set_tags')
|
623
|
+
@node.rel['set_tag'].other_ids = [nodes_id(:art),nodes_id(:news)]
|
624
|
+
assert @node.save
|
625
|
+
tags = @node.find(:all, 'set_tags')
|
626
|
+
assert_equal 2, tags.size
|
627
|
+
assert_equal 'art', tags[0].name
|
628
|
+
assert_equal 'news', tags[1].name
|
629
|
+
@node.rel['set_tag'].other_ids = [nodes_id(:art)]
|
630
|
+
@node.save
|
631
|
+
tags = @node.find(:all, 'set_tags')
|
632
|
+
assert_equal 1, tags.size
|
633
|
+
assert_equal 'art', tags[0].name
|
634
|
+
end
|
635
|
+
|
636
|
+
def test_tag_update
|
637
|
+
login(:lion)
|
638
|
+
node = secure!(Node) { nodes(:art) }
|
639
|
+
assert node.update_attributes('tagged_ids' => [nodes_id(:status), nodes_id(:people)])
|
640
|
+
assert_equal 2, node.find(:all, 'tagged').size
|
641
|
+
stat = secure!(Node) { nodes(:status) }
|
642
|
+
peop = secure!(Node) { nodes(:people) }
|
643
|
+
assert_equal node[:id], stat.find(:first, 'set_tags')[:id]
|
644
|
+
assert_equal node[:id], peop.find(:first, 'set_tags')[:id]
|
645
|
+
end
|
646
|
+
|
647
|
+
def test_after_all_cache_sweep
|
648
|
+
with_caching do
|
649
|
+
login(:lion)
|
650
|
+
i = 1
|
651
|
+
assert_equal "content 1", Cache.with(visitor.id, visitor.group_ids, 'NP', 'pages') { "content #{i}" }
|
652
|
+
assert_equal "content 1", Cache.with(visitor.id, visitor.group_ids, 'NN', 'notes') { "content #{i}" }
|
653
|
+
i = 2
|
654
|
+
assert_equal "content 1", Cache.with(visitor.id, visitor.group_ids, 'NP', 'pages') { "content #{i}" }
|
655
|
+
assert_equal "content 1", Cache.with(visitor.id, visitor.group_ids, 'NN', 'notes') { "content #{i}" }
|
656
|
+
|
657
|
+
# do something on a project
|
658
|
+
node = secure!(Node) { nodes(:wiki) }
|
659
|
+
assert_equal 'NPP', node.class.kpath
|
660
|
+
assert node.update_attributes(:v_title=>'new title'), "Can change attributes"
|
661
|
+
# sweep only kpath NPP
|
662
|
+
i = 3
|
663
|
+
assert_equal "content 3", Cache.with(visitor.id, visitor.group_ids, 'NP', 'pages') { "content #{i}" }
|
664
|
+
assert_equal "content 1", Cache.with(visitor.id, visitor.group_ids, 'NN', 'notes') { "content #{i}" }
|
665
|
+
|
666
|
+
# do something on a note
|
667
|
+
node = secure!(Node) { nodes(:proposition) }
|
668
|
+
assert_equal 'NNP', node.vclass.kpath
|
669
|
+
assert node.update_attributes(:name => 'popo' ), "Can change attributes"
|
670
|
+
# sweep only kpath NN
|
671
|
+
i = 4
|
672
|
+
assert_equal "content 3", Cache.with(visitor.id, visitor.group_ids, 'NP', 'pages') { "content #{i}" }
|
673
|
+
assert_equal "content 4", Cache.with(visitor.id, visitor.group_ids, 'NN', 'notes') { "content #{i}" }
|
674
|
+
end
|
675
|
+
end
|
676
|
+
|
677
|
+
def test_empty_comments
|
678
|
+
login(:tiger)
|
679
|
+
node = secure!(Node) { nodes(:lake) }
|
680
|
+
assert node.discussion
|
681
|
+
assert_nil node.comments
|
682
|
+
end
|
683
|
+
|
684
|
+
def test_discussion_lang
|
685
|
+
login(:tiger)
|
686
|
+
node = secure!(Node) { nodes(:status) }
|
687
|
+
assert_equal Zena::Status[:pub], node.version.status
|
688
|
+
discussion = node.discussion
|
689
|
+
assert_kind_of Discussion, discussion
|
690
|
+
assert_equal discussions_id(:outside_discussion_on_status_en), discussion[:id]
|
691
|
+
login(:ant)
|
692
|
+
node = secure!(Node) { nodes(:status) }
|
693
|
+
discussion = node.discussion
|
694
|
+
assert discussion.new_record?, "New discussion"
|
695
|
+
assert_equal 'fr', discussion.lang
|
696
|
+
assert discussion.open?
|
697
|
+
assert !discussion.inside?
|
698
|
+
end
|
699
|
+
|
700
|
+
def test_closed_discussion
|
701
|
+
login(:tiger)
|
702
|
+
node = secure!(Node) { nodes(:status) }
|
703
|
+
discussion = node.discussion
|
704
|
+
discussion.update_attributes(:open=>false)
|
705
|
+
node = secure!(Node) { nodes(:status) }
|
706
|
+
assert_equal discussions_id(:outside_discussion_on_status_en), node.discussion[:id]
|
707
|
+
login(:ant)
|
708
|
+
node = secure!(Node) { nodes(:status) }
|
709
|
+
assert_nil node.discussion
|
710
|
+
node.update_attributes( :v_title=>'test' )
|
711
|
+
discussion = node.discussion
|
712
|
+
assert_kind_of Discussion, discussion
|
713
|
+
assert discussion.inside?
|
714
|
+
end
|
715
|
+
|
716
|
+
def test_inside_discussion
|
717
|
+
login(:tiger)
|
718
|
+
node = secure!(Node) { nodes(:status) }
|
719
|
+
node.update_attributes( :v_title=>'new status' )
|
720
|
+
assert_equal Zena::Status[:red], node.version.status
|
721
|
+
discussion = node.discussion
|
722
|
+
assert_equal discussions_id(:inside_discussion_on_status), discussion[:id]
|
723
|
+
end
|
724
|
+
|
725
|
+
def test_auto_create_discussion
|
726
|
+
login(:tiger)
|
727
|
+
post = secure!(Node) { Node.create_node(:v_status => Zena::Status[:pub], :v_title => 'a new post', :class => 'Post', :parent_id => nodes_zip(:cleanWater)) }
|
728
|
+
letter = secure!(Node) { Node.create_node(:v_status => Zena::Status[:pub], :v_title => 'a letter', :class => 'Letter', :parent_id => nodes_zip(:cleanWater)) }
|
729
|
+
assert !post.new_record?, "Not a new record"
|
730
|
+
assert !letter.new_record?, "Not a new record"
|
731
|
+
assert_equal Zena::Status[:pub], post.version.status, "Published"
|
732
|
+
assert_equal Zena::Status[:pub], letter.version.status, "Published"
|
733
|
+
assert !letter.discussion
|
734
|
+
assert post.discussion
|
735
|
+
assert !post.discussion.new_record?
|
736
|
+
login(:anon)
|
737
|
+
letter = secure!(Node) { Node.find(letter.id) }
|
738
|
+
post = secure!(Node) { Node.find(post.id) }
|
739
|
+
assert !letter.can_comment?
|
740
|
+
assert post.can_comment?
|
741
|
+
end
|
742
|
+
|
743
|
+
def test_auto_create_discussion
|
744
|
+
login(:tiger)
|
745
|
+
letter = secure!(Node) { Node.create_node(:v_status => Zena::Status[:pub], :v_title => 'a letter', :class => 'Letter', :parent_id => nodes_zip(:cleanWater)) }
|
746
|
+
assert !letter.new_record?, "Not a new record"
|
747
|
+
assert_equal Zena::Status[:pub], letter.version.status, "Published"
|
748
|
+
login(:lion)
|
749
|
+
letter = secure!(Node) { Node.find(letter.id) }
|
750
|
+
assert letter.can_auto_create_discussion?
|
751
|
+
assert Discussion.create(:node_id=>letter[:id], :lang=>'fr', :inside=>false)
|
752
|
+
# there is an open discussion in another lang
|
753
|
+
assert letter.can_auto_create_discussion?
|
754
|
+
end
|
755
|
+
|
756
|
+
def test_comments
|
757
|
+
login(:tiger)
|
758
|
+
node = secure!(Node) { nodes(:status) }
|
759
|
+
comments = node.comments
|
760
|
+
assert_kind_of Comment, comments[0]
|
761
|
+
assert_equal 'Nice site', comments[0][:title]
|
762
|
+
end
|
763
|
+
|
764
|
+
def test_comments_on_nil
|
765
|
+
login(:ant)
|
766
|
+
node = secure!(Node) { nodes(:cleanWater) }
|
767
|
+
assert_nil node.discussion # no open discussion here
|
768
|
+
assert_equal nil, node.comments
|
769
|
+
end
|
770
|
+
|
771
|
+
def test_site_id
|
772
|
+
login(:tiger)
|
773
|
+
node = secure!(Node) { Node.create(NEW_DEFAULT) }
|
774
|
+
err node
|
775
|
+
assert !node.new_record?, "Not a new record"
|
776
|
+
assert_equal sites_id(:zena), node[:site_id]
|
777
|
+
end
|
778
|
+
|
779
|
+
def test_other_site_id
|
780
|
+
login(:whale)
|
781
|
+
node = secure!(Node) { Node.create(:parent_id=>nodes_id(:ocean), :rgroup_id=>groups_id(:aqua), :wgroup_id=>groups_id(:masters), :dgroup_id=>groups_id(:masters), :name=>"fish") }
|
782
|
+
assert !node.new_record?, "Not a new record"
|
783
|
+
assert_equal sites_id(:ocean), node[:site_id]
|
784
|
+
end
|
785
|
+
|
786
|
+
def test_other_site_id_fool_id
|
787
|
+
login(:whale)
|
788
|
+
node = secure!(Node) { Node.create(:parent_id=>nodes_id(:ocean), :rgroup_id=>groups_id(:aqua), :wgroup_id=>groups_id(:masters), :dgroup_id=>groups_id(:masters), :name=>"fish", :site_id=>sites_id(:zena)) }
|
789
|
+
assert !node.new_record?, "Not a new record"
|
790
|
+
assert_equal sites_id(:ocean), node[:site_id]
|
791
|
+
end
|
792
|
+
|
793
|
+
def test_cannot_set_site_id
|
794
|
+
login(:tiger)
|
795
|
+
node = secure!(Node) { nodes(:status) }
|
796
|
+
original_site_id = node.site_id
|
797
|
+
node.update_attributes(:site_id => 1234 )
|
798
|
+
assert_equal original_site_id, node.site_id
|
799
|
+
end
|
800
|
+
|
801
|
+
def test_zip
|
802
|
+
next_zip = Zena::Db.fetch_row("SELECT zip FROM zips WHERE site_id = #{sites_id(:zena)}").to_i
|
803
|
+
login(:tiger)
|
804
|
+
node = secure!(Node) { Node.create(:parent_id=>nodes_id(:zena), :name=>"fly")}
|
805
|
+
assert !node.new_record?, "Not a new record"
|
806
|
+
assert_equal (next_zip + 1), node.zip
|
807
|
+
end
|
808
|
+
|
809
|
+
def test_find_by_zip
|
810
|
+
login(:tiger)
|
811
|
+
assert_raise(ActiveRecord::RecordNotFound) { node = secure!(Node) { Node.find_by_zip(99) } }
|
812
|
+
assert_kind_of Node, secure!(Node) { Node.find_by_zip(nodes_zip(:cleanWater)) }
|
813
|
+
end
|
814
|
+
|
815
|
+
def test_parent_zip
|
816
|
+
login(:tiger)
|
817
|
+
node = secure!(Node) { nodes(:status) }
|
818
|
+
parent = node.parent
|
819
|
+
assert_equal nodes_id( :cleanWater), parent[:id]
|
820
|
+
assert_equal nodes_zip(:cleanWater), node.parent_zip
|
821
|
+
end
|
822
|
+
|
823
|
+
def test_create_node
|
824
|
+
login(:ant)
|
825
|
+
node = secure!(Node) { Node.create_node(:parent_id => nodes_zip(:secret), :name => 'funny') }
|
826
|
+
assert_equal nodes_id(:secret), node[:parent_id]
|
827
|
+
assert node.new_record?, "Not saved"
|
828
|
+
assert_equal 'invalid reference', node.errors[:parent_id]
|
829
|
+
end
|
830
|
+
|
831
|
+
def test_create_node_with__parent_id
|
832
|
+
login(:ant)
|
833
|
+
node = secure!(Node) { Node.create_node(:_parent_id => nodes_id(:secret), :name => 'funny') }
|
834
|
+
assert_equal nodes_id(:secret), node[:parent_id]
|
835
|
+
assert node.new_record?, "Not saved"
|
836
|
+
assert_equal 'invalid reference', node.errors[:parent_id]
|
837
|
+
end
|
838
|
+
|
839
|
+
def test_create_node_ok
|
840
|
+
login(:tiger)
|
841
|
+
node = secure!(Node) { Node.create_node('parent_id' => nodes_zip(:cleanWater), 'name' => 'funny') }
|
842
|
+
assert_equal nodes_id(:cleanWater), node[:parent_id]
|
843
|
+
assert_equal 'funny', node[:name]
|
844
|
+
assert !node.new_record?
|
845
|
+
end
|
846
|
+
|
847
|
+
def test_create_or_update_node_create
|
848
|
+
login(:tiger)
|
849
|
+
node = secure!(Node) { Node.create_or_update_node('parent_id' => nodes_zip(:cleanWater), 'name' => 'funny') }
|
850
|
+
assert_equal nodes_id(:cleanWater), node[:parent_id]
|
851
|
+
assert_equal 'funny', node[:name]
|
852
|
+
assert !node.new_record?, "Saved"
|
853
|
+
end
|
854
|
+
|
855
|
+
def test_create_or_update_node_update
|
856
|
+
login(:tiger)
|
857
|
+
node = secure!(Node) { Node.create_or_update_node('parent_id' => nodes_zip(:cleanWater), 'name' => 'status', 'v_title'=>"It's all broken") }
|
858
|
+
assert_equal nodes_id(:cleanWater), node[:parent_id]
|
859
|
+
assert_equal nodes_id(:status), node[:id]
|
860
|
+
node = secure!(Node) { nodes(:status) }
|
861
|
+
assert_equal 'status', node[:name]
|
862
|
+
assert_equal "It's all broken", node.version.title
|
863
|
+
end
|
864
|
+
|
865
|
+
def test_create_with_klass
|
866
|
+
login(:tiger)
|
867
|
+
node = secure!(Node) { Node.create_node('parent_id' => nodes_zip(:projects), 'name' => 'funny', 'klass' => 'TextDocument', 'c_content_type' => 'application/x-javascript') }
|
868
|
+
assert_kind_of TextDocument, node
|
869
|
+
assert_equal nodes_id(:projects), node[:parent_id]
|
870
|
+
assert_equal 'funny', node[:name]
|
871
|
+
assert !node.new_record?, "Saved"
|
872
|
+
end
|
873
|
+
|
874
|
+
def test_get_class
|
875
|
+
assert_equal Node, Node.get_class('node')
|
876
|
+
assert_equal Node, Node.get_class('nodes')
|
877
|
+
assert_equal Node, Node.get_class('Node')
|
878
|
+
assert_equal virtual_classes(:Letter), Node.get_class('Letter')
|
879
|
+
assert_equal TextDocument, Node.get_class('TextDocument')
|
880
|
+
end
|
881
|
+
|
882
|
+
def test_get_attributes_from_yaml
|
883
|
+
f = Tempfile.new('any.yml')
|
884
|
+
path = f.path
|
885
|
+
File.open(path, 'w') do |file|
|
886
|
+
path = file.path
|
887
|
+
file.puts "first: I am the first
|
888
|
+
five: 5
|
889
|
+
done: \"I am done\""
|
890
|
+
end
|
891
|
+
attrs = Node.get_attributes_from_yaml(path)
|
892
|
+
|
893
|
+
assert_equal 'I am the first', attrs['first']
|
894
|
+
assert_equal 5, attrs['five']
|
895
|
+
assert_equal 'I am done', attrs['done']
|
896
|
+
end
|
897
|
+
|
898
|
+
def test_create_nodes_from_gzip_file
|
899
|
+
login(:tiger)
|
900
|
+
parent = secure!(Project) { Project.create(:name => 'import', :parent_id => nodes_id(:zena)) }
|
901
|
+
assert !parent.new_record?, "Not a new record"
|
902
|
+
nodes = secure!(Node) { Node.create_nodes_from_folder(:archive => uploaded_archive('simple.zml.gz'), :parent_id => parent[:id] )}.values
|
903
|
+
assert_equal 1, nodes.size
|
904
|
+
simple = nodes[0]
|
905
|
+
assert_kind_of Note, simple
|
906
|
+
assert_equal virtual_classes(:Post), simple.vclass
|
907
|
+
assert !simple.new_record?
|
908
|
+
end
|
909
|
+
|
910
|
+
def test_create_nodes_from_folder_with_defaults
|
911
|
+
login(:tiger)
|
912
|
+
parent = secure!(Project) { Project.create(:name => 'import', :parent_id => nodes_id(:zena), :rgroup_id => groups_id(:managers), :wgroup_id => groups_id(:managers)) }
|
913
|
+
assert !parent.new_record?, "Not a new record"
|
914
|
+
result = secure!(Node) { Node.create_nodes_from_folder(:folder => File.join(Zena::ROOT, 'test', 'fixtures', 'import'), :parent_id => parent[:id] )}.values
|
915
|
+
assert_equal 4, result.size
|
916
|
+
|
917
|
+
children = parent.find(:all, 'children order by name ASC')
|
918
|
+
assert_equal 2, children.size
|
919
|
+
assert_equal 'photos', children[0].name
|
920
|
+
assert_equal groups_id(:managers), children[0].rgroup_id
|
921
|
+
assert_equal 'simple', children[1].name
|
922
|
+
assert_equal groups_id(:managers), children[1].rgroup_id
|
923
|
+
|
924
|
+
# we use children[1] as parent just to use any empty node
|
925
|
+
result = secure!(Node) { Node.create_nodes_from_folder(:folder => File.join(Zena::ROOT, 'test', 'fixtures', 'import'), :parent_id => children[1][:id], :defaults => { :rgroup_id => groups_id(:public) } )}.values
|
926
|
+
assert_equal 4, result.size
|
927
|
+
|
928
|
+
children = children[1].find(:all, 'children order by name ASC')
|
929
|
+
assert_equal 2, children.size
|
930
|
+
assert_equal 'photos', children[0].name
|
931
|
+
assert_equal groups_id(:public), children[0].rgroup_id
|
932
|
+
end
|
933
|
+
|
934
|
+
def test_create_nodes_from_folder_with_publish
|
935
|
+
login(:tiger)
|
936
|
+
nodes = secure!(Node) { Node.create_nodes_from_folder(:folder => File.join(Zena::ROOT, 'test', 'fixtures', 'import'), :parent_id => nodes_id(:zena) )}.values
|
937
|
+
assert_equal Zena::Status[:red], nodes[0].version.status
|
938
|
+
|
939
|
+
nodes = secure!(Node) { Node.create_nodes_from_folder(:folder => File.join(Zena::ROOT, 'test', 'fixtures', 'import'), :parent_id => nodes_id(:cleanWater), :defaults => { :v_status => Zena::Status[:pub] }) }.values
|
940
|
+
assert_equal Zena::Status[:pub], nodes[0].version.status
|
941
|
+
end
|
942
|
+
|
943
|
+
def test_create_nodes_from_archive
|
944
|
+
login(:tiger)
|
945
|
+
res = secure!(Node) { Node.create_nodes_from_folder(:archive => uploaded_archive('import.tgz'), :parent_id => nodes_id(:zena)) }.values
|
946
|
+
photos = secure!(Section) { Section.find_by_name('photos') }
|
947
|
+
assert_kind_of Section, photos
|
948
|
+
bird = secure!(Node) { Node.find_by_parent_id_and_name(photos[:id], 'bird') }
|
949
|
+
assert_kind_of Image, bird
|
950
|
+
assert_equal 56183, bird.version.content.size
|
951
|
+
assert_equal 'Lucy in the sky', bird.version.title
|
952
|
+
visitor.lang = 'fr'
|
953
|
+
bird = secure!(Node) { Node.find_by_parent_id_and_name(photos[:id], 'bird') }
|
954
|
+
assert_equal 'Le septième ciel', bird.version.title
|
955
|
+
assert_equal 1, bird[:inherit]
|
956
|
+
assert_equal groups_id(:public), bird[:rgroup_id]
|
957
|
+
assert_equal groups_id(:workers), bird[:wgroup_id]
|
958
|
+
assert_equal groups_id(:managers), bird[:dgroup_id]
|
959
|
+
|
960
|
+
simple = secure!(Node) { Node.find_by_parent_id_and_name(nodes_id(:zena), 'simple') }
|
961
|
+
assert_equal 0, simple[:inherit]
|
962
|
+
assert_equal groups_id(:managers), simple[:rgroup_id]
|
963
|
+
assert_equal groups_id(:managers), simple[:wgroup_id]
|
964
|
+
assert_equal groups_id(:managers), simple[:dgroup_id]
|
965
|
+
end
|
966
|
+
|
967
|
+
def test_create_nodes_from_zip_archive
|
968
|
+
login(:tiger)
|
969
|
+
res = secure!(Node) { Node.create_nodes_from_folder(:archive => uploaded_zip('letter.zip'), :parent_id => nodes_id(:zena), :class => 'Letter') }.values
|
970
|
+
res.sort!{|a,b| a.name <=> b.name}
|
971
|
+
letter, bird = res[1], res[0]
|
972
|
+
assert_kind_of Note, letter
|
973
|
+
assert_equal 'Letter', letter.klass
|
974
|
+
end
|
975
|
+
|
976
|
+
def test_update_nodes_from_archive
|
977
|
+
preserving_files('test.host/data') do
|
978
|
+
bird = node = nil
|
979
|
+
login(:tiger)
|
980
|
+
node = secure!(Page) { Page.create(:parent_id => nodes_id(:status), :name=>'photos', :v_title => 'my photos', :v_text => '![]!') }
|
981
|
+
assert !node.new_record?
|
982
|
+
assert_nothing_raised { node = secure!(Node) { Node.find_by_path( 'projects/cleanWater/status/photos') } }
|
983
|
+
assert_raise(ActiveRecord::RecordNotFound) { node = secure!(Node) { Node.find_by_path( 'projects/cleanWater/status/photos/bird') } }
|
984
|
+
assert_equal 'photos', node.name
|
985
|
+
assert_no_match %r{I took during my last vacations}, node.version.text
|
986
|
+
v1_id = node.version.id
|
987
|
+
secure!(Node) { Node.create_nodes_from_folder(:archive => uploaded_archive('import.tgz'), :parent_id => nodes_id(:status)) }.values
|
988
|
+
assert_nothing_raised { node = secure!(Node) { Node.find_by_path( 'projects/cleanWater/status/photos') } }
|
989
|
+
assert_nothing_raised { bird = secure!(Node) { Node.find_by_path( 'projects/cleanWater/status/photos/bird') } }
|
990
|
+
assert_match %r{I took during my last vacations}, node.version.text
|
991
|
+
assert_equal v1_id, node.version.id
|
992
|
+
assert_kind_of Image, bird
|
993
|
+
end
|
994
|
+
end
|
995
|
+
|
996
|
+
def test_to_yaml
|
997
|
+
test_site('zena')
|
998
|
+
User.connection.execute "UPDATE users SET time_zone = 'Asia/Jakarta' WHERE id = #{users_id(:tiger)}"
|
999
|
+
login(:tiger)
|
1000
|
+
assert_equal 'Asia/Jakarta', visitor.time_zone
|
1001
|
+
status = secure!(Node) { nodes(:status) }
|
1002
|
+
assert status.update_attributes_with_transformation(:v_status => Zena::Status[:pub], :v_text => "This is a \"link\":#{nodes_zip(:projects)}.", :d_foo => "A picture: !#{nodes_zip(:bird_jpg)}!")
|
1003
|
+
yaml = status.to_yaml
|
1004
|
+
assert_match %r{v_text:\s+\"?This is a "link":\(\.\./\.\.\)\.}, yaml
|
1005
|
+
assert_match %r{d_foo:\s+\"?A picture: !\(\.\./\.\./wiki/bird\)!}, yaml
|
1006
|
+
assert_no_match %r{log_at}, yaml
|
1007
|
+
|
1008
|
+
prop = secure!(Node) { nodes(:proposition) }
|
1009
|
+
assert prop.update_attributes_with_transformation(:v_status => Zena::Status[:pub], :v_text => "This is a \"link\":#{nodes_zip(:projects)}.", :d_foo => "A picture: !#{nodes_zip(:bird_jpg)}!", :log_at => "2008-10-20 14:53")
|
1010
|
+
assert_equal Time.gm(2008,10,20,7,53), prop.log_at
|
1011
|
+
yaml = prop.to_yaml
|
1012
|
+
assert_match %r{v_text:\s+\"?This is a "link":\(\.\./\.\.\)\.}, yaml
|
1013
|
+
assert_match %r{d_foo:\s+\"?A picture: !\(\.\./\.\./wiki/bird\)!}, yaml
|
1014
|
+
assert_match %r{log_at:\s+\"?2008-10-20 14:53:00\"?$}, yaml
|
1015
|
+
end
|
1016
|
+
|
1017
|
+
def test_order_position
|
1018
|
+
login(:tiger)
|
1019
|
+
parent = secure!(Node) { nodes(:cleanWater) }
|
1020
|
+
children = parent.find(:all, 'children')
|
1021
|
+
assert_equal 8, children.size
|
1022
|
+
assert_equal 'bananas', children[0].name
|
1023
|
+
assert_equal 'crocodiles', children[1].name
|
1024
|
+
|
1025
|
+
Node.connection.execute "UPDATE nodes SET position = -1.0 WHERE id = #{nodes_id(:water_pdf)}"
|
1026
|
+
Node.connection.execute "UPDATE nodes SET position = -0.5 WHERE id = #{nodes_id(:lake)}"
|
1027
|
+
children = parent.find(:all, 'children')
|
1028
|
+
assert_equal 8, children.size
|
1029
|
+
assert_equal 'water', children[0].name
|
1030
|
+
assert_equal 'lakeAddress', children[1].name
|
1031
|
+
end
|
1032
|
+
|
1033
|
+
def test_plural_relation
|
1034
|
+
assert Node.plural_relation?('pages')
|
1035
|
+
assert Node.plural_relation?('children')
|
1036
|
+
assert ! Node.plural_relation?('parent')
|
1037
|
+
assert ! Node.plural_relation?('project')
|
1038
|
+
assert Node.plural_relation?('projects')
|
1039
|
+
assert Node.plural_relation?('posts')
|
1040
|
+
assert ! Node.plural_relation?('post')
|
1041
|
+
assert Node.plural_relation?('tags')
|
1042
|
+
assert Node.plural_relation?('tagged')
|
1043
|
+
end
|
1044
|
+
|
1045
|
+
def test_safe_read
|
1046
|
+
login(:ant)
|
1047
|
+
node = secure!(Node) {Node.find(:first, :conditions => ['id = ?', nodes_id(:lake)], :select => "*, 'foozibar' AS foobar") }
|
1048
|
+
status = secure!(Node) { nodes(:status) }
|
1049
|
+
assert_equal 'lakeAddress', node.safe_read('name')
|
1050
|
+
assert_equal 'The lake we love', node.safe_read('v_title')
|
1051
|
+
assert_equal 'gaspard', status.safe_read('d_assigned')
|
1052
|
+
assert_equal 'Between Tanzania, Congo and Zambia', node.safe_read('c_address')
|
1053
|
+
assert_equal 'foozibar', node.safe_read('foobar')
|
1054
|
+
end
|
1055
|
+
|
1056
|
+
def test_classes_for_form
|
1057
|
+
assert_equal [["Page", "Page"],
|
1058
|
+
[" Project", "Project"],
|
1059
|
+
[" Section", "Section"],
|
1060
|
+
[" Skin", "Skin"]], Node.classes_for_form(:class=>'Page', :without=>'Document')
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
def test_change_to_classes_for_form
|
1064
|
+
assert_equal [["Page", "Page"],
|
1065
|
+
[" Project", "Project"],
|
1066
|
+
[" Section", "Section"],
|
1067
|
+
[" Skin", "Skin"]], Project.classes_for_form(:class=>'Page', :without=>'Document')
|
1068
|
+
end
|
1069
|
+
|
1070
|
+
def test_allowed_change_to_classes
|
1071
|
+
node_changes = Node.allowed_change_to_classes.reject{|k| k[/Dummy/]} # In case we are testing after Secure
|
1072
|
+
assert_equal ["Node","Note","Letter","Post","Page","Project","Section","Skin","Reference"], node_changes
|
1073
|
+
|
1074
|
+
assert_equal node_changes, Page.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1075
|
+
assert_equal node_changes, Project.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1076
|
+
assert_equal node_changes, Note.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1077
|
+
assert_equal node_changes, Reference.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1078
|
+
|
1079
|
+
assert_equal ["Document","TextDocument","Template"], Document.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1080
|
+
|
1081
|
+
assert_equal ["Image"], Image.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1082
|
+
|
1083
|
+
assert_equal ["Contact"], Contact.allowed_change_to_classes.reject{|k| k[/Dummy/]}
|
1084
|
+
end
|
1085
|
+
|
1086
|
+
def test_match_one_node_only
|
1087
|
+
login(:tiger)
|
1088
|
+
match = secure!(Node) { Node.find(:all, Node.match_query('opening')) }
|
1089
|
+
assert_equal 1, match.size
|
1090
|
+
assert_equal nodes_id(:opening), match[0][:id]
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
def find_nodes_with_pagination_in_cleanWaterProject(page, per_page = 3, opts=nil)
|
1094
|
+
previous_page, collection, next_page = nil, nil, nil
|
1095
|
+
opts ||= {:conditions => ['project_id = ?', nodes_id(:cleanWater)], :order=>'name ASC'}
|
1096
|
+
collection = secure(Node) do
|
1097
|
+
previous_page, collection, next_page = Node.find_with_pagination(:all, opts.merge(:page=>page, :per_page=>per_page))
|
1098
|
+
collection
|
1099
|
+
end
|
1100
|
+
[previous_page, collection, next_page]
|
1101
|
+
end
|
1102
|
+
|
1103
|
+
def test_find_with_pagination_page_1
|
1104
|
+
login(:tiger)
|
1105
|
+
previous_page, collection, next_page = find_nodes_with_pagination_in_cleanWaterProject(1,3)
|
1106
|
+
assert_nil previous_page
|
1107
|
+
assert_equal 2, next_page
|
1108
|
+
assert_equal 3, collection.size
|
1109
|
+
assert_equal [:bananas, :crocodiles, :lake_jpg].map{|s| nodes_id(s)}, collection.map{|r| r[:id]}
|
1110
|
+
end
|
1111
|
+
|
1112
|
+
def test_find_with_pagination_page_2
|
1113
|
+
login(:tiger)
|
1114
|
+
previous_page, collection, next_page = find_nodes_with_pagination_in_cleanWaterProject(2,3)
|
1115
|
+
assert_equal 1, previous_page
|
1116
|
+
assert_equal 3, next_page
|
1117
|
+
assert_equal 3, collection.size
|
1118
|
+
assert_equal [:lake, :opening, :status].map{|s| nodes_id(s)}, collection.map{|r| r[:id]}
|
1119
|
+
end
|
1120
|
+
|
1121
|
+
def test_find_with_pagination_page_3
|
1122
|
+
login(:tiger)
|
1123
|
+
previous_page, collection, next_page = find_nodes_with_pagination_in_cleanWaterProject(3,3)
|
1124
|
+
assert_equal 2, previous_page
|
1125
|
+
assert_nil next_page
|
1126
|
+
assert_equal 2, collection.size
|
1127
|
+
assert_equal [:track, :water_pdf].map{|s| nodes_id(s)}, collection.map{|r| r[:id]}
|
1128
|
+
end
|
1129
|
+
|
1130
|
+
def test_find_with_pagination_page_4
|
1131
|
+
login(:tiger)
|
1132
|
+
previous_page, collection, next_page = find_nodes_with_pagination_in_cleanWaterProject(4,3)
|
1133
|
+
assert_equal 3, previous_page
|
1134
|
+
assert_nil next_page
|
1135
|
+
assert_nil collection
|
1136
|
+
end
|
1137
|
+
|
1138
|
+
def test_find_match_with_pagination
|
1139
|
+
login(:tiger)
|
1140
|
+
previous_page, match, next_page, count_all = secure!(Node) { Node.find_with_pagination(:all, Node.match_query('opening').merge(:page => 1, :per_page => 3)) }
|
1141
|
+
assert_equal 1, match.size
|
1142
|
+
assert_equal 1, count_all
|
1143
|
+
assert_nil previous_page
|
1144
|
+
assert_nil next_page
|
1145
|
+
assert_equal nodes_id(:opening), match[0][:id]
|
1146
|
+
end
|
1147
|
+
|
1148
|
+
def test_data
|
1149
|
+
login(:ant)
|
1150
|
+
node = secure!(Node) { nodes(:cleanWater) }
|
1151
|
+
entries = node.data
|
1152
|
+
assert_equal 4, entries.size
|
1153
|
+
assert_equal BigDecimal.new("13.0"), entries[2].value
|
1154
|
+
node = secure!(Node) { nodes(:tiger) }
|
1155
|
+
assert_nil node.data
|
1156
|
+
assert_nil node.data_b
|
1157
|
+
end
|
1158
|
+
|
1159
|
+
def test_data_d
|
1160
|
+
login(:ant)
|
1161
|
+
node = secure!(Node) { nodes(:cleanWater) }
|
1162
|
+
entries = node.data_d
|
1163
|
+
assert_equal 1, entries.size
|
1164
|
+
assert_equal BigDecimal.new("56"), entries[0].value
|
1165
|
+
end
|
1166
|
+
|
1167
|
+
def test_icon_by_relation
|
1168
|
+
login(:ant)
|
1169
|
+
node = secure!(Node) { nodes(:cleanWater) } # has an 'icon' relation
|
1170
|
+
icon = node.icon
|
1171
|
+
assert_kind_of Image, icon
|
1172
|
+
assert_equal nodes_id(:lake_jpg), icon[:id]
|
1173
|
+
end
|
1174
|
+
|
1175
|
+
def test_icon_by_first_child
|
1176
|
+
login(:tiger)
|
1177
|
+
node = secure!(Node) { nodes(:wiki) } # has no 'icon' relation
|
1178
|
+
icon = node.icon
|
1179
|
+
assert_kind_of Image, icon
|
1180
|
+
assert_equal nodes_id(:bird_jpg), icon[:id] # first child
|
1181
|
+
# define flower as icon
|
1182
|
+
assert node.update_attributes(:icon_id => nodes_id(:flower_jpg))
|
1183
|
+
node = secure!(Node) { nodes(:wiki) } # reload
|
1184
|
+
icon = node.icon
|
1185
|
+
assert_kind_of Image, icon
|
1186
|
+
assert_equal nodes_id(:flower_jpg), icon[:id] # icon
|
1187
|
+
end
|
1188
|
+
|
1189
|
+
|
1190
|
+
context 'A class\' native classes hash' do
|
1191
|
+
should 'be indexed by kpath' do
|
1192
|
+
assert_equal ['N', 'ND', 'NDI', 'NDT', 'NDTT', 'NN', 'NP', 'NPP', 'NPS', 'NPSS', 'NR', 'NRC', 'NU', 'NUS'], Node.native_classes.keys.sort
|
1193
|
+
assert_equal ['ND', 'NDI', 'NDT', 'NDTT'], Document.native_classes.keys.sort
|
1194
|
+
end
|
1195
|
+
|
1196
|
+
should 'should point to real (ruby) sub-classes and self' do
|
1197
|
+
assert Page.native_classes.values.include?(Page)
|
1198
|
+
assert Page.native_classes.values.include?(Project)
|
1199
|
+
assert !Project.native_classes.values.include?(Page)
|
1200
|
+
end
|
1201
|
+
end
|
1202
|
+
|
1203
|
+
context 'A node' do
|
1204
|
+
setup do
|
1205
|
+
login(:tiger)
|
1206
|
+
@status = secure!(Node){nodes(:status)}
|
1207
|
+
@proposition = secure!(Node){nodes(:proposition)}
|
1208
|
+
end
|
1209
|
+
|
1210
|
+
should 'respond true to vkind_of if it contains a class (real or virtual) in its hierarchy' do
|
1211
|
+
assert @status.vkind_of?('Page')
|
1212
|
+
assert @proposition.vkind_of?('Post')
|
1213
|
+
end
|
1214
|
+
|
1215
|
+
should 'not respond true to vkind_of if it does not contain the class in its heirarchy' do
|
1216
|
+
assert !@status.vkind_of?('Document')
|
1217
|
+
assert !@status.vkind_of?('Post')
|
1218
|
+
end
|
1219
|
+
end
|
1220
|
+
|
1221
|
+
context 'A class (real or virtual)' do
|
1222
|
+
should 'be found from its kpath' do
|
1223
|
+
assert_equal Node, Node.get_class_from_kpath('N')
|
1224
|
+
assert_equal Page, Node.get_class_from_kpath('NP')
|
1225
|
+
assert_equal Image, Node.get_class_from_kpath('NDI')
|
1226
|
+
assert_equal virtual_classes(:Post), Node.get_class_from_kpath('NNP')
|
1227
|
+
assert_equal virtual_classes(:Letter), Node.get_class_from_kpath('NNL')
|
1228
|
+
assert_equal TextDocument, Node.get_class_from_kpath('NDT')
|
1229
|
+
end
|
1230
|
+
end
|
1231
|
+
|
1232
|
+
|
1233
|
+
def test_position_on_create
|
1234
|
+
login(:lion)
|
1235
|
+
node = secure!(Page) { Page.create(:name=>"yoba", :parent_id => nodes_id(:cleanWater), :inherit=>1 ) }
|
1236
|
+
assert !node.new_record?
|
1237
|
+
assert_equal 0.0, node.position
|
1238
|
+
assert node.update_attributes(:position => 5.0)
|
1239
|
+
assert_equal 5.0, node.position
|
1240
|
+
node = secure!(Page) { Page.find_by_id(node.id) } # reload
|
1241
|
+
assert_equal 5.0, node.position
|
1242
|
+
node = secure!(Page) { Page.create(:name=>"babo", :parent_id => nodes_id(:cleanWater), :inherit=>1 ) }
|
1243
|
+
assert !node.new_record?
|
1244
|
+
assert_equal 6.0, node.position
|
1245
|
+
|
1246
|
+
# position has different scopes depending on first two letters of kpath: 'ND', 'NN', 'NP', 'NR'
|
1247
|
+
doc = secure!(Document) { Document.create( :parent_id=>nodes_id(:cleanWater),
|
1248
|
+
:c_file => uploaded_file('water.pdf', 'application/pdf', 'wat'), :v_title => "lazy waters.pdf") }
|
1249
|
+
assert !doc.new_record?
|
1250
|
+
assert_equal 0.0, doc.position
|
1251
|
+
|
1252
|
+
# move
|
1253
|
+
assert node.update_attributes(:parent_id => nodes_id(:wiki))
|
1254
|
+
assert_equal 0.0, node.position
|
1255
|
+
|
1256
|
+
# move a page
|
1257
|
+
node = secure!(Node) { nodes(:art)}
|
1258
|
+
assert_equal 0.0, node.position
|
1259
|
+
assert node.update_attributes(:parent_id => nodes_id(:cleanWater))
|
1260
|
+
assert_equal 6.0, node.position
|
1261
|
+
|
1262
|
+
# move a document
|
1263
|
+
node = secure!(Node) { nodes(:bird_jpg)}
|
1264
|
+
assert_equal 0.0, node.position
|
1265
|
+
assert node.update_attributes(:parent_id => nodes_id(:cleanWater))
|
1266
|
+
assert_equal 0.0, node.position
|
1267
|
+
end
|
1268
|
+
|
1269
|
+
def test_add_comment
|
1270
|
+
login(:lion)
|
1271
|
+
node = secure!(Node) { nodes(:lion) }
|
1272
|
+
assert node.can_comment?
|
1273
|
+
assert_nil node.comments
|
1274
|
+
|
1275
|
+
node = secure!(Node) { nodes(:lion) } # reload
|
1276
|
+
assert node.update_attributes(:m_title => 'changed icon', :m_text => 'new icon is "flower"', :icon_id => nodes_id(:flower_jpg))
|
1277
|
+
|
1278
|
+
node = secure!(Node) { nodes(:lion) } # reload
|
1279
|
+
comments = node.comments
|
1280
|
+
assert_equal 1, comments.size
|
1281
|
+
comment = comments[0]
|
1282
|
+
assert_equal 'changed icon', comment[:title]
|
1283
|
+
assert_equal 'new icon is "flower"', comment[:text]
|
1284
|
+
assert_equal 'Panthera Leo Verneyi', comment.author_name
|
1285
|
+
end
|
1286
|
+
|
1287
|
+
def test_custom_a
|
1288
|
+
login(:lion)
|
1289
|
+
node = secure!(Node) { nodes(:status) }
|
1290
|
+
assert_nil node.custom_a
|
1291
|
+
assert node.update_attributes(:custom_a => 10)
|
1292
|
+
|
1293
|
+
node = secure!(Node) { nodes(:status) }
|
1294
|
+
assert_equal 10, node.custom_a
|
1295
|
+
|
1296
|
+
assert node.update_attributes(:custom_a => '')
|
1297
|
+
|
1298
|
+
node = secure!(Node) { nodes(:status) }
|
1299
|
+
assert_nil node.custom_a
|
1300
|
+
end
|
1301
|
+
|
1302
|
+
def test_replace_attributes_in_values
|
1303
|
+
login(:lion)
|
1304
|
+
node = secure!(Node) { nodes(:status) }
|
1305
|
+
new_attributes = node.replace_attributes_in_values(:foo => "id: [id], v_title: [v_title]")
|
1306
|
+
assert_equal "id: 22, v_title: status title", new_attributes[:foo]
|
1307
|
+
end
|
1308
|
+
|
1309
|
+
def test_copy
|
1310
|
+
login(:lion)
|
1311
|
+
node = secure!(Node) { nodes(:status) }
|
1312
|
+
new_attributes = secure(Node) { Node.transform_attributes(:copy_id => nodes_zip(:bird_jpg), :icon_id => '[id]')}
|
1313
|
+
assert_equal Hash['icon_id', nodes_id(:bird_jpg)], new_attributes
|
1314
|
+
assert node.update_attributes_with_transformation(:copy_id => nodes_zip(:bird_jpg), :icon_id => '[id]')
|
1315
|
+
assert_equal nodes_id(:bird_jpg), node.find(:first, 'icon')[:id]
|
1316
|
+
end
|
1317
|
+
|
1318
|
+
def test_export
|
1319
|
+
without_files('/test.host/tmp') do
|
1320
|
+
login(:tiger)
|
1321
|
+
export_folder = File.join(SITES_ROOT, 'test.host', 'tmp')
|
1322
|
+
FileUtils::mkpath(export_folder)
|
1323
|
+
# Add a page and a text document into 'wiki'
|
1324
|
+
assert secure!(Node) { Node.create(:v_title=>"Hello World!", :v_text => "Bonjour", :parent_id => nodes_id(:wiki), :inherit=>1 ) }
|
1325
|
+
assert secure!(TextDocument) { TextDocument.create(:name=>"yoba", :parent_id => nodes_id(:wiki), :v_text => "#header { color:red; }\n#footer { color:blue; }", :c_content_type => 'text/css') }
|
1326
|
+
wiki = secure!(Node) { nodes(:wiki) }
|
1327
|
+
assert_equal 4, wiki.find(:all, "children").size
|
1328
|
+
wiki.export_to_folder(export_folder)
|
1329
|
+
assert File.exist?(File.join(export_folder, 'wiki.zml'))
|
1330
|
+
assert File.exist?(File.join(export_folder, 'wiki'))
|
1331
|
+
assert File.exist?(File.join(export_folder, 'wiki', 'bird.jpg'))
|
1332
|
+
assert !File.exist?(File.join(export_folder, 'wiki', 'bird.zml'))
|
1333
|
+
assert File.exist?(File.join(export_folder, 'wiki', 'flower.jpg'))
|
1334
|
+
assert !File.exist?(File.join(export_folder, 'wiki', 'flower.zml'))
|
1335
|
+
assert File.exist?(File.join(export_folder, 'wiki', 'yoba.css'))
|
1336
|
+
assert !File.exist?(File.join(export_folder, 'wiki', 'yoba.zml'))
|
1337
|
+
assert File.exist?(File.join(export_folder, 'wiki', 'HelloWorld.zml'))
|
1338
|
+
end
|
1339
|
+
end
|
1340
|
+
|
1341
|
+
def test_archive
|
1342
|
+
without_files('/test.host/tmp') do
|
1343
|
+
login(:tiger)
|
1344
|
+
export_folder = File.join(SITES_ROOT, 'test.host', 'tmp')
|
1345
|
+
FileUtils::mkpath(export_folder)
|
1346
|
+
# Add a page and a text document into 'wiki'
|
1347
|
+
assert secure!(Node) { Node.create(:v_title=>"Hello World!", :v_text => "Bonjour", :parent_id => nodes_id(:wiki), :inherit=>1 ) }
|
1348
|
+
assert secure!(TextDocument) { TextDocument.create(:name=>"yoba", :parent_id => nodes_id(:wiki), :v_text => "#header { color:red; }\n#footer { color:blue; }", :c_content_type => 'text/css') }
|
1349
|
+
wiki = secure!(Node) { nodes(:wiki) }
|
1350
|
+
assert_equal 4, wiki.find(:all, "children").size
|
1351
|
+
archive = wiki.archive
|
1352
|
+
`tar -C '#{export_folder}' -xz < '#{archive.path}'`
|
1353
|
+
assert File.exist?(File.join(export_folder, 'wiki.zml'))
|
1354
|
+
assert File.exist?(File.join(export_folder, 'wiki'))
|
1355
|
+
assert File.exist?(File.join(export_folder, 'wiki', 'bird.jpg'))
|
1356
|
+
assert !File.exist?(File.join(export_folder, 'wiki', 'bird.zml'))
|
1357
|
+
assert File.exist?(File.join(export_folder, 'wiki', 'flower.jpg'))
|
1358
|
+
assert !File.exist?(File.join(export_folder, 'wiki', 'flower.zml'))
|
1359
|
+
assert File.exist?(File.join(export_folder, 'wiki', 'yoba.css'))
|
1360
|
+
assert !File.exist?(File.join(export_folder, 'wiki', 'yoba.zml'))
|
1361
|
+
assert File.exist?(File.join(export_folder, 'wiki', 'HelloWorld.zml'))
|
1362
|
+
end
|
1363
|
+
end
|
1364
|
+
|
1365
|
+
def test_translate_pseudo_id
|
1366
|
+
login(:lion)
|
1367
|
+
{ '11' => nodes_id(:zena),
|
1368
|
+
nodes_zip(:cleanWater).to_i => nodes_id(:cleanWater),
|
1369
|
+
nodes_zip(:status) => nodes_id(:status)
|
1370
|
+
}.each do |k,v|
|
1371
|
+
assert_equal v, secure(Node) { Node.translate_pseudo_id(k) }, "'#{k}' should translate to '#{v}'"
|
1372
|
+
end
|
1373
|
+
end
|
1374
|
+
|
1375
|
+
def test_translate_pseudo_id_path
|
1376
|
+
login(:lion)
|
1377
|
+
lion = secure!(Node) { nodes(:lion) }
|
1378
|
+
people = secure!(Node) { nodes(:people) }
|
1379
|
+
cleanWater = secure!(Node) { nodes(:cleanWater) }
|
1380
|
+
assert lion.update_attributes(:name => 'status')
|
1381
|
+
assert_equal 'people/status', lion.fullpath
|
1382
|
+
# path base_node
|
1383
|
+
{ ['(/projects/cleanWater/status)', nil] => nodes_id(:status),
|
1384
|
+
['(/projects/cleanWater/status)', people] => nodes_id(:status),
|
1385
|
+
['(status)', people] => nodes_id(:lion),
|
1386
|
+
['(status)', cleanWater] => nodes_id(:status),
|
1387
|
+
}.each do |k,v|
|
1388
|
+
assert_equal v, secure(Node) { Node.translate_pseudo_id(k[0],:id,k[1]) }, "'#{k.inspect}' should translate to '#{v}'"
|
1389
|
+
end
|
1390
|
+
end
|
1391
|
+
|
1392
|
+
def test_unparse_assets
|
1393
|
+
login(:lion)
|
1394
|
+
@node = secure!(Node) { nodes(:status) }
|
1395
|
+
assert @node.update_attributes(:v_text => "Hello this is \"art\":#{nodes_zip(:art)}. !#{nodes_zip(:bird_jpg)}!")
|
1396
|
+
assert_equal "Hello this is \"art\":(../../../collections/art). !(../../wiki/bird)!", @node.unparse_assets(@node.version.text, self, 'v_text')
|
1397
|
+
end
|
1398
|
+
|
1399
|
+
def test_parse_assets
|
1400
|
+
login(:lion)
|
1401
|
+
@node = secure!(Node) { nodes(:status) }
|
1402
|
+
assert @node.update_attributes(:v_text => "Hello this is \"art\":(../../../collections/art).")
|
1403
|
+
assert_equal "Hello this is \"art\":#{nodes_zip(:art)}.", @node.parse_assets(@node.version.text, self, 'v_text')
|
1404
|
+
end
|
1405
|
+
|
1406
|
+
context 'Finding safe method type' do
|
1407
|
+
context 'for safe methods in class' do
|
1408
|
+
should 'return method name' do
|
1409
|
+
['m_text', 'inherit', 'l_status', 'l_comment', 'm_text', 'inherit'].each do |k|
|
1410
|
+
assert_equal k, Contact.safe_method_type([k])[:method]
|
1411
|
+
end
|
1412
|
+
end
|
1413
|
+
end
|
1414
|
+
|
1415
|
+
context 'for methods not declared as safe in the class' do
|
1416
|
+
should 'return nil' do
|
1417
|
+
['puts', 'raise', 'blah', 'system', 'id'].each do |k|
|
1418
|
+
assert_nil Contact.safe_method_type([k])
|
1419
|
+
end
|
1420
|
+
end
|
1421
|
+
end
|
1422
|
+
|
1423
|
+
context 'for relation pseudo-methods' do
|
1424
|
+
should 'use rel and try' do
|
1425
|
+
['hot_status', 'blah_comment', 'blah_zips', 'blah_id', 'blah_ids'].each do |k|
|
1426
|
+
assert_match %r{rel\[.#{k.gsub(/_.+/,'')}.\]\.try}, Contact.safe_method_type([k])[:method]
|
1427
|
+
end
|
1428
|
+
end
|
1429
|
+
end
|
1430
|
+
|
1431
|
+
context 'for safe methods in version using nested alias' do
|
1432
|
+
should 'return version and method name when safe' do
|
1433
|
+
['v_status', 'v_title'].each do |k|
|
1434
|
+
assert_equal "version.#{k[2..-1]}", Contact.safe_method_type([k])[:method]
|
1435
|
+
end
|
1436
|
+
end
|
1437
|
+
|
1438
|
+
should 'return version and safe_read when unsafe' do
|
1439
|
+
['v_foo'].each do |k|
|
1440
|
+
assert_equal "version.safe_read(\"#{k[2..-1]}\")", Contact.safe_method_type([k])[:method]
|
1441
|
+
end
|
1442
|
+
end
|
1443
|
+
end
|
1444
|
+
|
1445
|
+
context 'for dynattributes using nested alias' do
|
1446
|
+
should 'return dyn access' do
|
1447
|
+
['d_something', 'd_foo'].each do |k|
|
1448
|
+
assert_equal "version.dyn[\"#{k[2..-1]}\"]", Contact.safe_method_type([k])[:method]
|
1449
|
+
end
|
1450
|
+
end
|
1451
|
+
end
|
1452
|
+
|
1453
|
+
context 'for methods in content using nested alias' do
|
1454
|
+
should 'use safe_content_read when method not declared' do
|
1455
|
+
['c_first_name', 'c_name', 'c_system'].each do |k|
|
1456
|
+
assert_equal "version.safe_content_read(\"#{k[2..-1]}\")", Node.safe_method_type([k])[:method]
|
1457
|
+
end
|
1458
|
+
end
|
1459
|
+
|
1460
|
+
should 'use method name when safe' do
|
1461
|
+
['c_first_name', 'c_name'].each do |k|
|
1462
|
+
assert_equal "version.content.#{k[2..-1]}", Contact.safe_method_type([k])[:method]
|
1463
|
+
end
|
1464
|
+
end
|
1465
|
+
end
|
1466
|
+
end
|
1467
|
+
|
1468
|
+
def test_safe_
|
1469
|
+
['c_file', 'c_blah', 'c_system'].each do |k|
|
1470
|
+
assert_match %r{safe_content_read\(.#{k.gsub(/^.+_/,'')}.\)}, Contact.safe_method_type([k])[:method], "#{k} should use safe_read"
|
1471
|
+
end
|
1472
|
+
|
1473
|
+
|
1474
|
+
['c_file'].each do |k|
|
1475
|
+
assert Image.safe_method_type([k]), "#{k} should be safe"
|
1476
|
+
end
|
1477
|
+
end
|
1478
|
+
|
1479
|
+
def test_sync_name_on_v_title_change_no_sync
|
1480
|
+
login(:tiger)
|
1481
|
+
# We do not care anymore if the node was not in sync
|
1482
|
+
node = secure!(Node) { nodes(:status) }
|
1483
|
+
assert node.update_attributes(:v_title => 'simply different')
|
1484
|
+
assert node.publish
|
1485
|
+
assert_equal 'simplyDifferent', node.name
|
1486
|
+
visitor.lang = 'fr'
|
1487
|
+
# not ref lang
|
1488
|
+
node = secure!(Node) { nodes(:people) }
|
1489
|
+
assert node.update_attributes(:v_title => 'nice people')
|
1490
|
+
assert node.publish
|
1491
|
+
assert_equal 'fr', node.version.lang
|
1492
|
+
assert_equal 'people', node.name
|
1493
|
+
end
|
1494
|
+
|
1495
|
+
def test_sync_name_on_v_title_change
|
1496
|
+
login(:tiger)
|
1497
|
+
# was in sync, correct lang
|
1498
|
+
node = secure!(Node) { nodes(:people) }
|
1499
|
+
assert node.update_attributes(:v_title => 'nice people')
|
1500
|
+
assert_equal 'people', node.name
|
1501
|
+
assert_equal Zena::Status[:red], node.version.status
|
1502
|
+
assert node.publish
|
1503
|
+
assert_equal 'nicePeople', node.name
|
1504
|
+
end
|
1505
|
+
|
1506
|
+
def test_sync_name_before_publish_if_single_version
|
1507
|
+
login(:ant)
|
1508
|
+
node = secure!(Node) { Node.create(:v_title => 'Eve', :parent_id => nodes_id(:people)) }
|
1509
|
+
assert_equal Zena::Status[:red], node.version.status
|
1510
|
+
assert_equal 'Eve', node.name
|
1511
|
+
node.update_attributes(:v_title => 'Lilith')
|
1512
|
+
assert_equal Zena::Status[:red], node.version.status
|
1513
|
+
assert_equal 'Lilith', node.name
|
1514
|
+
end
|
1515
|
+
|
1516
|
+
def test_sync_name_on_v_title_change_auto_pub_no_sync
|
1517
|
+
Site.connection.execute "UPDATE sites set auto_publish = 1, redit_time = 3600 WHERE id = #{sites_id(:zena)}"
|
1518
|
+
Version.connection.execute "UPDATE versions set updated_at = '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}' WHERE node_id IN (#{nodes_id(:status)},#{nodes_id(:people)})"
|
1519
|
+
login(:tiger)
|
1520
|
+
|
1521
|
+
node = secure!(Node) { nodes(:status) }
|
1522
|
+
assert node.update_attributes(:v_title => 'simply different')
|
1523
|
+
assert_equal 'simplyDifferent', node.name
|
1524
|
+
visitor.lang = 'fr'
|
1525
|
+
# not ref lang
|
1526
|
+
node = secure!(Node) { nodes(:people) }
|
1527
|
+
assert node.update_attributes(:v_title => 'nice people')
|
1528
|
+
assert_equal 'fr', node.version.lang
|
1529
|
+
assert_equal 'people', node.name
|
1530
|
+
end
|
1531
|
+
|
1532
|
+
def test_sync_name_on_v_title_change_auto_pub
|
1533
|
+
test_site('zena')
|
1534
|
+
Site.connection.execute "UPDATE sites set auto_publish = 1, redit_time = 3600 WHERE id = #{sites_id(:zena)}"
|
1535
|
+
Version.connection.execute "UPDATE versions set updated_at = '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}' WHERE node_id IN (#{nodes_id(:people)})"
|
1536
|
+
login(:tiger)
|
1537
|
+
node = secure!(Node) { nodes(:people) }
|
1538
|
+
# was in sync, correct lang
|
1539
|
+
assert_equal node.name, node.version.title
|
1540
|
+
assert node.update_attributes(:v_title => 'nice people')
|
1541
|
+
node = secure!(Node) { nodes(:people) }
|
1542
|
+
assert_equal 'nice people', node.version.title
|
1543
|
+
assert_equal 'nicePeople', node.name
|
1544
|
+
end
|
1545
|
+
|
1546
|
+
# FIXME: write test
|
1547
|
+
def test_assets
|
1548
|
+
print 'P'
|
1549
|
+
# sweep_cache (save) => remove asset folder
|
1550
|
+
# render math ?
|
1551
|
+
end
|
1552
|
+
|
1553
|
+
def find_node_by_pseudo(string, base_node = nil)
|
1554
|
+
secure(Node) { Node.find_node_by_pseudo(string, base_node || @node) }
|
1555
|
+
end
|
1556
|
+
|
1557
|
+
def test_should_parse_event_at_date
|
1558
|
+
I18n.locale = 'fr'
|
1559
|
+
visitor.time_zone = 'Asia/Jakarta'
|
1560
|
+
v = secure(Node) {Node.new('event_at' => '9-9-2009 15:17')}
|
1561
|
+
assert_equal Time.utc(2009,9,9,8,17), v.event_at
|
1562
|
+
end
|
1563
|
+
|
1564
|
+
def test_should_parse_log_at_date
|
1565
|
+
I18n.locale = 'fr'
|
1566
|
+
visitor.time_zone = 'Asia/Jakarta'
|
1567
|
+
v = secure(Node) {Node.new('log_at' => '9-9-2009 15:17')}
|
1568
|
+
assert_equal Time.utc(2009,9,9,8,17), v.log_at
|
1569
|
+
end
|
1570
|
+
|
1571
|
+
def test_parse_keys
|
1572
|
+
node = secure(Node) { nodes(:status) }
|
1573
|
+
assert_equal ['d_assigned', 'v_text', 'v_title', 'v_summary', 'd_problems', 'd_archive'], node.parse_keys
|
1574
|
+
|
1575
|
+
note = secure(Node) { nodes(:opening) }
|
1576
|
+
assert_equal ['v_text', 'v_title', 'v_summary'], note.parse_keys
|
1577
|
+
end
|
1578
|
+
end
|