open_conference_ware 1.0.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/.autotest +14 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +21 -0
- data/.rspec +1 -0
- data/.travis.yml +18 -0
- data/CHANGES.md +280 -0
- data/CONTRIBUTORS.markdown +17 -0
- data/Gemfile +21 -0
- data/Gemfile.lock +296 -0
- data/Guardfile +24 -0
- data/LICENSE.txt +23 -0
- data/README.markdown +173 -0
- data/Rakefile +27 -0
- data/TODO.txt +22 -0
- data/app/assets/images/open_conference_ware/accept.png +0 -0
- data/app/assets/images/open_conference_ware/arrow-left.png +0 -0
- data/app/assets/images/open_conference_ware/arrow-out.png +0 -0
- data/app/assets/images/open_conference_ware/arrow-right.png +0 -0
- data/app/assets/images/open_conference_ware/arrow-up.png +0 -0
- data/app/assets/images/open_conference_ware/arrow_refresh.png +0 -0
- data/app/assets/images/open_conference_ware/comment.png +0 -0
- data/app/assets/images/open_conference_ware/comment_edit.png +0 -0
- data/app/assets/images/open_conference_ware/delete.png +0 -0
- data/app/assets/images/open_conference_ware/disk.png +0 -0
- data/app/assets/images/open_conference_ware/document-blank.png +0 -0
- data/app/assets/images/open_conference_ware/document.png +0 -0
- data/app/assets/images/open_conference_ware/edit.png +0 -0
- data/app/assets/images/open_conference_ware/extras/001_01.png +0 -0
- data/app/assets/images/open_conference_ware/extras/001_05.png +0 -0
- data/app/assets/images/open_conference_ware/extras/001_05x16.png +0 -0
- data/app/assets/images/open_conference_ware/extras/001_21.png +0 -0
- data/app/assets/images/open_conference_ware/extras/001_23.png +0 -0
- data/app/assets/images/open_conference_ware/extras/001_24.png +0 -0
- data/app/assets/images/open_conference_ware/extras/001_29.png +0 -0
- data/app/assets/images/open_conference_ware/extras/01.png +0 -0
- data/app/assets/images/open_conference_ware/extras/05.png +0 -0
- data/app/assets/images/open_conference_ware/extras/06.png +0 -0
- data/app/assets/images/open_conference_ware/extras/1.png +0 -0
- data/app/assets/images/open_conference_ware/extras/14.png +0 -0
- data/app/assets/images/open_conference_ware/extras/16.png +0 -0
- data/app/assets/images/open_conference_ware/extras/2.png +0 -0
- data/app/assets/images/open_conference_ware/extras/21.png +0 -0
- data/app/assets/images/open_conference_ware/extras/28.png +0 -0
- data/app/assets/images/open_conference_ware/extras/3.png +0 -0
- data/app/assets/images/open_conference_ware/extras/31.png +0 -0
- data/app/assets/images/open_conference_ware/extras/32.png +0 -0
- data/app/assets/images/open_conference_ware/extras/35.png +0 -0
- data/app/assets/images/open_conference_ware/extras/36.png +0 -0
- data/app/assets/images/open_conference_ware/extras/4.png +0 -0
- data/app/assets/images/open_conference_ware/extras/44.png +0 -0
- data/app/assets/images/open_conference_ware/extras/45.png +0 -0
- data/app/assets/images/open_conference_ware/extras/46.png +0 -0
- data/app/assets/images/open_conference_ware/extras/cancel.png +0 -0
- data/app/assets/images/open_conference_ware/extras/cancelx16.png +0 -0
- data/app/assets/images/open_conference_ware/extras/icon.trashcan.gif +0 -0
- data/app/assets/images/open_conference_ware/favorite.png +0 -0
- data/app/assets/images/open_conference_ware/feed.png +0 -0
- data/app/assets/images/open_conference_ware/heart.png +0 -0
- data/app/assets/images/open_conference_ware/house.png +0 -0
- data/app/assets/images/open_conference_ware/ignite_portland_header3_clear.png +0 -0
- data/app/assets/images/open_conference_ware/ignite_portland_header3_clear_cropped.png +0 -0
- data/app/assets/images/open_conference_ware/jquery.wysiwyg.gif +0 -0
- data/app/assets/images/open_conference_ware/lock.png +0 -0
- data/app/assets/images/open_conference_ware/new_window.gif +0 -0
- data/app/assets/images/open_conference_ware/openid-icon.gif +0 -0
- data/app/assets/images/open_conference_ware/pencil.png +0 -0
- data/app/assets/images/open_conference_ware/plus.png +0 -0
- data/app/assets/images/open_conference_ware/quote.png +0 -0
- data/app/assets/images/open_conference_ware/rails.png +0 -0
- data/app/assets/images/open_conference_ware/redx.png +0 -0
- data/app/assets/images/open_conference_ware/reset-fff.png +0 -0
- data/app/assets/images/open_conference_ware/spinner-big.gif +0 -0
- data/app/assets/images/open_conference_ware/spinner.gif +0 -0
- data/app/assets/images/open_conference_ware/star.png +0 -0
- data/app/assets/images/open_conference_ware/tag_blue.png +0 -0
- data/app/assets/images/open_conference_ware/time.png +0 -0
- data/app/assets/javascripts/open_conference_ware/application.js +18 -0
- data/app/assets/javascripts/open_conference_ware/base.js +15 -0
- data/app/assets/javascripts/open_conference_ware/favorites.js +76 -0
- data/app/assets/javascripts/open_conference_ware/ie.js +2 -0
- data/app/assets/javascripts/open_conference_ware/menu.js +47 -0
- data/app/assets/javascripts/open_conference_ware/persona.js +10 -0
- data/app/assets/javascripts/open_conference_ware/proposals.js +208 -0
- data/app/assets/javascripts/open_conference_ware/schedule.js +20 -0
- data/app/assets/javascripts/open_conference_ware/spinner.js +11 -0
- data/app/assets/javascripts/open_conference_ware/util.js +23 -0
- data/app/assets/stylesheets/open_conference_ware/application.css +8 -0
- data/app/assets/stylesheets/open_conference_ware/common.css.scss +491 -0
- data/app/assets/stylesheets/open_conference_ware/custom.css.scss +1033 -0
- data/app/assets/stylesheets/open_conference_ware/scaffold.css +54 -0
- data/app/controllers/open_conference_ware/application_controller.rb +488 -0
- data/app/controllers/open_conference_ware/authentications_controller.rb +42 -0
- data/app/controllers/open_conference_ware/comments_controller.rb +86 -0
- data/app/controllers/open_conference_ware/events_controller.rb +36 -0
- data/app/controllers/open_conference_ware/manage/events_controller.rb +157 -0
- data/app/controllers/open_conference_ware/manage/snippets_controller.rb +110 -0
- data/app/controllers/open_conference_ware/proposals_controller.rb +521 -0
- data/app/controllers/open_conference_ware/rooms_controller.rb +130 -0
- data/app/controllers/open_conference_ware/schedule_items_controller.rb +128 -0
- data/app/controllers/open_conference_ware/selector_votes_controller.rb +71 -0
- data/app/controllers/open_conference_ware/session_types_controller.rb +123 -0
- data/app/controllers/open_conference_ware/tracks_controller.rb +118 -0
- data/app/controllers/open_conference_ware/user_favorites_controller.rb +68 -0
- data/app/controllers/open_conference_ware/users_controller.rb +120 -0
- data/app/helpers/open_conference_ware/application_helper.rb +167 -0
- data/app/helpers/open_conference_ware/authentications_helper.rb +25 -0
- data/app/helpers/open_conference_ware/cache_if_helper.rb +13 -0
- data/app/helpers/open_conference_ware/display_link_to_helper.rb +25 -0
- data/app/helpers/open_conference_ware/display_textile_for_helper.rb +11 -0
- data/app/helpers/open_conference_ware/field_annotation_helper.rb +11 -0
- data/app/helpers/open_conference_ware/focus_helper.rb +16 -0
- data/app/helpers/open_conference_ware/localcss_helper.rb +10 -0
- data/app/helpers/open_conference_ware/page_title_helper.rb +17 -0
- data/app/helpers/open_conference_ware/proposals_helper.rb +54 -0
- data/app/helpers/open_conference_ware/rooms_helper.rb +5 -0
- data/app/helpers/open_conference_ware/scroll_to_helper.rb +15 -0
- data/app/helpers/open_conference_ware/session_types_helper.rb +5 -0
- data/app/helpers/open_conference_ware/snippets_helper.rb +36 -0
- data/app/helpers/open_conference_ware/time_range_helper.rb +198 -0
- data/app/helpers/open_conference_ware/tracks_helper.rb +9 -0
- data/app/helpers/open_conference_ware/user_favorites_helper.rb +15 -0
- data/app/mailers/open_conference_ware/speaker_mailer.rb +51 -0
- data/app/mixins/open_conference_ware/breadcrumbs_mixin.rb +76 -0
- data/app/mixins/open_conference_ware/cache_lookups_mixin.rb +128 -0
- data/app/mixins/open_conference_ware/faux_routes_mixin.rb +83 -0
- data/app/mixins/open_conference_ware/normalize_url_mixin.rb +40 -0
- data/app/mixins/open_conference_ware/public_attributes_mixin.rb +62 -0
- data/app/mixins/open_conference_ware/schedule_overlaps_mixin.rb +12 -0
- data/app/mixins/open_conference_ware/settings_checkers_mixin.rb +50 -0
- data/app/mixins/open_conference_ware/simple_slug_mixin.rb +26 -0
- data/app/models/open_conference_ware/authentication.rb +47 -0
- data/app/models/open_conference_ware/base.rb +6 -0
- data/app/models/open_conference_ware/comment.rb +26 -0
- data/app/models/open_conference_ware/event.rb +227 -0
- data/app/models/open_conference_ware/proposal.rb +625 -0
- data/app/models/open_conference_ware/room.rb +42 -0
- data/app/models/open_conference_ware/schedule.rb +216 -0
- data/app/models/open_conference_ware/schedule_item.rb +55 -0
- data/app/models/open_conference_ware/selector_vote.rb +22 -0
- data/app/models/open_conference_ware/session_type.rb +33 -0
- data/app/models/open_conference_ware/snippet.rb +58 -0
- data/app/models/open_conference_ware/track.rb +51 -0
- data/app/models/open_conference_ware/user.rb +262 -0
- data/app/models/open_conference_ware/user_favorite.rb +42 -0
- data/app/observers/open_conference_ware/cache_watcher.rb +42 -0
- data/app/views/layouts/open_conference_ware/_header.html.erb +106 -0
- data/app/views/layouts/open_conference_ware/application.atom.erb +1 -0
- data/app/views/layouts/open_conference_ware/application.html.erb +126 -0
- data/app/views/layouts/open_conference_ware/scaffold.html.erb +21 -0
- data/app/views/open_conference_ware/404.html.erb +8 -0
- data/app/views/open_conference_ware/422.html.erb +11 -0
- data/app/views/open_conference_ware/500.html.erb +11 -0
- data/app/views/open_conference_ware/_email_link.html.erb +24 -0
- data/app/views/open_conference_ware/_google_analytics.html.erb +9 -0
- data/app/views/open_conference_ware/authentications/_developer.html.erb +7 -0
- data/app/views/open_conference_ware/authentications/_openid.html.erb +11 -0
- data/app/views/open_conference_ware/authentications/_persona.html.erb +17 -0
- data/app/views/open_conference_ware/authentications/sign_in.html.erb +12 -0
- data/app/views/open_conference_ware/comments/_list.html.erb +31 -0
- data/app/views/open_conference_ware/comments/index.atom.builder +25 -0
- data/app/views/open_conference_ware/comments/index.html.erb +3 -0
- data/app/views/open_conference_ware/events/index.html.erb +9 -0
- data/app/views/open_conference_ware/events/show.html.erb +0 -0
- data/app/views/open_conference_ware/events/speakers.html.erb +7 -0
- data/app/views/open_conference_ware/manage/events/_form.html.erb +107 -0
- data/app/views/open_conference_ware/manage/events/edit.html.erb +3 -0
- data/app/views/open_conference_ware/manage/events/index.html.erb +41 -0
- data/app/views/open_conference_ware/manage/events/new.html.erb +3 -0
- data/app/views/open_conference_ware/manage/events/proposals.html.erb +133 -0
- data/app/views/open_conference_ware/manage/events/show.html.erb +181 -0
- data/app/views/open_conference_ware/manage/snippets/_form.html.erb +30 -0
- data/app/views/open_conference_ware/manage/snippets/edit.html.erb +3 -0
- data/app/views/open_conference_ware/manage/snippets/index.html.erb +34 -0
- data/app/views/open_conference_ware/manage/snippets/new.html.erb +3 -0
- data/app/views/open_conference_ware/manage/snippets/show.html.erb +32 -0
- data/app/views/open_conference_ware/proposals/_admin_controls.html.erb +33 -0
- data/app/views/open_conference_ware/proposals/_form.html.erb +381 -0
- data/app/views/open_conference_ware/proposals/_list.html.erb +164 -0
- data/app/views/open_conference_ware/proposals/_list_concise.html.erb +93 -0
- data/app/views/open_conference_ware/proposals/_manage_speakers.html.erb +30 -0
- data/app/views/open_conference_ware/proposals/_room_control.html.erb +21 -0
- data/app/views/open_conference_ware/proposals/_schedule_block.html.erb +8 -0
- data/app/views/open_conference_ware/proposals/_schedule_control.html.erb +13 -0
- data/app/views/open_conference_ware/proposals/_search_speakers.html.erb +20 -0
- data/app/views/open_conference_ware/proposals/_sub_list.html.erb +65 -0
- data/app/views/open_conference_ware/proposals/_sub_list_for_kind.html.erb +31 -0
- data/app/views/open_conference_ware/proposals/_transition_control.html.erb +16 -0
- data/app/views/open_conference_ware/proposals/create.html.erb +29 -0
- data/app/views/open_conference_ware/proposals/edit.html.erb +7 -0
- data/app/views/open_conference_ware/proposals/index.atom.builder +63 -0
- data/app/views/open_conference_ware/proposals/index.html.erb +46 -0
- data/app/views/open_conference_ware/proposals/new.html.erb +3 -0
- data/app/views/open_conference_ware/proposals/schedule.html.erb +108 -0
- data/app/views/open_conference_ware/proposals/sessions_index_terse.html.erb +22 -0
- data/app/views/open_conference_ware/proposals/show.html.erb +316 -0
- data/app/views/open_conference_ware/proposals/stats.html.erb +72 -0
- data/app/views/open_conference_ware/rooms/_form.html.erb +36 -0
- data/app/views/open_conference_ware/rooms/edit.html.erb +3 -0
- data/app/views/open_conference_ware/rooms/index.html.erb +13 -0
- data/app/views/open_conference_ware/rooms/new.html.erb +3 -0
- data/app/views/open_conference_ware/rooms/show.html.erb +27 -0
- data/app/views/open_conference_ware/schedule_items/_form.html.erb +35 -0
- data/app/views/open_conference_ware/schedule_items/edit.html.erb +3 -0
- data/app/views/open_conference_ware/schedule_items/index.html.erb +31 -0
- data/app/views/open_conference_ware/schedule_items/new.html.erb +3 -0
- data/app/views/open_conference_ware/schedule_items/show.html.erb +30 -0
- data/app/views/open_conference_ware/selector_votes/index.html.erb +81 -0
- data/app/views/open_conference_ware/session_types/_form.html.erb +23 -0
- data/app/views/open_conference_ware/session_types/edit.html.erb +3 -0
- data/app/views/open_conference_ware/session_types/index.html.erb +18 -0
- data/app/views/open_conference_ware/session_types/new.html.erb +3 -0
- data/app/views/open_conference_ware/session_types/show.html.erb +14 -0
- data/app/views/open_conference_ware/speaker_mailer/speaker_email.text.erb +14 -0
- data/app/views/open_conference_ware/tracks/_colors.css.erb +7 -0
- data/app/views/open_conference_ware/tracks/_form.html.erb +36 -0
- data/app/views/open_conference_ware/tracks/edit.html.erb +3 -0
- data/app/views/open_conference_ware/tracks/index.html.erb +25 -0
- data/app/views/open_conference_ware/tracks/new.html.erb +3 -0
- data/app/views/open_conference_ware/tracks/show.html.erb +19 -0
- data/app/views/open_conference_ware/user_favorites/index.html.erb +12 -0
- data/app/views/open_conference_ware/users/_account_box.html.erb +10 -0
- data/app/views/open_conference_ware/users/_block.html.erb +80 -0
- data/app/views/open_conference_ware/users/_list.html.erb +17 -0
- data/app/views/open_conference_ware/users/edit.html.erb +73 -0
- data/app/views/open_conference_ware/users/index.html.erb +28 -0
- data/app/views/open_conference_ware/users/new.html.erb +7 -0
- data/app/views/open_conference_ware/users/proposals.html.erb +24 -0
- data/app/views/open_conference_ware/users/show.html.erb +5 -0
- data/app/views/open_conference_ware/welcome/test.html.haml +8 -0
- data/bin/rails +8 -0
- data/ci/Gemfile.ci +13 -0
- data/ci/copy_database_config.rb +6 -0
- data/ci/database.mysql.yml +5 -0
- data/ci/database.postgresql.yml +4 -0
- data/ci/database.sqlite.yml +5 -0
- data/config/initializers/acts_as_taggable_on.rb +2 -0
- data/config/initializers/date_time_formats.rb +9 -0
- data/config/routes.rb +74 -0
- data/db/migrate/20131203235128_create_open_conference_ware_authentications.rb +14 -0
- data/db/migrate/20131203235216_create_open_conference_ware_comments.rb +14 -0
- data/db/migrate/20131203235418_create_open_conference_ware_events.rb +27 -0
- data/db/migrate/20131203235524_create_open_conference_ware_proposals.rb +36 -0
- data/db/migrate/20131203235723_create_open_conference_ware_rooms.rb +20 -0
- data/db/migrate/20131203235831_create_open_conference_ware_schedule_items.rb +18 -0
- data/db/migrate/20131203235910_create_open_conference_ware_selector_votes.rb +10 -0
- data/db/migrate/20131203235934_create_open_conference_ware_session_types.rb +14 -0
- data/db/migrate/20131204000008_create_open_conference_ware_snippets.rb +15 -0
- data/db/migrate/20131204000048_create_open_conference_ware_taggings.rb +16 -0
- data/db/migrate/20131204000129_create_open_conference_ware_tags.rb +7 -0
- data/db/migrate/20131204000147_create_open_conference_ware_tracks.rb +15 -0
- data/db/migrate/20131204000230_create_open_conference_ware_user_favorites.rb +10 -0
- data/db/migrate/20131204000251_create_open_conference_ware_users.rb +24 -0
- data/db/migrate/20131204000355_create_proposals_users_join_table.rb +8 -0
- data/db/seeds.rb +31 -0
- data/features/comment_create.feature +9 -0
- data/features/comment_destroy.feature +22 -0
- data/features/comment_new.feature +22 -0
- data/features/step_definitions/authentication_steps.rb +22 -0
- data/features/step_definitions/comment_create_steps.rb +5 -0
- data/features/step_definitions/comment_destroy_steps.rb +13 -0
- data/features/step_definitions/comment_new_steps.rb +41 -0
- data/features/step_definitions/notification_steps.rb +3 -0
- data/features/step_definitions/web_steps.rb +263 -0
- data/features/support/env.rb +58 -0
- data/features/support/helpers.rb +17 -0
- data/features/support/paths.rb +35 -0
- data/gem-public_cert.pem +22 -0
- data/lib/defer_proxy.rb +127 -0
- data/lib/ext/color_rgb_serializer_fix.rb +18 -0
- data/lib/ext/string_possessiveize.rb +7 -0
- data/lib/ext/vpim_icalendar_extra_properties.rb +25 -0
- data/lib/generators/open_conference_ware/install/USAGE +12 -0
- data/lib/generators/open_conference_ware/install/install_generator.rb +35 -0
- data/lib/generators/open_conference_ware/install/templates/config_initializer.rb +110 -0
- data/lib/generators/open_conference_ware/install/templates/omniauth_initializer.rb +33 -0
- data/lib/open_conference_ware.rb +156 -0
- data/lib/open_conference_ware/dependencies.rb +38 -0
- data/lib/open_conference_ware/engine.rb +38 -0
- data/lib/open_conference_ware/omni_auth_builder.rb +8 -0
- data/lib/open_conference_ware/version.rb +3 -0
- data/lib/rwikibot_page_drone.rb +70 -0
- data/lib/tasks/.gitkeep +0 -0
- data/lib/tasks/audio.rake +53 -0
- data/lib/tasks/cucumber.rake +65 -0
- data/lib/tasks/export.rake +170 -0
- data/lib/tasks/mediawiki.rake +96 -0
- data/lib/tasks/open_conference_ware_tasks.rake +16 -0
- data/lib/tasks/schedule.rake +103 -0
- data/lib/tasks/snippets.rake +23 -0
- data/open_conference_ware.gemspec +67 -0
- data/original_graphics/favorite.psd +0 -0
- data/spec/controllers/open_conference_ware/application_controller_spec.rb +309 -0
- data/spec/controllers/open_conference_ware/authentications_controller_spec.rb +87 -0
- data/spec/controllers/open_conference_ware/comments_controller_spec.rb +146 -0
- data/spec/controllers/open_conference_ware/events_controller_spec.rb +102 -0
- data/spec/controllers/open_conference_ware/manage_events_controller_spec.rb +103 -0
- data/spec/controllers/open_conference_ware/proposals_controller_spec.rb +1273 -0
- data/spec/controllers/open_conference_ware/rooms_controller_spec.rb +190 -0
- data/spec/controllers/open_conference_ware/selector_votes_controller_spec.rb +263 -0
- data/spec/controllers/open_conference_ware/session_types_controller_spec.rb +190 -0
- data/spec/controllers/open_conference_ware/sessions_routing_spec.rb +13 -0
- data/spec/controllers/open_conference_ware/tracks_controller_spec.rb +190 -0
- data/spec/controllers/open_conference_ware/user_favorites_controller_spec.rb +127 -0
- data/spec/controllers/open_conference_ware/users_controller_spec.rb +166 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/images/.keep +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +30 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/01_open_conference_ware.rb +110 -0
- data/spec/dummy/config/initializers/02_omniauth.rb +17 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +3 -0
- data/spec/dummy/db/schema.rb +219 -0
- data/spec/dummy/db/seeds.rb +10 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/log/.keep +0 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/factories/authentication_factory.rb +16 -0
- data/spec/factories/common_factory.rb +4 -0
- data/spec/factories/event_factory.rb +26 -0
- data/spec/factories/proposal_factory.rb +57 -0
- data/spec/factories/proposal_user_factory.rb +7 -0
- data/spec/factories/room_factory.rb +11 -0
- data/spec/factories/schedule_item_factory.rb +13 -0
- data/spec/factories/session_types_factory.rb +10 -0
- data/spec/factories/snippet_factory.rb +7 -0
- data/spec/factories/track_factory.rb +12 -0
- data/spec/factories/user_factory.rb +22 -0
- data/spec/factories/user_favorite_factory.rb +7 -0
- data/spec/features/sign_in_spec.rb +11 -0
- data/spec/features/snippets_spec.rb +38 -0
- data/spec/fixtures/open_conference_ware_comments.yml +27 -0
- data/spec/fixtures/open_conference_ware_events.yml +56 -0
- data/spec/fixtures/open_conference_ware_proposals.yml +256 -0
- data/spec/fixtures/open_conference_ware_rooms.yml +13 -0
- data/spec/fixtures/open_conference_ware_schedule_items.yml +23 -0
- data/spec/fixtures/open_conference_ware_session_types.yml +19 -0
- data/spec/fixtures/open_conference_ware_snippets.yml +62 -0
- data/spec/fixtures/open_conference_ware_tracks.yml +65 -0
- data/spec/fixtures/open_conference_ware_user_favorites.yml +7 -0
- data/spec/fixtures/open_conference_ware_users.yml +87 -0
- data/spec/helpers/open_conference_ware/application_helper_spec.rb +58 -0
- data/spec/helpers/open_conference_ware/authentications_helper_spec.rb +15 -0
- data/spec/helpers/open_conference_ware/display_link_to_helper_spec.rb +52 -0
- data/spec/helpers/open_conference_ware/proposals_helper_spec.rb +32 -0
- data/spec/helpers/open_conference_ware/rooms_helper_spec.rb +11 -0
- data/spec/helpers/open_conference_ware/session_types_helper_spec.rb +15 -0
- data/spec/helpers/open_conference_ware/time_range_helper_spec.rb +56 -0
- data/spec/helpers/open_conference_ware/tracks_helper_spec.rb +11 -0
- data/spec/helpers/open_conference_ware/user_favorites_helper_spec.rb +11 -0
- data/spec/integration/open_conference_ware/cache_lookups_mixin_spec.rb +122 -0
- data/spec/mixins/open_conference_ware/normalize_url_mixin_spec.rb +65 -0
- data/spec/models/open_conference_ware/authentication_spec.rb +67 -0
- data/spec/models/open_conference_ware/event_spec.rb +211 -0
- data/spec/models/open_conference_ware/proposal_spec.rb +606 -0
- data/spec/models/open_conference_ware/room_spec.rb +14 -0
- data/spec/models/open_conference_ware/schedule_item_spec.rb +12 -0
- data/spec/models/open_conference_ware/schedule_spec.rb +358 -0
- data/spec/models/open_conference_ware/selector_vote_spec.rb +12 -0
- data/spec/models/open_conference_ware/session_type_spec.rb +15 -0
- data/spec/models/open_conference_ware/snippet_spec.rb +13 -0
- data/spec/models/open_conference_ware/speaker_mailer_spec.rb +91 -0
- data/spec/models/open_conference_ware/track_spec.rb +36 -0
- data/spec/models/open_conference_ware/user_favorite_spec.rb +41 -0
- data/spec/models/open_conference_ware/user_spec.rb +77 -0
- data/spec/ocw_config.rb +76 -0
- data/spec/rcov.opts +2 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +55 -0
- data/spec/spec_helper_customizations.rb +125 -0
- data/spec/support/add_all_helpers_to_view.rb +24 -0
- data/spec/support/authenticated_test_helper.rb +27 -0
- data/spec/support/fixture_shortcuts.rb +18 -0
- data/spec/support/omniauth.rb +34 -0
- data/spec/support/valid_params_extraction.rb +15 -0
- data/spec/views/open_conference_ware/proposals/_room_control.html.erb_spec.rb +23 -0
- data/spec/views/open_conference_ware/proposals/_transition_control.html.erb_spec.rb +14 -0
- data/spec/views/open_conference_ware/proposals/show.html.erb_spec.rb +128 -0
- data/spec/views/open_conference_ware/rooms/index.html.erb_spec.rb +19 -0
- data/spec/views/open_conference_ware/rooms/show.html.erb_spec.rb +15 -0
- data/spec/views/open_conference_ware/selector_votes/index.html.erb_spec.rb +41 -0
- data/spec/views/open_conference_ware/session_types/edit.html.erb_spec.rb +25 -0
- data/spec/views/open_conference_ware/session_types/index.html.erb_spec.rb +19 -0
- data/spec/views/open_conference_ware/session_types/new.html.erb_spec.rb +24 -0
- data/spec/views/open_conference_ware/session_types/show.html.erb_spec.rb +18 -0
- data/spec/views/open_conference_ware/tracks/edit.html.erb_spec.rb +25 -0
- data/spec/views/open_conference_ware/tracks/index.html.erb_spec.rb +56 -0
- data/spec/views/open_conference_ware/tracks/new.html.erb_spec.rb +26 -0
- data/spec/views/open_conference_ware/tracks/show.html.erb_spec.rb +23 -0
- data/spec/views/open_conference_ware/user_favorites/index.html.erb_spec.rb +29 -0
- data/spec/views/open_conference_ware/users/index_spec.rb +24 -0
- data/util/add_id3_tags_to_mp3.rb +57 -0
- data/util/schedule_demo.rb +36 -0
- data/util/seed_schedule.rb +61 -0
- data/util/sessions_to_lanyrd.rb +166 -0
- data/util/transfer_schedule_items.rb +25 -0
- data/util/update_proposal_status_from_voting_spreadsheet.rb +26 -0
- data/util/user_favorites_contention_report.rb +42 -0
- data/util/user_favorites_contention_report.sh +9 -0
- data/vendor/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/vendor/assets/fonts/glyphicons-halflings-regular.svg +228 -0
- data/vendor/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/vendor/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/vendor/assets/images/farbtastic/marker.png +0 -0
- data/vendor/assets/images/farbtastic/mask.png +0 -0
- data/vendor/assets/images/farbtastic/wheel.png +0 -0
- data/vendor/assets/images/idselector/aol.ico +0 -0
- data/vendor/assets/images/idselector/arrow.gif +0 -0
- data/vendor/assets/images/idselector/arrow_white_back.png +0 -0
- data/vendor/assets/images/idselector/arrow_white_forward.png +0 -0
- data/vendor/assets/images/idselector/blogger.ico +0 -0
- data/vendor/assets/images/idselector/claimid.ico +0 -0
- data/vendor/assets/images/idselector/flickr.ico +0 -0
- data/vendor/assets/images/idselector/google.ico +0 -0
- data/vendor/assets/images/idselector/lj.ico +0 -0
- data/vendor/assets/images/idselector/myopenid.ico +0 -0
- data/vendor/assets/images/idselector/openid.ico +0 -0
- data/vendor/assets/images/idselector/technorati.ico +0 -0
- data/vendor/assets/images/idselector/verisign.ico +0 -0
- data/vendor/assets/images/idselector/vidoop2.ico +0 -0
- data/vendor/assets/images/idselector/vox.ico +0 -0
- data/vendor/assets/images/idselector/yahoo.ico +0 -0
- data/vendor/assets/javascripts/audiojs/audio.min.js +23 -0
- data/vendor/assets/javascripts/audiojs/audiojs.swf +0 -0
- data/vendor/assets/javascripts/audiojs/player-graphics.gif +0 -0
- data/vendor/assets/javascripts/bootstrap.js +1999 -0
- data/vendor/assets/javascripts/farbtastic.js +329 -0
- data/vendor/assets/javascripts/html5shiv.js +8 -0
- data/vendor/assets/javascripts/idselector.js +538 -0
- data/vendor/assets/javascripts/idselector~original.js +532 -0
- data/vendor/assets/javascripts/jquery-migrate-1.2.1.js +521 -0
- data/vendor/assets/javascripts/jquery.localScroll.js +106 -0
- data/vendor/assets/javascripts/jquery.scrollTo.js +174 -0
- data/vendor/assets/javascripts/respond.min.js +6 -0
- data/vendor/assets/stylesheets/bootstrap-theme.css +384 -0
- data/vendor/assets/stylesheets/bootstrap.css +6805 -0
- data/vendor/assets/stylesheets/farbtastic.css.scss +38 -0
- data/vendor/assets/stylesheets/persona-buttons.css +229 -0
- data/vendor/assets/stylesheets/reset-fonts-grids.css +7 -0
- metadata +1174 -0
- metadata.gz.sig +0 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
/*---[ user favorites ]----------------------------------------------*/
|
2
|
+
|
3
|
+
// Return the proposal_id (e.g., "266") bound to a user favorite control, which
|
4
|
+
// is a JQuery +element+ object.
|
5
|
+
var proposal_id_pattern = /^favorite_(\d+)$/;
|
6
|
+
function proposal_id_for(element) {
|
7
|
+
var klasses = element.attr('class').split(' ');
|
8
|
+
for (i in klasses) {
|
9
|
+
klass = klasses[i];
|
10
|
+
var matcher = klass.match(proposal_id_pattern);
|
11
|
+
if (matcher) {
|
12
|
+
return matcher[1];
|
13
|
+
}
|
14
|
+
}
|
15
|
+
return null;
|
16
|
+
}
|
17
|
+
|
18
|
+
function bind_user_favorite_controls() {
|
19
|
+
$('.favorite').each(function() {
|
20
|
+
if( !logged_in() ) {
|
21
|
+
$(this).addClass('disabled');
|
22
|
+
}
|
23
|
+
}).click(function(event) {
|
24
|
+
target = $(this);
|
25
|
+
|
26
|
+
if( !logged_in() ) {
|
27
|
+
alert("You must be logged in to add items to your favorites.");
|
28
|
+
} else {
|
29
|
+
target.addClass('working');
|
30
|
+
|
31
|
+
mode = target.hasClass('checked') ? 'remove' : 'add';
|
32
|
+
proposal_id = proposal_id_for(target);
|
33
|
+
|
34
|
+
$.ajax({
|
35
|
+
'type': 'PUT',
|
36
|
+
'url': app.favorites_path + '/modify.json',
|
37
|
+
'dataType': 'json',
|
38
|
+
'data': {
|
39
|
+
'authenticity_token': app.authenticity_token,
|
40
|
+
'proposal_id': proposal_id,
|
41
|
+
'mode': mode
|
42
|
+
},
|
43
|
+
'complete': function(request,status){
|
44
|
+
target.removeClass('working');
|
45
|
+
},
|
46
|
+
'success': function(data, status) {
|
47
|
+
nodes = $('.favorite_'+proposal_id);
|
48
|
+
switch(mode) {
|
49
|
+
case 'add':
|
50
|
+
nodes.addClass('checked');
|
51
|
+
break;
|
52
|
+
case 'remove':
|
53
|
+
nodes.removeClass('checked');
|
54
|
+
break;
|
55
|
+
}
|
56
|
+
},
|
57
|
+
'error': function(request, status, error) {
|
58
|
+
alert('There was an error! Status: ' + status + ". Error: " + error);
|
59
|
+
}
|
60
|
+
});
|
61
|
+
}
|
62
|
+
return false;
|
63
|
+
});
|
64
|
+
}
|
65
|
+
|
66
|
+
function populate_user_favorites() {
|
67
|
+
if( logged_in() ) {
|
68
|
+
$.getJSON( app.favorites_path + '.json?join=1',
|
69
|
+
function(data) {
|
70
|
+
jQuery.each( data, function(i, proposal_id) {
|
71
|
+
$( '.favorite_' + proposal_id ).addClass('checked');
|
72
|
+
});
|
73
|
+
}
|
74
|
+
)
|
75
|
+
}
|
76
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
// Highlight the active menu item. Works by adding an 'active' class to a
|
2
|
+
// menu item based on the current URL. Status can be reported via 'console.log'
|
3
|
+
// if the JavaScript interpreter provides one.
|
4
|
+
function activate_menu_item () {
|
5
|
+
var should_log = false;
|
6
|
+
|
7
|
+
var debug = function (message) {
|
8
|
+
if(should_log && (typeof console == "object")) console.log('activate_menu_item: ' + message);
|
9
|
+
};
|
10
|
+
|
11
|
+
// Names of menu item classes and regexp fragments that activate them:
|
12
|
+
var menu_items_and_activation_patterns = [
|
13
|
+
["bofs", "events/.+?bof/.+"],
|
14
|
+
["proposals_or_sessions", "(events/.+?/)?(proposals|sessions)"],
|
15
|
+
["schedule", "events/.+?/schedule"],
|
16
|
+
["speakers", "events/.+?/speakers"]
|
17
|
+
];
|
18
|
+
|
19
|
+
// Get the URL pathname from the browser:
|
20
|
+
var pathname = window.location.pathname;
|
21
|
+
// Or set a specific one when developing:
|
22
|
+
// var pathname = "/events/2009/speakers";
|
23
|
+
var menu_item_matched = null;
|
24
|
+
|
25
|
+
// Match the first pattern:
|
26
|
+
for (var i in menu_items_and_activation_patterns) {
|
27
|
+
var menu_item = menu_items_and_activation_patterns[i][0];
|
28
|
+
var pattern = menu_items_and_activation_patterns[i][1];
|
29
|
+
var re = new RegExp("^/" + pattern + "(?:/.*)?$");
|
30
|
+
if (pathname.match(re)) {
|
31
|
+
menu_item_matched = menu_item;
|
32
|
+
debug('Matched menu item "'+menu_item+'" based on pattern: '+ pattern);
|
33
|
+
break;
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
// Activate the menu item:
|
38
|
+
if (menu_item_matched) {
|
39
|
+
$('#header .'+menu_item_matched).parent().addClass('active');
|
40
|
+
} else {
|
41
|
+
debug("No match for pathname: " + pathname);
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
$(document).ready(function () {
|
46
|
+
activate_menu_item();
|
47
|
+
});
|
@@ -0,0 +1,208 @@
|
|
1
|
+
/*---[ proposal_controls ]--------------------------------------------*/
|
2
|
+
// AJAXified controls for managing proposals.
|
3
|
+
|
4
|
+
// Bind all proposal controls, call this once for on a page using these controls.
|
5
|
+
function bind_all_proposal_controls() {
|
6
|
+
bind_proposal_generic_control('room', null);
|
7
|
+
bind_proposal_generic_control('transition', null);
|
8
|
+
bind_proposal_schedule_controls();
|
9
|
+
}
|
10
|
+
|
11
|
+
// Bind AJAX controls for manipulate a proposal's values.
|
12
|
+
//
|
13
|
+
// Arguments:
|
14
|
+
// * kind: The kind of the controls, e.g., "room" or "transition". Required.
|
15
|
+
// * elements: Elements to bind. Optional, if null will bind to all appropriate controls on page.
|
16
|
+
function bind_proposal_generic_control(kind, elements) {
|
17
|
+
if (! elements) {
|
18
|
+
elements = $('.proposal_'+kind+'_control');
|
19
|
+
}
|
20
|
+
elements.removeAttr('disabled').change(function(event) {
|
21
|
+
target = $(this);
|
22
|
+
$e = event; $t = target; $k = kind;
|
23
|
+
|
24
|
+
event.preventDefault();
|
25
|
+
name = target.attr('name');
|
26
|
+
value = target.attr('value');
|
27
|
+
proposal_id = target.attr('x_proposal_id');
|
28
|
+
format = 'json';
|
29
|
+
url = app.proposals_path + '/' + proposal_id + '.' + format;
|
30
|
+
|
31
|
+
data = { 'authenticity_token': app.authenticity_token };
|
32
|
+
data[name] = value;
|
33
|
+
$d = data;
|
34
|
+
|
35
|
+
$.ajax({
|
36
|
+
'type': 'PUT',
|
37
|
+
'url': url,
|
38
|
+
'data': data,
|
39
|
+
'dataType': format,
|
40
|
+
'beforeSend': function(request) {
|
41
|
+
target.attr('disabled', true);
|
42
|
+
page_spinner_start();
|
43
|
+
},
|
44
|
+
'complete': function (XMLHttpRequest, textStatus) {
|
45
|
+
page_spinner_stop();
|
46
|
+
target.removeAttr('disabled');
|
47
|
+
},
|
48
|
+
'success': function (response, textStatus) {
|
49
|
+
$r = response;
|
50
|
+
html_field = '_'+kind+'_control_html';
|
51
|
+
if (response && response[html_field]) {
|
52
|
+
// Extact the "option" elements from the JSON repsone's HTML and update the "select" element.
|
53
|
+
var matcher = new RegExp('(<option[\\s\\S]+</option>)', 'gi').exec(response[html_field]);
|
54
|
+
if (matcher) {
|
55
|
+
target.html(matcher[1]);
|
56
|
+
}
|
57
|
+
|
58
|
+
// Hide or unhide the room and schedule controls based on the proposal's state
|
59
|
+
var dependent = target.parent().parent().find('.proposal_admin_controls_dependent_on_confirmed_status');
|
60
|
+
if (response['proposal_status'] == 'confirmed') {
|
61
|
+
dependent.show();
|
62
|
+
} else {
|
63
|
+
dependent.hide();
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
67
|
+
});
|
68
|
+
|
69
|
+
return false;
|
70
|
+
});
|
71
|
+
}
|
72
|
+
|
73
|
+
function bind_proposal_schedule_controls() {
|
74
|
+
$('.proposal_schedule_control_container select').change(function(event) {
|
75
|
+
// Clears all time select elements if any are set to blank.
|
76
|
+
target = $(this);
|
77
|
+
|
78
|
+
if(target.attr('selectedIndex')==0) {
|
79
|
+
target.parent().find('select').attr('selectedIndex',0);
|
80
|
+
}
|
81
|
+
}).change(function(event) {
|
82
|
+
target = $(this);
|
83
|
+
// Submits the schedule form on change if all three select element have values.
|
84
|
+
if(target.parent().find('option:selected[value]').get().length == 3) {
|
85
|
+
|
86
|
+
data = {
|
87
|
+
'authenticity_token': app.authenticity_token,
|
88
|
+
'start_time[date]': target.parent().find('select.date').attr('value'),
|
89
|
+
'start_time[hour]': target.parent().find('select.hour').attr('value'),
|
90
|
+
'start_time[minute]': target.parent().find('select.minute').attr('value')
|
91
|
+
};
|
92
|
+
proposal_id = target.parent().attr('id').split('_').pop();
|
93
|
+
format = 'json';
|
94
|
+
url = app.proposals_path + '/' + proposal_id + '.' + format;
|
95
|
+
|
96
|
+
$.ajax({
|
97
|
+
'type': 'PUT',
|
98
|
+
'url': url,
|
99
|
+
'data': data,
|
100
|
+
'dataType': format,
|
101
|
+
'beforeSend': function(request) {
|
102
|
+
target.parent().find('select').attr('disabled', true);
|
103
|
+
page_spinner_start();
|
104
|
+
},
|
105
|
+
'complete': function (XMLHttpRequest, textStatus) {
|
106
|
+
page_spinner_stop();
|
107
|
+
target.parent().find('select').removeAttr('disabled');
|
108
|
+
}
|
109
|
+
});
|
110
|
+
|
111
|
+
return false;
|
112
|
+
}
|
113
|
+
});
|
114
|
+
|
115
|
+
$('.proposal_schedule_control_container select.hour').change(function(event){
|
116
|
+
// If no minute value is set, set minutes to 00 when hour is changed to a non-blank value.
|
117
|
+
target = $(this);
|
118
|
+
if(target.attr('selectedIndex') != 0) {
|
119
|
+
minute_select = target.parent().find('select.minute');
|
120
|
+
if(minute_select.attr('selectedIndex') == 0) {
|
121
|
+
minute_select.attr('selectedIndex',1).trigger('change');
|
122
|
+
}
|
123
|
+
}
|
124
|
+
});
|
125
|
+
}
|
126
|
+
|
127
|
+
/*---[ proposal_mailto ]----------------------------------------------*/
|
128
|
+
|
129
|
+
// Return array of email addresses for a given +proposal_id+. Example:
|
130
|
+
// addresses_for_manage_proposal_id(129)
|
131
|
+
function addresses_for_manage_proposal_id(proposal_id) {
|
132
|
+
// TODO Why does this next line trigger a "identifier or string for value in attribute selector but found 'X'." where X is the +proposal_id+?
|
133
|
+
row = $('.row-for-proposal[x_proposal_id='+proposal_id+']');
|
134
|
+
addresses = new Array();
|
135
|
+
row.find('.user-email').each(function() {addresses.push(this.value)});
|
136
|
+
return addresses;
|
137
|
+
}
|
138
|
+
|
139
|
+
// Update the mailto used to contact presenters. The +is_add+ is true if
|
140
|
+
// adding, false if removing. The +addresses+ are an array of addresses to
|
141
|
+
// add or remove.
|
142
|
+
// update_manage_proposals_mailto(true, ["bubba@smith.com", "billy.sue@smith.com"])
|
143
|
+
function update_manage_proposals_mailto(is_add, addresses) {
|
144
|
+
element = $('.send-email-link');
|
145
|
+
href = element.attr('href');
|
146
|
+
prefix = 'mailto:';
|
147
|
+
parser = new RegExp('^'+prefix+'(.+)$');
|
148
|
+
stripper = new RegExp('bcc=', 'gi');
|
149
|
+
matcher = parser.exec(href);
|
150
|
+
addresses_hash = matcher ? array_to_hash(matcher[1].replace(stripper, '').split(',')) : [];
|
151
|
+
$(addresses).each(function(){
|
152
|
+
if (is_add) {
|
153
|
+
addresses_hash[this] = true;
|
154
|
+
} else {
|
155
|
+
delete addresses_hash[this];
|
156
|
+
}
|
157
|
+
});
|
158
|
+
result = prefix+(hash_keys(addresses_hash).map(function(me) {return 'bcc='+me}).join(','));
|
159
|
+
element.attr('href', result);
|
160
|
+
return result;
|
161
|
+
}
|
162
|
+
|
163
|
+
// Update the hidden field proposal_ids, used to notify presenters. The +is_add+ is true if
|
164
|
+
// adding, false if removing.
|
165
|
+
// update_manage_proposals_notify_list(true, 123)
|
166
|
+
function update_manage_proposals_notify_list(is_add, proposal_id) {
|
167
|
+
element = $('#accepted_email_proposal_ids, #rejected_email_proposal_ids');
|
168
|
+
value = element.attr('value');
|
169
|
+
proposal_id_hash = array_to_hash(value.split(','));
|
170
|
+
if (is_add) {
|
171
|
+
proposal_id_hash[proposal_id] = true;
|
172
|
+
} else {
|
173
|
+
delete proposal_id_hash[proposal_id];
|
174
|
+
}
|
175
|
+
result = hash_keys(proposal_id_hash).join(',');
|
176
|
+
element.attr('value', result);
|
177
|
+
return element;
|
178
|
+
}
|
179
|
+
|
180
|
+
function bind_manage_proposals_checkboxes() {
|
181
|
+
$('.send-email-checkbox').click(function(event) {
|
182
|
+
target = $(this); $t = target;
|
183
|
+
row = target.parents('.row-for-proposal');
|
184
|
+
proposal_id = row.attr('x_proposal_id');
|
185
|
+
proposal_addresses = addresses_for_manage_proposal_id(proposal_id);
|
186
|
+
update_manage_proposals_mailto(target.attr('checked'), proposal_addresses);
|
187
|
+
update_manage_proposals_notify_list(target.attr('checked'), proposal_id);
|
188
|
+
return true;
|
189
|
+
});
|
190
|
+
}
|
191
|
+
|
192
|
+
/*---[ proposals sub lists ]------------------------------------------*/
|
193
|
+
|
194
|
+
// Change the UI of the proposal_sub_list so that the proposals are hidden behind a link.
|
195
|
+
function archive_proposals_sub_list(event_id) {
|
196
|
+
var container = $('#sub_list_for_event_'+event_id+' .proposals_sub_list_for_kind_proposals');
|
197
|
+
var toggle = container.find('.proposals_sub_list_for_kind_toggle');
|
198
|
+
var content = container.find('.proposals_sub_list_for_kind_content');
|
199
|
+
toggle.click(function(event) {
|
200
|
+
var target = $(this); $t = target;
|
201
|
+
var partner = target.parents('.proposals_sub_list_for_kind').find('.proposals_sub_list_for_kind_content');
|
202
|
+
target.hide();
|
203
|
+
partner.show();
|
204
|
+
return false;
|
205
|
+
});
|
206
|
+
toggle.show();
|
207
|
+
content.hide();
|
208
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
/*---[ schedule hover ]----------------------------------------------*/
|
2
|
+
|
3
|
+
function bind_calendar_items() {
|
4
|
+
$('ul.calendar_items li.vevent').hover(
|
5
|
+
function() {
|
6
|
+
$(this).addClass('hover');
|
7
|
+
box = $(this).children('.session_info');
|
8
|
+
|
9
|
+
bottom = $(document).scrollTop() + $(window).height();
|
10
|
+
box_bottom = box.offset().top + box.outerHeight();
|
11
|
+
|
12
|
+
if ( box_bottom > bottom ) box.css('top',-(box_bottom - bottom + 10));
|
13
|
+
if( !$(this).hasClass('generic_item')) box.css('border-color',$(this).css('background-color'));
|
14
|
+
},
|
15
|
+
function() {
|
16
|
+
$(this).removeClass('hover');
|
17
|
+
$(this).children('.session_info').css('top',0);
|
18
|
+
}
|
19
|
+
)
|
20
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
/*---[ page_spinner ]-------------------------------------------------*/
|
2
|
+
|
3
|
+
// Display a big spinner in the middle of the page.
|
4
|
+
function page_spinner_start() {
|
5
|
+
$(document.createElement("div")).attr('id','page_spinner').text('Working...').prependTo('body').show(100);
|
6
|
+
}
|
7
|
+
|
8
|
+
// Hide the big spinner displayed in the middle of the page by`page_spinner_start`.
|
9
|
+
function page_spinner_stop() {
|
10
|
+
$('#page_spinner').hide(100, function(){ $(this).remove() });
|
11
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
/*---[ data structure conveniences ]----------------------------------*/
|
2
|
+
|
3
|
+
// Return an array of keys in +hash+. Example:
|
4
|
+
// hash_keys({'foo': 'bar', 'baz': 'qux'}); // ['foo', 'baz']
|
5
|
+
function hash_keys(hash) {
|
6
|
+
array = new Array();
|
7
|
+
for (key in hash) {
|
8
|
+
if (key) {
|
9
|
+
array.push(key);
|
10
|
+
}
|
11
|
+
}
|
12
|
+
return array;
|
13
|
+
}
|
14
|
+
|
15
|
+
// Return hash where each key is an element of the +array+. Example:
|
16
|
+
// array_to_hash(['foo', 'bar']); // {'foo': true, 'bar': true}
|
17
|
+
function array_to_hash(array) {
|
18
|
+
hash = new Array();
|
19
|
+
for (i in array) {
|
20
|
+
hash[array[i]] = true;
|
21
|
+
}
|
22
|
+
return hash;
|
23
|
+
}
|
@@ -0,0 +1,491 @@
|
|
1
|
+
/* @override
|
2
|
+
http://localhost:3000/stylesheets/common.css?1232745414
|
3
|
+
http://localhost:3000/stylesheets/common.css?1232776873
|
4
|
+
*/
|
5
|
+
|
6
|
+
/*===[ Generic ]======================================================*/
|
7
|
+
|
8
|
+
/*---[ flash notices ]------------------------------------------------*/
|
9
|
+
|
10
|
+
.flash {}
|
11
|
+
.flash p {
|
12
|
+
font-style: italic;
|
13
|
+
margin: 0.5em 0 0.5em 0;
|
14
|
+
padding: 0.25em; }
|
15
|
+
.flash .notice {
|
16
|
+
color: #555555;
|
17
|
+
background: #ECF1FF;
|
18
|
+
border: 1px solid #6776FF; }
|
19
|
+
.flash .success {
|
20
|
+
color: #555555;
|
21
|
+
background: #E4FFDA;
|
22
|
+
border: 1px solid #aFFF70; }
|
23
|
+
.flash .failure {
|
24
|
+
color: #555555;
|
25
|
+
background: #FFE9E9;
|
26
|
+
border: 1px solid #FF2605; }
|
27
|
+
|
28
|
+
/*---[ errors ]-------------------------------------------------------*/
|
29
|
+
|
30
|
+
#errorExplanation {
|
31
|
+
border: 2px solid #c60000;
|
32
|
+
padding: 7px;
|
33
|
+
padding-bottom: 12px;
|
34
|
+
margin-bottom: 20px;
|
35
|
+
background-color: #; }
|
36
|
+
#errorExplanation h2 {
|
37
|
+
text-align: left;
|
38
|
+
font-weight: bold;
|
39
|
+
padding: 5px 5px 5px 15px;
|
40
|
+
font-size: 12px;
|
41
|
+
margin: -7px;
|
42
|
+
background-color: #c60000;
|
43
|
+
color: #fff; }
|
44
|
+
#errorExplanation p {
|
45
|
+
color: #333;
|
46
|
+
margin-top: 0.5em;
|
47
|
+
margin-bottom: 0;
|
48
|
+
padding: 5px; }
|
49
|
+
|
50
|
+
#errorExplanation ul {
|
51
|
+
margin: 0;
|
52
|
+
}
|
53
|
+
#errorExplanation li {
|
54
|
+
margin-left: 1em;
|
55
|
+
font-size: 12px;
|
56
|
+
list-style: square; }
|
57
|
+
|
58
|
+
.fieldWithErrors {
|
59
|
+
margin: 0;
|
60
|
+
display: inline;
|
61
|
+
background-color: inherit; }
|
62
|
+
.fieldWithErrors label {
|
63
|
+
color: red; }
|
64
|
+
.fieldWithErrors textarea,
|
65
|
+
.fieldWithErrors input[type=text],
|
66
|
+
.fieldWithErrors input[type=checkbox] {
|
67
|
+
border: 2px solid red; }
|
68
|
+
.fieldWithErrors > input[type=checkbox] {
|
69
|
+
border: 3px dotted red;
|
70
|
+
color: green;
|
71
|
+
background-color: blue;
|
72
|
+
padding: 1em;
|
73
|
+
margin: 1em; }
|
74
|
+
|
75
|
+
/*---[ hoverable elements ]-------------------------------------------*/
|
76
|
+
|
77
|
+
.hoverable {}
|
78
|
+
.hoverable a {
|
79
|
+
display: block;
|
80
|
+
border-bottom: 1px dotted #ccc;
|
81
|
+
line-height: 1.3em;
|
82
|
+
padding: 0.3em; }
|
83
|
+
.hoverable a:hover {
|
84
|
+
background: #F9F39C;
|
85
|
+
text-decoration: none !important; }
|
86
|
+
.hoverable img {
|
87
|
+
vertical-align: middle; }
|
88
|
+
|
89
|
+
/*---[ standard-form pages ]------------------------------------------*/
|
90
|
+
|
91
|
+
.standard-form {}
|
92
|
+
.standard-form h4,
|
93
|
+
.standard-form label {
|
94
|
+
color: #777777; }
|
95
|
+
.standard-form h4 {
|
96
|
+
padding: 0.5em 0 0.25em 0; }
|
97
|
+
.standard-form td h4 {
|
98
|
+
padding: 0.25em 0 0.1em 0; }
|
99
|
+
.standard-form label {
|
100
|
+
font-style: italic; }
|
101
|
+
.standard-form table {
|
102
|
+
width: 100%; }
|
103
|
+
.standard-form td {
|
104
|
+
padding: 0.5em;
|
105
|
+
text-align: left;
|
106
|
+
vertical-align: top; }
|
107
|
+
.standard-form .label-cell {
|
108
|
+
padding-left: 2em;
|
109
|
+
text-align: right;
|
110
|
+
white-space: nowrap;
|
111
|
+
width: 0; }
|
112
|
+
.standard-form .data-cell {
|
113
|
+
width: 98%; }
|
114
|
+
.standard-form input[type=checkbox] {
|
115
|
+
padding: 0;
|
116
|
+
margin: 0 0.5em 0 0; }
|
117
|
+
.standard-form input[type=text],
|
118
|
+
.standard-form input[type=password],
|
119
|
+
.standard-form textarea {
|
120
|
+
width: 97%; }
|
121
|
+
.standard-form td div.record-controls {
|
122
|
+
margin: 0em; }
|
123
|
+
.standard-form input[type=submit] {
|
124
|
+
font-size: 100%;
|
125
|
+
}
|
126
|
+
|
127
|
+
/*---[ left-table pages ]------------------------------------------*/
|
128
|
+
|
129
|
+
.left-table {}
|
130
|
+
.left-table table {
|
131
|
+
width: 100%; }
|
132
|
+
.left-table h4,
|
133
|
+
.left-table label {
|
134
|
+
color: #777777; }
|
135
|
+
.left-table h4 {
|
136
|
+
padding: 0.5em 0 0.25em 0; }
|
137
|
+
.left-table td h4 {
|
138
|
+
padding: 0.25em 0 0.1em 0; }
|
139
|
+
.left-table td,
|
140
|
+
.left-table th {
|
141
|
+
padding: 0.25em;
|
142
|
+
text-align: left;
|
143
|
+
vertical-align: top; }
|
144
|
+
.left-table td {
|
145
|
+
width: 98%; }
|
146
|
+
.left-table th {
|
147
|
+
padding-left: 2em;
|
148
|
+
text-align: right;
|
149
|
+
white-space: nowrap;
|
150
|
+
width: 0%; }
|
151
|
+
.left-table label {
|
152
|
+
font-style: italic; }
|
153
|
+
.left-table input[type=checkbox] {
|
154
|
+
padding: 0;
|
155
|
+
margin: 0 0.5em 0 0; }
|
156
|
+
.left-table input[type=text],
|
157
|
+
.left-table input[type=password],
|
158
|
+
.left-table textarea {
|
159
|
+
width: 97%; }
|
160
|
+
.left-table td div.record-controls {
|
161
|
+
margin: 0em; }
|
162
|
+
.left-table input[type=submit] {
|
163
|
+
font-size: 100%;
|
164
|
+
}
|
165
|
+
|
166
|
+
/*#---[ top-table ]-------------------------------------------------------*/
|
167
|
+
|
168
|
+
.top-table {}
|
169
|
+
.top-table h4,
|
170
|
+
.top-table label,
|
171
|
+
.top-table th {
|
172
|
+
color: #777777; }
|
173
|
+
.top-table h4 {
|
174
|
+
padding: 0.5em 0 0.25em 0; }
|
175
|
+
.top-table td h4 {
|
176
|
+
padding: 0.25em 0 0.1em 0; }
|
177
|
+
.top-table label,
|
178
|
+
.top-table th {
|
179
|
+
font-style: italic; }
|
180
|
+
.top-table table {
|
181
|
+
width: 100%; }
|
182
|
+
.top-table td, .top-table th {
|
183
|
+
padding: 0.5em;
|
184
|
+
text-align: left;
|
185
|
+
vertical-align: top; }
|
186
|
+
.top-table th {
|
187
|
+
white-space: nowrap; }
|
188
|
+
.top-table td { }
|
189
|
+
.top-table td div.record-controls {
|
190
|
+
margin: 0em; }
|
191
|
+
.top-table input[type=submit] {
|
192
|
+
font-size: 100%;
|
193
|
+
}
|
194
|
+
|
195
|
+
/*---[ scaffolded list and show pages ]-------------------------------*/
|
196
|
+
|
197
|
+
.scaffolded {}
|
198
|
+
.scaffolded dt {
|
199
|
+
font-weight: bold; }
|
200
|
+
.scaffolded td {
|
201
|
+
padding: 0.2em; }
|
202
|
+
.scaffolded th {
|
203
|
+
padding: 0.25em;
|
204
|
+
font-style: italic; }
|
205
|
+
|
206
|
+
/*---[ proposals ]----------------------------------------------------*/
|
207
|
+
|
208
|
+
#proposal-listing {}
|
209
|
+
#proposal-listing th,
|
210
|
+
#proposal-listing td {
|
211
|
+
padding: 0.25em; }
|
212
|
+
#proposal-listing th {
|
213
|
+
font-style: italic; }
|
214
|
+
#proposal-listing a {
|
215
|
+
display: block;
|
216
|
+
line-height: 1.3em;
|
217
|
+
padding: 0.3em; }
|
218
|
+
#proposal-listing a:hover {
|
219
|
+
background: #F9F39C;
|
220
|
+
text-decoration: none !important; }
|
221
|
+
#proposal-listing .date-unseen { }
|
222
|
+
#proposal-listing .date-seen {
|
223
|
+
color: #999999; }
|
224
|
+
|
225
|
+
/* Makes sure there's always space below the list of proposals, an issue when the display is empty and it looks bad because there's no content. */
|
226
|
+
div#proposals-for {
|
227
|
+
margin-bottom: 2em; }
|
228
|
+
|
229
|
+
#proposal-comments { }
|
230
|
+
#proposal-comments dl {
|
231
|
+
margin-left: 2em; }
|
232
|
+
#proposal-comments dl dt {
|
233
|
+
font-weight: bold;
|
234
|
+
border-top: 1px dotted #ccc; }
|
235
|
+
#proposal-comments dl dt:first-child {
|
236
|
+
border-top: none; }
|
237
|
+
#proposal-comments dl dd {
|
238
|
+
margin-left: 1em; }
|
239
|
+
|
240
|
+
/* new-style proposal comments list */
|
241
|
+
|
242
|
+
ul.proposal-comments {
|
243
|
+
list-style: none;
|
244
|
+
padding: 0;
|
245
|
+
margin: 0;
|
246
|
+
}
|
247
|
+
|
248
|
+
ul.proposal-comments li {
|
249
|
+
border-bottom: 1px solid #ccc;
|
250
|
+
padding: 1em 0;
|
251
|
+
}
|
252
|
+
|
253
|
+
ul.proposal-comments div.proposal-title {
|
254
|
+
margin-top: .5em;
|
255
|
+
}
|
256
|
+
|
257
|
+
/*---[ snippets ]-----------------------------------------------------*/
|
258
|
+
|
259
|
+
.snippet_preview {
|
260
|
+
margin: 0;
|
261
|
+
padding: 0.5em;
|
262
|
+
border: 2px solid blue; }
|
263
|
+
|
264
|
+
.snippet_form {}
|
265
|
+
.snippet_form input[type=text] {
|
266
|
+
width: 100%; }
|
267
|
+
.snippet_form textarea {
|
268
|
+
height: 12em;
|
269
|
+
width: 100%; }
|
270
|
+
|
271
|
+
/*---[ session form ]-------------------------------------------------*/
|
272
|
+
|
273
|
+
#session_form {}
|
274
|
+
#session_form td {
|
275
|
+
padding: 0.5em;
|
276
|
+
text-align: left;
|
277
|
+
vertical-align: top; }
|
278
|
+
#session_form label {
|
279
|
+
font-style: italic; }
|
280
|
+
#session_form input[type=text], #session_form input[type=password] {
|
281
|
+
width: 24em; }
|
282
|
+
#session_form input {
|
283
|
+
clear: both; }
|
284
|
+
#session_form .rightish {
|
285
|
+
width: 12em;
|
286
|
+
text-align: right;
|
287
|
+
display: block;
|
288
|
+
float: left;
|
289
|
+
text-align: right;
|
290
|
+
padding-right: 1em; }
|
291
|
+
|
292
|
+
/*---[ event form ]---------------------------------------------------*/
|
293
|
+
|
294
|
+
#event-form {}
|
295
|
+
#event-form textarea#event_open_text,
|
296
|
+
#event-form textarea#event_closed_text {
|
297
|
+
height: 10em; }
|
298
|
+
|
299
|
+
/*---[ descriptors ]--------------------------------------------------*/
|
300
|
+
|
301
|
+
div.record-controls {
|
302
|
+
margin-top: 1em; }
|
303
|
+
.record-controls .div {
|
304
|
+
display: inline; }
|
305
|
+
|
306
|
+
.required-field {
|
307
|
+
padding: 0 0.25em;
|
308
|
+
color: red; }
|
309
|
+
|
310
|
+
.private-field {
|
311
|
+
padding: 0 0.25em;
|
312
|
+
color: green; }
|
313
|
+
|
314
|
+
.empty-text {
|
315
|
+
text-align: center;
|
316
|
+
font-style: italic;
|
317
|
+
white-space: nowrap; }
|
318
|
+
|
319
|
+
/* Loading box of width=height=100px with a spinner placed at the center */
|
320
|
+
#page_spinner {
|
321
|
+
display: none;
|
322
|
+
width: 100px;
|
323
|
+
height: 100px;
|
324
|
+
position: fixed;
|
325
|
+
top: 50%;
|
326
|
+
left: 50%;
|
327
|
+
color: black;
|
328
|
+
background: image-url("spinner-big.gif") no-repeat center #F7F1A3;
|
329
|
+
text-align: center;
|
330
|
+
padding: 10px;
|
331
|
+
font: normal 16px Tahoma, Geneva, sans-serif;
|
332
|
+
border: 1px solid #666;
|
333
|
+
margin-left: -50px;
|
334
|
+
margin-top: -50px;
|
335
|
+
z-index: 2;
|
336
|
+
overflow: auto;
|
337
|
+
}
|
338
|
+
|
339
|
+
div.admin-only {
|
340
|
+
padding: 0.5em;
|
341
|
+
}
|
342
|
+
|
343
|
+
.admin-only {
|
344
|
+
background: #EFC5C5;
|
345
|
+
}
|
346
|
+
|
347
|
+
.admin-only input[type=submit],
|
348
|
+
.admin-only form,
|
349
|
+
.admin-only form div {
|
350
|
+
display: inline;
|
351
|
+
}
|
352
|
+
|
353
|
+
.inlined {
|
354
|
+
display: inline; }
|
355
|
+
.inlined div {
|
356
|
+
display: inline; }
|
357
|
+
|
358
|
+
.addable {
|
359
|
+
margin-left: 10px;
|
360
|
+
padding-left: 20px;
|
361
|
+
background: image-url('plus.png') left center no-repeat;
|
362
|
+
}
|
363
|
+
|
364
|
+
.showable {
|
365
|
+
margin-left: 10px;
|
366
|
+
padding-left: 20px;
|
367
|
+
background: image-url('document.png') left center no-repeat;
|
368
|
+
}
|
369
|
+
|
370
|
+
.editable {
|
371
|
+
margin-left: 10px;
|
372
|
+
padding-left: 20px;
|
373
|
+
background: image-url('edit.png') left center no-repeat;
|
374
|
+
}
|
375
|
+
|
376
|
+
.cancelable {
|
377
|
+
margin-left: 10px;
|
378
|
+
padding-left: 20px;
|
379
|
+
background: image-url('arrow-out.png') left center no-repeat;
|
380
|
+
}
|
381
|
+
|
382
|
+
.deletable {
|
383
|
+
margin-left: 10px;
|
384
|
+
padding-left: 20px;
|
385
|
+
background: image-url('redx.png') left center no-repeat;
|
386
|
+
}
|
387
|
+
|
388
|
+
.feedable {
|
389
|
+
margin-left: 10px;
|
390
|
+
padding-left: 20px;
|
391
|
+
background: image-url('feed.png') left center no-repeat;
|
392
|
+
}
|
393
|
+
|
394
|
+
.snippet_edit_link {
|
395
|
+
font-size: 0.8em;
|
396
|
+
margin-left: 10px;
|
397
|
+
padding-left: 20px;
|
398
|
+
background: image-url('edit.png') left center no-repeat;
|
399
|
+
}
|
400
|
+
|
401
|
+
.spinning {
|
402
|
+
margin-left: 10px;
|
403
|
+
padding-left: 20px;
|
404
|
+
background: image-url('spinner.gif') left center no-repeat;
|
405
|
+
}
|
406
|
+
|
407
|
+
.quagmire {
|
408
|
+
display: none;
|
409
|
+
}
|
410
|
+
|
411
|
+
.wide {
|
412
|
+
width: 100%;
|
413
|
+
}
|
414
|
+
|
415
|
+
.narrow {
|
416
|
+
width: 0%;
|
417
|
+
}
|
418
|
+
|
419
|
+
.nowrap {
|
420
|
+
white-space: nowrap;
|
421
|
+
}
|
422
|
+
|
423
|
+
.hidden {
|
424
|
+
display: none;
|
425
|
+
}
|
426
|
+
|
427
|
+
.visible {
|
428
|
+
visible: visible;
|
429
|
+
}
|
430
|
+
|
431
|
+
.popup {
|
432
|
+
margin-left: 10px;
|
433
|
+
padding-left: 20px;
|
434
|
+
background: image-url('new_window.gif') left center no-repeat;
|
435
|
+
}
|
436
|
+
|
437
|
+
/*---[ submit a talk button ]-----------------------------------------*/
|
438
|
+
|
439
|
+
/* FIXME how to automatically size width of the box? */
|
440
|
+
#submit-a-talk {background: #FFFFFF; margin:1px; width: 13em; font-size: 1.1em; }
|
441
|
+
.rnd_top, .rnd_bottom {display:block; background:#FFFFFF; font-size:1px;}
|
442
|
+
.rnd_b1, .rnd_b2, .rnd_b3, .rnd_b4 {display:block; overflow:hidden;}
|
443
|
+
.rnd_b1, .rnd_b2, .rnd_b3 {height:1px;}
|
444
|
+
.rnd_b2, .rnd_b3, .rnd_b4 {background:#DAF4D4; border-left:1px solid #CCCCCC; border-right:1px solid #CCCCCC;}
|
445
|
+
.rnd_b1 {margin:0 5px; background:#CCCCCC;}
|
446
|
+
.rnd_b2 {margin:0 3px; border-width:0 2px;}
|
447
|
+
.rnd_b3 {margin:0 2px;}
|
448
|
+
.rnd_b4 {height:2px; margin:0 1px;}
|
449
|
+
.rnd_content {
|
450
|
+
display:block;
|
451
|
+
border:0 solid #CCCCCC;
|
452
|
+
border-width:0 1px;
|
453
|
+
padding: 4px;
|
454
|
+
background:#DAF4D4;
|
455
|
+
color:#000000; }
|
456
|
+
div.rnd_content { margin: 0; }
|
457
|
+
|
458
|
+
#submit-a-talk a,
|
459
|
+
#submit-a-talk a:visited,
|
460
|
+
#submit-a-talk a:hover {
|
461
|
+
color: green;
|
462
|
+
margin: 5px;
|
463
|
+
padding: 10px 10px 10px 20px;
|
464
|
+
background: image-url('plus.png') left center no-repeat;
|
465
|
+
}
|
466
|
+
|
467
|
+
/* @group Autocomplete
|
468
|
+
-------------------------------------------------------------- */
|
469
|
+
ul.jq-ui-autocomplete {
|
470
|
+
position: absolute;
|
471
|
+
overflow: hidden;
|
472
|
+
background-color: #fff;
|
473
|
+
border: 1px solid #aaa;
|
474
|
+
margin: 0px;
|
475
|
+
padding: 0;
|
476
|
+
list-style: none;
|
477
|
+
color: #333;
|
478
|
+
}
|
479
|
+
ul.jq-ui-autocomplete li {
|
480
|
+
display: block;
|
481
|
+
padding: .3em .5em .3em .3em;
|
482
|
+
overflow: hidden;
|
483
|
+
width: 100%;
|
484
|
+
}
|
485
|
+
|
486
|
+
ul.jq-ui-autocomplete li.active {
|
487
|
+
background-color: <%= @colors[:light_green] %>;
|
488
|
+
color: <%= @colors[:dark_grey] %>;;
|
489
|
+
}
|
490
|
+
|
491
|
+
/* @end */
|