From fff244784232225332e0beecdc655d9ded12e2d9 Mon Sep 17 00:00:00 2001 From: yasushiito Date: Fri, 23 Dec 2011 09:57:29 +0900 Subject: [PATCH] import all source code --- .gitignore | 7 + .rspec | 1 + ERD.dot | 245 +++++++++++++++++++ Gemfile | 50 ++++ Gemfile.lock | 200 ++++++++++++++++ LISENCE.txt | 25 ++ README.rails | 261 +++++++++++++++++++++ Rakefile | 7 + app/assets/images/rails.png | Bin 0 -> 6646 bytes app/assets/javascripts/admins/sessions.js.coffee | 3 + app/assets/javascripts/application.js | 9 + app/assets/javascripts/artists.js.coffee | 3 + app/assets/javascripts/authors/sessions.js.coffee | 3 + app/assets/javascripts/baloon_templates.js.coffee | 3 + app/assets/javascripts/baloon_types.js.coffee | 3 + app/assets/javascripts/baloons.js.coffee | 3 + app/assets/javascripts/comics.js.coffee | 3 + app/assets/javascripts/common_lisences.js.coffee | 3 + app/assets/javascripts/help.js.coffee | 3 + app/assets/javascripts/home.js.coffee | 3 + app/assets/javascripts/lisences.js.coffee | 3 + app/assets/javascripts/original_lisences.js.coffee | 3 + app/assets/javascripts/original_pictures.js.coffee | 3 + app/assets/javascripts/panels.js.coffee | 3 + app/assets/javascripts/pictures.js.coffee | 3 + app/assets/javascripts/source_pictures.js.coffee | 3 + app/assets/javascripts/speach_baloons.js.coffee | 3 + app/assets/javascripts/speach_templates.js.coffee | 3 + app/assets/javascripts/speachbaloons.js.coffee | 3 + app/assets/javascripts/speaches.js.coffee | 3 + app/assets/javascripts/system.js.coffee | 3 + app/assets/stylesheets/admins/sessions.css.scss | 3 + app/assets/stylesheets/application.css | 7 + app/assets/stylesheets/artists.css.scss | 3 + app/assets/stylesheets/authors/sessions.css.scss | 3 + app/assets/stylesheets/baloon_templates.css.scss | 3 + app/assets/stylesheets/baloon_types.css.scss | 3 + app/assets/stylesheets/baloons.css.scss | 3 + app/assets/stylesheets/comics.css.scss | 3 + app/assets/stylesheets/common_lisences.css.scss | 3 + app/assets/stylesheets/help.css.scss | 3 + app/assets/stylesheets/home.css.scss | 3 + app/assets/stylesheets/lisences.css.scss | 3 + app/assets/stylesheets/original_lisences.css.scss | 3 + app/assets/stylesheets/original_pictures.css.scss | 3 + app/assets/stylesheets/panels.css.scss | 3 + app/assets/stylesheets/pictures.css.scss | 3 + app/assets/stylesheets/scaffolds.css.scss | 56 +++++ app/assets/stylesheets/source_pictures.css.scss | 3 + app/assets/stylesheets/speach_baloons.css.scss | 3 + app/assets/stylesheets/speach_templates.css.scss | 3 + app/assets/stylesheets/speachbaloons.css.scss | 3 + app/assets/stylesheets/speaches.css.scss | 3 + app/assets/stylesheets/system.css.scss | 3 + app/controllers/application_controller.rb | 22 ++ app/controllers/artists_controller.rb | 83 +++++++ app/controllers/balloon_templates_controller.rb | 86 +++++++ app/controllers/balloons_controller.rb | 86 +++++++ app/controllers/comics_controller.rb | 133 +++++++++++ app/controllers/common_lisences_controller.rb | 85 +++++++ app/controllers/help_controller.rb | 3 + app/controllers/home_controller.rb | 13 + app/controllers/lisences_controller.rb | 83 +++++++ app/controllers/original_lisences_controller.rb | 85 +++++++ app/controllers/original_pictures_controller.rb | 184 +++++++++++++++ app/controllers/panel_pictures_controller.rb | 15 ++ app/controllers/panels_controller.rb | 141 +++++++++++ app/controllers/resource_pictures_controller.rb | 91 +++++++ app/controllers/speach_balloons_controller.rb | 127 ++++++++++ app/controllers/speach_templates_controller.rb | 87 +++++++ app/controllers/speaches_controller.rb | 87 +++++++ app/controllers/system_controller.rb | 22 ++ app/helpers/application_helper.rb | 2 + app/helpers/artists_helper.rb | 2 + app/helpers/balloon_templates_helper.rb | 2 + app/helpers/balloon_types_helper.rb | 2 + app/helpers/balloons_helper.rb | 2 + app/helpers/comics_helper.rb | 2 + app/helpers/common_lisences_helper.rb | 2 + app/helpers/help_helper.rb | 2 + app/helpers/home_helper.rb | 2 + app/helpers/lisences_helper.rb | 2 + app/helpers/original_lisences_helper.rb | 2 + app/helpers/original_pictures_helper.rb | 2 + app/helpers/panel_pictures_helper.rb | 2 + app/helpers/panels_helper.rb | 2 + app/helpers/resource_pictures_helper.rb | 2 + app/helpers/speach_balloons_helper.rb | 2 + app/helpers/speach_templates_helper.rb | 2 + app/helpers/speaches_helper.rb | 2 + app/helpers/system_helper.rb | 2 + app/mailers/.gitkeep | 0 app/models/.gitkeep | 0 app/models/admin.rb | 14 ++ app/models/artist.rb | 9 + app/models/author.rb | 21 ++ app/models/balloon.rb | 11 + app/models/balloon_template.rb | 6 + app/models/comic.rb | 9 + app/models/common_lisence.rb | 18 ++ app/models/lisence.rb | 7 + app/models/original_lisence.rb | 19 ++ app/models/original_picture.rb | 47 ++++ app/models/panel.rb | 54 +++++ app/models/panel_picture.rb | 19 ++ app/models/resource_picture.rb | 105 +++++++++ app/models/speach.rb | 3 + app/models/speach_balloon.rb | 4 + app/models/speach_template.rb | 3 + app/views/admins/confirmations/new.html.erb | 12 + .../mailer/confirmation_instructions.html.erb | 5 + .../mailer/reset_password_instructions.html.erb | 8 + .../admins/mailer/unlock_instructions.html.erb | 7 + app/views/admins/passwords/edit.html.erb | 16 ++ app/views/admins/passwords/new.html.erb | 12 + app/views/admins/registrations/edit.html.erb | 25 ++ app/views/admins/registrations/new.html.erb | 18 ++ app/views/admins/sessions/new.html.erb | 16 ++ app/views/admins/shared/_links.erb | 25 ++ app/views/admins/unlocks/new.html.erb | 12 + app/views/artists/_form.html.erb | 17 ++ app/views/artists/edit.html.erb | 6 + app/views/artists/index.html.erb | 17 ++ app/views/artists/new.html.erb | 5 + app/views/artists/show.html.erb | 5 + app/views/authors/confirmations/new.html.erb | 12 + .../mailer/confirmation_instructions.html.erb | 5 + .../mailer/reset_password_instructions.html.erb | 8 + .../authors/mailer/unlock_instructions.html.erb | 7 + app/views/authors/passwords/edit.html.erb | 16 ++ app/views/authors/passwords/new.html.erb | 12 + app/views/authors/registrations/edit.html.erb | 25 ++ app/views/authors/registrations/new.html.erb | 21 ++ app/views/authors/sessions/new.html.erb | 17 ++ app/views/authors/shared/_links.erb | 25 ++ app/views/authors/unlocks/new.html.erb | 12 + app/views/balloon_templates/index.html.erb | 27 +++ app/views/balloons/index.html.erb | 31 +++ app/views/comics/index.html.erb | 36 +++ app/views/comics/play.html.erb | 22 ++ app/views/comics/show.html.erb | 18 ++ app/views/comics/top.html.erb | 3 + app/views/common_lisences/_form.html.erb | 54 +++++ app/views/common_lisences/edit.html.erb | 6 + app/views/common_lisences/index.html.erb | 39 +++ app/views/common_lisences/new.html.erb | 5 + app/views/common_lisences/show.html.erb | 49 ++++ app/views/home/index.html.erb | 14 ++ app/views/layouts/application.html.erb | 40 ++++ app/views/lisences/_form.html.erb | 17 ++ app/views/lisences/edit.html.erb | 6 + app/views/lisences/index.html.erb | 38 +++ app/views/lisences/new.html.erb | 5 + app/views/lisences/show.html.erb | 5 + app/views/original_lisences/_form.html.erb | 54 +++++ app/views/original_lisences/edit.html.erb | 6 + app/views/original_lisences/index.html.erb | 21 ++ app/views/original_lisences/new.html.erb | 5 + app/views/original_lisences/show.html.erb | 53 +++++ .../original_pictures/_artist_register.html.erb | 29 +++ app/views/original_pictures/_uploader.html.erb | 12 + app/views/original_pictures/index.html.erb | 31 +++ app/views/original_pictures/show.html.erb | 48 ++++ app/views/panel_pictures/index.html.erb | 31 +++ app/views/panels/_standard.html.erb | 38 +++ app/views/panels/index.html.erb | 39 +++ app/views/panels/show.html.erb | 15 ++ app/views/resource_pictures/index.html.erb | 22 ++ app/views/resource_pictures/show.html.erb | 23 ++ app/views/speach_balloons/index.html.erb | 19 ++ app/views/speach_balloons/show.html.erb | 26 ++ app/views/speach_templates/index.html.erb | 21 ++ app/views/speaches/index.html.erb | 24 ++ app/views/system/start.html.erb | 6 + app/views/system/waiting_list.html.erb | 15 ++ config.ru | 4 + config/application.rb | 55 +++++ config/aws.yaml.org | 2 + config/boot.rb | 6 + config/cucumber.yml | 8 + config/database.yml | 28 +++ config/environment.rb | 6 + config/environments/development.rb | 38 +++ config/environments/production.rb | 74 ++++++ config/environments/test.rb | 39 +++ config/initializers/backtrace_silencers.rb | 7 + config/initializers/devise.rb | 210 +++++++++++++++++ config/initializers/inflections.rb | 10 + config/initializers/mime_types.rb | 9 + config/initializers/secret_token.rb | 7 + config/initializers/session_store.rb | 8 + config/initializers/wrap_parameters.rb | 14 ++ config/locales/devise.en.yml | 58 +++++ config/locales/en.yml | 5 + config/routes.rb | 87 +++++++ db/migrate/20111206091950_devise_create_authors.rb | 26 ++ db/migrate/20111206092734_devise_create_admins.rb | 25 ++ db/migrate/20111206095746_create_artists.rb | 14 ++ db/migrate/20111206100750_create_lisences.rb | 18 ++ .../20111206105022_create_original_lisences.rb | 19 ++ db/migrate/20111206105830_create_comics.rb | 13 + db/migrate/20111206111202_create_panels.rb | 17 ++ .../20111206112042_create_original_pictures.rb | 15 ++ .../20111206112949_create_resource_pictures.rb | 15 ++ db/migrate/20111206113803_create_panel_pictures.rb | 18 ++ .../20111206115439_create_balloon_templates.rb | 18 ++ .../20111206120252_create_speach_templates.rb | 14 ++ db/migrate/20111206121123_create_balloons.rb | 20 ++ db/migrate/20111206130635_create_speaches.rb | 15 ++ .../20111208235818_create_speach_balloons.rb | 11 + .../20111211052544_add_author_id_on_artist.rb | 9 + .../20111213073529_create_common_lisences.rb | 18 ++ db/schema.rb | 253 ++++++++++++++++++++ db/seeds.rb | 35 +++ doc/README_FOR_APP | 2 + features/support/env.rb | 56 +++++ lib/DMagick.rb | 41 ++++ lib/assets/.gitkeep | 0 lib/local_picture.rb | 51 ++++ lib/picture_io.rb | 25 ++ lib/s3_picture.rb | 68 ++++++ lib/tasks/.gitkeep | 0 lib/tasks/cucumber.rake | 65 +++++ log/.gitkeep | 0 public/404.html | 26 ++ public/422.html | 26 ++ public/500.html | 26 ++ ...pplication-00960e5186894b532975562d59176a6a.css | 1 + ...ication-00960e5186894b532975562d59176a6a.css.gz | Bin 0 -> 372 bytes ...application-fd525bbd17efb79c1bb774c528fe1959.js | 19 ++ ...lication-fd525bbd17efb79c1bb774c528fe1959.js.gz | Bin 0 -> 34939 bytes public/assets/application.css | 1 + public/assets/application.css.gz | Bin 0 -> 372 bytes public/assets/application.js | 19 ++ public/assets/application.js.gz | Bin 0 -> 34939 bytes public/assets/manifest.yml | 4 + .../rails-e4b51606cd77fda2615e7439907bfc92.png | Bin 0 -> 6646 bytes public/assets/rails.png | Bin 0 -> 6646 bytes public/favicon.ico | 0 public/robots.txt | 5 + script/cucumber | 10 + script/encode64.rb | 10 + script/rails | 6 + .../controllers/admins/sessions_controller_spec.rb | 5 + spec/controllers/artists_controller_spec.rb | 157 +++++++++++++ .../authors/sessions_controller_spec.rb | 5 + .../baloon_templates_controller_spec.rb | 157 +++++++++++++ spec/controllers/baloon_types_controller_spec.rb | 157 +++++++++++++ spec/controllers/baloons_controller_spec.rb | 157 +++++++++++++ spec/controllers/comics_controller_spec.rb | 157 +++++++++++++ .../controllers/common_lisences_controller_spec.rb | 157 +++++++++++++ spec/controllers/help_controller_spec.rb | 5 + spec/controllers/home_controller_spec.rb | 5 + spec/controllers/lisences_controller_spec.rb | 157 +++++++++++++ .../original_lisences_controller_spec.rb | 157 +++++++++++++ .../original_pictures_controller_spec.rb | 157 +++++++++++++ spec/controllers/panels_controller_spec.rb | 157 +++++++++++++ spec/controllers/pictures_controller_spec.rb | 157 +++++++++++++ .../controllers/source_pictures_controller_spec.rb | 157 +++++++++++++ spec/controllers/speach_baloons_controller_spec.rb | 157 +++++++++++++ .../speach_templates_controller_spec.rb | 157 +++++++++++++ spec/controllers/speachbaloons_controller_spec.rb | 157 +++++++++++++ spec/controllers/speaches_controller_spec.rb | 157 +++++++++++++ spec/controllers/system_controller_spec.rb | 5 + spec/helpers/admins/sessions_helper_spec.rb | 15 ++ spec/helpers/artists_helper_spec.rb | 15 ++ spec/helpers/authors/sessions_helper_spec.rb | 15 ++ spec/helpers/baloon_templates_helper_spec.rb | 15 ++ spec/helpers/baloon_types_helper_spec.rb | 15 ++ spec/helpers/baloons_helper_spec.rb | 15 ++ spec/helpers/comics_helper_spec.rb | 15 ++ spec/helpers/common_lisences_helper_spec.rb | 15 ++ spec/helpers/help_helper_spec.rb | 15 ++ spec/helpers/home_helper_spec.rb | 15 ++ spec/helpers/lisences_helper_spec.rb | 15 ++ spec/helpers/original_lisences_helper_spec.rb | 15 ++ spec/helpers/original_pictures_helper_spec.rb | 15 ++ spec/helpers/panels_helper_spec.rb | 15 ++ spec/helpers/pictures_helper_spec.rb | 15 ++ spec/helpers/source_pictures_helper_spec.rb | 15 ++ spec/helpers/speach_baloons_helper_spec.rb | 15 ++ spec/helpers/speach_templates_helper_spec.rb | 15 ++ spec/helpers/speachbaloons_helper_spec.rb | 15 ++ spec/helpers/speaches_helper_spec.rb | 15 ++ spec/helpers/system_helper_spec.rb | 15 ++ spec/models/admin_spec.rb | 5 + spec/models/artist_spec.rb | 5 + spec/models/author_spec.rb | 5 + spec/models/baloon_spec.rb | 5 + spec/models/baloon_template_spec.rb | 5 + spec/models/baloon_type_spec.rb | 5 + spec/models/comic_spec.rb | 5 + spec/models/common_lisence_spec.rb | 5 + spec/models/lisence_spec.rb | 5 + spec/models/original_lisence_spec.rb | 5 + spec/models/original_picture_spec.rb | 5 + spec/models/panel_spec.rb | 5 + spec/models/picture_spec.rb | 5 + spec/models/source_picture_spec.rb | 5 + spec/models/speach_baloon_spec.rb | 5 + spec/models/speach_spec.rb | 5 + spec/models/speach_template_spec.rb | 5 + spec/models/speachbaloon_spec.rb | 5 + spec/requests/artists_spec.rb | 11 + spec/requests/baloon_templates_spec.rb | 11 + spec/requests/baloon_types_spec.rb | 11 + spec/requests/baloons_spec.rb | 11 + spec/requests/comics_spec.rb | 11 + spec/requests/common_lisences_spec.rb | 11 + spec/requests/lisences_spec.rb | 11 + spec/requests/original_lisences_spec.rb | 11 + spec/requests/original_pictures_spec.rb | 11 + spec/requests/panels_spec.rb | 11 + spec/requests/pictures_spec.rb | 11 + spec/requests/source_pictures_spec.rb | 11 + spec/requests/speach_baloons_spec.rb | 11 + spec/requests/speach_templates_spec.rb | 11 + spec/requests/speachbaloons_spec.rb | 11 + spec/requests/speaches_spec.rb | 11 + spec/routing/artists_routing_spec.rb | 35 +++ spec/routing/baloon_templates_routing_spec.rb | 35 +++ spec/routing/baloon_types_routing_spec.rb | 35 +++ spec/routing/baloons_routing_spec.rb | 35 +++ spec/routing/comics_routing_spec.rb | 35 +++ spec/routing/common_lisences_routing_spec.rb | 35 +++ spec/routing/lisences_routing_spec.rb | 35 +++ spec/routing/original_lisences_routing_spec.rb | 35 +++ spec/routing/original_pictures_routing_spec.rb | 35 +++ spec/routing/panels_routing_spec.rb | 35 +++ spec/routing/pictures_routing_spec.rb | 35 +++ spec/routing/source_pictures_routing_spec.rb | 35 +++ spec/routing/speach_baloons_routing_spec.rb | 35 +++ spec/routing/speach_templates_routing_spec.rb | 35 +++ spec/routing/speachbaloons_routing_spec.rb | 35 +++ spec/routing/speaches_routing_spec.rb | 35 +++ spec/spec_helper.rb | 33 +++ spec/views/artists/edit.html.erb_spec.rb | 15 ++ spec/views/artists/index.html.erb_spec.rb | 14 ++ spec/views/artists/new.html.erb_spec.rb | 15 ++ spec/views/artists/show.html.erb_spec.rb | 11 + spec/views/baloon_templates/edit.html.erb_spec.rb | 15 ++ spec/views/baloon_templates/index.html.erb_spec.rb | 14 ++ spec/views/baloon_templates/new.html.erb_spec.rb | 15 ++ spec/views/baloon_templates/show.html.erb_spec.rb | 11 + spec/views/baloon_types/edit.html.erb_spec.rb | 15 ++ spec/views/baloon_types/index.html.erb_spec.rb | 14 ++ spec/views/baloon_types/new.html.erb_spec.rb | 15 ++ spec/views/baloon_types/show.html.erb_spec.rb | 11 + spec/views/baloons/edit.html.erb_spec.rb | 15 ++ spec/views/baloons/index.html.erb_spec.rb | 14 ++ spec/views/baloons/new.html.erb_spec.rb | 15 ++ spec/views/baloons/show.html.erb_spec.rb | 11 + spec/views/comics/edit.html.erb_spec.rb | 15 ++ spec/views/comics/index.html.erb_spec.rb | 14 ++ spec/views/comics/new.html.erb_spec.rb | 15 ++ spec/views/comics/show.html.erb_spec.rb | 11 + spec/views/common_lisences/edit.html.erb_spec.rb | 15 ++ spec/views/common_lisences/index.html.erb_spec.rb | 14 ++ spec/views/common_lisences/new.html.erb_spec.rb | 15 ++ spec/views/common_lisences/show.html.erb_spec.rb | 11 + spec/views/lisences/edit.html.erb_spec.rb | 15 ++ spec/views/lisences/index.html.erb_spec.rb | 14 ++ spec/views/lisences/new.html.erb_spec.rb | 15 ++ spec/views/lisences/show.html.erb_spec.rb | 11 + spec/views/original_lisences/edit.html.erb_spec.rb | 15 ++ .../views/original_lisences/index.html.erb_spec.rb | 14 ++ spec/views/original_lisences/new.html.erb_spec.rb | 15 ++ spec/views/original_lisences/show.html.erb_spec.rb | 11 + spec/views/original_pictures/edit.html.erb_spec.rb | 15 ++ .../views/original_pictures/index.html.erb_spec.rb | 14 ++ spec/views/original_pictures/new.html.erb_spec.rb | 15 ++ spec/views/original_pictures/show.html.erb_spec.rb | 11 + spec/views/panels/edit.html.erb_spec.rb | 15 ++ spec/views/panels/index.html.erb_spec.rb | 14 ++ spec/views/panels/new.html.erb_spec.rb | 15 ++ spec/views/panels/show.html.erb_spec.rb | 11 + spec/views/pictures/edit.html.erb_spec.rb | 15 ++ spec/views/pictures/index.html.erb_spec.rb | 14 ++ spec/views/pictures/new.html.erb_spec.rb | 15 ++ spec/views/pictures/show.html.erb_spec.rb | 11 + spec/views/source_pictures/edit.html.erb_spec.rb | 15 ++ spec/views/source_pictures/index.html.erb_spec.rb | 14 ++ spec/views/source_pictures/new.html.erb_spec.rb | 15 ++ spec/views/source_pictures/show.html.erb_spec.rb | 11 + spec/views/speach_baloons/edit.html.erb_spec.rb | 15 ++ spec/views/speach_baloons/index.html.erb_spec.rb | 14 ++ spec/views/speach_baloons/new.html.erb_spec.rb | 15 ++ spec/views/speach_baloons/show.html.erb_spec.rb | 11 + spec/views/speach_templates/edit.html.erb_spec.rb | 15 ++ spec/views/speach_templates/index.html.erb_spec.rb | 14 ++ spec/views/speach_templates/new.html.erb_spec.rb | 15 ++ spec/views/speach_templates/show.html.erb_spec.rb | 11 + spec/views/speachbaloons/edit.html.erb_spec.rb | 15 ++ spec/views/speachbaloons/index.html.erb_spec.rb | 14 ++ spec/views/speachbaloons/new.html.erb_spec.rb | 15 ++ spec/views/speachbaloons/show.html.erb_spec.rb | 11 + spec/views/speaches/edit.html.erb_spec.rb | 15 ++ spec/views/speaches/index.html.erb_spec.rb | 14 ++ spec/views/speaches/new.html.erb_spec.rb | 15 ++ spec/views/speaches/show.html.erb_spec.rb | 11 + vendor/assets/stylesheets/.gitkeep | 0 vendor/plugins/.gitkeep | 0 402 files changed, 10433 insertions(+) create mode 100644 .gitignore create mode 100644 .rspec create mode 100644 ERD.dot create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 LISENCE.txt create mode 100644 README.rails create mode 100644 Rakefile create mode 100644 app/assets/images/rails.png create mode 100644 app/assets/javascripts/admins/sessions.js.coffee create mode 100644 app/assets/javascripts/application.js create mode 100644 app/assets/javascripts/artists.js.coffee create mode 100644 app/assets/javascripts/authors/sessions.js.coffee create mode 100644 app/assets/javascripts/baloon_templates.js.coffee create mode 100644 app/assets/javascripts/baloon_types.js.coffee create mode 100644 app/assets/javascripts/baloons.js.coffee create mode 100644 app/assets/javascripts/comics.js.coffee create mode 100644 app/assets/javascripts/common_lisences.js.coffee create mode 100644 app/assets/javascripts/help.js.coffee create mode 100644 app/assets/javascripts/home.js.coffee create mode 100644 app/assets/javascripts/lisences.js.coffee create mode 100644 app/assets/javascripts/original_lisences.js.coffee create mode 100644 app/assets/javascripts/original_pictures.js.coffee create mode 100644 app/assets/javascripts/panels.js.coffee create mode 100644 app/assets/javascripts/pictures.js.coffee create mode 100644 app/assets/javascripts/source_pictures.js.coffee create mode 100644 app/assets/javascripts/speach_baloons.js.coffee create mode 100644 app/assets/javascripts/speach_templates.js.coffee create mode 100644 app/assets/javascripts/speachbaloons.js.coffee create mode 100644 app/assets/javascripts/speaches.js.coffee create mode 100644 app/assets/javascripts/system.js.coffee create mode 100644 app/assets/stylesheets/admins/sessions.css.scss create mode 100644 app/assets/stylesheets/application.css create mode 100644 app/assets/stylesheets/artists.css.scss create mode 100644 app/assets/stylesheets/authors/sessions.css.scss create mode 100644 app/assets/stylesheets/baloon_templates.css.scss create mode 100644 app/assets/stylesheets/baloon_types.css.scss create mode 100644 app/assets/stylesheets/baloons.css.scss create mode 100644 app/assets/stylesheets/comics.css.scss create mode 100644 app/assets/stylesheets/common_lisences.css.scss create mode 100644 app/assets/stylesheets/help.css.scss create mode 100644 app/assets/stylesheets/home.css.scss create mode 100644 app/assets/stylesheets/lisences.css.scss create mode 100644 app/assets/stylesheets/original_lisences.css.scss create mode 100644 app/assets/stylesheets/original_pictures.css.scss create mode 100644 app/assets/stylesheets/panels.css.scss create mode 100644 app/assets/stylesheets/pictures.css.scss create mode 100644 app/assets/stylesheets/scaffolds.css.scss create mode 100644 app/assets/stylesheets/source_pictures.css.scss create mode 100644 app/assets/stylesheets/speach_baloons.css.scss create mode 100644 app/assets/stylesheets/speach_templates.css.scss create mode 100644 app/assets/stylesheets/speachbaloons.css.scss create mode 100644 app/assets/stylesheets/speaches.css.scss create mode 100644 app/assets/stylesheets/system.css.scss create mode 100644 app/controllers/application_controller.rb create mode 100644 app/controllers/artists_controller.rb create mode 100644 app/controllers/balloon_templates_controller.rb create mode 100644 app/controllers/balloons_controller.rb create mode 100644 app/controllers/comics_controller.rb create mode 100644 app/controllers/common_lisences_controller.rb create mode 100644 app/controllers/help_controller.rb create mode 100644 app/controllers/home_controller.rb create mode 100644 app/controllers/lisences_controller.rb create mode 100644 app/controllers/original_lisences_controller.rb create mode 100644 app/controllers/original_pictures_controller.rb create mode 100644 app/controllers/panel_pictures_controller.rb create mode 100644 app/controllers/panels_controller.rb create mode 100644 app/controllers/resource_pictures_controller.rb create mode 100644 app/controllers/speach_balloons_controller.rb create mode 100644 app/controllers/speach_templates_controller.rb create mode 100644 app/controllers/speaches_controller.rb create mode 100644 app/controllers/system_controller.rb create mode 100644 app/helpers/application_helper.rb create mode 100644 app/helpers/artists_helper.rb create mode 100644 app/helpers/balloon_templates_helper.rb create mode 100644 app/helpers/balloon_types_helper.rb create mode 100644 app/helpers/balloons_helper.rb create mode 100644 app/helpers/comics_helper.rb create mode 100644 app/helpers/common_lisences_helper.rb create mode 100644 app/helpers/help_helper.rb create mode 100644 app/helpers/home_helper.rb create mode 100644 app/helpers/lisences_helper.rb create mode 100644 app/helpers/original_lisences_helper.rb create mode 100644 app/helpers/original_pictures_helper.rb create mode 100644 app/helpers/panel_pictures_helper.rb create mode 100644 app/helpers/panels_helper.rb create mode 100644 app/helpers/resource_pictures_helper.rb create mode 100644 app/helpers/speach_balloons_helper.rb create mode 100644 app/helpers/speach_templates_helper.rb create mode 100644 app/helpers/speaches_helper.rb create mode 100644 app/helpers/system_helper.rb create mode 100644 app/mailers/.gitkeep create mode 100644 app/models/.gitkeep create mode 100644 app/models/admin.rb create mode 100644 app/models/artist.rb create mode 100644 app/models/author.rb create mode 100644 app/models/balloon.rb create mode 100644 app/models/balloon_template.rb create mode 100644 app/models/comic.rb create mode 100644 app/models/common_lisence.rb create mode 100644 app/models/lisence.rb create mode 100644 app/models/original_lisence.rb create mode 100644 app/models/original_picture.rb create mode 100644 app/models/panel.rb create mode 100644 app/models/panel_picture.rb create mode 100644 app/models/resource_picture.rb create mode 100644 app/models/speach.rb create mode 100644 app/models/speach_balloon.rb create mode 100644 app/models/speach_template.rb create mode 100644 app/views/admins/confirmations/new.html.erb create mode 100644 app/views/admins/mailer/confirmation_instructions.html.erb create mode 100644 app/views/admins/mailer/reset_password_instructions.html.erb create mode 100644 app/views/admins/mailer/unlock_instructions.html.erb create mode 100644 app/views/admins/passwords/edit.html.erb create mode 100644 app/views/admins/passwords/new.html.erb create mode 100644 app/views/admins/registrations/edit.html.erb create mode 100644 app/views/admins/registrations/new.html.erb create mode 100644 app/views/admins/sessions/new.html.erb create mode 100644 app/views/admins/shared/_links.erb create mode 100644 app/views/admins/unlocks/new.html.erb create mode 100644 app/views/artists/_form.html.erb create mode 100644 app/views/artists/edit.html.erb create mode 100644 app/views/artists/index.html.erb create mode 100644 app/views/artists/new.html.erb create mode 100644 app/views/artists/show.html.erb create mode 100644 app/views/authors/confirmations/new.html.erb create mode 100644 app/views/authors/mailer/confirmation_instructions.html.erb create mode 100644 app/views/authors/mailer/reset_password_instructions.html.erb create mode 100644 app/views/authors/mailer/unlock_instructions.html.erb create mode 100644 app/views/authors/passwords/edit.html.erb create mode 100644 app/views/authors/passwords/new.html.erb create mode 100644 app/views/authors/registrations/edit.html.erb create mode 100644 app/views/authors/registrations/new.html.erb create mode 100644 app/views/authors/sessions/new.html.erb create mode 100644 app/views/authors/shared/_links.erb create mode 100644 app/views/authors/unlocks/new.html.erb create mode 100644 app/views/balloon_templates/index.html.erb create mode 100644 app/views/balloons/index.html.erb create mode 100644 app/views/comics/index.html.erb create mode 100644 app/views/comics/play.html.erb create mode 100644 app/views/comics/show.html.erb create mode 100644 app/views/comics/top.html.erb create mode 100644 app/views/common_lisences/_form.html.erb create mode 100644 app/views/common_lisences/edit.html.erb create mode 100644 app/views/common_lisences/index.html.erb create mode 100644 app/views/common_lisences/new.html.erb create mode 100644 app/views/common_lisences/show.html.erb create mode 100644 app/views/home/index.html.erb create mode 100644 app/views/layouts/application.html.erb create mode 100644 app/views/lisences/_form.html.erb create mode 100644 app/views/lisences/edit.html.erb create mode 100644 app/views/lisences/index.html.erb create mode 100644 app/views/lisences/new.html.erb create mode 100644 app/views/lisences/show.html.erb create mode 100644 app/views/original_lisences/_form.html.erb create mode 100644 app/views/original_lisences/edit.html.erb create mode 100644 app/views/original_lisences/index.html.erb create mode 100644 app/views/original_lisences/new.html.erb create mode 100644 app/views/original_lisences/show.html.erb create mode 100644 app/views/original_pictures/_artist_register.html.erb create mode 100644 app/views/original_pictures/_uploader.html.erb create mode 100644 app/views/original_pictures/index.html.erb create mode 100644 app/views/original_pictures/show.html.erb create mode 100644 app/views/panel_pictures/index.html.erb create mode 100644 app/views/panels/_standard.html.erb create mode 100644 app/views/panels/index.html.erb create mode 100644 app/views/panels/show.html.erb create mode 100644 app/views/resource_pictures/index.html.erb create mode 100644 app/views/resource_pictures/show.html.erb create mode 100644 app/views/speach_balloons/index.html.erb create mode 100644 app/views/speach_balloons/show.html.erb create mode 100644 app/views/speach_templates/index.html.erb create mode 100644 app/views/speaches/index.html.erb create mode 100644 app/views/system/start.html.erb create mode 100644 app/views/system/waiting_list.html.erb create mode 100644 config.ru create mode 100644 config/application.rb create mode 100644 config/aws.yaml.org create mode 100644 config/boot.rb create mode 100644 config/cucumber.yml create mode 100644 config/database.yml create mode 100644 config/environment.rb create mode 100644 config/environments/development.rb create mode 100644 config/environments/production.rb create mode 100644 config/environments/test.rb create mode 100644 config/initializers/backtrace_silencers.rb create mode 100644 config/initializers/devise.rb create mode 100644 config/initializers/inflections.rb create mode 100644 config/initializers/mime_types.rb create mode 100644 config/initializers/secret_token.rb create mode 100644 config/initializers/session_store.rb create mode 100644 config/initializers/wrap_parameters.rb create mode 100644 config/locales/devise.en.yml create mode 100644 config/locales/en.yml create mode 100644 config/routes.rb create mode 100644 db/migrate/20111206091950_devise_create_authors.rb create mode 100644 db/migrate/20111206092734_devise_create_admins.rb create mode 100644 db/migrate/20111206095746_create_artists.rb create mode 100644 db/migrate/20111206100750_create_lisences.rb create mode 100644 db/migrate/20111206105022_create_original_lisences.rb create mode 100644 db/migrate/20111206105830_create_comics.rb create mode 100644 db/migrate/20111206111202_create_panels.rb create mode 100644 db/migrate/20111206112042_create_original_pictures.rb create mode 100644 db/migrate/20111206112949_create_resource_pictures.rb create mode 100644 db/migrate/20111206113803_create_panel_pictures.rb create mode 100644 db/migrate/20111206115439_create_balloon_templates.rb create mode 100644 db/migrate/20111206120252_create_speach_templates.rb create mode 100644 db/migrate/20111206121123_create_balloons.rb create mode 100644 db/migrate/20111206130635_create_speaches.rb create mode 100644 db/migrate/20111208235818_create_speach_balloons.rb create mode 100644 db/migrate/20111211052544_add_author_id_on_artist.rb create mode 100644 db/migrate/20111213073529_create_common_lisences.rb create mode 100644 db/schema.rb create mode 100644 db/seeds.rb create mode 100644 doc/README_FOR_APP create mode 100644 features/support/env.rb create mode 100644 lib/DMagick.rb create mode 100644 lib/assets/.gitkeep create mode 100644 lib/local_picture.rb create mode 100644 lib/picture_io.rb create mode 100644 lib/s3_picture.rb create mode 100644 lib/tasks/.gitkeep create mode 100644 lib/tasks/cucumber.rake create mode 100644 log/.gitkeep create mode 100644 public/404.html create mode 100644 public/422.html create mode 100644 public/500.html create mode 100644 public/assets/application-00960e5186894b532975562d59176a6a.css create mode 100644 public/assets/application-00960e5186894b532975562d59176a6a.css.gz create mode 100644 public/assets/application-fd525bbd17efb79c1bb774c528fe1959.js create mode 100644 public/assets/application-fd525bbd17efb79c1bb774c528fe1959.js.gz create mode 100644 public/assets/application.css create mode 100644 public/assets/application.css.gz create mode 100644 public/assets/application.js create mode 100644 public/assets/application.js.gz create mode 100644 public/assets/manifest.yml create mode 100644 public/assets/rails-e4b51606cd77fda2615e7439907bfc92.png create mode 100644 public/assets/rails.png create mode 100644 public/favicon.ico create mode 100644 public/robots.txt create mode 100644 script/cucumber create mode 100644 script/encode64.rb create mode 100644 script/rails create mode 100644 spec/controllers/admins/sessions_controller_spec.rb create mode 100644 spec/controllers/artists_controller_spec.rb create mode 100644 spec/controllers/authors/sessions_controller_spec.rb create mode 100644 spec/controllers/baloon_templates_controller_spec.rb create mode 100644 spec/controllers/baloon_types_controller_spec.rb create mode 100644 spec/controllers/baloons_controller_spec.rb create mode 100644 spec/controllers/comics_controller_spec.rb create mode 100644 spec/controllers/common_lisences_controller_spec.rb create mode 100644 spec/controllers/help_controller_spec.rb create mode 100644 spec/controllers/home_controller_spec.rb create mode 100644 spec/controllers/lisences_controller_spec.rb create mode 100644 spec/controllers/original_lisences_controller_spec.rb create mode 100644 spec/controllers/original_pictures_controller_spec.rb create mode 100644 spec/controllers/panels_controller_spec.rb create mode 100644 spec/controllers/pictures_controller_spec.rb create mode 100644 spec/controllers/source_pictures_controller_spec.rb create mode 100644 spec/controllers/speach_baloons_controller_spec.rb create mode 100644 spec/controllers/speach_templates_controller_spec.rb create mode 100644 spec/controllers/speachbaloons_controller_spec.rb create mode 100644 spec/controllers/speaches_controller_spec.rb create mode 100644 spec/controllers/system_controller_spec.rb create mode 100644 spec/helpers/admins/sessions_helper_spec.rb create mode 100644 spec/helpers/artists_helper_spec.rb create mode 100644 spec/helpers/authors/sessions_helper_spec.rb create mode 100644 spec/helpers/baloon_templates_helper_spec.rb create mode 100644 spec/helpers/baloon_types_helper_spec.rb create mode 100644 spec/helpers/baloons_helper_spec.rb create mode 100644 spec/helpers/comics_helper_spec.rb create mode 100644 spec/helpers/common_lisences_helper_spec.rb create mode 100644 spec/helpers/help_helper_spec.rb create mode 100644 spec/helpers/home_helper_spec.rb create mode 100644 spec/helpers/lisences_helper_spec.rb create mode 100644 spec/helpers/original_lisences_helper_spec.rb create mode 100644 spec/helpers/original_pictures_helper_spec.rb create mode 100644 spec/helpers/panels_helper_spec.rb create mode 100644 spec/helpers/pictures_helper_spec.rb create mode 100644 spec/helpers/source_pictures_helper_spec.rb create mode 100644 spec/helpers/speach_baloons_helper_spec.rb create mode 100644 spec/helpers/speach_templates_helper_spec.rb create mode 100644 spec/helpers/speachbaloons_helper_spec.rb create mode 100644 spec/helpers/speaches_helper_spec.rb create mode 100644 spec/helpers/system_helper_spec.rb create mode 100644 spec/models/admin_spec.rb create mode 100644 spec/models/artist_spec.rb create mode 100644 spec/models/author_spec.rb create mode 100644 spec/models/baloon_spec.rb create mode 100644 spec/models/baloon_template_spec.rb create mode 100644 spec/models/baloon_type_spec.rb create mode 100644 spec/models/comic_spec.rb create mode 100644 spec/models/common_lisence_spec.rb create mode 100644 spec/models/lisence_spec.rb create mode 100644 spec/models/original_lisence_spec.rb create mode 100644 spec/models/original_picture_spec.rb create mode 100644 spec/models/panel_spec.rb create mode 100644 spec/models/picture_spec.rb create mode 100644 spec/models/source_picture_spec.rb create mode 100644 spec/models/speach_baloon_spec.rb create mode 100644 spec/models/speach_spec.rb create mode 100644 spec/models/speach_template_spec.rb create mode 100644 spec/models/speachbaloon_spec.rb create mode 100644 spec/requests/artists_spec.rb create mode 100644 spec/requests/baloon_templates_spec.rb create mode 100644 spec/requests/baloon_types_spec.rb create mode 100644 spec/requests/baloons_spec.rb create mode 100644 spec/requests/comics_spec.rb create mode 100644 spec/requests/common_lisences_spec.rb create mode 100644 spec/requests/lisences_spec.rb create mode 100644 spec/requests/original_lisences_spec.rb create mode 100644 spec/requests/original_pictures_spec.rb create mode 100644 spec/requests/panels_spec.rb create mode 100644 spec/requests/pictures_spec.rb create mode 100644 spec/requests/source_pictures_spec.rb create mode 100644 spec/requests/speach_baloons_spec.rb create mode 100644 spec/requests/speach_templates_spec.rb create mode 100644 spec/requests/speachbaloons_spec.rb create mode 100644 spec/requests/speaches_spec.rb create mode 100644 spec/routing/artists_routing_spec.rb create mode 100644 spec/routing/baloon_templates_routing_spec.rb create mode 100644 spec/routing/baloon_types_routing_spec.rb create mode 100644 spec/routing/baloons_routing_spec.rb create mode 100644 spec/routing/comics_routing_spec.rb create mode 100644 spec/routing/common_lisences_routing_spec.rb create mode 100644 spec/routing/lisences_routing_spec.rb create mode 100644 spec/routing/original_lisences_routing_spec.rb create mode 100644 spec/routing/original_pictures_routing_spec.rb create mode 100644 spec/routing/panels_routing_spec.rb create mode 100644 spec/routing/pictures_routing_spec.rb create mode 100644 spec/routing/source_pictures_routing_spec.rb create mode 100644 spec/routing/speach_baloons_routing_spec.rb create mode 100644 spec/routing/speach_templates_routing_spec.rb create mode 100644 spec/routing/speachbaloons_routing_spec.rb create mode 100644 spec/routing/speaches_routing_spec.rb create mode 100644 spec/spec_helper.rb create mode 100644 spec/views/artists/edit.html.erb_spec.rb create mode 100644 spec/views/artists/index.html.erb_spec.rb create mode 100644 spec/views/artists/new.html.erb_spec.rb create mode 100644 spec/views/artists/show.html.erb_spec.rb create mode 100644 spec/views/baloon_templates/edit.html.erb_spec.rb create mode 100644 spec/views/baloon_templates/index.html.erb_spec.rb create mode 100644 spec/views/baloon_templates/new.html.erb_spec.rb create mode 100644 spec/views/baloon_templates/show.html.erb_spec.rb create mode 100644 spec/views/baloon_types/edit.html.erb_spec.rb create mode 100644 spec/views/baloon_types/index.html.erb_spec.rb create mode 100644 spec/views/baloon_types/new.html.erb_spec.rb create mode 100644 spec/views/baloon_types/show.html.erb_spec.rb create mode 100644 spec/views/baloons/edit.html.erb_spec.rb create mode 100644 spec/views/baloons/index.html.erb_spec.rb create mode 100644 spec/views/baloons/new.html.erb_spec.rb create mode 100644 spec/views/baloons/show.html.erb_spec.rb create mode 100644 spec/views/comics/edit.html.erb_spec.rb create mode 100644 spec/views/comics/index.html.erb_spec.rb create mode 100644 spec/views/comics/new.html.erb_spec.rb create mode 100644 spec/views/comics/show.html.erb_spec.rb create mode 100644 spec/views/common_lisences/edit.html.erb_spec.rb create mode 100644 spec/views/common_lisences/index.html.erb_spec.rb create mode 100644 spec/views/common_lisences/new.html.erb_spec.rb create mode 100644 spec/views/common_lisences/show.html.erb_spec.rb create mode 100644 spec/views/lisences/edit.html.erb_spec.rb create mode 100644 spec/views/lisences/index.html.erb_spec.rb create mode 100644 spec/views/lisences/new.html.erb_spec.rb create mode 100644 spec/views/lisences/show.html.erb_spec.rb create mode 100644 spec/views/original_lisences/edit.html.erb_spec.rb create mode 100644 spec/views/original_lisences/index.html.erb_spec.rb create mode 100644 spec/views/original_lisences/new.html.erb_spec.rb create mode 100644 spec/views/original_lisences/show.html.erb_spec.rb create mode 100644 spec/views/original_pictures/edit.html.erb_spec.rb create mode 100644 spec/views/original_pictures/index.html.erb_spec.rb create mode 100644 spec/views/original_pictures/new.html.erb_spec.rb create mode 100644 spec/views/original_pictures/show.html.erb_spec.rb create mode 100644 spec/views/panels/edit.html.erb_spec.rb create mode 100644 spec/views/panels/index.html.erb_spec.rb create mode 100644 spec/views/panels/new.html.erb_spec.rb create mode 100644 spec/views/panels/show.html.erb_spec.rb create mode 100644 spec/views/pictures/edit.html.erb_spec.rb create mode 100644 spec/views/pictures/index.html.erb_spec.rb create mode 100644 spec/views/pictures/new.html.erb_spec.rb create mode 100644 spec/views/pictures/show.html.erb_spec.rb create mode 100644 spec/views/source_pictures/edit.html.erb_spec.rb create mode 100644 spec/views/source_pictures/index.html.erb_spec.rb create mode 100644 spec/views/source_pictures/new.html.erb_spec.rb create mode 100644 spec/views/source_pictures/show.html.erb_spec.rb create mode 100644 spec/views/speach_baloons/edit.html.erb_spec.rb create mode 100644 spec/views/speach_baloons/index.html.erb_spec.rb create mode 100644 spec/views/speach_baloons/new.html.erb_spec.rb create mode 100644 spec/views/speach_baloons/show.html.erb_spec.rb create mode 100644 spec/views/speach_templates/edit.html.erb_spec.rb create mode 100644 spec/views/speach_templates/index.html.erb_spec.rb create mode 100644 spec/views/speach_templates/new.html.erb_spec.rb create mode 100644 spec/views/speach_templates/show.html.erb_spec.rb create mode 100644 spec/views/speachbaloons/edit.html.erb_spec.rb create mode 100644 spec/views/speachbaloons/index.html.erb_spec.rb create mode 100644 spec/views/speachbaloons/new.html.erb_spec.rb create mode 100644 spec/views/speachbaloons/show.html.erb_spec.rb create mode 100644 spec/views/speaches/edit.html.erb_spec.rb create mode 100644 spec/views/speaches/index.html.erb_spec.rb create mode 100644 spec/views/speaches/new.html.erb_spec.rb create mode 100644 spec/views/speaches/show.html.erb_spec.rb create mode 100644 vendor/assets/stylesheets/.gitkeep create mode 100644 vendor/plugins/.gitkeep diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..5aff11ab --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.bundle +db/*.sqlite3 +log/*.log +tmp/ +.sass-cache/ +public/image/* +config/aws.yaml diff --git a/.rspec b/.rspec new file mode 100644 index 00000000..53607ea5 --- /dev/null +++ b/.rspec @@ -0,0 +1 @@ +--colour diff --git a/ERD.dot b/ERD.dot new file mode 100644 index 00000000..e955cc04 --- /dev/null +++ b/ERD.dot @@ -0,0 +1,245 @@ +digraph Pettanr { + rankdir = "LR"; ranksep = "0.5"; nodesep = "0.4"; pad = "0.4,0.4"; margin = "0,0"; concentrate = "true"; labelloc = "t"; fontsize = "13"; fontname = "Arial Bold"; + node [shape = "Mrecord", fontsize = "10", fontname = "Arial", margin = "0.07,0.05", penwidth = "1.0"]; + edge [fontname = "Arial", fontsize = "7", dir = "both", arrowsize = "0.9", penwidth = "1.0", labelangle = "32", labeldistance = "1.8"]; + label = "Pettanr domain model\n\n"; + m_Admin [label = < + +
Admin
+| + + + + + + + + + + + + +
activate integercaA÷a2c
current_sign_in_at datetime
current_sign_in_ip string
email stringcaA÷a2c
encrypted_password string (128)caA÷a2c
last_sign_in_at datetime
last_sign_in_ip string
remember_created_at datetime
reset_password_sent_at datetime
reset_password_token string
sign_in_count integer
+>]; + m_Artist [label = < + +
Artist
+| + + + + + + + +
api_url string
crowled_at datetime
default_lisence_id integer
email string
homepage_url string
name string
+>]; + m_Author [label = < + +
Author
+| + + + + + + + + + + + + + + + +
authentication_token string
confirmation_sent_at datetime
confirmation_token string
confirmed_at datetime
current_sign_in_at datetime
current_sign_in_ip string
email stringcaA÷a2c
encrypted_password string (128)caA÷a2c
last_sign_in_at datetime
last_sign_in_ip string
remember_created_at datetime
reset_password_sent_at datetime
reset_password_token string
sign_in_count integer
+>]; + m_Balloon [label = < + +
Balloon
+| + + + + + + + + + +
balloon_template_id integercaA÷a2c
border integercaA÷a2c
height integercaA÷a2c
left_offset integercaA÷a2c
tail integercaA÷a2c
top_offset integercaA÷a2c
width integercaA÷a2c
zindex integercaA÷a2c
+>]; + m_BalloonTemplate [label = < + +
BalloonTemplate
+| + + + + + + + +
border integercaA÷a2c
max_height integercaA÷a2c
max_width integercaA÷a2c
min_height integercaA÷a2c
min_width integercaA÷a2c
tail integercaA÷a2c
+>]; + m_Comic [label = < + +
Comic
+| + + + + + +
author_id integer
default_height integercaA÷a2c
default_width integercaA÷a2c
title string
+>]; + m_CommonLisence [label = < + +
CommonLisence
+| + + + + + + + + + + +
cc_by integercaA÷a2c
cc_nc integercaA÷a2c
cc_nd integercaA÷a2c
cc_sa integercaA÷a2c
keep_aspect_ratio integercaA÷a2c
name stringcaA÷a2c
no_flip integercaA÷a2c
no_resize integercaA÷a2c
url stringcaA÷a2c
+>]; + m_Lisence [label = < + +
Lisence
+| + + + + + + + + + + +
cc_by integercaA÷a2c
cc_nc integercaA÷a2c
cc_nd integercaA÷a2c
cc_sa integercaA÷a2c
keep_aspect_ratio integercaA÷a2c
name stringcaA÷a2c
no_flip integercaA÷a2c
no_resize integercaA÷a2c
url stringcaA÷a2c
+>]; + m_OriginalLisence [label = < + +
OriginalLisence
+| + + + + + + + + + + + +
artist_id integercaA÷a2c
cc_by integercaA÷a2c
cc_nc integercaA÷a2c
cc_nd integercaA÷a2c
cc_sa integercaA÷a2c
keep_aspect_ratio integercaA÷a2c
name stringcaA÷a2c
no_flip integercaA÷a2c
no_resize integercaA÷a2c
url stringcaA÷a2c
+>]; + m_OriginalPicture [label = < + +
OriginalPicture
+| + + + + + +
ext stringcaA÷a2c
filesize integercaA÷a2c
height integercaA÷a2c
width integercaA÷a2c
+>]; + m_Panel [label = < + +
Panel
+| + + + + + + + +
author_id integer
border integercaA÷a2c
height integercaA÷a2c
resource_picture_id integer
seqno integercaA÷a2c
width integercaA÷a2c
+>]; + m_PanelPicture [label = < + +
PanelPicture
+| + + + + + + + + +
h integercaA÷a2c
height integercaA÷a2c
left_offset integercaA÷a2c
top_offset integercaA÷a2c
v integercaA÷a2c
width integercaA÷a2c
zindex integercaA÷a2c
+>]; + m_ResourcePicture [label = < + +
ResourcePicture
+| + + + + + +
ext stringcaA÷a2c
filesize integercaA÷a2c
height integercaA÷a2c
width integercaA÷a2c
+>]; + m_Speach [label = < + +
Speach
+| + + + + + + +
content string
height integercaA÷a2c
left_offset integercaA÷a2c
top_offset integercaA÷a2c
width integercaA÷a2c
+>]; + m_SpeachBalloon [label = < + +
SpeachBalloon
+| + + + + +
border_limit integercaA÷a2c
name stringcaA÷a2c
tail_limit integercaA÷a2c
+>]; + m_SpeachTemplate [label = < + +
SpeachTemplate
+| + + + + + +
height integercaA÷a2c
left_offset integercaA÷a2c
top_offset integercaA÷a2c
width integercaA÷a2c
+>]; + m_Author -> m_Artist [arrowhead = "none", arrowtail = "none", weight = "2"] + m_SpeachBalloon -> m_BalloonTemplate [arrowhead = "normal", arrowtail = "none", weight = "2"] + m_BalloonTemplate -> m_SpeachTemplate [arrowhead = "normal", arrowtail = "none", weight = "2"] + m_ResourcePicture -> m_BalloonTemplate [arrowhead = "normal", arrowtail = "none", weight = "1"] + m_Balloon -> m_Speach [arrowhead = "normal", arrowtail = "none", weight = "2"] + m_Panel -> m_Balloon [arrowhead = "normal", arrowtail = "none", weight = "2"] + m_ResourcePicture -> m_Balloon [arrowhead = "normal", arrowtail = "none", weight = "1"] + m_Comic -> m_Panel [arrowhead = "normal", arrowtail = "none", weight = "2"] + m_Lisence -> m_CommonLisence [arrowhead = "none", arrowtail = "none", weight = "2"] + m_Lisence -> m_OriginalLisence [arrowhead = "none", arrowtail = "none", weight = "2"] + m_Artist -> m_OriginalPicture [arrowhead = "normal", arrowtail = "none", weight = "1"] + m_Lisence -> m_OriginalPicture [arrowhead = "normal", arrowtail = "none", weight = "1"] + m_OriginalPicture -> m_ResourcePicture [arrowhead = "none", arrowtail = "none", weight = "2"] + m_Panel -> m_PanelPicture [arrowhead = "normal", arrowtail = "none", weight = "2"] + m_ResourcePicture -> m_PanelPicture [arrowhead = "normal", arrowtail = "none", weight = "2"] + m_Artist -> m_ResourcePicture [arrowhead = "normal", arrowtail = "none", weight = "1"] + m_Lisence -> m_ResourcePicture [arrowhead = "normal", arrowtail = "none", weight = "1"] +} diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000..46c6d45d --- /dev/null +++ b/Gemfile @@ -0,0 +1,50 @@ +source 'http://rubygems.org' + +gem 'rails', '3.1.1' +gem 'devise' +gem 'aws-s3' + +# Bundle edge Rails instead: +# gem 'rails', :git => 'git://github.com/rails/rails.git' + +gem 'sqlite3' + + +# Gems used only for assets and not required +# in production environments by default. +group :assets do + gem 'sass-rails', '~> 3.1.4' + gem 'coffee-rails', '~> 3.1.1' + gem 'uglifier', '>= 1.0.3' +end + +gem 'jquery-rails' + +# To use ActiveModel has_secure_password +# gem 'bcrypt-ruby', '~> 3.0.0' + +# Use unicorn as the web server +# gem 'unicorn' + +# Deploy with Capistrano +# gem 'capistrano' + +# To use debugger +# gem 'ruby-debug19', :require => 'ruby-debug' + +group :production do + gem 'pg' + gem 'therubyracer-heroku' + gem 'rmagick', '=2.12.0', :require => 'RMagick' +end + +group :development, :test do + gem 'webrat' + gem 'rspec' + gem 'rspec-rails' + gem 'cucumber' + gem 'cucumber-rails' + gem 'moro-miso' + gem 'database_cleaner' + gem 'rails-erd' +end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 00000000..8c9ad925 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,200 @@ +GEM + remote: http://rubygems.org/ + specs: + actionmailer (3.1.1) + actionpack (= 3.1.1) + mail (~> 2.3.0) + actionpack (3.1.1) + activemodel (= 3.1.1) + activesupport (= 3.1.1) + builder (~> 3.0.0) + erubis (~> 2.7.0) + i18n (~> 0.6) + rack (~> 1.3.2) + rack-cache (~> 1.1) + rack-mount (~> 0.8.2) + rack-test (~> 0.6.1) + sprockets (~> 2.0.2) + activemodel (3.1.1) + activesupport (= 3.1.1) + builder (~> 3.0.0) + i18n (~> 0.6) + activerecord (3.1.1) + activemodel (= 3.1.1) + activesupport (= 3.1.1) + arel (~> 2.2.1) + tzinfo (~> 0.3.29) + activeresource (3.1.1) + activemodel (= 3.1.1) + activesupport (= 3.1.1) + activesupport (3.1.1) + multi_json (~> 1.0) + arel (2.2.1) + aws-s3 (0.6.2) + builder + mime-types + xml-simple + bcrypt-ruby (3.0.1-x86-mingw32) + builder (3.0.0) + capybara (1.1.2) + mime-types (>= 1.16) + nokogiri (>= 1.3.3) + rack (>= 1.0.0) + rack-test (>= 0.5.4) + selenium-webdriver (~> 2.0) + xpath (~> 0.1.4) + childprocess (0.2.3) + ffi (~> 1.0.6) + coffee-rails (3.1.1) + coffee-script (>= 2.2.0) + railties (~> 3.1.0) + coffee-script (2.2.0) + coffee-script-source + execjs + coffee-script-source (1.1.3) + cucumber (1.1.3) + builder (>= 2.1.2) + diff-lcs (>= 1.1.2) + gherkin (~> 2.6.7) + json (>= 1.4.6) + term-ansicolor (>= 1.0.6) + cucumber-rails (1.2.1) + capybara (>= 1.1.2) + cucumber (>= 1.1.3) + nokogiri (>= 1.5.0) + database_cleaner (0.7.0) + devise (1.5.2) + bcrypt-ruby (~> 3.0) + orm_adapter (~> 0.0.3) + warden (~> 1.1) + diff-lcs (1.1.3) + erubis (2.7.0) + execjs (1.2.11) + multi_json (~> 1.0) + ffi (1.0.11-x86-mingw32) + gherkin (2.6.9-x86-mingw32) + json (>= 1.4.6) + hike (1.2.1) + i18n (0.6.0) + jquery-rails (1.0.19) + railties (~> 3.0) + thor (~> 0.14) + json (1.6.3) + mail (2.3.0) + i18n (>= 0.4.0) + mime-types (~> 1.16) + treetop (~> 1.4.8) + mime-types (1.17.2) + moro-miso (0.0.6) + multi_json (1.0.4) + nokogiri (1.5.0-x86-mingw32) + orm_adapter (0.0.5) + pg (0.11.0-x86-mingw32) + polyglot (0.3.3) + rack (1.3.5) + rack-cache (1.1) + rack (>= 0.4) + rack-mount (0.8.3) + rack (>= 1.0.0) + rack-ssl (1.3.2) + rack + rack-test (0.6.1) + rack (>= 1.0) + rails (3.1.1) + actionmailer (= 3.1.1) + actionpack (= 3.1.1) + activerecord (= 3.1.1) + activeresource (= 3.1.1) + activesupport (= 3.1.1) + bundler (~> 1.0) + railties (= 3.1.1) + rails-erd (0.4.5) + activerecord (~> 3.0) + activesupport (~> 3.0) + ruby-graphviz (~> 0.9.18) + railties (3.1.1) + actionpack (= 3.1.1) + activesupport (= 3.1.1) + rack-ssl (~> 1.3.2) + rake (>= 0.8.7) + rdoc (~> 3.4) + thor (~> 0.14.6) + rake (0.9.2.2) + rdoc (3.11) + json (~> 1.4) + rmagick (2.12.0) + rspec (2.7.0) + rspec-core (~> 2.7.0) + rspec-expectations (~> 2.7.0) + rspec-mocks (~> 2.7.0) + rspec-core (2.7.1) + rspec-expectations (2.7.0) + diff-lcs (~> 1.1.2) + rspec-mocks (2.7.0) + rspec-rails (2.7.0) + actionpack (~> 3.0) + activesupport (~> 3.0) + railties (~> 3.0) + rspec (~> 2.7.0) + ruby-graphviz (0.9.21) + rubyzip (0.9.5) + sass (3.1.11) + sass-rails (3.1.5) + actionpack (~> 3.1.0) + railties (~> 3.1.0) + sass (~> 3.1.10) + tilt (~> 1.3.2) + selenium-webdriver (2.14.0) + childprocess (>= 0.2.1) + ffi (~> 1.0.9) + multi_json (~> 1.0.4) + rubyzip + sprockets (2.0.3) + hike (~> 1.2) + rack (~> 1.0) + tilt (!= 1.3.0, ~> 1.1) + sqlite3 (1.3.5-x86-mingw32) + term-ansicolor (1.0.7) + therubyracer-heroku (0.8.1.pre3) + thor (0.14.6) + tilt (1.3.3) + treetop (1.4.10) + polyglot + polyglot (>= 0.3.1) + tzinfo (0.3.31) + uglifier (1.1.0) + execjs (>= 0.3.0) + multi_json (>= 1.0.2) + warden (1.1.0) + rack (>= 1.0) + webrat (0.7.3) + nokogiri (>= 1.2.0) + rack (>= 1.0) + rack-test (>= 0.5.3) + xml-simple (1.1.1) + xpath (0.1.4) + nokogiri (~> 1.3) + +PLATFORMS + x86-mingw32 + +DEPENDENCIES + aws-s3 + coffee-rails (~> 3.1.1) + cucumber + cucumber-rails + database_cleaner + devise + jquery-rails + moro-miso + pg + rails (= 3.1.1) + rails-erd + rmagick (= 2.12.0) + rspec + rspec-rails + sass-rails (~> 3.1.4) + sqlite3 + therubyracer-heroku + uglifier (>= 1.0.3) + webrat diff --git a/LISENCE.txt b/LISENCE.txt new file mode 100644 index 00000000..3fe62b55 --- /dev/null +++ b/LISENCE.txt @@ -0,0 +1,25 @@ +Copyright (c) 2011, Team Pettan (http://sourceforge.jp/projects/pettanr/) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +・Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +・Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +・Neither the name of the pettanR nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.rails b/README.rails new file mode 100644 index 00000000..7c36f235 --- /dev/null +++ b/README.rails @@ -0,0 +1,261 @@ +== Welcome to Rails + +Rails is a web-application framework that includes everything needed to create +database-backed web applications according to the Model-View-Control pattern. + +This pattern splits the view (also called the presentation) into "dumb" +templates that are primarily responsible for inserting pre-built data in between +HTML tags. The model contains the "smart" domain objects (such as Account, +Product, Person, Post) that holds all the business logic and knows how to +persist themselves to a database. The controller handles the incoming requests +(such as Save New Account, Update Product, Show Post) by manipulating the model +and directing data to the view. + +In Rails, the model is handled by what's called an object-relational mapping +layer entitled Active Record. This layer allows you to present the data from +database rows as objects and embellish these data objects with business logic +methods. You can read more about Active Record in +link:files/vendor/rails/activerecord/README.html. + +The controller and view are handled by the Action Pack, which handles both +layers by its two parts: Action View and Action Controller. These two layers +are bundled in a single package due to their heavy interdependence. This is +unlike the relationship between the Active Record and Action Pack that is much +more separate. Each of these packages can be used independently outside of +Rails. You can read more about Action Pack in +link:files/vendor/rails/actionpack/README.html. + + +== Getting Started + +1. At the command prompt, create a new Rails application: + rails new myapp (where myapp is the application name) + +2. Change directory to myapp and start the web server: + cd myapp; rails server (run with --help for options) + +3. Go to http://localhost:3000/ and you'll see: + "Welcome aboard: You're riding Ruby on Rails!" + +4. Follow the guidelines to start developing your application. You can find +the following resources handy: + +* The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html +* Ruby on Rails Tutorial Book: http://www.railstutorial.org/ + + +== Debugging Rails + +Sometimes your application goes wrong. Fortunately there are a lot of tools that +will help you debug it and get it back on the rails. + +First area to check is the application log files. Have "tail -f" commands +running on the server.log and development.log. Rails will automatically display +debugging and runtime information to these files. Debugging info will also be +shown in the browser on requests from 127.0.0.1. + +You can also log your own messages directly into the log file from your code +using the Ruby logger class from inside your controllers. Example: + + class WeblogController < ActionController::Base + def destroy + @weblog = Weblog.find(params[:id]) + @weblog.destroy + logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!") + end + end + +The result will be a message in your log file along the lines of: + + Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1! + +More information on how to use the logger is at http://www.ruby-doc.org/core/ + +Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are +several books available online as well: + +* Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe) +* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide) + +These two books will bring you up to speed on the Ruby language and also on +programming in general. + + +== Debugger + +Debugger support is available through the debugger command when you start your +Mongrel or WEBrick server with --debugger. This means that you can break out of +execution at any point in the code, investigate and change the model, and then, +resume execution! You need to install ruby-debug to run the server in debugging +mode. With gems, use sudo gem install ruby-debug. Example: + + class WeblogController < ActionController::Base + def index + @posts = Post.all + debugger + end + end + +So the controller will accept the action, run the first line, then present you +with a IRB prompt in the server window. Here you can do things like: + + >> @posts.inspect + => "[#nil, "body"=>nil, "id"=>"1"}>, + #"Rails", "body"=>"Only ten..", "id"=>"2"}>]" + >> @posts.first.title = "hello from a debugger" + => "hello from a debugger" + +...and even better, you can examine how your runtime objects actually work: + + >> f = @posts.first + => #nil, "body"=>nil, "id"=>"1"}> + >> f. + Display all 152 possibilities? (y or n) + +Finally, when you're ready to resume execution, you can enter "cont". + + +== Console + +The console is a Ruby shell, which allows you to interact with your +application's domain model. Here you'll have all parts of the application +configured, just like it is when the application is running. You can inspect +domain models, change values, and save to the database. Starting the script +without arguments will launch it in the development environment. + +To start the console, run rails console from the application +directory. + +Options: + +* Passing the -s, --sandbox argument will rollback any modifications + made to the database. +* Passing an environment name as an argument will load the corresponding + environment. Example: rails console production. + +To reload your controllers and models after launching the console run +reload! + +More information about irb can be found at: +link:http://www.rubycentral.org/pickaxe/irb.html + + +== dbconsole + +You can go to the command line of your database directly through rails +dbconsole. You would be connected to the database with the credentials +defined in database.yml. Starting the script without arguments will connect you +to the development database. Passing an argument will connect you to a different +database, like rails dbconsole production. Currently works for MySQL, +PostgreSQL and SQLite 3. + +== Description of Contents + +The default directory structure of a generated Ruby on Rails application: + + |-- app + | |-- assets + | |-- images + | |-- javascripts + | `-- stylesheets + | |-- controllers + | |-- helpers + | |-- mailers + | |-- models + | `-- views + | `-- layouts + |-- config + | |-- environments + | |-- initializers + | `-- locales + |-- db + |-- doc + |-- lib + | `-- tasks + |-- log + |-- public + |-- script + |-- test + | |-- fixtures + | |-- functional + | |-- integration + | |-- performance + | `-- unit + |-- tmp + | |-- cache + | |-- pids + | |-- sessions + | `-- sockets + `-- vendor + |-- assets + `-- stylesheets + `-- plugins + +app + Holds all the code that's specific to this particular application. + +app/assets + Contains subdirectories for images, stylesheets, and JavaScript files. + +app/controllers + Holds controllers that should be named like weblogs_controller.rb for + automated URL mapping. All controllers should descend from + ApplicationController which itself descends from ActionController::Base. + +app/models + Holds models that should be named like post.rb. Models descend from + ActiveRecord::Base by default. + +app/views + Holds the template files for the view that should be named like + weblogs/index.html.erb for the WeblogsController#index action. All views use + eRuby syntax by default. + +app/views/layouts + Holds the template files for layouts to be used with views. This models the + common header/footer method of wrapping views. In your views, define a layout + using the layout :default and create a file named default.html.erb. + Inside default.html.erb, call <% yield %> to render the view using this + layout. + +app/helpers + Holds view helpers that should be named like weblogs_helper.rb. These are + generated for you automatically when using generators for controllers. + Helpers can be used to wrap functionality for your views into methods. + +config + Configuration files for the Rails environment, the routing map, the database, + and other dependencies. + +db + Contains the database schema in schema.rb. db/migrate contains all the + sequence of Migrations for your schema. + +doc + This directory is where your application documentation will be stored when + generated using rake doc:app + +lib + Application specific libraries. Basically, any kind of custom code that + doesn't belong under controllers, models, or helpers. This directory is in + the load path. + +public + The directory available for the web server. Also contains the dispatchers and the + default HTML files. This should be set as the DOCUMENT_ROOT of your web + server. + +script + Helper scripts for automation and generation. + +test + Unit and functional tests along with fixtures. When using the rails generate + command, template test files will be generated for you and placed in this + directory. + +vendor + External libraries that the application depends on. Also includes the plugins + subdirectory. If the app has frozen rails, those gems also go here, under + vendor/rails/. This directory is in the load path. diff --git a/Rakefile b/Rakefile new file mode 100644 index 00000000..82351ad1 --- /dev/null +++ b/Rakefile @@ -0,0 +1,7 @@ +#!/usr/bin/env rake +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require File.expand_path('../config/application', __FILE__) + +Pettanr::Application.load_tasks diff --git a/app/assets/images/rails.png b/app/assets/images/rails.png new file mode 100644 index 0000000000000000000000000000000000000000..d5edc04e65f555e3ba4dcdaad39dc352e75b575e GIT binary patch literal 6646 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 AQ~&?~ literal 0 HcmV?d00001 diff --git a/app/assets/javascripts/admins/sessions.js.coffee b/app/assets/javascripts/admins/sessions.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/admins/sessions.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js new file mode 100644 index 00000000..37c7bfcd --- /dev/null +++ b/app/assets/javascripts/application.js @@ -0,0 +1,9 @@ +// This is a manifest file that'll be compiled into including all the files listed below. +// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically +// be included in the compiled file accessible from http://example.com/assets/application.js +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// the compiled file. +// +//= require jquery +//= require jquery_ujs +//= require_tree . diff --git a/app/assets/javascripts/artists.js.coffee b/app/assets/javascripts/artists.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/artists.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/authors/sessions.js.coffee b/app/assets/javascripts/authors/sessions.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/authors/sessions.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/baloon_templates.js.coffee b/app/assets/javascripts/baloon_templates.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/baloon_templates.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/baloon_types.js.coffee b/app/assets/javascripts/baloon_types.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/baloon_types.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/baloons.js.coffee b/app/assets/javascripts/baloons.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/baloons.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/comics.js.coffee b/app/assets/javascripts/comics.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/comics.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/common_lisences.js.coffee b/app/assets/javascripts/common_lisences.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/common_lisences.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/help.js.coffee b/app/assets/javascripts/help.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/help.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/home.js.coffee b/app/assets/javascripts/home.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/home.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/lisences.js.coffee b/app/assets/javascripts/lisences.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/lisences.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/original_lisences.js.coffee b/app/assets/javascripts/original_lisences.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/original_lisences.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/original_pictures.js.coffee b/app/assets/javascripts/original_pictures.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/original_pictures.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/panels.js.coffee b/app/assets/javascripts/panels.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/panels.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/pictures.js.coffee b/app/assets/javascripts/pictures.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/pictures.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/source_pictures.js.coffee b/app/assets/javascripts/source_pictures.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/source_pictures.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/speach_baloons.js.coffee b/app/assets/javascripts/speach_baloons.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/speach_baloons.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/speach_templates.js.coffee b/app/assets/javascripts/speach_templates.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/speach_templates.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/speachbaloons.js.coffee b/app/assets/javascripts/speachbaloons.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/speachbaloons.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/speaches.js.coffee b/app/assets/javascripts/speaches.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/speaches.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/system.js.coffee b/app/assets/javascripts/system.js.coffee new file mode 100644 index 00000000..76156794 --- /dev/null +++ b/app/assets/javascripts/system.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ diff --git a/app/assets/stylesheets/admins/sessions.css.scss b/app/assets/stylesheets/admins/sessions.css.scss new file mode 100644 index 00000000..c6bbc18d --- /dev/null +++ b/app/assets/stylesheets/admins/sessions.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the admins/sessions controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css new file mode 100644 index 00000000..fc25b572 --- /dev/null +++ b/app/assets/stylesheets/application.css @@ -0,0 +1,7 @@ +/* + * This is a manifest file that'll automatically include all the stylesheets available in this directory + * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at + * the top of the compiled file, but it's generally better to create a new file per style scope. + *= require_self + *= require_tree . +*/ \ No newline at end of file diff --git a/app/assets/stylesheets/artists.css.scss b/app/assets/stylesheets/artists.css.scss new file mode 100644 index 00000000..cf638780 --- /dev/null +++ b/app/assets/stylesheets/artists.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the artists controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/authors/sessions.css.scss b/app/assets/stylesheets/authors/sessions.css.scss new file mode 100644 index 00000000..244137d9 --- /dev/null +++ b/app/assets/stylesheets/authors/sessions.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the authors/sessions controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/baloon_templates.css.scss b/app/assets/stylesheets/baloon_templates.css.scss new file mode 100644 index 00000000..06e9b148 --- /dev/null +++ b/app/assets/stylesheets/baloon_templates.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the baloon_templates controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/baloon_types.css.scss b/app/assets/stylesheets/baloon_types.css.scss new file mode 100644 index 00000000..ca4b2f33 --- /dev/null +++ b/app/assets/stylesheets/baloon_types.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the baloon_types controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/baloons.css.scss b/app/assets/stylesheets/baloons.css.scss new file mode 100644 index 00000000..67e17d0a --- /dev/null +++ b/app/assets/stylesheets/baloons.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the baloons controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/comics.css.scss b/app/assets/stylesheets/comics.css.scss new file mode 100644 index 00000000..6ef66b03 --- /dev/null +++ b/app/assets/stylesheets/comics.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the comics controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/common_lisences.css.scss b/app/assets/stylesheets/common_lisences.css.scss new file mode 100644 index 00000000..3d954b1c --- /dev/null +++ b/app/assets/stylesheets/common_lisences.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the common_lisences controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/help.css.scss b/app/assets/stylesheets/help.css.scss new file mode 100644 index 00000000..a2342cbc --- /dev/null +++ b/app/assets/stylesheets/help.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the help controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/home.css.scss b/app/assets/stylesheets/home.css.scss new file mode 100644 index 00000000..f0ddc684 --- /dev/null +++ b/app/assets/stylesheets/home.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the home controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/lisences.css.scss b/app/assets/stylesheets/lisences.css.scss new file mode 100644 index 00000000..ea7f80b0 --- /dev/null +++ b/app/assets/stylesheets/lisences.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the lisences controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/original_lisences.css.scss b/app/assets/stylesheets/original_lisences.css.scss new file mode 100644 index 00000000..f9474df2 --- /dev/null +++ b/app/assets/stylesheets/original_lisences.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the original_lisences controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/original_pictures.css.scss b/app/assets/stylesheets/original_pictures.css.scss new file mode 100644 index 00000000..48be6db2 --- /dev/null +++ b/app/assets/stylesheets/original_pictures.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the original_pictures controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/panels.css.scss b/app/assets/stylesheets/panels.css.scss new file mode 100644 index 00000000..9d1f3f66 --- /dev/null +++ b/app/assets/stylesheets/panels.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the panels controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/pictures.css.scss b/app/assets/stylesheets/pictures.css.scss new file mode 100644 index 00000000..83553278 --- /dev/null +++ b/app/assets/stylesheets/pictures.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the pictures controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/scaffolds.css.scss b/app/assets/stylesheets/scaffolds.css.scss new file mode 100644 index 00000000..05188f08 --- /dev/null +++ b/app/assets/stylesheets/scaffolds.css.scss @@ -0,0 +1,56 @@ +body { + background-color: #fff; + color: #333; + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; } + +p, ol, ul, td { + font-family: verdana, arial, helvetica, sans-serif; + font-size: 13px; + line-height: 18px; } + +pre { + background-color: #eee; + padding: 10px; + font-size: 11px; } + +a { + color: #000; + &:visited { + color: #666; } + &:hover { + color: #fff; + background-color: #000; } } + +div { + &.field, &.actions { + margin-bottom: 10px; } } + +#notice { + color: green; } + +.field_with_errors { + padding: 2px; + background-color: red; + display: table; } + +#error_explanation { + width: 450px; + border: 2px solid red; + padding: 7px; + padding-bottom: 0; + margin-bottom: 20px; + background-color: #f0f0f0; + h2 { + text-align: left; + font-weight: bold; + padding: 5px 5px 5px 15px; + font-size: 12px; + margin: -7px; + margin-bottom: 0px; + background-color: #c00; + color: #fff; } + ul li { + font-size: 12px; + list-style: square; } } diff --git a/app/assets/stylesheets/source_pictures.css.scss b/app/assets/stylesheets/source_pictures.css.scss new file mode 100644 index 00000000..d9973ed8 --- /dev/null +++ b/app/assets/stylesheets/source_pictures.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the source_pictures controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/speach_baloons.css.scss b/app/assets/stylesheets/speach_baloons.css.scss new file mode 100644 index 00000000..085a9a21 --- /dev/null +++ b/app/assets/stylesheets/speach_baloons.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the speach_baloons controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/speach_templates.css.scss b/app/assets/stylesheets/speach_templates.css.scss new file mode 100644 index 00000000..7fe46be3 --- /dev/null +++ b/app/assets/stylesheets/speach_templates.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the speach_templates controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/speachbaloons.css.scss b/app/assets/stylesheets/speachbaloons.css.scss new file mode 100644 index 00000000..af35a9ec --- /dev/null +++ b/app/assets/stylesheets/speachbaloons.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the speachbaloons controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/speaches.css.scss b/app/assets/stylesheets/speaches.css.scss new file mode 100644 index 00000000..2b19f3bf --- /dev/null +++ b/app/assets/stylesheets/speaches.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the speaches controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/system.css.scss b/app/assets/stylesheets/system.css.scss new file mode 100644 index 00000000..9c5e904b --- /dev/null +++ b/app/assets/stylesheets/system.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the system controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb new file mode 100644 index 00000000..2741dd3e --- /dev/null +++ b/app/controllers/application_controller.rb @@ -0,0 +1,22 @@ +class ApplicationController < ActionController::Base + protect_from_forgery + before_filter :bf + + def bf + if Admin.count.to_i == 0 + if params[:controller] == 'system' and params[:action] == 'start' + else + redirect_to :controller => '/system', :action => 'start' + end + else + if author_signed_in? + @artist = if current_author.artist? + current_author.artist + else + Artist.new author_id: current_author.id, email: current_author.email, name: current_author.name + end + end + end + end + +end diff --git a/app/controllers/artists_controller.rb b/app/controllers/artists_controller.rb new file mode 100644 index 00000000..442890ac --- /dev/null +++ b/app/controllers/artists_controller.rb @@ -0,0 +1,83 @@ +class ArtistsController < ApplicationController + # GET /artists + # GET /artists.json + def index + @artists = Artist.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @artists } + end + end + + # GET /artists/1 + # GET /artists/1.json + def show + @artist = Artist.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @artist } + end + end + + # GET /artists/new + # GET /artists/new.json + def new + @artist = Artist.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @artist } + end + end + + # GET /artists/1/edit + def edit + @artist = Artist.find(params[:id]) + end + + # POST /artists + # POST /artists.json + def create + @artist = Artist.new(params[:artist]) + + respond_to do |format| + if @artist.save + format.html { redirect_to @artist, notice: 'Artist was successfully created.' } + format.json { render json: @artist, status: :created, location: @artist } + else + format.html { render action: "new" } + format.json { render json: @artist.errors, status: :unprocessable_entity } + end + end + end + + # PUT /artists/1 + # PUT /artists/1.json + def update + @artist = Artist.find(params[:id]) + + respond_to do |format| + if @artist.update_attributes(params[:artist]) + format.html { redirect_to @artist, notice: 'Artist was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @artist.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /artists/1 + # DELETE /artists/1.json + def destroy + @artist = Artist.find(params[:id]) + @artist.destroy + + respond_to do |format| + format.html { redirect_to artists_url } + format.json { head :ok } + end + end +end diff --git a/app/controllers/balloon_templates_controller.rb b/app/controllers/balloon_templates_controller.rb new file mode 100644 index 00000000..a1ef2512 --- /dev/null +++ b/app/controllers/balloon_templates_controller.rb @@ -0,0 +1,86 @@ +class BalloonTemplatesController < ApplicationController + before_filter :authenticate_author!, :except => [:index] + + # GET /balloon_templates + # GET /balloon_templates.json + def index + @balloon_templates = BalloonTemplate.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @balloon_templates } + end + end +=begin + # GET /balloon_templates/1 + # GET /balloon_templates/1.json + def show + @balloon_template = BalloonTemplate.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @balloon_template } + end + end + + # GET /balloon_templates/new + # GET /balloon_templates/new.json + def new + @balloon_template = BalloonTemplate.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @balloon_template } + end + end + + # GET /balloon_templates/1/edit + def edit + @balloon_template = BalloonTemplate.find(params[:id]) + end + + # POST /balloon_templates + # POST /balloon_templates.json + def create + @balloon_template = BalloonTemplate.new(params[:balloon_template]) + + respond_to do |format| + if @balloon_template.save + format.html { redirect_to @balloon_template, notice: 'Balloon template was successfully created.' } + format.json { render json: @balloon_template, status: :created, location: @balloon_template } + else + format.html { render action: "new" } + format.json { render json: @balloon_template.errors, status: :unprocessable_entity } + end + end + end + + # PUT /balloon_templates/1 + # PUT /balloon_templates/1.json + def update + @balloon_template = BalloonTemplate.find(params[:id]) + + respond_to do |format| + if @balloon_template.update_attributes(params[:balloon_template]) + format.html { redirect_to @balloon_template, notice: 'Balloon template was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @balloon_template.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /balloon_templates/1 + # DELETE /balloon_templates/1.json + def destroy + @balloon_template = BalloonTemplate.find(params[:id]) + @balloon_template.destroy + + respond_to do |format| + format.html { redirect_to balloon_templates_url } + format.json { head :ok } + end + end +=end +end diff --git a/app/controllers/balloons_controller.rb b/app/controllers/balloons_controller.rb new file mode 100644 index 00000000..617e9b5d --- /dev/null +++ b/app/controllers/balloons_controller.rb @@ -0,0 +1,86 @@ +class BalloonsController < ApplicationController + before_filter :authenticate_user!, :except => [:index] + # GET /balloons + # GET /balloons.json + def index + @balloons = Balloon.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @balloons } + end + end + +=begin + # GET /balloons/1 + # GET /balloons/1.json + def show + @balloon = Balloon.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @balloon } + end + end + + # GET /balloons/new + # GET /balloons/new.json + def new + @balloon = Balloon.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @balloon } + end + end + + # GET /balloons/1/edit + def edit + @balloon = Balloon.find(params[:id]) + end + + # POST /balloons + # POST /balloons.json + def create + @balloon = Balloon.new(params[:balloon]) + + respond_to do |format| + if @balloon.save + format.html { redirect_to @balloon, notice: 'Balloon was successfully created.' } + format.json { render json: @balloon, status: :created, location: @balloon } + else + format.html { render action: "new" } + format.json { render json: @balloon.errors, status: :unprocessable_entity } + end + end + end + + # PUT /balloons/1 + # PUT /balloons/1.json + def update + @balloon = Balloon.find(params[:id]) + + respond_to do |format| + if @balloon.update_attributes(params[:balloon]) + format.html { redirect_to @balloon, notice: 'Balloon was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @balloon.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /balloons/1 + # DELETE /balloons/1.json + def destroy + @balloon = Balloon.find(params[:id]) + @balloon.destroy + + respond_to do |format| + format.html { redirect_to balloons_url } + format.json { head :ok } + end + end +=end +end diff --git a/app/controllers/comics_controller.rb b/app/controllers/comics_controller.rb new file mode 100644 index 00000000..2d3664ae --- /dev/null +++ b/app/controllers/comics_controller.rb @@ -0,0 +1,133 @@ +class ComicsController < ApplicationController + before_filter :authenticate_author!, :except => [:index, :show, :play] + + private + + def treat_param comic + comic.author_id = current_author.id + end + + public + + def top + end + + # GET /comics + # GET /comics.json + def index + @comics = Comic.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @comics } + end + end + + # GET /comics/1 + # GET /comics/1.json + def show + @comic = Comic.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @comic } + end + end + + def play + @comic = Comic.find(params[:id], include: {:panels => [:panel_pictures => :resource_picture, :balloons => :speaches]}, order: 'panels.seqno') + + respond_to do |format| + format.html # index.html.erb + format.json { + render :json => @comic.to_json( + :include => { + :panels => {:include => { + :panel_pictures => {:include => :resource_picture}, + :balloons => {:include => :speaches} + }} + } + ) + } + format.jsonp { + render :json => "callback(" + @comic.to_json( + :include => { + :panels => {:include => { + :panel_pictures => {:include => :resource_picture}, + :balloons => {:include => :speaches} + }} + } + ) + ");" + } + end + end + + # GET /comics/new + # GET /comics/new.json + def new + @comic = Comic.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @comic } + end + end + + # GET /comics/1/edit + def edit + @comic = Comic.find(params[:id]) + end + + # POST /comics + # POST /comics.json + def create + @comic = Comic.new(params[:comic]) + treat_param @comic + + respond_to do |format| + if @comic.save + format.html { redirect_to @comic, notice: 'Comic was successfully created.' } + format.json { render json: @comic, status: :created, location: @comic } + else + format.html { render action: "new" } + format.json { render json: @comic.errors, status: :unprocessable_entity } + end + end + end + + # PUT /comics/1 + # PUT /comics/1.json + def update + @comic = Comic.find(params[:id]) + if @comic.own? current_author + respond_to do |format| + if @comic.update_attributes(params[:comic]) + format.html { redirect_to @comic, notice: 'Comic was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @comic.errors, status: :unprocessable_entity } + end + end + else + format.html { render action: "edit" } + format.json { render json: @comic.errors, status: :unprocessable_entity } + end + end + + # DELETE /comics/1 + # DELETE /comics/1.json + def destroy + @comic = Comic.find(params[:id]) + if @comic.own? current_author + @comic.destroy + respond_to do |format| + format.html { redirect_to comics_url } + format.json { head :ok } + end + else + format.html { render action: "edit" } + format.json { render json: @comic.errors, status: :unprocessable_entity } + end + end +end diff --git a/app/controllers/common_lisences_controller.rb b/app/controllers/common_lisences_controller.rb new file mode 100644 index 00000000..35ac50dc --- /dev/null +++ b/app/controllers/common_lisences_controller.rb @@ -0,0 +1,85 @@ +class CommonLisencesController < ApplicationController + # GET /common_lisences + # GET /common_lisences.json + def index + @common_lisences = CommonLisence.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @common_lisences } + end + end + + # GET /common_lisences/1 + # GET /common_lisences/1.json + def show + @common_lisence = CommonLisence.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @common_lisence } + end + end + + # GET /common_lisences/new + # GET /common_lisences/new.json + def new + @common_lisence = CommonLisence.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @common_lisence } + end + end + + # GET /common_lisences/1/edit + def edit + @common_lisence = CommonLisence.find(params[:id]) + end + + # POST /common_lisences + # POST /common_lisences.json + def create + @common_lisence = CommonLisence.new(params[:common_lisence]) + + respond_to do |format| + CommonLisence.transaction do + if @common_lisence.save_save + format.html { redirect_to @common_lisence, notice: 'Common lisence was successfully created.' } + format.json { render json: @common_lisence, status: :created, location: @common_lisence } + else + format.html { render action: "new" } + format.json { render json: @common_lisence.errors, status: :unprocessable_entity } + end + end + end + end + + # PUT /common_lisences/1 + # PUT /common_lisences/1.json + def update + @common_lisence = CommonLisence.find(params[:id]) + + respond_to do |format| + if @common_lisence.update_attributes(params[:common_lisence]) + format.html { redirect_to @common_lisence, notice: 'Common lisence was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @common_lisence.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /common_lisences/1 + # DELETE /common_lisences/1.json + def destroy + @common_lisence = CommonLisence.find(params[:id]) + @common_lisence.destroy + + respond_to do |format| + format.html { redirect_to common_lisences_url } + format.json { head :ok } + end + end +end diff --git a/app/controllers/help_controller.rb b/app/controllers/help_controller.rb new file mode 100644 index 00000000..f9d547ed --- /dev/null +++ b/app/controllers/help_controller.rb @@ -0,0 +1,3 @@ +class HelpController < ApplicationController + +end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb new file mode 100644 index 00000000..cc3895ad --- /dev/null +++ b/app/controllers/home_controller.rb @@ -0,0 +1,13 @@ +class HomeController < ApplicationController + + def start + + end + + def index + end + + def profile + end + +end diff --git a/app/controllers/lisences_controller.rb b/app/controllers/lisences_controller.rb new file mode 100644 index 00000000..941c838d --- /dev/null +++ b/app/controllers/lisences_controller.rb @@ -0,0 +1,83 @@ +class LisencesController < ApplicationController + # GET /lisences + # GET /lisences.json + def index + @lisences = Lisence.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @lisences } + end + end + + # GET /lisences/1 + # GET /lisences/1.json + def show + @lisence = Lisence.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @lisence } + end + end + + # GET /lisences/new + # GET /lisences/new.json + def new + @lisence = Lisence.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @lisence } + end + end + + # GET /lisences/1/edit + def edit + @lisence = Lisence.find(params[:id]) + end + + # POST /lisences + # POST /lisences.json + def create + @lisence = Lisence.new(params[:lisence]) + + respond_to do |format| + if @lisence.save + format.html { redirect_to @lisence, notice: 'Lisence was successfully created.' } + format.json { render json: @lisence, status: :created, location: @lisence } + else + format.html { render action: "new" } + format.json { render json: @lisence.errors, status: :unprocessable_entity } + end + end + end + + # PUT /lisences/1 + # PUT /lisences/1.json + def update + @lisence = Lisence.find(params[:id]) + + respond_to do |format| + if @lisence.update_attributes(params[:lisence]) + format.html { redirect_to @lisence, notice: 'Lisence was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @lisence.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /lisences/1 + # DELETE /lisences/1.json + def destroy + @lisence = Lisence.find(params[:id]) + @lisence.destroy + + respond_to do |format| + format.html { redirect_to lisences_url } + format.json { head :ok } + end + end +end diff --git a/app/controllers/original_lisences_controller.rb b/app/controllers/original_lisences_controller.rb new file mode 100644 index 00000000..d43d0f4b --- /dev/null +++ b/app/controllers/original_lisences_controller.rb @@ -0,0 +1,85 @@ +class OriginalLisencesController < ApplicationController + before_filter :authenticate_author!, :except => [:index] + + # GET /original_lisences + # GET /original_lisences.json + def index + @original_lisences = OriginalLisence.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @original_lisences } + end + end + + # GET /original_lisences/1 + # GET /original_lisences/1.json + def show + @original_lisence = OriginalLisence.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @original_lisence } + end + end + + # GET /original_lisences/new + # GET /original_lisences/new.json + def new + @original_lisence = OriginalLisence.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @original_lisence } + end + end + + # GET /original_lisences/1/edit + def edit + @original_lisence = OriginalLisence.find(params[:id]) + end + + # POST /original_lisences + # POST /original_lisences.json + def create + @original_lisence = OriginalLisence.new(params[:original_lisence]) + @original_lisence.artist_id = current_author.artist.id + respond_to do |format| + if @original_lisence.save + format.html { redirect_to @original_lisence, notice: 'Original lisence was successfully created.' } + format.json { render json: @original_lisence, status: :created, location: @original_lisence } + else + format.html { render action: "new" } + format.json { render json: @original_lisence.errors, status: :unprocessable_entity } + end + end + end + + # PUT /original_lisences/1 + # PUT /original_lisences/1.json + def update + @original_lisence = OriginalLisence.find(params[:id]) + + respond_to do |format| + if @original_lisence.update_attributes(params[:original_lisence]) + format.html { redirect_to @original_lisence, notice: 'Original lisence was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @original_lisence.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /original_lisences/1 + # DELETE /original_lisences/1.json + def destroy + @original_lisence = OriginalLisence.find(params[:id]) + @original_lisence.destroy + + respond_to do |format| + format.html { redirect_to original_lisences_url } + format.json { head :ok } + end + end +end diff --git a/app/controllers/original_pictures_controller.rb b/app/controllers/original_pictures_controller.rb new file mode 100644 index 00000000..ac85efe8 --- /dev/null +++ b/app/controllers/original_pictures_controller.rb @@ -0,0 +1,184 @@ +class OriginalPicturesController < ApplicationController + before_filter :authenticate_author!, :except => [:index, :show] + + private + + def set_image(prm) + img = nil + if (f = prm[:original_picture][:file]).respond_to?(:read) + if f.size > 1000000 + @original_picture.width = 0 + @original_picture.height = 0 + @original_picture.ext = 'none' + @original_picture.filesize = 1.megabytes + else + img = Magick::Image.from_blob(f.read).shift + @original_picture.width = img.columns + @original_picture.height = img.rows + @original_picture.ext = img.format.downcase + @original_picture.filesize = f.size + end + else + dat = Base64.decode64(prm[:original_picture][:file].to_s.gsub(' ', '+')) #rubyのバグ?+でデコードされるべきキャラがスペースになる + img = Magick::Image.from_blob(dat).shift + @original_picture.width = img.columns + @original_picture.height = img.rows + @original_picture.ext = img.format.downcase + @original_picture.filesize = 1000 + end + img + end + + public + + # GET /original_pictures + # GET /original_pictures.json + def index + @original_pictures = OriginalPicture.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @original_pictures } + end + end + + # GET /original_pictures/1 + # GET /original_pictures/1.json + def show + @original_picture = OriginalPicture.find(params[:id]) +# if params[:subdir] == 'refresh' +# refresh +# return +# end + + respond_to do |format| + opt = {:type => @original_picture.mime_type, :disposition=>"inline"} + format.png { send_data(@original_picture.restore, opt ) } + format.gif { send_data(@original_picture.restore, opt ) } + format.jpeg { send_data(@original_picture.restore, opt ) } + format.html # show.html.erb + format.json { render json: @original_picture} + end + end + + def refresh + @original_picture = OriginalPicture.find(params[:id]) + img = Magick::Image.from_blob(@original_picture.restore).shift + @original_picture.store img + respond_to do |format| + format.html { redirect_to original_pictures_url } + end + end + + # GET /original_pictures/new + # GET /original_pictures/new.json + def new + @original_picture = OriginalPicture.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @original_picture } + end + end + + # GET /original_pictures/1/edit + def edit + @original_picture = OriginalPicture.find(params[:id]) + end + + # POST /original_pictures + # POST /original_pictures.json + def create + unless @artist + respond_to do |format| + format.html { redirect_to @original_picture, notice: 'Failed! author does not artist.' } + format.json { render json: @original_picture.errors, status: :unprocessable_entity } + end + return + end + @original_picture = OriginalPicture.new + img = set_image params + @original_picture.artist_id = current_author.artist.id + + respond_to do |format| + OriginalPicture.transaction do + if @original_picture.save + if @original_picture.store(img) + format.html { redirect_to @original_picture, notice: 'Original picture was successfully created.' } + format.json { render json: @original_picture, status: :created, location: @original_picture } + else + format.html { redirect_to @original_picture, notice: 'Failed! Original picture was NOT created.' } + format.json { render json: @original_picture.errors, status: :unprocessable_entity } + end + else + format.html { render action: "new" } + format.json { render json: @original_picture.errors, status: :unprocessable_entity } + end + end + end + end + + # PUT /original_pictures/1 + # PUT /original_pictures/1.json + def update + unless @artist + respond_to do |format| + format.html { redirect_to @original_picture, notice: 'Failed! author does not artist.' } + format.json { render json: @original_picture.errors, status: :unprocessable_entity } + end + return + end + @original_picture = OriginalPicture.find(params[:id]) + unless @original_picture.own? current_author + respond_to do |format| + format.html { redirect_to @original_picture, notice: 'Failed! ' } + format.json { render json: @original_picture.errors, status: :unprocessable_entity } + end + return + end + img = set_image params + + respond_to do |format| + OriginalPicture.transaction do + if @original_picture.save + if @original_picture.store(img) + format.html { redirect_to @original_picture, notice: 'Original picture was successfully updated.' } + format.json { head :ok } + else + format.html { redirect_to @original_picture, notice: 'Failed! Original picture was NOT created.' } + format.json { render json: @original_picture.errors, status: :unprocessable_entity } + end + else + format.html { render action: "edit" } + format.json { render json: @original_picture.errors, status: :unprocessable_entity } + end + end + end + end + + # DELETE /original_pictures/1 + # DELETE /original_pictures/1.json + def destroy + unless @artist + respond_to do |format| + format.html { redirect_to @original_picture, notice: 'Failed! author does not artist.' } + format.json { render json: @original_picture.errors, status: :unprocessable_entity } + end + return + end + @original_picture = OriginalPicture.find(params[:id]) + unless @original_picture.own? current_author + respond_to do |format| + format.html { redirect_to @original_picture, notice: 'Failed! ' } + format.json { render json: @original_picture.errors, status: :unprocessable_entity } + end + return + end + @original_picture.destroy + + respond_to do |format| + format.html { redirect_to original_pictures_url } + format.json { head :ok } + end + end +end diff --git a/app/controllers/panel_pictures_controller.rb b/app/controllers/panel_pictures_controller.rb new file mode 100644 index 00000000..94d32185 --- /dev/null +++ b/app/controllers/panel_pictures_controller.rb @@ -0,0 +1,15 @@ +class PanelPicturesController < ApplicationController + before_filter :authenticate_author!, :except => [:index] + + # GET /panel_pictures + # GET /panel_pictures.json + def index + @panel_pictures = PanelPicture.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @panel_pictures } + end + end + +end diff --git a/app/controllers/panels_controller.rb b/app/controllers/panels_controller.rb new file mode 100644 index 00000000..e0a7789e --- /dev/null +++ b/app/controllers/panels_controller.rb @@ -0,0 +1,141 @@ +class PanelsController < ApplicationController + before_filter :authenticate_author!, :except => [:index, :show] + + private + + def treat_param panel + panel.author_id = current_author.id + end + + public + + # GET /panels + # GET /panels.json + def index + @panels = Panel.all :order => 'updated_at' + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @panels } + end + end + + # GET /panels/1 + # GET /panels/1.json + def show + @panel = Panel.find(params[:id], include: [:comic, :panel_pictures => :resource_picture, :balloons => :speaches])# only: [:width, :height]) + + respond_to do |format| + format.html # show.html.erb + format.json { + render :json => @panel.to_json(include: { + :comic => {}, :panel_pictures => {:include => :image}, :fukidashis => {:include => :serifus} + }) + } + format.jsonp { + render :json => "callback(" + @panel.to_json(include: { + :comic => {}, :panel_pictures => {:include => :image}, :fukidashis => {:include => :serifus} + }) + ");" + } +# format.json { render :json => @frame.to_json(include: { +# :comic => {:only => :title}, :panel_pictures => {:include => {:image => {:only => [:width]}},:only => [:width, :height, :zindex, :image_id]} +# }, only: [:border]) } + end + end + + # GET /panels/new + # GET /panels/new.json + def new + @panel = Panel.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @panel } + end + end + + # GET /panels/1/edit + def edit + @panel = Panel.find(params[:id]) + end + + # POST /panels + # POST /panels.json + def create + @panel = Panel.new(params[:panel]) + treat_param @panel + @comic = Comic.find @panel.comic_id + + respond_to do |format| + Panel.transaction do + if @panel.vdt_save + format.html { redirect_to @panel, notice: 'Panel was successfully created.' } + format.json { render json: @panel, status: :created, location: @panel } + else + format.html { render action: "new" } + format.json { render json: @panel.errors, status: :unprocessable_entity } + end + end + end + end + + # PUT /panels/1 + # PUT /panels/1.json + def update + @panel = Panel.find(params[:id]) + if @panel.own? current_author + respond_to do |format| + Panel.transaction do + if params[:panel][:seqno] and params[:panel][:seqno].to_i != @panel.seqno + @panel.move_to params[:panel][:seqno].to_i + end + if @panel.update_attributes(params[:panel]) + format.html { redirect_to @panel, notice: 'Panel was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @panel.errors, status: :unprocessable_entity } + end + end + end + else + format.html { render action: "edit" } + format.json { render json: @panel.errors, status: :unprocessable_entity } + end + end + + # DELETE /panels/1 + # DELETE /panels/1.json + def destroy + @panel = Panel.find(params[:id]) + if @panel.own? current_author + respond_to do |format| + Panel.transaction do + @panel.destroy_and_shorten + format.html { redirect_to panels_url } + format.json { head :ok } + end + end + else + format.html { render action: "edit" } + format.json { render json: @panel.errors, status: :unprocessable_entity } + end + end + + def move + @panel = Panel.find(params[:id]) + @new_seq = params[:panel][:seqno].to_i + respond_to do |format| + Panel.transaction do + if @panel.move_to(@new_seq) + format.html { redirect_to @panel, notice: 'Panel was successfully moved.' } + format.json { head :ok } + else + format.html { render action: "show" } + format.json { render json: @panel.errors, status: :unprocessable_entity } + end + end + end + end + +end diff --git a/app/controllers/resource_pictures_controller.rb b/app/controllers/resource_pictures_controller.rb new file mode 100644 index 00000000..f4225611 --- /dev/null +++ b/app/controllers/resource_pictures_controller.rb @@ -0,0 +1,91 @@ +class ResourcePicturesController < ApplicationController + before_filter :authenticate_author!, :except => [:index, :show] + + # GET /resource_pictures + # GET /resource_pictures.json + def index + @resource_pictures = ResourcePicture.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @resource_pictures } + end + end + + # GET /resource_pictures/1 + # GET /resource_pictures/1.json + def show + @resource_picture = ResourcePicture.find(params[:id]) + + respond_to do |format| + opt = {:type => @resource_picture.mime_type, :disposition=>"inline"} + format.png { send_data(@resource_picture.restore(params[:subdir]), opt ) } + format.gif { send_data(@resource_picture.restore(params[:subdir]), opt ) } + format.jpeg { send_data(@resource_picture.restore(params[:subdir]), opt ) } + format.html # show.html.erb + format.json { render json: @resource_picture} + end + end + +=begin + # GET /resource_pictures/new + # GET /resource_pictures/new.json + def new + @resource_picture = ResourcePicture.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @resource_picture } + end + end + + # GET /resource_pictures/1/edit + def edit + @resource_picture = ResourcePicture.find(params[:id]) + end + + # POST /resource_pictures + # POST /resource_pictures.json + def create + @resource_picture = ResourcePicture.new(params[:resource_picture]) + + respond_to do |format| + if @resource_picture.save + format.html { redirect_to @resource_picture, notice: 'Resource picture was successfully created.' } + format.json { render json: @resource_picture, status: :created, location: @resource_picture } + else + format.html { render action: "new" } + format.json { render json: @resource_picture.errors, status: :unprocessable_entity } + end + end + end + + # PUT /resource_pictures/1 + # PUT /resource_pictures/1.json + def update + @resource_picture = ResourcePicture.find(params[:id]) + + respond_to do |format| + if @resource_picture.update_attributes(params[:resource_picture]) + format.html { redirect_to @resource_picture, notice: 'Resource picture was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @resource_picture.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /resource_pictures/1 + # DELETE /resource_pictures/1.json + def destroy + @resource_picture = ResourcePicture.find(params[:id]) + @resource_picture.destroy + + respond_to do |format| + format.html { redirect_to resource_pictures_url } + format.json { head :ok } + end + end +=end +end diff --git a/app/controllers/speach_balloons_controller.rb b/app/controllers/speach_balloons_controller.rb new file mode 100644 index 00000000..32974949 --- /dev/null +++ b/app/controllers/speach_balloons_controller.rb @@ -0,0 +1,127 @@ +class SpeachBalloonsController < ApplicationController + before_filter :authenticate_author!, :except => [:index] + + private + + def validate_param(ft) + res = nil + bl = ft[:border_limit].to_i + tl = ft[:tail_limit].to_i + if bl * tl == ft[:balloon_templates_attributes].size + flag = [] + bl.times do |i| + flag[i] = [] + tl.times do |j| + flag[i][j] = true + end + end + ft[:balloon_templates_attributes].each do |k, t| + flag[t[:border].to_i - 1][t[:tail].to_i - 1] = nil + end + if flag.flatten.compact.size == 0 + else + res = "invalid variation" + end + else + res = "invalid template size" + end + res + end + + public # GET /speach_balloons + # GET /speach_balloons.json + def index + @speach_balloons = SpeachBalloon.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @speach_balloons } + end + end + + # GET /speach_balloons/1 + # GET /speach_balloons/1.json + def show + @speach_balloon = SpeachBalloon.find(params[:id], include: {:balloon_templates => :speach_templates}) + + respond_to do |format| + format.html # show.html.erb + format.json { + render :json => @speach_balloon.to_json(include: { + :balloon_templates => {:include => :speach_templates} + }) + } + format.jsonp { + render :json => "callback(" + @speach_balloon.to_json(include: { + :balloon_templates => {:include => :speach_templates} + }) + ")" + } + end + end + + # GET /speach_balloons/new + # GET /speach_balloons/new.json + def new + @speach_balloon = SpeachBalloon.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @speach_balloon } + end + end + + # GET /speach_balloons/1/edit + def edit + @speach_balloon = SpeachBalloon.find(params[:id]) + end + + # POST /speach_balloons + # POST /speach_balloons.json + def create + @speach_balloon = SpeachBalloon.new(params[:speach_balloon]) + + if em = validate_param(params[:speach_balloon]) + respond_to do |format| + format.json { render json: em, status: :unprocessable_entity } + end + else + respond_to do |format| + if @speach_balloon.save + format.html { redirect_to @speach_balloon, notice: 'Speach balloon was successfully created.' } + format.json { render json: @speach_balloon, status: :created, location: @speach_balloon } + else + format.html { render action: "new" } + format.json { render json: @speach_balloon.errors, status: :unprocessable_entity } + end + end + end + end + + # PUT /speach_balloons/1 + # PUT /speach_balloons/1.json + def update + @speach_balloon = SpeachBalloon.find(params[:id]) + + respond_to do |format| + if @speach_balloon.update_attributes(params[:speach_balloon]) + format.html { redirect_to @speach_balloon, notice: 'Speach balloon was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @speach_balloon.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /speach_balloons/1 + # DELETE /speach_balloons/1.json + def destroy + @speach_balloon = SpeachBalloon.find(params[:id]) + @speach_balloon.destroy + + respond_to do |format| + format.html { redirect_to speach_balloons_url } + format.json { head :ok } + end + end +end diff --git a/app/controllers/speach_templates_controller.rb b/app/controllers/speach_templates_controller.rb new file mode 100644 index 00000000..401844dd --- /dev/null +++ b/app/controllers/speach_templates_controller.rb @@ -0,0 +1,87 @@ +class SpeachTemplatesController < ApplicationController + before_filter :authenticate_author!, :except => [:index] + + # GET /speach_templates + # GET /speach_templates.json + def index + @speach_templates = SpeachTemplate.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @speach_templates } + end + end + +=begin + # GET /speach_templates/1 + # GET /speach_templates/1.json + def show + @speach_template = SpeachTemplate.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @speach_template } + end + end + + # GET /speach_templates/new + # GET /speach_templates/new.json + def new + @speach_template = SpeachTemplate.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @speach_template } + end + end + + # GET /speach_templates/1/edit + def edit + @speach_template = SpeachTemplate.find(params[:id]) + end + + # POST /speach_templates + # POST /speach_templates.json + def create + @speach_template = SpeachTemplate.new(params[:speach_template]) + + respond_to do |format| + if @speach_template.save + format.html { redirect_to @speach_template, notice: 'Speach template was successfully created.' } + format.json { render json: @speach_template, status: :created, location: @speach_template } + else + format.html { render action: "new" } + format.json { render json: @speach_template.errors, status: :unprocessable_entity } + end + end + end + + # PUT /speach_templates/1 + # PUT /speach_templates/1.json + def update + @speach_template = SpeachTemplate.find(params[:id]) + + respond_to do |format| + if @speach_template.update_attributes(params[:speach_template]) + format.html { redirect_to @speach_template, notice: 'Speach template was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @speach_template.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /speach_templates/1 + # DELETE /speach_templates/1.json + def destroy + @speach_template = SpeachTemplate.find(params[:id]) + @speach_template.destroy + + respond_to do |format| + format.html { redirect_to speach_templates_url } + format.json { head :ok } + end + end +=end +end diff --git a/app/controllers/speaches_controller.rb b/app/controllers/speaches_controller.rb new file mode 100644 index 00000000..06675f80 --- /dev/null +++ b/app/controllers/speaches_controller.rb @@ -0,0 +1,87 @@ +class SpeachesController < ApplicationController + before_filter :authenticate_author!, :except => [:index] + + # GET /speaches + # GET /speaches.json + def index + @speaches = Speach.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @speaches } + end + end + +=begin + # GET /speaches/1 + # GET /speaches/1.json + def show + @speach = Speach.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @speach } + end + end + + # GET /speaches/new + # GET /speaches/new.json + def new + @speach = Speach.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @speach } + end + end + + # GET /speaches/1/edit + def edit + @speach = Speach.find(params[:id]) + end + + # POST /speaches + # POST /speaches.json + def create + @speach = Speach.new(params[:speach]) + + respond_to do |format| + if @speach.save + format.html { redirect_to @speach, notice: 'Speach was successfully created.' } + format.json { render json: @speach, status: :created, location: @speach } + else + format.html { render action: "new" } + format.json { render json: @speach.errors, status: :unprocessable_entity } + end + end + end + + # PUT /speaches/1 + # PUT /speaches/1.json + def update + @speach = Speach.find(params[:id]) + + respond_to do |format| + if @speach.update_attributes(params[:speach]) + format.html { redirect_to @speach, notice: 'Speach was successfully updated.' } + format.json { head :ok } + else + format.html { render action: "edit" } + format.json { render json: @speach.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /speaches/1 + # DELETE /speaches/1.json + def destroy + @speach = Speach.find(params[:id]) + @speach.destroy + + respond_to do |format| + format.html { redirect_to speaches_url } + format.json { head :ok } + end + end +=end +end diff --git a/app/controllers/system_controller.rb b/app/controllers/system_controller.rb new file mode 100644 index 00000000..6ba18d0b --- /dev/null +++ b/app/controllers/system_controller.rb @@ -0,0 +1,22 @@ +class SystemController < ApplicationController + before_filter :authenticate_admin!, :except => [:start] + layout false, :only => :start + + def start + + end + + def waiting_list + @newadmins = Admin.find(:all, :conditions => ['activate = 0']) + end + + def accept_admin + @newadmin = Admin.find params[:id] + if admin_signed_in? and current_admin.activate + @newadmin.activate = 1 + @newadmin.save + else + end + end + +end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb new file mode 100644 index 00000000..de6be794 --- /dev/null +++ b/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/app/helpers/artists_helper.rb b/app/helpers/artists_helper.rb new file mode 100644 index 00000000..52d21cb9 --- /dev/null +++ b/app/helpers/artists_helper.rb @@ -0,0 +1,2 @@ +module ArtistsHelper +end diff --git a/app/helpers/balloon_templates_helper.rb b/app/helpers/balloon_templates_helper.rb new file mode 100644 index 00000000..afab2a25 --- /dev/null +++ b/app/helpers/balloon_templates_helper.rb @@ -0,0 +1,2 @@ +module BalloonTemplatesHelper +end diff --git a/app/helpers/balloon_types_helper.rb b/app/helpers/balloon_types_helper.rb new file mode 100644 index 00000000..abc08474 --- /dev/null +++ b/app/helpers/balloon_types_helper.rb @@ -0,0 +1,2 @@ +module BalloonTypesHelper +end diff --git a/app/helpers/balloons_helper.rb b/app/helpers/balloons_helper.rb new file mode 100644 index 00000000..6dba8f87 --- /dev/null +++ b/app/helpers/balloons_helper.rb @@ -0,0 +1,2 @@ +module BalloonsHelper +end diff --git a/app/helpers/comics_helper.rb b/app/helpers/comics_helper.rb new file mode 100644 index 00000000..597e65aa --- /dev/null +++ b/app/helpers/comics_helper.rb @@ -0,0 +1,2 @@ +module ComicsHelper +end diff --git a/app/helpers/common_lisences_helper.rb b/app/helpers/common_lisences_helper.rb new file mode 100644 index 00000000..7f959d25 --- /dev/null +++ b/app/helpers/common_lisences_helper.rb @@ -0,0 +1,2 @@ +module CommonLisencesHelper +end diff --git a/app/helpers/help_helper.rb b/app/helpers/help_helper.rb new file mode 100644 index 00000000..6a35490a --- /dev/null +++ b/app/helpers/help_helper.rb @@ -0,0 +1,2 @@ +module HelpHelper +end diff --git a/app/helpers/home_helper.rb b/app/helpers/home_helper.rb new file mode 100644 index 00000000..23de56ac --- /dev/null +++ b/app/helpers/home_helper.rb @@ -0,0 +1,2 @@ +module HomeHelper +end diff --git a/app/helpers/lisences_helper.rb b/app/helpers/lisences_helper.rb new file mode 100644 index 00000000..5519b997 --- /dev/null +++ b/app/helpers/lisences_helper.rb @@ -0,0 +1,2 @@ +module LisencesHelper +end diff --git a/app/helpers/original_lisences_helper.rb b/app/helpers/original_lisences_helper.rb new file mode 100644 index 00000000..1fe11c86 --- /dev/null +++ b/app/helpers/original_lisences_helper.rb @@ -0,0 +1,2 @@ +module OriginalLisencesHelper +end diff --git a/app/helpers/original_pictures_helper.rb b/app/helpers/original_pictures_helper.rb new file mode 100644 index 00000000..cd77d997 --- /dev/null +++ b/app/helpers/original_pictures_helper.rb @@ -0,0 +1,2 @@ +module OriginalPicturesHelper +end diff --git a/app/helpers/panel_pictures_helper.rb b/app/helpers/panel_pictures_helper.rb new file mode 100644 index 00000000..3a657732 --- /dev/null +++ b/app/helpers/panel_pictures_helper.rb @@ -0,0 +1,2 @@ +module PanelPicturesHelper +end diff --git a/app/helpers/panels_helper.rb b/app/helpers/panels_helper.rb new file mode 100644 index 00000000..e8dc6e57 --- /dev/null +++ b/app/helpers/panels_helper.rb @@ -0,0 +1,2 @@ +module PanelsHelper +end diff --git a/app/helpers/resource_pictures_helper.rb b/app/helpers/resource_pictures_helper.rb new file mode 100644 index 00000000..6f1dd289 --- /dev/null +++ b/app/helpers/resource_pictures_helper.rb @@ -0,0 +1,2 @@ +module ResourcePicturesHelper +end diff --git a/app/helpers/speach_balloons_helper.rb b/app/helpers/speach_balloons_helper.rb new file mode 100644 index 00000000..ca421585 --- /dev/null +++ b/app/helpers/speach_balloons_helper.rb @@ -0,0 +1,2 @@ +module SpeachBalloonsHelper +end diff --git a/app/helpers/speach_templates_helper.rb b/app/helpers/speach_templates_helper.rb new file mode 100644 index 00000000..51b45808 --- /dev/null +++ b/app/helpers/speach_templates_helper.rb @@ -0,0 +1,2 @@ +module SpeachTemplatesHelper +end diff --git a/app/helpers/speaches_helper.rb b/app/helpers/speaches_helper.rb new file mode 100644 index 00000000..c4b52bb4 --- /dev/null +++ b/app/helpers/speaches_helper.rb @@ -0,0 +1,2 @@ +module SpeachesHelper +end diff --git a/app/helpers/system_helper.rb b/app/helpers/system_helper.rb new file mode 100644 index 00000000..2344fba0 --- /dev/null +++ b/app/helpers/system_helper.rb @@ -0,0 +1,2 @@ +module SystemHelper +end diff --git a/app/mailers/.gitkeep b/app/mailers/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/app/models/.gitkeep b/app/models/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/app/models/admin.rb b/app/models/admin.rb new file mode 100644 index 00000000..07f65235 --- /dev/null +++ b/app/models/admin.rb @@ -0,0 +1,14 @@ +class Admin < ActiveRecord::Base + # Include default devise modules. Others available are: + # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable + devise :database_authenticatable, :registerable, + :recoverable, :rememberable, :trackable, :validatable + + # Setup accessible (or protected) attributes for your model + attr_accessible :email, :password, :password_confirmation, :remember_me + + def self.start(email, passwd) + Admin.create! :email => email, :password => passwd, :password_confirmation => passwd, :activate => true + end + +end diff --git a/app/models/artist.rb b/app/models/artist.rb new file mode 100644 index 00000000..973be0f8 --- /dev/null +++ b/app/models/artist.rb @@ -0,0 +1,9 @@ +class Artist < ActiveRecord::Base + belongs_to :author + has_many :original_pictures + + def self.find_by_author author + Artist.find( :first, :conditions => ['author_id = ?', author.id]) + end + +end diff --git a/app/models/author.rb b/app/models/author.rb new file mode 100644 index 00000000..cc154ca1 --- /dev/null +++ b/app/models/author.rb @@ -0,0 +1,21 @@ +class Author < ActiveRecord::Base + has_one :artist + + # Include default devise modules. Others available are: + # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable + devise :database_authenticatable, :registerable, + :recoverable, :rememberable, :trackable, :token_authenticatable, :validatable#, :confirmable + + # Setup accessible (or protected) attributes for your model + attr_accessible :email, :password, :password_confirmation, :remember_me + + before_save :ensure_authentication_token + before_save do |r| + r.name = 'no name' if r.name.blank? + end + + def artist? + Artist.find_by_author(self) != nil + end + +end diff --git a/app/models/balloon.rb b/app/models/balloon.rb new file mode 100644 index 00000000..45d2ead7 --- /dev/null +++ b/app/models/balloon.rb @@ -0,0 +1,11 @@ +class Balloon < ActiveRecord::Base + has_many :speaches + belongs_to :panel + belongs_to :resource_picture + accepts_nested_attributes_for :speaches + + def picture_url + '/resource_pictures/' + self.resource_picture.filename + end + +end diff --git a/app/models/balloon_template.rb b/app/models/balloon_template.rb new file mode 100644 index 00000000..d4e3d5e5 --- /dev/null +++ b/app/models/balloon_template.rb @@ -0,0 +1,6 @@ +class BalloonTemplate < ActiveRecord::Base + belongs_to :speach_balloon + has_many :speach_templates, :dependent => :destroy + belongs_to :resource_picture + accepts_nested_attributes_for :speach_templates +end diff --git a/app/models/comic.rb b/app/models/comic.rb new file mode 100644 index 00000000..b4b502d6 --- /dev/null +++ b/app/models/comic.rb @@ -0,0 +1,9 @@ +class Comic < ActiveRecord::Base + has_many :panels, :dependent => :destroy + + def own? author + return false unless author + self.author_id == author.id + end + +end diff --git a/app/models/common_lisence.rb b/app/models/common_lisence.rb new file mode 100644 index 00000000..ea1fb4b7 --- /dev/null +++ b/app/models/common_lisence.rb @@ -0,0 +1,18 @@ +class CommonLisence < ActiveRecord::Base + belongs_to :lisence + + def save_save + lisence = Lisence.new( { + :name => self.name, :url => self.url, :cc_by => self.cc_by, :cc_sa => self.cc_sa, :cc_nd => self.cc_nd, :cc_nc => self.cc_nc, + :no_resize => self.no_resize, :no_flip => self.no_flip, :keep_aspect_ratio => self.keep_aspect_ratio + }) + self.lisence_id = 0 + res = self.save + return false unless res + return false unless lisence.save + self.lisence_id = lisence.id + res = self.save + res + end + +end diff --git a/app/models/lisence.rb b/app/models/lisence.rb new file mode 100644 index 00000000..d4ed4356 --- /dev/null +++ b/app/models/lisence.rb @@ -0,0 +1,7 @@ +class Lisence < ActiveRecord::Base + has_one :original_lisence + has_one :common_lisence + accepts_nested_attributes_for :original_lisence + accepts_nested_attributes_for :common_lisence + +end diff --git a/app/models/original_lisence.rb b/app/models/original_lisence.rb new file mode 100644 index 00000000..c87cda5c --- /dev/null +++ b/app/models/original_lisence.rb @@ -0,0 +1,19 @@ +class OriginalLisence < ActiveRecord::Base + belongs_to :lisence + + + def save_save + lisence = Lisence.new( { + :name => self.name, :url => self.url, :cc_by => self.cc_by, :cc_sa => self.cc_sa, :cc_nd => self.cc_nd, :cc_nc => self.cc_nc, + :no_resize => self.no_resize, :no_flip => self.no_flip, :keep_aspect_ratio => self.keep_aspect_ratio + }) + self.lisence_id = 0 + res = self.save + return false unless res + return false unless lisence.save + self.lisence_id = lisence.id + res = self.save + res + end + +end diff --git a/app/models/original_picture.rb b/app/models/original_picture.rb new file mode 100644 index 00000000..d67a5810 --- /dev/null +++ b/app/models/original_picture.rb @@ -0,0 +1,47 @@ +class OriginalPicture < ActiveRecord::Base + belongs_to :artist + belongs_to :lisence + has_one :resource_picture + + def validate + errors.add(:filesize, 'size over(1MB)') if self.filesize > 1000000 + end + + def dext + self.ext.downcase + end + + def filename + "#{self.id}.#{self.dext}" + end + + def mime_type + "image/#{self.dext}" + end + + def url + '/original_pictures/' + filename + end + + def store(rimg) + bindata = rimg.to_blob + PictureIO.original_picture_io.put bindata, self.filename + res = if self.resource_picture + self.resource_picture.store rimg + else + ResourcePicture.store(rimg, self) + end + res + end + + def restore(subdir = nil) + PictureIO.original_picture_io.get self.filename, subdir + end + + def own? author + return false unless author + return false unless author.artist? + self.artist_id == author.artist.id + end + +end diff --git a/app/models/panel.rb b/app/models/panel.rb new file mode 100644 index 00000000..efc3a4d6 --- /dev/null +++ b/app/models/panel.rb @@ -0,0 +1,54 @@ +class Panel < ActiveRecord::Base + belongs_to :comic + has_many :panel_pictures, :dependent => :destroy + has_many :balloons, :dependent => :destroy + accepts_nested_attributes_for :panel_pictures, :allow_destroy => true + accepts_nested_attributes_for :balloons, :allow_destroy => true + + def self.max_seq comic_id + Panel.maximum(:seqno, :conditions => ['comic_id = ?', comic_id]).to_i + end + + def self.find_seq comic_id, seqno + Panel.find(:first, :conditions => ['comic_id = ? and seqno = ?', comic_id, seqno]) + end + + #更新する時にPanelIDをチェックしとかないと勝手に所属先を変えられるゾ!? + + def vdt_save + f = nil + max_seq = Panel.max_seq self.comic_id + f = Panel.find_seq(self.comic_id, self.seqno) if self.seqno + if f + Panel.update_all('seqno = seqno + 1', ['comic_id = ? and seqno >= ?', self.comic_id, self.seqno]) + else + self.seqno = max_seq + 1 + end + self.save + end + + def move_to new_seq + return true if self.seqno == new_seq + if self.seqno > new_seq + Panel.update_all('seqno = seqno + 1', ['comic_id = ? and (seqno >= ? and seqno < ?)', self.comic_id, new_seq, self.seqno]) + else + nf = Panel.find_seq(self.comic_id, new_seq) + max_seq = Panel.max_seq self.comic_id + new_seq = max_seq if new_seq > max_seq + Panel.update_all('seqno = seqno - 1', ['comic_id = ? and (seqno > ? and seqno <= ?)', self.comic_id, self.seqno, new_seq]) + end + self.seqno = new_seq + self.save + end + + def destroy_and_shorten + Panel.update_all('seqno = seqno - 1', ['comic_id = ? and (seqno > ?)', self.comic_id, self.seqno]) + self.destroy + end + + def own? author + return false unless author + self.author_id == author.id + end + +end diff --git a/app/models/panel_picture.rb b/app/models/panel_picture.rb new file mode 100644 index 00000000..426248c0 --- /dev/null +++ b/app/models/panel_picture.rb @@ -0,0 +1,19 @@ +class PanelPicture < ActiveRecord::Base + belongs_to :panel + belongs_to :resource_picture + + def flip + res = (self.v == 0 ? '' : 'v') + (self.h == 0 ? '' : 'h') + res += '/' unless res.empty? + res + end + + def filename + flip + self.resource_picture.filename + end + + def url + '/resource_pictures/' + filename + end + +end diff --git a/app/models/resource_picture.rb b/app/models/resource_picture.rb new file mode 100644 index 00000000..1bf90217 --- /dev/null +++ b/app/models/resource_picture.rb @@ -0,0 +1,105 @@ +class ResourcePicture < ActiveRecord::Base + belongs_to :artist + belongs_to :lisence + has_many :panel_pictures + belongs_to :original_picture + + def self.resize(data, dw, dh) + Magick::Image.from_blob(data).shift.resize(dw, dh) + end + + #サイズの調整(limw,limhに必ず収まるように合わせる) + def self.fix_size_both(limw, limh, w, h) + wr = if w > limw + limw*100/w + else + 100 + end + hr = if h > limh + limh*100/h + else + 100 + end + res = if wr < hr + #幅の方が圧縮率が高い + [w*wr/100, h*wr/100] + else + #高さの方が圧縮率が高い + [w*hr/100, h*hr/100] + end + res + end + + def dext + self.ext.downcase + end + + def filename + "#{self.id}.#{self.dext}" + end + + def mime_type + "image/#{self.dext}" + end + + def v(rimg) + rimg.flip.to_blob + end + + def h(rimg) + rimg.flop.to_blob + end + + def vh(rimg) + rimg.flip.flop.to_blob + end + + def url subdir = nil + '/resource_pictures/' + (subdir.to_s.empty? ? '' : subdir.to_s + '/' ) + filename + end + + def thumbnail(rimg) + tw, th = ResourcePicture.fix_size_both(80, 80, rimg.columns, rimg.rows) + ResourcePicture.resize(rimg.to_blob, tw, th).to_blob + end + + def self.store(img, original_picture) + + resource_picture = ResourcePicture.new( + width: original_picture.width, height: original_picture.height, + ext: original_picture.ext, filesize: original_picture.filesize, + original_picture_id: original_picture.id + ) + res = if resource_picture.save + if resource_picture.store(img) + true + else + false + end + else + false + end + res + end + + def store(img) + res = false + bindata = img.to_blob +# begin + PictureIO.resource_picture_io.put bindata, self.filename + PictureIO.resource_picture_io.class.subdirs.each do |d| + next if d.empty? + PictureIO.resource_picture_io.put(self.__send__(d, img), self.filename, d) + end + res = true +# rescue +# res = false +# end + res + end + + def restore(subdir = nil) + PictureIO.resource_picture_io.get self.filename, subdir + end + +end diff --git a/app/models/speach.rb b/app/models/speach.rb new file mode 100644 index 00000000..2346626e --- /dev/null +++ b/app/models/speach.rb @@ -0,0 +1,3 @@ +class Speach < ActiveRecord::Base + belongs_to :balloon +end diff --git a/app/models/speach_balloon.rb b/app/models/speach_balloon.rb new file mode 100644 index 00000000..3264e4c0 --- /dev/null +++ b/app/models/speach_balloon.rb @@ -0,0 +1,4 @@ +class SpeachBalloon < ActiveRecord::Base + has_many :balloon_templates, :dependent => :destroy + accepts_nested_attributes_for :balloon_templates +end diff --git a/app/models/speach_template.rb b/app/models/speach_template.rb new file mode 100644 index 00000000..b44ebed6 --- /dev/null +++ b/app/models/speach_template.rb @@ -0,0 +1,3 @@ +class SpeachTemplate < ActiveRecord::Base + belongs_to :balloon_template +end diff --git a/app/views/admins/confirmations/new.html.erb b/app/views/admins/confirmations/new.html.erb new file mode 100644 index 00000000..b7ae403c --- /dev/null +++ b/app/views/admins/confirmations/new.html.erb @@ -0,0 +1,12 @@ +

Resend confirmation instructions

+ +<%= form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.submit "Resend confirmation instructions" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> \ No newline at end of file diff --git a/app/views/admins/mailer/confirmation_instructions.html.erb b/app/views/admins/mailer/confirmation_instructions.html.erb new file mode 100644 index 00000000..a6ea8ca1 --- /dev/null +++ b/app/views/admins/mailer/confirmation_instructions.html.erb @@ -0,0 +1,5 @@ +

Welcome <%= @resource.email %>!

+ +

You can confirm your account through the link below:

+ +

<%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %>

diff --git a/app/views/admins/mailer/reset_password_instructions.html.erb b/app/views/admins/mailer/reset_password_instructions.html.erb new file mode 100644 index 00000000..ae9e888a --- /dev/null +++ b/app/views/admins/mailer/reset_password_instructions.html.erb @@ -0,0 +1,8 @@ +

Hello <%= @resource.email %>!

+ +

Someone has requested a link to change your password, and you can do this through the link below.

+ +

<%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %>

+ +

If you didn't request this, please ignore this email.

+

Your password won't change until you access the link above and create a new one.

diff --git a/app/views/admins/mailer/unlock_instructions.html.erb b/app/views/admins/mailer/unlock_instructions.html.erb new file mode 100644 index 00000000..2263c219 --- /dev/null +++ b/app/views/admins/mailer/unlock_instructions.html.erb @@ -0,0 +1,7 @@ +

Hello <%= @resource.email %>!

+ +

Your account has been locked due to an excessive amount of unsuccessful sign in attempts.

+ +

Click the link below to unlock your account:

+ +

<%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %>

diff --git a/app/views/admins/passwords/edit.html.erb b/app/views/admins/passwords/edit.html.erb new file mode 100644 index 00000000..e75c9371 --- /dev/null +++ b/app/views/admins/passwords/edit.html.erb @@ -0,0 +1,16 @@ +

Change your password

+ +<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %> + <%= devise_error_messages! %> + <%= f.hidden_field :reset_password_token %> + +
<%= f.label :password, "New password" %>
+ <%= f.password_field :password %>
+ +
<%= f.label :password_confirmation, "Confirm new password" %>
+ <%= f.password_field :password_confirmation %>
+ +
<%= f.submit "Change my password" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> \ No newline at end of file diff --git a/app/views/admins/passwords/new.html.erb b/app/views/admins/passwords/new.html.erb new file mode 100644 index 00000000..6c21e9fd --- /dev/null +++ b/app/views/admins/passwords/new.html.erb @@ -0,0 +1,12 @@ +

Forgot your password?

+ +<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.submit "Send me reset password instructions" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> \ No newline at end of file diff --git a/app/views/admins/registrations/edit.html.erb b/app/views/admins/registrations/edit.html.erb new file mode 100644 index 00000000..ff380509 --- /dev/null +++ b/app/views/admins/registrations/edit.html.erb @@ -0,0 +1,25 @@ +

Edit <%= resource_name.to_s.humanize %>

+ +<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.label :password %> (leave blank if you don't want to change it)
+ <%= f.password_field :password %>
+ +
<%= f.label :password_confirmation %>
+ <%= f.password_field :password_confirmation %>
+ +
<%= f.label :current_password %> (we need your current password to confirm your changes)
+ <%= f.password_field :current_password %>
+ +
<%= f.submit "Update" %>
+<% end %> + +

Cancel my account

+ +

Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), :confirm => "Are you sure?", :method => :delete %>.

+ +<%= link_to "Back", :back %> diff --git a/app/views/admins/registrations/new.html.erb b/app/views/admins/registrations/new.html.erb new file mode 100644 index 00000000..d15e275a --- /dev/null +++ b/app/views/admins/registrations/new.html.erb @@ -0,0 +1,18 @@ +

Sign up

+ +<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.label :password %>
+ <%= f.password_field :password %>
+ +
<%= f.label :password_confirmation %>
+ <%= f.password_field :password_confirmation %>
+ +
<%= f.submit "Sign up" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> diff --git a/app/views/admins/sessions/new.html.erb b/app/views/admins/sessions/new.html.erb new file mode 100644 index 00000000..1b6aee04 --- /dev/null +++ b/app/views/admins/sessions/new.html.erb @@ -0,0 +1,16 @@ +

Sign in

+ +<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.label :password %>
+ <%= f.password_field :password %>
+ + <% if devise_mapping.rememberable? -%> +
<%= f.check_box :remember_me %> <%= f.label :remember_me %>
+ <% end -%> + +
<%= f.submit "Sign in" %>
+<% end %> +<%= render :partial => "admins/shared/links" %> \ No newline at end of file diff --git a/app/views/admins/shared/_links.erb b/app/views/admins/shared/_links.erb new file mode 100644 index 00000000..eab783a4 --- /dev/null +++ b/app/views/admins/shared/_links.erb @@ -0,0 +1,25 @@ +<%- if controller_name != 'sessions' %> + <%= link_to "Sign in", new_session_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.registerable? && controller_name != 'registrations' %> + <%= link_to "Sign up", new_registration_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.recoverable? && controller_name != 'passwords' %> + <%= link_to "Forgot your password?", new_password_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %> + <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %> + <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.omniauthable? %> + <%- resource_class.omniauth_providers.each do |provider| %> + <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %>
+ <% end -%> +<% end -%> \ No newline at end of file diff --git a/app/views/admins/unlocks/new.html.erb b/app/views/admins/unlocks/new.html.erb new file mode 100644 index 00000000..c6cdcfe5 --- /dev/null +++ b/app/views/admins/unlocks/new.html.erb @@ -0,0 +1,12 @@ +

Resend unlock instructions

+ +<%= form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.submit "Resend unlock instructions" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> \ No newline at end of file diff --git a/app/views/artists/_form.html.erb b/app/views/artists/_form.html.erb new file mode 100644 index 00000000..513fa61e --- /dev/null +++ b/app/views/artists/_form.html.erb @@ -0,0 +1,17 @@ +<%= form_for(@artist) do |f| %> + <% if @artist.errors.any? %> +
+

<%= pluralize(@artist.errors.count, "error") %> prohibited this artist from being saved:

+ +
    + <% @artist.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= f.submit %> +
+<% end %> diff --git a/app/views/artists/edit.html.erb b/app/views/artists/edit.html.erb new file mode 100644 index 00000000..0ca9f859 --- /dev/null +++ b/app/views/artists/edit.html.erb @@ -0,0 +1,6 @@ +

Editing artist

+ +<%= render 'form' %> + +<%= link_to 'Show', @artist %> | +<%= link_to 'Back', artists_path %> diff --git a/app/views/artists/index.html.erb b/app/views/artists/index.html.erb new file mode 100644 index 00000000..39e31faa --- /dev/null +++ b/app/views/artists/index.html.erb @@ -0,0 +1,17 @@ +

Listing artists

+ + + + + + + + +<% @artists.each do |artist| %> + + + + + +<% end %> +
authorname
<%= artist.author_id %><%= artist.name %><%= link_to 'Show', artist %>
diff --git a/app/views/artists/new.html.erb b/app/views/artists/new.html.erb new file mode 100644 index 00000000..40a9512e --- /dev/null +++ b/app/views/artists/new.html.erb @@ -0,0 +1,5 @@ +

New artist

+ +<%= render 'form' %> + +<%= link_to 'Back', artists_path %> diff --git a/app/views/artists/show.html.erb b/app/views/artists/show.html.erb new file mode 100644 index 00000000..70d36264 --- /dev/null +++ b/app/views/artists/show.html.erb @@ -0,0 +1,5 @@ +

<%= notice %>

+ +投稿された素材 + +<%= link_to 'Back', artists_path %> diff --git a/app/views/authors/confirmations/new.html.erb b/app/views/authors/confirmations/new.html.erb new file mode 100644 index 00000000..b7ae403c --- /dev/null +++ b/app/views/authors/confirmations/new.html.erb @@ -0,0 +1,12 @@ +

Resend confirmation instructions

+ +<%= form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.submit "Resend confirmation instructions" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> \ No newline at end of file diff --git a/app/views/authors/mailer/confirmation_instructions.html.erb b/app/views/authors/mailer/confirmation_instructions.html.erb new file mode 100644 index 00000000..a6ea8ca1 --- /dev/null +++ b/app/views/authors/mailer/confirmation_instructions.html.erb @@ -0,0 +1,5 @@ +

Welcome <%= @resource.email %>!

+ +

You can confirm your account through the link below:

+ +

<%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %>

diff --git a/app/views/authors/mailer/reset_password_instructions.html.erb b/app/views/authors/mailer/reset_password_instructions.html.erb new file mode 100644 index 00000000..ae9e888a --- /dev/null +++ b/app/views/authors/mailer/reset_password_instructions.html.erb @@ -0,0 +1,8 @@ +

Hello <%= @resource.email %>!

+ +

Someone has requested a link to change your password, and you can do this through the link below.

+ +

<%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %>

+ +

If you didn't request this, please ignore this email.

+

Your password won't change until you access the link above and create a new one.

diff --git a/app/views/authors/mailer/unlock_instructions.html.erb b/app/views/authors/mailer/unlock_instructions.html.erb new file mode 100644 index 00000000..2263c219 --- /dev/null +++ b/app/views/authors/mailer/unlock_instructions.html.erb @@ -0,0 +1,7 @@ +

Hello <%= @resource.email %>!

+ +

Your account has been locked due to an excessive amount of unsuccessful sign in attempts.

+ +

Click the link below to unlock your account:

+ +

<%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %>

diff --git a/app/views/authors/passwords/edit.html.erb b/app/views/authors/passwords/edit.html.erb new file mode 100644 index 00000000..e75c9371 --- /dev/null +++ b/app/views/authors/passwords/edit.html.erb @@ -0,0 +1,16 @@ +

Change your password

+ +<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %> + <%= devise_error_messages! %> + <%= f.hidden_field :reset_password_token %> + +
<%= f.label :password, "New password" %>
+ <%= f.password_field :password %>
+ +
<%= f.label :password_confirmation, "Confirm new password" %>
+ <%= f.password_field :password_confirmation %>
+ +
<%= f.submit "Change my password" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> \ No newline at end of file diff --git a/app/views/authors/passwords/new.html.erb b/app/views/authors/passwords/new.html.erb new file mode 100644 index 00000000..6c21e9fd --- /dev/null +++ b/app/views/authors/passwords/new.html.erb @@ -0,0 +1,12 @@ +

Forgot your password?

+ +<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.submit "Send me reset password instructions" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> \ No newline at end of file diff --git a/app/views/authors/registrations/edit.html.erb b/app/views/authors/registrations/edit.html.erb new file mode 100644 index 00000000..ff380509 --- /dev/null +++ b/app/views/authors/registrations/edit.html.erb @@ -0,0 +1,25 @@ +

Edit <%= resource_name.to_s.humanize %>

+ +<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.label :password %> (leave blank if you don't want to change it)
+ <%= f.password_field :password %>
+ +
<%= f.label :password_confirmation %>
+ <%= f.password_field :password_confirmation %>
+ +
<%= f.label :current_password %> (we need your current password to confirm your changes)
+ <%= f.password_field :current_password %>
+ +
<%= f.submit "Update" %>
+<% end %> + +

Cancel my account

+ +

Unhappy? <%= link_to "Cancel my account", registration_path(resource_name), :confirm => "Are you sure?", :method => :delete %>.

+ +<%= link_to "Back", :back %> diff --git a/app/views/authors/registrations/new.html.erb b/app/views/authors/registrations/new.html.erb new file mode 100644 index 00000000..3ae6813a --- /dev/null +++ b/app/views/authors/registrations/new.html.erb @@ -0,0 +1,21 @@ +

Sign up

+ +<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :name %>
+ <%= f.text_field :name %>
+ +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.label :password %>
+ <%= f.password_field :password %>
+ +
<%= f.label :password_confirmation %>
+ <%= f.password_field :password_confirmation %>
+ +
<%= f.submit "Sign up" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> diff --git a/app/views/authors/sessions/new.html.erb b/app/views/authors/sessions/new.html.erb new file mode 100644 index 00000000..ff59f7cc --- /dev/null +++ b/app/views/authors/sessions/new.html.erb @@ -0,0 +1,17 @@ +

Sign in

+ +<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.label :password %>
+ <%= f.password_field :password %>
+ + <% if devise_mapping.rememberable? -%> +
<%= f.check_box :remember_me %> <%= f.label :remember_me %>
+ <% end -%> + +
<%= f.submit "Sign in" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> \ No newline at end of file diff --git a/app/views/authors/shared/_links.erb b/app/views/authors/shared/_links.erb new file mode 100644 index 00000000..eab783a4 --- /dev/null +++ b/app/views/authors/shared/_links.erb @@ -0,0 +1,25 @@ +<%- if controller_name != 'sessions' %> + <%= link_to "Sign in", new_session_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.registerable? && controller_name != 'registrations' %> + <%= link_to "Sign up", new_registration_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.recoverable? && controller_name != 'passwords' %> + <%= link_to "Forgot your password?", new_password_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %> + <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %> + <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %>
+<% end -%> + +<%- if devise_mapping.omniauthable? %> + <%- resource_class.omniauth_providers.each do |provider| %> + <%= link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider) %>
+ <% end -%> +<% end -%> \ No newline at end of file diff --git a/app/views/authors/unlocks/new.html.erb b/app/views/authors/unlocks/new.html.erb new file mode 100644 index 00000000..c6cdcfe5 --- /dev/null +++ b/app/views/authors/unlocks/new.html.erb @@ -0,0 +1,12 @@ +

Resend unlock instructions

+ +<%= form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f| %> + <%= devise_error_messages! %> + +
<%= f.label :email %>
+ <%= f.email_field :email %>
+ +
<%= f.submit "Resend unlock instructions" %>
+<% end %> + +<%= render :partial => "devise/shared/links" %> \ No newline at end of file diff --git a/app/views/balloon_templates/index.html.erb b/app/views/balloon_templates/index.html.erb new file mode 100644 index 00000000..5204337b --- /dev/null +++ b/app/views/balloon_templates/index.html.erb @@ -0,0 +1,27 @@ +

Listing balloon_templates

+ + + + + + + + + + + + + +<% @balloon_templates.each do |balloon_template| %> + + + + + + + + + + +<% end %> +
speach balloonresource_pictureTailBorderMinWidthMinHeightMaxWidthMaxHeight
<%= balloon_template.speach_balloon_id %><%= balloon_template.resource_picture_id %><%= balloon_template.tail %><%= balloon_template.border %><%= balloon_template.min_width %><%= balloon_template.min_height %><%= balloon_template.max_width %><%= balloon_template.max_height %>
diff --git a/app/views/balloons/index.html.erb b/app/views/balloons/index.html.erb new file mode 100644 index 00000000..2377f0eb --- /dev/null +++ b/app/views/balloons/index.html.erb @@ -0,0 +1,31 @@ +

Listing balloons

+ + + + + + + + + + + + + + + +<% @balloons.each do |balloon| %> + + + + + + + + + + + + +<% end %> +
panelballoonTemplateresource_pictureTailBorderZindexTop offsetLeft offsetWidthHeight
<%= balloon.panel_id %><%= balloon.balloon_template_id %><%= balloon.resource_picture_id %><%= balloon.tail %><%= balloon.border %><%= balloon.zindex %><%= balloon.top_offset %><%= balloon.left_offset %><%= balloon.width %><%= balloon.height %>
diff --git a/app/views/comics/index.html.erb b/app/views/comics/index.html.erb new file mode 100644 index 00000000..022e342a --- /dev/null +++ b/app/views/comics/index.html.erb @@ -0,0 +1,36 @@ +

Listing comics

+ + + + + + + + + + + + + + +<% @comics.each do |comic| %> + + + + + + + + + + + +<% end %> +
idTitleDefault widthDefault heightauthor_idupdated_at
<%= comic.id %><%= h comic.title %><%= comic.default_width %><%= comic.default_height %><%= comic.author_id%><%= comic.updated_at %><%= link_to 'Show', comic %><%= link_to 'Play', :action => :play, :id => comic.id %> + <% if author_signed_in? -%> + <% if comic.own? current_author -%> + <%= link_to 'Destroy', comic, confirm: 'Are you sure?', method: :delete %> + <% end -%> + <% end -%> +
+ diff --git a/app/views/comics/play.html.erb b/app/views/comics/play.html.erb new file mode 100644 index 00000000..2bde1baf --- /dev/null +++ b/app/views/comics/play.html.erb @@ -0,0 +1,22 @@ +

<%= notice %>

+ +

+ Title: + <%= @comic.title %> +

+ +

+ Default width: + <%= @comic.default_width %> +

+ +

+ Default height: + <%= @comic.default_height %> +

+<% @comic.panels.each do |panel| %> + <% @panel = panel %> + <%= render 'panels/standard' %> +<% end %> + +<%= link_to 'Back', comics_path %> diff --git a/app/views/comics/show.html.erb b/app/views/comics/show.html.erb new file mode 100644 index 00000000..7d2fe84f --- /dev/null +++ b/app/views/comics/show.html.erb @@ -0,0 +1,18 @@ +

<%= notice %>

+ +

+ Title: + <%= h @comic.title %> +

+ +

+ Default width: + <%= @comic.default_width %> +

+ +

+ Default height: + <%= @comic.default_height %> +

+ +<%= link_to 'Back', comics_path %> diff --git a/app/views/comics/top.html.erb b/app/views/comics/top.html.erb new file mode 100644 index 00000000..c07326a9 --- /dev/null +++ b/app/views/comics/top.html.erb @@ -0,0 +1,3 @@ +

PettanR

+ + diff --git a/app/views/common_lisences/_form.html.erb b/app/views/common_lisences/_form.html.erb new file mode 100644 index 00000000..cb73f6a3 --- /dev/null +++ b/app/views/common_lisences/_form.html.erb @@ -0,0 +1,54 @@ +<%= form_for(@common_lisence) do |f| %> + <% if @common_lisence.errors.any? %> +
+

<%= pluralize(@common_lisence.errors.count, "error") %> prohibited this common_lisence from being saved:

+ +
    + <% @common_lisence.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= f.label :name %>
+ <%= f.text_field :name %> +
+
+ <%= f.label :url %>
+ <%= f.text_field :url %> +
+
+ <%= f.label :cc_by %>
+ <%= f.check_box :cc_by %> +
+
+ <%= f.label :cc_sa %>
+ <%= f.check_box :cc_sa %> +
+
+ <%= f.label :cc_nd %>
+ <%= f.check_box :cc_nd %> +
+
+ <%= f.label :cc_nc %>
+ <%= f.check_box :cc_nc %> +
+
+ <%= f.label :no_resize %>
+ <%= f.check_box :no_resize %> +
+
+ <%= f.label :no_flip %>
+ <%= f.check_box :no_flip %> +
+
+ <%= f.label :keep_aspect_ratio %>
+ <%= f.check_box :keep_aspect_ratio %> +
+ +
+ <%= f.submit %> +
+<% end %> diff --git a/app/views/common_lisences/edit.html.erb b/app/views/common_lisences/edit.html.erb new file mode 100644 index 00000000..2760acbf --- /dev/null +++ b/app/views/common_lisences/edit.html.erb @@ -0,0 +1,6 @@ +

Editing common_lisence

+ +<%= render 'form' %> + +<%= link_to 'Show', @common_lisence %> | +<%= link_to 'Back', lisences_path %> diff --git a/app/views/common_lisences/index.html.erb b/app/views/common_lisences/index.html.erb new file mode 100644 index 00000000..c57bc225 --- /dev/null +++ b/app/views/common_lisences/index.html.erb @@ -0,0 +1,39 @@ +

Listing common_lisences

+ + + + + + + + + + + + + + + + + +<% @common_lisences.each do |common_lisence| %> + + + + + + + + + + + + + + +<% end %> +
nameurlcc_bycc_sacc_ndcc_ncno_resizeno_flipkeep_aspect_ratio
<%=@common_lisence.name %><%=@common_lisence.url %><%=@common_lisence.cc_by %><%=@common_lisence.cc_sa %><%=@common_lisence.cc_nd %><%=@common_lisence.cc_nc %><%=@common_lisence.no_resize %><%=@common_lisence.no_flip %><%=@common_lisence.keep_aspect_ratio %><%= link_to 'Show', common_lisence %><%= link_to 'Edit', edit_common_lisence_path(common_lisence) %><%= link_to 'Destroy', common_lisence, confirm: 'Are you sure?', method: :delete %>
+ +
+ +<%= link_to 'New Common_lisence', new_common_lisence_path %> diff --git a/app/views/common_lisences/new.html.erb b/app/views/common_lisences/new.html.erb new file mode 100644 index 00000000..d9a34545 --- /dev/null +++ b/app/views/common_lisences/new.html.erb @@ -0,0 +1,5 @@ +

New common_lisence

+ +<%= render 'form' %> + +<%= link_to 'Back', common_lisences_path %> diff --git a/app/views/common_lisences/show.html.erb b/app/views/common_lisences/show.html.erb new file mode 100644 index 00000000..067f5100 --- /dev/null +++ b/app/views/common_lisences/show.html.erb @@ -0,0 +1,49 @@ +

<%= notice %>

+ +

+ name: + <%= @common_lisence.name %> +

+ +

+ url: + <%= @common_lisence.url %> +

+ +

+ cc_by: + <%= @common_lisence.cc_by %> +

+ +

+ cc_sa: + <%= @common_lisence.cc_sa %> +

+ +

+ cc_nd: + <%= @common_lisence.cc_nd %> +

+ +

+ cc_nc: + <%= @common_lisence.cc_nc %> +

+ +

+ no_resize: + <%= @common_lisence.no_resize %> +

+ +

+ no_flip: + <%= @common_lisence.no_flip %> +

+ +

+ keep_aspect_ratio: + <%= @common_lisence.keep_aspect_ratio %> +

+ +<%= link_to 'Edit', edit_common_lisence_path(@common_lisence) %> | +<%= link_to 'Back', lisences_path %> diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb new file mode 100644 index 00000000..e45cd11b --- /dev/null +++ b/app/views/home/index.html.erb @@ -0,0 +1,14 @@ +

<%= h(current_author.name) -%>(<%= h(current_author.email) -%>)

+
+あなたの認証トークンは<%= current_author.authentication_token %>です +
+ +
+

絵師活動

+<% if current_author.artist? -%> + <%= link_to h(current_author.artist.name), current_author.artist %>です +<% else -%> +

まだ絵師登録していません。

+

登録する

+<% end -%> +
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb new file mode 100644 index 00000000..c739f335 --- /dev/null +++ b/app/views/layouts/application.html.erb @@ -0,0 +1,40 @@ + + + + Pettanr + <%= stylesheet_link_tag "application" %> + <%= javascript_include_tag "application" %> + <%= csrf_meta_tags %> + + + +<% if author_signed_in? %> +<%= link_to "my home", :controller => '/home' %> +<%= link_to "ログアウト", destroy_author_session_path, :method => :delete %> +<% else %> +<%= link_to "ログイン", new_author_session_path %> +<% end %> +<%= link_to "管理者", new_admin_session_path %> +
+

<%= notice %>

+

<%= alert %>

+<%= link_to 'comics', comics_path %> +<%= link_to 'panels', panels_path %> +<%= link_to 'original_pictures', original_pictures_path %> +<%= link_to 'resource_pictures', resource_pictures_path %> +<%= link_to 'panel_pictures', panel_pictures_path %> +<%= link_to 'balloons', balloons_path %> +<%= link_to 'speaches', speaches_path %> + : +<%= link_to 'speach_balloons', speach_balloons_path %> +<%= link_to 'balloon_templates', balloon_templates_path %> +<%= link_to 'speach_templates', speach_templates_path %> + : +<%= link_to 'artists', artists_path %> +<%= link_to 'lesences', lisences_path %> +(<%= link_to 'common', common_lisences_path %> <%= link_to 'original', original_lisences_path %>) +
+<%= yield %> + + + diff --git a/app/views/lisences/_form.html.erb b/app/views/lisences/_form.html.erb new file mode 100644 index 00000000..29c8caba --- /dev/null +++ b/app/views/lisences/_form.html.erb @@ -0,0 +1,17 @@ +<%= form_for(@lisence) do |f| %> + <% if @lisence.errors.any? %> +
+

<%= pluralize(@lisence.errors.count, "error") %> prohibited this lisence from being saved:

+ +
    + <% @lisence.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= f.submit %> +
+<% end %> diff --git a/app/views/lisences/edit.html.erb b/app/views/lisences/edit.html.erb new file mode 100644 index 00000000..1c041a66 --- /dev/null +++ b/app/views/lisences/edit.html.erb @@ -0,0 +1,6 @@ +

Editing lisence

+ +<%= render 'form' %> + +<%= link_to 'Show', @lisence %> | +<%= link_to 'Back', lisences_path %> diff --git a/app/views/lisences/index.html.erb b/app/views/lisences/index.html.erb new file mode 100644 index 00000000..d14ee881 --- /dev/null +++ b/app/views/lisences/index.html.erb @@ -0,0 +1,38 @@ +

Listing lisences

+ + + + + + + + + + + + + + + +<% @lisences.each do |lisence| %> + + + + + + + + + + + + +<% end -%> +
nameurlcc_bycc_sacc_ndcc_ncno_resizeno_flipkeep_aspect_ratio
<%= lisence.name %><%= lisence.url %><%= lisence.cc_by %><%= lisence.cc_sa %><%= lisence.cc_nd %><%= lisence.cc_nc %><%= lisence.no_resize %><%= lisence.no_flip %><%= lisence.keep_aspect_ratio %> + <% if lisence.common_lisence -%> + <%= link_to 'Show', lisence.common_lisence %> + <% else -%> + <%= link_to 'Show', lisence.original_lisence %> + <% end -%> +
+<%= link_to 'new original lisence', new_original_lisence_path %> diff --git a/app/views/lisences/new.html.erb b/app/views/lisences/new.html.erb new file mode 100644 index 00000000..32057713 --- /dev/null +++ b/app/views/lisences/new.html.erb @@ -0,0 +1,5 @@ +

New lisence

+ +<%= render 'form' %> + +<%= link_to 'Back', lisences_path %> diff --git a/app/views/lisences/show.html.erb b/app/views/lisences/show.html.erb new file mode 100644 index 00000000..fd82a9b0 --- /dev/null +++ b/app/views/lisences/show.html.erb @@ -0,0 +1,5 @@ +

<%= notice %>

+ + +<%= link_to 'Edit', edit_lisence_path(@lisence) %> | +<%= link_to 'Back', lisences_path %> diff --git a/app/views/original_lisences/_form.html.erb b/app/views/original_lisences/_form.html.erb new file mode 100644 index 00000000..9e9aaf45 --- /dev/null +++ b/app/views/original_lisences/_form.html.erb @@ -0,0 +1,54 @@ +<%= form_for(@original_lisence) do |f| %> + <% if @original_lisence.errors.any? %> +
+

<%= pluralize(@original_lisence.errors.count, "error") %> prohibited this original_lisence from being saved:

+ +
    + <% @original_lisence.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= f.label :name %>
+ <%= f.text_field :name %> +
+
+ <%= f.label :url %>
+ <%= f.text_field :url %> +
+
+ <%= f.label :cc_by %>
+ <%= f.check_box :cc_by %> +
+
+ <%= f.label :cc_sa %>
+ <%= f.check_box :cc_sa %> +
+
+ <%= f.label :cc_nd %>
+ <%= f.check_box :cc_nd %> +
+
+ <%= f.label :cc_nc %>
+ <%= f.check_box :cc_nc %> +
+
+ <%= f.label :no_resize %>
+ <%= f.check_box :no_resize %> +
+
+ <%= f.label :no_flip %>
+ <%= f.check_box :no_flip %> +
+
+ <%= f.label :keep_aspect_ratio %>
+ <%= f.check_box :keep_aspect_ratio %> +
+ +
+ <%= f.submit %> +
+<% end %> diff --git a/app/views/original_lisences/edit.html.erb b/app/views/original_lisences/edit.html.erb new file mode 100644 index 00000000..dd54b16d --- /dev/null +++ b/app/views/original_lisences/edit.html.erb @@ -0,0 +1,6 @@ +

Editing original_lisence

+ +<%= render 'form' %> + +<%= link_to 'Show', @original_lisence %> | +<%= link_to 'Back', lisences_path %> diff --git a/app/views/original_lisences/index.html.erb b/app/views/original_lisences/index.html.erb new file mode 100644 index 00000000..570b54c2 --- /dev/null +++ b/app/views/original_lisences/index.html.erb @@ -0,0 +1,21 @@ +

Listing original_lisences

+ + + + + + + + +<% @original_lisences.each do |original_lisence| %> + + + + + +<% end %> +
<%= link_to 'Show', original_lisence %><%= link_to 'Edit', edit_original_lisence_path(original_lisence) %><%= link_to 'Destroy', original_lisence, confirm: 'Are you sure?', method: :delete %>
+ +
+ +<%= link_to 'New Original lisence', new_original_lisence_path %> diff --git a/app/views/original_lisences/new.html.erb b/app/views/original_lisences/new.html.erb new file mode 100644 index 00000000..14de64dd --- /dev/null +++ b/app/views/original_lisences/new.html.erb @@ -0,0 +1,5 @@ +

New original_lisence

+ +<%= render 'form' %> + +<%= link_to 'Back', lisences_path %> diff --git a/app/views/original_lisences/show.html.erb b/app/views/original_lisences/show.html.erb new file mode 100644 index 00000000..8ec72b7a --- /dev/null +++ b/app/views/original_lisences/show.html.erb @@ -0,0 +1,53 @@ +

<%= notice %>

+ +

+ name: + <%= @original_lisence.name %> +

+ +

+ url: + <%= @original_lisence.url %> +

+ +

+ artist: + <%= @original_lisence.artist_id %> +

+

+ cc_by: + <%= @original_lisence.cc_by %> +

+ +

+ cc_sa: + <%= @original_lisence.cc_sa %> +

+ +

+ cc_nd: + <%= @original_lisence.cc_nd %> +

+ +

+ cc_nc: + <%= @original_lisence.cc_nc %> +

+ +

+ no_resize: + <%= @original_lisence.no_resize %> +

+ +

+ no_flip: + <%= @original_lisence.no_flip %> +

+ +

+ keep_aspect_ratio: + <%= @original_lisence.keep_aspect_ratio %> +

+ +<%= link_to 'Edit', edit_original_lisence_path(@original_lisence) %> | +<%= link_to 'Back', original_lisences_path %> diff --git a/app/views/original_pictures/_artist_register.html.erb b/app/views/original_pictures/_artist_register.html.erb new file mode 100644 index 00000000..a7125bbf --- /dev/null +++ b/app/views/original_pictures/_artist_register.html.erb @@ -0,0 +1,29 @@ +

素材の投稿には絵師登録が必要です。

+

下記フォームで登録してください。

+ +<%= form_for(@artist) do |f| %> + <% if @artist.errors.any? %> +
+

<%= pluralize(@artist.errors.count, "error") %> prohibited this artist from being saved:

+ +
    + <% @artist.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %> + +
+ <%= f.label :name %>
+ <%= f.text_field :name %>
+ + <%= f.label :default_lisence_id %>
+ <%= f.number_field :default_lisence_id %> + <%= f.hidden_field :author_id, :value => @artist.author_id %> +
+
+ <%= f.submit %> +
+<% end %> + diff --git a/app/views/original_pictures/_uploader.html.erb b/app/views/original_pictures/_uploader.html.erb new file mode 100644 index 00000000..21555b37 --- /dev/null +++ b/app/views/original_pictures/_uploader.html.erb @@ -0,0 +1,12 @@ +<% if author_signed_in? -%> + <% if current_author.artist? -%> + <%= form_tag( {:action => "create"} , { :multipart => true }) do %> + <%= file_field_tag "original_picture[file]" %> + <%= submit_tag 'upload' -%> + <% end -%> + <% else -%> + <%= render 'artist_register' %> + <% end -%> +<% else -%> + 素材を投稿するなら<%= link_to "ログイン", new_author_session_path %> +<% end -%> diff --git a/app/views/original_pictures/index.html.erb b/app/views/original_pictures/index.html.erb new file mode 100644 index 00000000..01433661 --- /dev/null +++ b/app/views/original_pictures/index.html.erb @@ -0,0 +1,31 @@ +

Listing original_pictures

+ +<%= render 'uploader' %> + + + + + + + + + + +<% @original_pictures.each do |original_picture| %> + + + + + + + + + +<% end %> +
ExtWidthHeightfilesizeartist
<%= original_picture.ext %><%= original_picture.width %><%= original_picture.height %><%= original_picture.filesize %><%= original_picture.artist_id %><%= link_to 'Show', original_picture %> + <% if author_signed_in? -%> + <% if original_picture.own? current_author -%> + <%= link_to 'Destroy', original_picture, confirm: 'Are you sure?', method: :delete %> + <% end -%> + <% end -%> +
diff --git a/app/views/original_pictures/show.html.erb b/app/views/original_pictures/show.html.erb new file mode 100644 index 00000000..a48ef440 --- /dev/null +++ b/app/views/original_pictures/show.html.erb @@ -0,0 +1,48 @@ +

<%= notice %>

+ +

+ Ext: + <%= @original_picture.ext %> +

+ +

+ Width: + <%= @original_picture.width %> +

+ +

+ Height: + <%= @original_picture.height %> +

+ +

+ filesize: + <%= @original_picture.filesize %> +

+ +

+ artist: + <%= @original_picture.artist_id %> +

+ + + +

+browse picture +

+

+<%= link_to '再生成', :action => :refresh, :id => @original_picture.id %> +

+<% if @original_picture.own? current_author -%> +

+Replace picture +

+ <%= form_for(@original_picture, :html => { :multipart => true }) do |f| %> + <%= f.file_field "file" %> +
+ <%= f.submit 'replace' %> +
+ <% end %> +<% end -%> + +<%= link_to 'Back', original_pictures_path %> diff --git a/app/views/panel_pictures/index.html.erb b/app/views/panel_pictures/index.html.erb new file mode 100644 index 00000000..afb22803 --- /dev/null +++ b/app/views/panel_pictures/index.html.erb @@ -0,0 +1,31 @@ +

Listing panel_pictures

+ + + + + + + + + + + + + + + +<% @panel_pictures.each do |panel_picture| %> + + + + + + + + + + + + +<% end %> +
idpanelresource_pictureWidthHeightTop offsetLeft offsetZindexflipupdated_at
<%= panel_picture.id %><%= panel_picture.panel_id %><%= panel_picture.resource_picture_id %><%= panel_picture.width %><%= panel_picture.height %><%= panel_picture.top_offset %><%= panel_picture.left_offset %><%= panel_picture.zindex %><%= panel_picture.flip %><%= panel_picture.updated_at %>
diff --git a/app/views/panels/_standard.html.erb b/app/views/panels/_standard.html.erb new file mode 100644 index 00000000..f5df30b6 --- /dev/null +++ b/app/views/panels/_standard.html.erb @@ -0,0 +1,38 @@ + +Seqno:<%= @panel.seqno %> + +
+ <% @panel.panel_pictures.each do |panel_picture| %> +
+ +
+ <% end %> + <% @panel.balloons.each do |balloon| %> +
+ + <% balloon.speaches.each do |speach| %> +
+ <%= h speach.content -%> +
+ <% end %> +
+ <% end %> +
+ +Comic:<%= @panel.comic_id %> + + +resource_picture:<%= @panel.resource_picture_id %> + + +Width:<%= @panel.width %> + + +Height:<%= @panel.height %> + +<%= form_for(@panel) do |f| %> + <%= f.submit 'move to' %> + <%= f.number_field :seqno %> +<% end %> +<%= button_to 'Destroy', @panel, confirm: 'Are you sure?', method: :delete %> + diff --git a/app/views/panels/index.html.erb b/app/views/panels/index.html.erb new file mode 100644 index 00000000..d0d77e44 --- /dev/null +++ b/app/views/panels/index.html.erb @@ -0,0 +1,39 @@ +

Listing panels

+ + + + + + + + + + + + + + + + +<% @panels.each do |panel| %> + + + + + + + + + + + + + +<% end %> +
idComicbgWidthHeightBorderSeqnoauthor_idupdated_at
<%= panel.id %><%= panel.comic_id %><%= panel.resource_picture_id %><%= panel.width %><%= panel.height %><%= panel.border %><%= panel.seqno %><%= panel.author_id %><%= panel.updated_at %><%= link_to 'Show', panel %> + <% if author_signed_in? -%> + <% if panel.own? current_author -%> + <%= link_to 'Destroy', panel, confirm: 'Are you sure?', method: :delete %> + <% end -%> + <% end -%> +
diff --git a/app/views/panels/show.html.erb b/app/views/panels/show.html.erb new file mode 100644 index 00000000..df3247a1 --- /dev/null +++ b/app/views/panels/show.html.erb @@ -0,0 +1,15 @@ + <% if @panel.errors.any? %> +
+

<%= pluralize(@panel.errors.count, "error") %> prohibited this panel from being saved:

+ +
    + <% @panel.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %> +

<%= notice %>

+<%= render 'standard' %> + +<%= link_to 'Back', panels_path %> diff --git a/app/views/resource_pictures/index.html.erb b/app/views/resource_pictures/index.html.erb new file mode 100644 index 00000000..05a67a1c --- /dev/null +++ b/app/views/resource_pictures/index.html.erb @@ -0,0 +1,22 @@ +

Listing resource_pictures

+ + + + + + + + + +<% @resource_pictures.each do |resource_picture| %> + + + + + + + +<% end %> +
ExtWidthHeightfilesize
<%= resource_picture.ext %><%= resource_picture.width %><%= resource_picture.height %><%= resource_picture.filesize %> + <%= link_to 'show', resource_picture %> +
diff --git a/app/views/resource_pictures/show.html.erb b/app/views/resource_pictures/show.html.erb new file mode 100644 index 00000000..03474a25 --- /dev/null +++ b/app/views/resource_pictures/show.html.erb @@ -0,0 +1,23 @@ +

<%= notice %>

+ +

+ ノーマル + +

+

+ 垂直反転 + +

+

+ 水平反転 + +

+

+ 垂直水平反転 + +

+

+ サムネ + +

+<%= link_to 'Back', resource_pictures_path %> diff --git a/app/views/speach_balloons/index.html.erb b/app/views/speach_balloons/index.html.erb new file mode 100644 index 00000000..648f9bc2 --- /dev/null +++ b/app/views/speach_balloons/index.html.erb @@ -0,0 +1,19 @@ +

Listing speach_balloons

+ + + + + + + + + +<% @speach_balloons.each do |speach_balloon| %> + + + + + + +<% end %> +
NameTail limitBorder limit
<%= h speach_balloon.name %><%= speach_balloon.tail_limit %><%= speach_balloon.border_limit %><%= link_to 'show', speach_balloon %>
diff --git a/app/views/speach_balloons/show.html.erb b/app/views/speach_balloons/show.html.erb new file mode 100644 index 00000000..122485bb --- /dev/null +++ b/app/views/speach_balloons/show.html.erb @@ -0,0 +1,26 @@ +

<%= notice %>

+ +

+ Name: + <%= h @speach_balloon.name %> +

+ +

+ Tail limit: + <%= @speach_balloon.tail_limit %> +

+ +

+ Border limit: + <%= @speach_balloon.border_limit %> +

+<% @speach_balloon.balloon_templates.each do |balloon_template| -%> +
+

+ Tail:<%= balloon_template.tail -%> + Border:<%= balloon_template.border -%> +

+ +
+<% end -%> +<%= link_to 'Back', speach_balloons_path %> diff --git a/app/views/speach_templates/index.html.erb b/app/views/speach_templates/index.html.erb new file mode 100644 index 00000000..b2fe5a68 --- /dev/null +++ b/app/views/speach_templates/index.html.erb @@ -0,0 +1,21 @@ +

Listing speach_templates

+ + + + + + + + + + +<% @speach_templates.each do |speach_template| %> + + + + + + + +<% end %> +
balloon templateTop offsetLeft offsetWidthHeight
<%= speach_template.balloon_template_id %><%= speach_template.top_offset %><%= speach_template.left_offset %><%= speach_template.width %><%= speach_template.height %>
diff --git a/app/views/speaches/index.html.erb b/app/views/speaches/index.html.erb new file mode 100644 index 00000000..434bef72 --- /dev/null +++ b/app/views/speaches/index.html.erb @@ -0,0 +1,24 @@ +

Listing speaches

+ + + + + + + + + + + +<% @speaches.each do |speach| %> + + + + + + + + +<% end %> +
ballooncontentTop offsetLeft offsetWidthHeight
<%= speach.balloon_id %><%= speach.content %><%= speach.top_offset %><%= speach.left_offset %><%= speach.width %><%= speach.height %>
+ diff --git a/app/views/system/start.html.erb b/app/views/system/start.html.erb new file mode 100644 index 00000000..3da455d9 --- /dev/null +++ b/app/views/system/start.html.erb @@ -0,0 +1,6 @@ +

このシステムには管理者が設定されていません。

+

次のコマンドで管理者アカウントを作成してください。

+ +
+rails r "Admin.start('admin@mail.adr.ess', 'admin_password') +
diff --git a/app/views/system/waiting_list.html.erb b/app/views/system/waiting_list.html.erb new file mode 100644 index 00000000..c6e8fe53 --- /dev/null +++ b/app/views/system/waiting_list.html.erb @@ -0,0 +1,15 @@ +

Listing artists

+ + + + + + + +<% @artists.each do |artist| %> + + + + +<% end %> +
author
<%= artist.author_id %><%= link_to 'Show', artist %>
diff --git a/config.ru b/config.ru new file mode 100644 index 00000000..b8f40033 --- /dev/null +++ b/config.ru @@ -0,0 +1,4 @@ +# This file is used by Rack-based servers to start the application. + +require ::File.expand_path('../config/environment', __FILE__) +run Pettanr::Application diff --git a/config/application.rb b/config/application.rb new file mode 100644 index 00000000..35fd1cc2 --- /dev/null +++ b/config/application.rb @@ -0,0 +1,55 @@ +require File.expand_path('../boot', __FILE__) + +# Pick the frameworks you want: +require "active_record/railtie" +require "action_controller/railtie" +require "action_mailer/railtie" +require "active_resource/railtie" +require "sprockets/railtie" +# require "rails/test_unit/railtie" + +if defined?(Bundler) + # If you precompile assets before deploying to production, use this line + Bundler.require(*Rails.groups(:assets => %w(development test))) + # If you want your assets lazily compiled in production, use this line + # Bundler.require(:default, :assets, Rails.env) +end + +module Pettanr + class Application < Rails::Application + # Settings in config/environments/* take precedence over those specified here. + # Application configuration should go into files in config/initializers + # -- all .rb files in that directory are automatically loaded. +config.assets.initialize_on_precompile = false + + # Custom directories with classes and modules you want to be autoloadable. + # config.autoload_paths += %W(#{config.root}/extras) + + # Only load the plugins named here, in the order given (default is alphabetical). + # :all can be used as a placeholder for all plugins not explicitly named. + # config.plugins = [ :exception_notification, :ssl_requirement, :all ] + + # Activate observers that should always be running. + # config.active_record.observers = :cacher, :garbage_collector, :forum_observer + + # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. + # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. + # config.time_zone = 'Central Time (US & Canada)' + + # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. + # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] + # config.i18n.default_locale = :de + + # Configure the default encoding used in templates for Ruby 1.9. + config.encoding = "utf-8" + + # Configure sensitive parameters which will be filtered from the log file. + config.filter_parameters += [:password] + + # Enable the asset pipeline + config.assets.enabled = true + + # Version of your assets, change this if you want to expire all your assets + config.assets.version = '1.0' + end +end diff --git a/config/aws.yaml.org b/config/aws.yaml.org new file mode 100644 index 00000000..869e47f9 --- /dev/null +++ b/config/aws.yaml.org @@ -0,0 +1,2 @@ +access_key_id: XXXXXXXXXXXXXXXXXXXX +secret_access_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx diff --git a/config/boot.rb b/config/boot.rb new file mode 100644 index 00000000..4489e586 --- /dev/null +++ b/config/boot.rb @@ -0,0 +1,6 @@ +require 'rubygems' + +# Set up gems listed in the Gemfile. +ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) + +require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) diff --git a/config/cucumber.yml b/config/cucumber.yml new file mode 100644 index 00000000..19b288df --- /dev/null +++ b/config/cucumber.yml @@ -0,0 +1,8 @@ +<% +rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : "" +rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}" +std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} --strict --tags ~@wip" +%> +default: <%= std_opts %> features +wip: --tags @wip:3 --wip features +rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip diff --git a/config/database.yml b/config/database.yml new file mode 100644 index 00000000..09cc85a2 --- /dev/null +++ b/config/database.yml @@ -0,0 +1,28 @@ +# SQLite version 3.x +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem 'sqlite3' +development: + adapter: sqlite3 + database: db/development.sqlite3 + pool: 5 + timeout: 5000 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: &test + adapter: sqlite3 + database: db/test.sqlite3 + pool: 5 + timeout: 5000 + +production: + adapter: sqlite3 + database: db/production.sqlite3 + pool: 5 + timeout: 5000 + +cucumber: + <<: *test \ No newline at end of file diff --git a/config/environment.rb b/config/environment.rb new file mode 100644 index 00000000..904ba8d2 --- /dev/null +++ b/config/environment.rb @@ -0,0 +1,6 @@ +# Load the rails application +require File.expand_path('../application', __FILE__) + +# Initialize the rails application +Pettanr::Application.initialize! +require 'picture_io' diff --git a/config/environments/development.rb b/config/environments/development.rb new file mode 100644 index 00000000..138112ab --- /dev/null +++ b/config/environments/development.rb @@ -0,0 +1,38 @@ +require 'DMagick' + +Pettanr::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the web server when you make code changes. + config.cache_classes = false + + # Log error messages when you accidentally call methods on nil. + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger + config.active_support.deprecation = :log + + # Only use best-standards-support built into browsers + config.action_dispatch.best_standards_support = :builtin + + # Do not compress assets + config.assets.compress = false + + # Expands the lines which load the assets + config.assets.debug = true +end + +require 'local_picture' +PictureIO.setup do |config| + config.original_picture_io = PictureIO::LocalPicture.new '/sites/original/pettanr/' + config.resource_picture_io = PictureIO::LocalPicture.new '/sites/resource/pettanr/' +end diff --git a/config/environments/production.rb b/config/environments/production.rb new file mode 100644 index 00000000..71c356d6 --- /dev/null +++ b/config/environments/production.rb @@ -0,0 +1,74 @@ +require 'RMagick' +Pettanr::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # Code is not reloaded between requests + config.cache_classes = true + + # Full error reports are disabled and caching is turned on + config.consider_all_requests_local = false + config.action_controller.perform_caching = true + + # Disable Rails's static asset server (Apache or nginx will already do this) + config.serve_static_assets = false + + # Compress JavaScripts and CSS + config.assets.compress = true + + # Don't fallback to assets pipeline if a precompiled asset is missed + config.assets.compile = false + + # Generate digests for assets URLs + config.assets.digest = true + + # Defaults to Rails.root.join("public/assets") + # config.assets.manifest = YOUR_PATH + + # Specifies the header that your server uses for sending files + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # config.force_ssl = true + + # See everything in the log (default is :info) + # config.log_level = :debug + + # Use a different logger for distributed setups + # config.logger = SyslogLogger.new + + # Use a different cache store in production + # config.cache_store = :mem_cache_store + + # Enable serving of images, stylesheets, and JavaScripts from an asset server + # config.action_controller.asset_host = "http://assets.example.com" + + # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) + # config.assets.precompile += %w( search.js ) + + # Disable delivery errors, bad email addresses will be ignored + # config.action_mailer.raise_delivery_errors = false + + # Enable threaded mode + # config.threadsafe! + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation can not be found) + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners + config.active_support.deprecation = :notify +end +require 'aws/s3' +require 'yaml' + +y = YAML.load(open(Rails.root + 'config/aws.yaml').read) +AWS::S3::Base.establish_connection!( + :access_key_id => y["access_key_id"], + :secret_access_key => y["secret_access_key"] +) +require 's3_picture' +PictureIO.setup do |config| + config.original_picture_io = PictureIO::S3Picture.new 'pettanr-original' + config.resource_picture_io = PictureIO::S3Picture.new 'pettanr-stable' +end diff --git a/config/environments/test.rb b/config/environments/test.rb new file mode 100644 index 00000000..a9b849b4 --- /dev/null +++ b/config/environments/test.rb @@ -0,0 +1,39 @@ +Pettanr::Application.configure do + # Settings specified here will take precedence over those in config/application.rb + + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true + + # Configure static asset server for tests with Cache-Control for performance + config.serve_static_assets = true + config.static_cache_control = "public, max-age=3600" + + # Log error messages when you accidentally call methods on nil + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false + + # Raise exceptions instead of rendering exception templates + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Use SQL instead of Active Record's schema dumper when creating the test database. + # This is necessary if your schema can't be completely dumped by the schema dumper, + # like if you have constraints or database-specific column types + # config.active_record.schema_format = :sql + + # Print deprecation notices to the stderr + config.active_support.deprecation = :stderr +end diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100644 index 00000000..59385cdf --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb new file mode 100644 index 00000000..cbfbd725 --- /dev/null +++ b/config/initializers/devise.rb @@ -0,0 +1,210 @@ +# Use this hook to configure devise mailer, warden hooks and so forth. +# Many of these configuration options can be set straight in your model. +Devise.setup do |config| + # ==> Mailer Configuration + # Configure the e-mail address which will be shown in Devise::Mailer, + # note that it will be overwritten if you use your own mailer class with default "from" parameter. + config.mailer_sender = "please-change-me-at-config-initializers-devise@example.com" +config.sign_out_via = :get + + # Configure the class responsible to send e-mails. + # config.mailer = "Devise::Mailer" + + # ==> ORM configuration + # Load and configure the ORM. Supports :active_record (default) and + # :mongoid (bson_ext recommended) by default. Other ORMs may be + # available as additional gems. + require 'devise/orm/active_record' + + # ==> Configuration for any authentication mechanism + # Configure which keys are used when authenticating a user. The default is + # just :email. You can configure it to use [:username, :subdomain], so for + # authenticating a user, both parameters are required. Remember that those + # parameters are used only when authenticating and not when retrieving from + # session. If you need permissions, you should implement that in a before filter. + # You can also supply a hash where the value is a boolean determining whether + # or not authentication should be aborted when the value is not present. + # config.authentication_keys = [ :email ] + + # Configure parameters from the request object used for authentication. Each entry + # given should be a request method and it will automatically be passed to the + # find_for_authentication method and considered in your model lookup. For instance, + # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. + # The same considerations mentioned for authentication_keys also apply to request_keys. + # config.request_keys = [] + + # Configure which authentication keys should be case-insensitive. + # These keys will be downcased upon creating or modifying a user and when used + # to authenticate or find a user. Default is :email. + config.case_insensitive_keys = [ :email ] + + # Configure which authentication keys should have whitespace stripped. + # These keys will have whitespace before and after removed upon creating or + # modifying a user and when used to authenticate or find a user. Default is :email. + config.strip_whitespace_keys = [ :email ] + + # Tell if authentication through request.params is enabled. True by default. + # config.params_authenticatable = true + + # Tell if authentication through HTTP Basic Auth is enabled. False by default. + # config.http_authenticatable = false + + # If http headers should be returned for AJAX requests. True by default. + # config.http_authenticatable_on_xhr = true + + # The realm used in Http Basic Authentication. "Application" by default. + # config.http_authentication_realm = "Application" + + # It will change confirmation, password recovery and other workflows + # to behave the same regardless if the e-mail provided was right or wrong. + # Does not affect registerable. + # config.paranoid = true + + # ==> Configuration for :database_authenticatable + # For bcrypt, this is the cost for hashing the password and defaults to 10. If + # using other encryptors, it sets how many times you want the password re-encrypted. + # + # Limiting the stretches to just one in testing will increase the performance of + # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use + # a value less than 10 in other environments. + config.stretches = Rails.env.test? ? 1 : 10 + + # Setup a pepper to generate the encrypted password. + # config.pepper = "7835fc9cebff957984851fd2936fbfb6593439b1ebf26dbe6e3da1554a12dfaaa6e551ad7b4681d07ccaf66cd73cf9440cd54c75e0d85caa27f605118b1456b0" + + # ==> Configuration for :confirmable + # A period that the user is allowed to access the website even without + # confirming his account. For instance, if set to 2.days, the user will be + # able to access the website for two days without confirming his account, + # access will be blocked just in the third day. Default is 0.days, meaning + # the user cannot access the website without confirming his account. + # config.confirm_within = 2.days + + # Defines which key will be used when confirming an account + # config.confirmation_keys = [ :email ] + + # ==> Configuration for :rememberable + # The time the user will be remembered without asking for credentials again. + # config.remember_for = 2.weeks + + # If true, a valid remember token can be re-used between multiple browsers. + # config.remember_across_browsers = true + + # If true, extends the user's remember period when remembered via cookie. + # config.extend_remember_period = false + + # If true, uses the password salt as remember token. This should be turned + # to false if you are not using database authenticatable. + config.use_salt_as_remember_token = true + + # Options to be passed to the created cookie. For instance, you can set + # :secure => true in order to force SSL only cookies. + # config.cookie_options = {} + + # ==> Configuration for :validatable + # Range for password length. Default is 6..128. + # config.password_length = 6..128 + + # Email regex used to validate email formats. It simply asserts that + # an one (and only one) @ exists in the given string. This is mainly + # to give user feedback and not to assert the e-mail validity. + # config.email_regexp = /\A[^@]+@[^@]+\z/ + + # ==> Configuration for :timeoutable + # The time you want to timeout the user session without activity. After this + # time the user will be asked for credentials again. Default is 30 minutes. + # config.timeout_in = 30.minutes + + # ==> Configuration for :lockable + # Defines which strategy will be used to lock an account. + # :failed_attempts = Locks an account after a number of failed attempts to sign in. + # :none = No lock strategy. You should handle locking by yourself. + # config.lock_strategy = :failed_attempts + + # Defines which key will be used when locking and unlocking an account + # config.unlock_keys = [ :email ] + + # Defines which strategy will be used to unlock an account. + # :email = Sends an unlock link to the user email + # :time = Re-enables login after a certain amount of time (see :unlock_in below) + # :both = Enables both strategies + # :none = No unlock strategy. You should handle unlocking by yourself. + # config.unlock_strategy = :both + + # Number of authentication tries before locking an account if lock_strategy + # is failed attempts. + # config.maximum_attempts = 20 + + # Time interval to unlock the account if :time is enabled as unlock_strategy. + # config.unlock_in = 1.hour + + # ==> Configuration for :recoverable + # + # Defines which key will be used when recovering the password for an account + # config.reset_password_keys = [ :email ] + + # Time interval you can reset your password with a reset password key. + # Don't put a too small interval or your users won't have the time to + # change their passwords. + config.reset_password_within = 2.hours + + # ==> Configuration for :encryptable + # Allow you to use another encryption algorithm besides bcrypt (default). You can use + # :sha1, :sha512 or encryptors from others authentication tools as :clearance_sha1, + # :authlogic_sha512 (then you should set stretches above to 20 for default behavior) + # and :restful_authentication_sha1 (then you should set stretches to 10, and copy + # REST_AUTH_SITE_KEY to pepper) + # config.encryptor = :sha512 + + # ==> Configuration for :token_authenticatable + # Defines name of the authentication token params key +config.token_authentication_key = :auth_token + + # If true, authentication through token does not store user in session and needs + # to be supplied on each request. Useful if you are using the token as API token. + # config.stateless_token = false + + # ==> Scopes configuration + # Turn scoped views on. Before rendering "sessions/new", it will first check for + # "users/sessions/new". It's turned off by default because it's slower if you + # are using only default views. +config.scoped_views = true + + # Configure the default scope given to Warden. By default it's the first + # devise role declared in your routes (usually :user). + # config.default_scope = :user + + # Configure sign_out behavior. + # Sign_out action can be scoped (i.e. /users/sign_out affects only :user scope). + # The default is true, which means any logout action will sign out all active scopes. + # config.sign_out_all_scopes = true + + # ==> Navigation configuration + # Lists the formats that should be treated as navigational. Formats like + # :html, should redirect to the sign in page when the user does not have + # access, but formats like :xml or :json, should return 401. + # + # If you have any extra navigational formats, like :iphone or :mobile, you + # should add them to the navigational formats lists. + # + # The :"*/*" and "*/*" formats below is required to match Internet + # Explorer requests. + # config.navigational_formats = [:"*/*", "*/*", :html] + + # The default HTTP method used to sign out a resource. Default is :delete. + config.sign_out_via = :delete + + # ==> OmniAuth + # Add a new OmniAuth provider. Check the wiki for more information on setting + # up on your models and hooks. + # config.omniauth :github, 'APP_ID', 'APP_SECRET', :scope => 'user,public_repo' + + # ==> Warden configuration + # If you want to use other strategies, that are not supported by Devise, or + # change the failure app, you can configure them inside the config.warden block. + # + # config.warden do |manager| + # manager.intercept_401 = false + # manager.default_strategies(:scope => :user).unshift :some_external_strategy + # end +end diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100644 index 00000000..9e8b0131 --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,10 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format +# (all these examples are active by default): +# ActiveSupport::Inflector.inflections do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100644 index 00000000..8f16e737 --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,9 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone +Mime::Type.register_alias "image/png", :png +Mime::Type.register_alias "image/gif", :gif +Mime::Type.register_alias "image/jpeg", :jpeg +Mime::Type.register_alias "application/javascript", :jsonp diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb new file mode 100644 index 00000000..0c7ad4ba --- /dev/null +++ b/config/initializers/secret_token.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +Pettanr::Application.config.secret_token = 'e19abc2df3c3b5b73fa734769b24396a24cf79a79c4d4ebae8a170cb67bc4969beb3a88053fa9f9e1dbfb7c6a60bcc04852156adc3ef0675de283562e500a43a' diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb new file mode 100644 index 00000000..87c37432 --- /dev/null +++ b/config/initializers/session_store.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +Pettanr::Application.config.session_store :cookie_store, key: '_pettanr_session' + +# Use the database for sessions instead of the cookie-based default, +# which shouldn't be used to store highly confidential information +# (create the session table with "rails generate session_migration") +# Pettanr::Application.config.session_store :active_record_store diff --git a/config/initializers/wrap_parameters.rb b/config/initializers/wrap_parameters.rb new file mode 100644 index 00000000..999df201 --- /dev/null +++ b/config/initializers/wrap_parameters.rb @@ -0,0 +1,14 @@ +# Be sure to restart your server when you modify this file. +# +# This file contains settings for ActionController::ParamsWrapper which +# is enabled by default. + +# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. +ActiveSupport.on_load(:action_controller) do + wrap_parameters format: [:json] +end + +# Disable root element in JSON by default. +ActiveSupport.on_load(:active_record) do + self.include_root_in_json = false +end diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml new file mode 100644 index 00000000..79b3d5e6 --- /dev/null +++ b/config/locales/devise.en.yml @@ -0,0 +1,58 @@ +# Additional translations at https://github.com/plataformatec/devise/wiki/I18n + +en: + errors: + messages: + expired: "has expired, please request a new one" + not_found: "not found" + already_confirmed: "was already confirmed, please try signing in" + not_locked: "was not locked" + not_saved: + one: "1 error prohibited this %{resource} from being saved:" + other: "%{count} errors prohibited this %{resource} from being saved:" + + devise: + failure: + already_authenticated: 'You are already signed in.' + unauthenticated: 'You need to sign in or sign up before continuing.' + unconfirmed: 'You have to confirm your account before continuing.' + locked: 'Your account is locked.' + invalid: 'Invalid email or password.' + invalid_token: 'Invalid authentication token.' + timeout: 'Your session expired, please sign in again to continue.' + inactive: 'Your account was not activated yet.' + sessions: + signed_in: 'Signed in successfully.' + signed_out: 'Signed out successfully.' + passwords: + send_instructions: 'You will receive an email with instructions about how to reset your password in a few minutes.' + updated: 'Your password was changed successfully. You are now signed in.' + updated_not_active: 'Your password was changed successfully.' + send_paranoid_instructions: "If your e-mail exists on our database, you will receive a password recovery link on your e-mail" + confirmations: + send_instructions: 'You will receive an email with instructions about how to confirm your account in a few minutes.' + send_paranoid_instructions: 'If your e-mail exists on our database, you will receive an email with instructions about how to confirm your account in a few minutes.' + confirmed: 'Your account was successfully confirmed. You are now signed in.' + registrations: + signed_up: 'Welcome! You have signed up successfully.' + inactive_signed_up: 'You have signed up successfully. However, we could not sign you in because your account is %{reason}.' + updated: 'You updated your account successfully.' + destroyed: 'Bye! Your account was successfully cancelled. We hope to see you again soon.' + reasons: + inactive: 'inactive' + unconfirmed: 'unconfirmed' + locked: 'locked' + unlocks: + send_instructions: 'You will receive an email with instructions about how to unlock your account in a few minutes.' + unlocked: 'Your account was successfully unlocked. You are now signed in.' + send_paranoid_instructions: 'If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.' + omniauth_callbacks: + success: 'Successfully authorized from %{kind} account.' + failure: 'Could not authorize you from %{kind} because "%{reason}".' + mailer: + confirmation_instructions: + subject: 'Confirmation instructions' + reset_password_instructions: + subject: 'Reset password instructions' + unlock_instructions: + subject: 'Unlock Instructions' diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 00000000..179c14ca --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,5 @@ +# Sample localization file for English. Add more files in this directory for other locales. +# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points. + +en: + hello: "Hello world" diff --git a/config/routes.rb b/config/routes.rb new file mode 100644 index 00000000..0e0b2c65 --- /dev/null +++ b/config/routes.rb @@ -0,0 +1,87 @@ +Pettanr::Application.routes.draw do + + devise_for :admins + devise_for :authors + + match 'original_pictures/:id(.:format)/refresh' => 'original_pictures#refresh' + + resources :artists, except: [:new, :edit] + resources :speaches, only: [:index] + resources :balloons, only: [:index] + resources :speach_templates, only: [:index] + resources :balloon_templates, only: [:index] + resources :speach_balloons, except: [:new, :edit] + resources :panel_pictures, only: [:index] + resources :resource_pictures, only: [:index, :show] + resources :original_pictures, except: [:new] + resources :panels, except: [:new, :edit] + resources :comics, except: [:new, :edit] + resources :lisences, only: [:index] + resources :original_lisences + resources :common_lisences + + # The priority is based upon order of creation: + # first created -> highest priority. + + # Sample of regular route: + # match 'products/:id' => 'catalog#view' + # Keep in mind you can assign values other than :controller and :action + match 'comics/:id(.:format)/play' => 'comics#play' + match 'resource_pictures/:subdir/:id(.:format)/' => 'resource_pictures#show' + match 'home/(:action)', :controller => 'home' + match 'help/(:action)', :controller => 'help' + controller 'system' do + get 'start' +# match 'start', :to => 'system#start' + end + + # Sample of named route: + # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase + # This route can be invoked with purchase_url(:id => product.id) + + # Sample resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Sample resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Sample resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Sample resource route with more complex sub-resources + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', :on => :collection + # end + # end + + # Sample resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end + + # You can have the root of your site routed with "root" + # just remember to delete public/index.html. + root :to => 'comics#top' + + # See how all your routes lay out with "rake routes" + + # This is a legacy wild controller route that's not recommended for RESTful applications. + # Note: This route will make all actions in every controller accessible via GET requests. +# match ':controller(/:action(/:id(.:format)))' +end diff --git a/db/migrate/20111206091950_devise_create_authors.rb b/db/migrate/20111206091950_devise_create_authors.rb new file mode 100644 index 00000000..74b0f476 --- /dev/null +++ b/db/migrate/20111206091950_devise_create_authors.rb @@ -0,0 +1,26 @@ +class DeviseCreateAuthors < ActiveRecord::Migration + def change + create_table(:authors) do |t| + t.string :name + t.database_authenticatable :null => false + t.recoverable + t.rememberable + t.trackable + t.token_authenticatable + t.confirmable + + # t.encryptable + # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both + + + t.timestamps + end + + add_index :authors, :email, :unique => true + add_index :authors, :reset_password_token, :unique => true + add_index :authors, :confirmation_token, :unique => true + # add_index :authors, :unlock_token, :unique => true + add_index :authors, :authentication_token, :unique => true + end + +end diff --git a/db/migrate/20111206092734_devise_create_admins.rb b/db/migrate/20111206092734_devise_create_admins.rb new file mode 100644 index 00000000..554e7683 --- /dev/null +++ b/db/migrate/20111206092734_devise_create_admins.rb @@ -0,0 +1,25 @@ +class DeviseCreateAdmins < ActiveRecord::Migration + def change + create_table(:admins) do |t| + t.database_authenticatable :null => false + t.recoverable + t.rememberable + t.trackable + + # t.encryptable + # t.confirmable + # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both + # t.token_authenticatable + t.integer :activate, :null => false, :default => false + + t.timestamps + end + + add_index :admins, :email, :unique => true + add_index :admins, :reset_password_token, :unique => true + # add_index :admins, :confirmation_token, :unique => true + # add_index :admins, :unlock_token, :unique => true + # add_index :admins, :authentication_token, :unique => true + end + +end diff --git a/db/migrate/20111206095746_create_artists.rb b/db/migrate/20111206095746_create_artists.rb new file mode 100644 index 00000000..1d5e26eb --- /dev/null +++ b/db/migrate/20111206095746_create_artists.rb @@ -0,0 +1,14 @@ +class CreateArtists < ActiveRecord::Migration + def change + create_table :artists do |t| + t.string :email + t.string :name + t.string :homepage_url + t.string :api_url + t.integer :default_lisence_id + t.timestamp :crowled_at + + t.timestamps + end + end +end diff --git a/db/migrate/20111206100750_create_lisences.rb b/db/migrate/20111206100750_create_lisences.rb new file mode 100644 index 00000000..7261771b --- /dev/null +++ b/db/migrate/20111206100750_create_lisences.rb @@ -0,0 +1,18 @@ +class CreateLisences < ActiveRecord::Migration + def change + create_table :lisences do |t| + t.string :name, :null => false + t.string :url, :null => false + t.integer :cc_by, :null => false, :default => 0 + t.integer :cc_sa, :null => false, :default => 0 + t.integer :cc_nd, :null => false, :default => 0 + t.integer :cc_nc, :null => false, :default => 0 + t.integer :no_resize, :null => false, :default => 0 + t.integer :no_flip, :null => false, :default => 0 + t.integer :keep_aspect_ratio, :null => false, :default => 0 + + t.timestamps + end + add_index :lisences, [:url], :unique => true + end +end diff --git a/db/migrate/20111206105022_create_original_lisences.rb b/db/migrate/20111206105022_create_original_lisences.rb new file mode 100644 index 00000000..221565cd --- /dev/null +++ b/db/migrate/20111206105022_create_original_lisences.rb @@ -0,0 +1,19 @@ +class CreateOriginalLisences < ActiveRecord::Migration + def change + create_table :original_lisences do |t| + t.integer :artist_id, :null => false + t.integer :lisence_id, :null => false + t.string :name, :null => false + t.string :url, :null => false + t.integer :cc_by, :null => false, :default => 0 + t.integer :cc_sa, :null => false, :default => 0 + t.integer :cc_nd, :null => false, :default => 0 + t.integer :cc_nc, :null => false, :default => 0 + t.integer :no_resize, :null => false, :default => 0 + t.integer :no_flip, :null => false, :default => 0 + t.integer :keep_aspect_ratio, :null => false, :default => 0 + + t.timestamps + end + end +end diff --git a/db/migrate/20111206105830_create_comics.rb b/db/migrate/20111206105830_create_comics.rb new file mode 100644 index 00000000..4724a829 --- /dev/null +++ b/db/migrate/20111206105830_create_comics.rb @@ -0,0 +1,13 @@ +class CreateComics < ActiveRecord::Migration + def change + create_table :comics do |t| + t.string :title + t.integer :default_width, :null => false, :default => 200 + t.integer :default_height, :null => false, :default => 80 + t.integer :author_id + + t.timestamps + end + add_index :comics, [:author_id] + end +end diff --git a/db/migrate/20111206111202_create_panels.rb b/db/migrate/20111206111202_create_panels.rb new file mode 100644 index 00000000..2645e881 --- /dev/null +++ b/db/migrate/20111206111202_create_panels.rb @@ -0,0 +1,17 @@ +class CreatePanels < ActiveRecord::Migration + def change + create_table :panels do |t| + t.integer :comic_id, :null => false + t.integer :resource_picture_id + t.integer :width, :null => false, :default => 200 + t.integer :height, :null => false, :default => 80 + t.integer :border, :null => false, :default => 1 + t.integer :seqno, :null => false + t.integer :author_id + + t.timestamps + end + add_index :panels, [:comic_id, :seqno] + add_index :panels, [:author_id] + end +end diff --git a/db/migrate/20111206112042_create_original_pictures.rb b/db/migrate/20111206112042_create_original_pictures.rb new file mode 100644 index 00000000..b1bf18f6 --- /dev/null +++ b/db/migrate/20111206112042_create_original_pictures.rb @@ -0,0 +1,15 @@ +class CreateOriginalPictures < ActiveRecord::Migration + def change + create_table :original_pictures do |t| + t.string :ext, :null => false + t.integer :width, :null => false + t.integer :height, :null => false + t.integer :filesize, :null => false + t.integer :artist_id#, :null => false + t.integer :lisence_id#, :null => false + + t.timestamps + end + add_index :original_pictures, [:artist_id] + end +end diff --git a/db/migrate/20111206112949_create_resource_pictures.rb b/db/migrate/20111206112949_create_resource_pictures.rb new file mode 100644 index 00000000..7ed414c0 --- /dev/null +++ b/db/migrate/20111206112949_create_resource_pictures.rb @@ -0,0 +1,15 @@ +class CreateResourcePictures < ActiveRecord::Migration + def change + create_table :resource_pictures do |t| + t.string :ext, :null => false + t.integer :width, :null => false + t.integer :height, :null => false + t.integer :filesize, :null => false + t.integer :artist_id#, :null => false + t.integer :lisence_id#, :null => false + t.integer :original_picture_id, :null => false + + t.timestamps + end + end +end diff --git a/db/migrate/20111206113803_create_panel_pictures.rb b/db/migrate/20111206113803_create_panel_pictures.rb new file mode 100644 index 00000000..cae5489c --- /dev/null +++ b/db/migrate/20111206113803_create_panel_pictures.rb @@ -0,0 +1,18 @@ +class CreatePanelPictures < ActiveRecord::Migration + def change + create_table :panel_pictures do |t| + t.integer :panel_id, :null => false + t.integer :resource_picture_id, :null => false + t.integer :width, :null => false + t.integer :height, :null => false + t.integer :top_offset, :null => false + t.integer :left_offset, :null => false + t.integer :zindex, :null => false + t.integer :v, :null => false, :default => 0 + t.integer :h, :null => false, :default => 0 + + t.timestamps + end + add_index :panel_pictures, [:panel_id, :zindex] + end +end diff --git a/db/migrate/20111206115439_create_balloon_templates.rb b/db/migrate/20111206115439_create_balloon_templates.rb new file mode 100644 index 00000000..80f235ea --- /dev/null +++ b/db/migrate/20111206115439_create_balloon_templates.rb @@ -0,0 +1,18 @@ +class CreateBalloonTemplates < ActiveRecord::Migration + def change + create_table :balloon_templates do |t| + t.integer :speach_balloon_id, :null => false + t.integer :resource_picture_id, :null => false + t.integer :tail, :null => false, :default => 1 + t.integer :border, :null => false, :default => 1 + t.integer :min_width, :null => false, :default => 0 + t.integer :max_width, :null => false, :default => 0 + t.integer :min_height, :null => false, :default => 0 + t.integer :max_height, :null => false, :default => 0 + + t.timestamps + end + add_index :balloon_templates, [:speach_balloon_id] + add_index :balloon_templates, [:speach_balloon_id, :tail, :border], :unique => true, :name => 'sb_tb' + end +end diff --git a/db/migrate/20111206120252_create_speach_templates.rb b/db/migrate/20111206120252_create_speach_templates.rb new file mode 100644 index 00000000..8c6d6fc2 --- /dev/null +++ b/db/migrate/20111206120252_create_speach_templates.rb @@ -0,0 +1,14 @@ +class CreateSpeachTemplates < ActiveRecord::Migration + def change + create_table :speach_templates do |t| + t.integer :balloon_template_id, :null => false + t.integer :top_offset, :null => false + t.integer :left_offset, :null => false + t.integer :width, :null => false + t.integer :height, :null => false + + t.timestamps + end + add_index :speach_templates, [:balloon_template_id] + end +end diff --git a/db/migrate/20111206121123_create_balloons.rb b/db/migrate/20111206121123_create_balloons.rb new file mode 100644 index 00000000..04de5740 --- /dev/null +++ b/db/migrate/20111206121123_create_balloons.rb @@ -0,0 +1,20 @@ +class CreateBalloons < ActiveRecord::Migration + def change + create_table :balloons do |t| + t.integer :panel_id, :null => false + t.integer :balloon_template_id, :null => false + t.integer :resource_picture_id, :null => false + t.integer :tail, :null => false, :default => 1 + t.integer :border, :null => false, :default => 1 + t.integer :zindex, :null => false + t.integer :top_offset, :null => false + t.integer :left_offset, :null => false + t.integer :width, :null => false + t.integer :height, :null => false + + t.timestamps + end + add_index :balloons, [:panel_id] + add_index :balloons, [:panel_id, :zindex] + end +end diff --git a/db/migrate/20111206130635_create_speaches.rb b/db/migrate/20111206130635_create_speaches.rb new file mode 100644 index 00000000..3e187020 --- /dev/null +++ b/db/migrate/20111206130635_create_speaches.rb @@ -0,0 +1,15 @@ +class CreateSpeaches < ActiveRecord::Migration + def change + create_table :speaches do |t| + t.integer :balloon_id, :null => false + t.string :content + t.integer :top_offset, :null => false + t.integer :left_offset, :null => false + t.integer :width, :null => false + t.integer :height, :null => false + + t.timestamps + end + add_index :speaches, [:balloon_id] + end +end diff --git a/db/migrate/20111208235818_create_speach_balloons.rb b/db/migrate/20111208235818_create_speach_balloons.rb new file mode 100644 index 00000000..b484aa87 --- /dev/null +++ b/db/migrate/20111208235818_create_speach_balloons.rb @@ -0,0 +1,11 @@ +class CreateSpeachBalloons < ActiveRecord::Migration + def change + create_table :speach_balloons do |t| + t.string :name, :null => false + t.integer :tail_limit, :null => false, :default => 1 + t.integer :border_limit, :null => false, :default => 1 + + t.timestamps + end + end +end diff --git a/db/migrate/20111211052544_add_author_id_on_artist.rb b/db/migrate/20111211052544_add_author_id_on_artist.rb new file mode 100644 index 00000000..4df8c0cc --- /dev/null +++ b/db/migrate/20111211052544_add_author_id_on_artist.rb @@ -0,0 +1,9 @@ +class AddAuthorIdOnArtist < ActiveRecord::Migration + def up + add_column :artists, :author_id, :integer + end + + def down + remove_column :artists, :author_id + end +end diff --git a/db/migrate/20111213073529_create_common_lisences.rb b/db/migrate/20111213073529_create_common_lisences.rb new file mode 100644 index 00000000..1f9efcbf --- /dev/null +++ b/db/migrate/20111213073529_create_common_lisences.rb @@ -0,0 +1,18 @@ +class CreateCommonLisences < ActiveRecord::Migration + def change + create_table :common_lisences do |t| + t.integer :lisence_id, :null => false + t.string :name, :null => false + t.string :url, :null => false + t.integer :cc_by, :null => false, :default => 0 + t.integer :cc_sa, :null => false, :default => 0 + t.integer :cc_nd, :null => false, :default => 0 + t.integer :cc_nc, :null => false, :default => 0 + t.integer :no_resize, :null => false, :default => 0 + t.integer :no_flip, :null => false, :default => 0 + t.integer :keep_aspect_ratio, :null => false, :default => 0 + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 00000000..17cce13f --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,253 @@ +# encoding: UTF-8 +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended to check this file into your version control system. + +ActiveRecord::Schema.define(:version => 20111213073529) do + + create_table "admins", :force => true do |t| + t.string "email", :default => "", :null => false + t.string "encrypted_password", :limit => 128, :default => "", :null => false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.integer "sign_in_count", :default => 0 + t.datetime "current_sign_in_at" + t.datetime "last_sign_in_at" + t.string "current_sign_in_ip" + t.string "last_sign_in_ip" + t.integer "activate", :default => 0, :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "admins", ["email"], :name => "index_admins_on_email", :unique => true + add_index "admins", ["reset_password_token"], :name => "index_admins_on_reset_password_token", :unique => true + + create_table "artists", :force => true do |t| + t.string "email" + t.string "name" + t.string "homepage_url" + t.string "api_url" + t.integer "default_lisence_id" + t.datetime "crowled_at" + t.datetime "created_at" + t.datetime "updated_at" + t.integer "author_id" + end + + create_table "authors", :force => true do |t| + t.string "name" + t.string "email", :default => "", :null => false + t.string "encrypted_password", :limit => 128, :default => "", :null => false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.integer "sign_in_count", :default => 0 + t.datetime "current_sign_in_at" + t.datetime "last_sign_in_at" + t.string "current_sign_in_ip" + t.string "last_sign_in_ip" + t.string "authentication_token" + t.string "confirmation_token" + t.datetime "confirmed_at" + t.datetime "confirmation_sent_at" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "authors", ["authentication_token"], :name => "index_authors_on_authentication_token", :unique => true + add_index "authors", ["confirmation_token"], :name => "index_authors_on_confirmation_token", :unique => true + add_index "authors", ["email"], :name => "index_authors_on_email", :unique => true + add_index "authors", ["reset_password_token"], :name => "index_authors_on_reset_password_token", :unique => true + + create_table "balloon_templates", :force => true do |t| + t.integer "speach_balloon_id", :null => false + t.integer "resource_picture_id", :null => false + t.integer "tail", :default => 1, :null => false + t.integer "border", :default => 1, :null => false + t.integer "min_width", :default => 0, :null => false + t.integer "max_width", :default => 0, :null => false + t.integer "min_height", :default => 0, :null => false + t.integer "max_height", :default => 0, :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "balloon_templates", ["speach_balloon_id", "tail", "border"], :name => "sb_tb", :unique => true + add_index "balloon_templates", ["speach_balloon_id"], :name => "index_balloon_templates_on_speach_balloon_id" + + create_table "balloons", :force => true do |t| + t.integer "panel_id", :null => false + t.integer "balloon_template_id", :null => false + t.integer "resource_picture_id", :null => false + t.integer "tail", :default => 1, :null => false + t.integer "border", :default => 1, :null => false + t.integer "zindex", :null => false + t.integer "top_offset", :null => false + t.integer "left_offset", :null => false + t.integer "width", :null => false + t.integer "height", :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "balloons", ["panel_id", "zindex"], :name => "index_balloons_on_panel_id_and_zindex" + add_index "balloons", ["panel_id"], :name => "index_balloons_on_panel_id" + + create_table "comics", :force => true do |t| + t.string "title" + t.integer "default_width", :default => 200, :null => false + t.integer "default_height", :default => 80, :null => false + t.integer "author_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "comics", ["author_id"], :name => "index_comics_on_author_id" + + create_table "common_lisences", :force => true do |t| + t.integer "lisence_id", :null => false + t.string "name", :null => false + t.string "url", :null => false + t.integer "cc_by", :default => 0, :null => false + t.integer "cc_sa", :default => 0, :null => false + t.integer "cc_nd", :default => 0, :null => false + t.integer "cc_nc", :default => 0, :null => false + t.integer "no_resize", :default => 0, :null => false + t.integer "no_flip", :default => 0, :null => false + t.integer "keep_aspect_ratio", :default => 0, :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "lisences", :force => true do |t| + t.string "name", :null => false + t.string "url", :null => false + t.integer "cc_by", :default => 0, :null => false + t.integer "cc_sa", :default => 0, :null => false + t.integer "cc_nd", :default => 0, :null => false + t.integer "cc_nc", :default => 0, :null => false + t.integer "no_resize", :default => 0, :null => false + t.integer "no_flip", :default => 0, :null => false + t.integer "keep_aspect_ratio", :default => 0, :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "lisences", ["url"], :name => "index_lisences_on_url", :unique => true + + create_table "original_lisences", :force => true do |t| + t.integer "artist_id", :null => false + t.integer "lisence_id", :null => false + t.string "name", :null => false + t.string "url", :null => false + t.integer "cc_by", :default => 0, :null => false + t.integer "cc_sa", :default => 0, :null => false + t.integer "cc_nd", :default => 0, :null => false + t.integer "cc_nc", :default => 0, :null => false + t.integer "no_resize", :default => 0, :null => false + t.integer "no_flip", :default => 0, :null => false + t.integer "keep_aspect_ratio", :default => 0, :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "original_pictures", :force => true do |t| + t.string "ext", :null => false + t.integer "width", :null => false + t.integer "height", :null => false + t.integer "filesize", :null => false + t.integer "artist_id" + t.integer "lisence_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "original_pictures", ["artist_id"], :name => "index_original_pictures_on_artist_id" + + create_table "panel_pictures", :force => true do |t| + t.integer "panel_id", :null => false + t.integer "resource_picture_id", :null => false + t.integer "width", :null => false + t.integer "height", :null => false + t.integer "top_offset", :null => false + t.integer "left_offset", :null => false + t.integer "zindex", :null => false + t.integer "v", :default => 0, :null => false + t.integer "h", :default => 0, :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "panel_pictures", ["panel_id", "zindex"], :name => "index_panel_pictures_on_panel_id_and_zindex" + + create_table "panels", :force => true do |t| + t.integer "comic_id", :null => false + t.integer "resource_picture_id" + t.integer "width", :default => 200, :null => false + t.integer "height", :default => 80, :null => false + t.integer "border", :default => 1, :null => false + t.integer "seqno", :null => false + t.integer "author_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "panels", ["author_id"], :name => "index_panels_on_author_id" + add_index "panels", ["comic_id", "seqno"], :name => "index_panels_on_comic_id_and_seqno" + + create_table "resource_pictures", :force => true do |t| + t.string "ext", :null => false + t.integer "width", :null => false + t.integer "height", :null => false + t.integer "filesize", :null => false + t.integer "artist_id" + t.integer "lisence_id" + t.integer "original_picture_id", :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "speach_balloons", :force => true do |t| + t.string "name", :null => false + t.integer "tail_limit", :default => 1, :null => false + t.integer "border_limit", :default => 1, :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + create_table "speach_templates", :force => true do |t| + t.integer "balloon_template_id", :null => false + t.integer "top_offset", :null => false + t.integer "left_offset", :null => false + t.integer "width", :null => false + t.integer "height", :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "speach_templates", ["balloon_template_id"], :name => "index_speach_templates_on_balloon_template_id" + + create_table "speaches", :force => true do |t| + t.integer "balloon_id", :null => false + t.string "content" + t.integer "top_offset", :null => false + t.integer "left_offset", :null => false + t.integer "width", :null => false + t.integer "height", :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "speaches", ["balloon_id"], :name => "index_speaches_on_balloon_id" + +end diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100644 index 00000000..f86207c7 --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,35 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or newd alongside the db with db:setup). +# +# Examples: +# +# cities = City.new([{ name: 'Chicago' }, { name: 'Copenhagen' }]) +# Mayor.new(name: 'Emanuel', city: cities.first) +cl = CommonLisence.new name: 'Public Domain', + url: 'http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3', + cc_by: 0, cc_sa: 0, cc_nd: 0, cc_nc: 0, no_resize: 0, no_flip: 0, keep_aspect_ratio: 0 +cl = CommonLisence.new name: 'Creative Commons 3.0(by)', + url: 'http://creativecommons.org/licenses/by/3.0/legalcode', + cc_by: 1, cc_sa: 0, cc_nd: 0, cc_nc: 0, no_resize: 0, no_flip: 0, keep_aspect_ratio: 0 +cl.save_save +cl = CommonLisence.new name: 'Creative Commons 3.0(by_sa)', + url: 'http://creativecommons.org/licenses/by-sa/3.0/legalcode', + cc_by: 1, cc_sa: 1, cc_nd: 0, cc_nc: 0, no_resize: 0, no_flip: 0, keep_aspect_ratio: 0 +cl.save_save +cl = CommonLisence.new name: 'Creative Commons 3.0(by_nd)', + url: 'http://creativecommons.org/licenses/by-nd/3.0/legalcode', + cc_by: 1, cc_sa: 0, cc_nd: 1, cc_nc: 0, no_resize: 0, no_flip: 0, keep_aspect_ratio: 0 +cl.save_save +cl = CommonLisence.new name: 'Creative Commons 3.0(by_nc)', + url: 'http://creativecommons.org/licenses/by-nc/3.0/legalcode', + cc_by: 1, cc_sa: 0, cc_nd: 0, cc_nc: 1, no_resize: 0, no_flip: 0, keep_aspect_ratio: 0 +cl.save_save +cl = CommonLisence.new name: 'Creative Commons 3.0(by_nc_sa)', + url: 'http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode', + cc_by: 1, cc_sa: 1, cc_nd: 0, cc_nc: 1, no_resize: 0, no_flip: 0, keep_aspect_ratio: 0 +cl.save_save +cl = CommonLisence.new name: 'Creative Commons 3.0(by_nc_nd)', + url: 'http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode', + cc_by: 1, cc_sa: 0, cc_nd: 1, cc_nc: 1, no_resize: 0, no_flip: 0, keep_aspect_ratio: 0 +cl.save_save + diff --git a/doc/README_FOR_APP b/doc/README_FOR_APP new file mode 100644 index 00000000..fe41f5cc --- /dev/null +++ b/doc/README_FOR_APP @@ -0,0 +1,2 @@ +Use this README file to introduce your application and point to useful places in the API for learning more. +Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries. diff --git a/features/support/env.rb b/features/support/env.rb new file mode 100644 index 00000000..b2cf6733 --- /dev/null +++ b/features/support/env.rb @@ -0,0 +1,56 @@ +# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril. +# It is recommended to regenerate this file in the future when you upgrade to a +# newer version of cucumber-rails. Consider adding your own code to a new file +# instead of editing this one. Cucumber will automatically load all features/**/*.rb +# files. + +require 'cucumber/rails' + +# Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In +# order to ease the transition to Capybara we set the default here. If you'd +# prefer to use XPath just remove this line and adjust any selectors in your +# steps to use the XPath syntax. +Capybara.default_selector = :css + +# By default, any exception happening in your Rails application will bubble up +# to Cucumber so that your scenario will fail. This is a different from how +# your application behaves in the production environment, where an error page will +# be rendered instead. +# +# Sometimes we want to override this default behaviour and allow Rails to rescue +# exceptions and display an error page (just like when the app is running in production). +# Typical scenarios where you want to do this is when you test your error pages. +# There are two ways to allow Rails to rescue exceptions: +# +# 1) Tag your scenario (or feature) with @allow-rescue +# +# 2) Set the value below to true. Beware that doing this globally is not +# recommended as it will mask a lot of errors for you! +# +ActionController::Base.allow_rescue = false + +# Remove/comment out the lines below if your app doesn't have a database. +# For some databases (like MongoDB and CouchDB) you may need to use :truncation instead. +begin + DatabaseCleaner.strategy = :transaction +rescue NameError + raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it." +end + +# You may also want to configure DatabaseCleaner to use different strategies for certain features and scenarios. +# See the DatabaseCleaner documentation for details. Example: +# +# Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do +# DatabaseCleaner.strategy = :truncation, {:except => %w[widgets]} +# end +# +# Before('~@no-txn', '~@selenium', '~@culerity', '~@celerity', '~@javascript') do +# DatabaseCleaner.strategy = :transaction +# end +# + +# Possible values are :truncation and :transaction +# The :transaction strategy is faster, but might give you threading problems. +# See https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature +Cucumber::Rails::Database.javascript_strategy = :truncation + diff --git a/lib/DMagick.rb b/lib/DMagick.rb new file mode 100644 index 00000000..27454683 --- /dev/null +++ b/lib/DMagick.rb @@ -0,0 +1,41 @@ +module Magick + class Image + def initialize bindata + @bindata = bindata + end + + def self.from_blob bindata + [Magick::Image.new(bindata), Magick::Image.new(bindata)] + end + + def to_blob + @bindata + end + + def resize w,h + self + end + + def columns + 100 + end + + def rows + 100 + end + + def format + 'png' + end + + def flip + self + end + + def flop + self + end + + end + +end diff --git a/lib/assets/.gitkeep b/lib/assets/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/lib/local_picture.rb b/lib/local_picture.rb new file mode 100644 index 00000000..536ab22c --- /dev/null +++ b/lib/local_picture.rb @@ -0,0 +1,51 @@ +require 'picture_io' +class PictureIO + class LocalPicture + def initialize base_dir = Rails.root + 'public/images/' + @base = base_dir + end + + def base + @base + end + + def base=(b) + @base = b + end + + def self.subdirs + ['', 'v', 'h', 'vh', 'thumbnail'] + end + + def dir(subdir = nil) + sd = if subdir.to_s.empty? + self.base + else + self.base + (subdir.to_s + '/') + end + sd + end + + def mkdir subdir = nil + Dir.mkdir(base) unless File.exist?(base) + return if subdir.to_s.empty? + Dir.mkdir(dir(subdir)) unless File.exist?(dir(subdir)) + end + + def put(bindata, filename, subdir = nil) + mkdir subdir + open(dir(subdir) + filename, 'wb') do |f| + f.write bindata + end + end + + def get(filename, subdir = nil) + bindata = '' + open(dir(subdir) + filename, 'rb') do |f| + bindata += f.read + end + bindata + end + + end +end diff --git a/lib/picture_io.rb b/lib/picture_io.rb new file mode 100644 index 00000000..5ca26629 --- /dev/null +++ b/lib/picture_io.rb @@ -0,0 +1,25 @@ +class PictureIO + @@resource_picture_io #= LocalPicture.new + @@original_picture_io #= LocalPicture.new Rails.root + 'original' + + def self.original_picture_io + @@original_picture_io + end + + def self.original_picture_io=(pclass) + @@original_picture_io = pclass + end + + def self.resource_picture_io + @@resource_picture_io + end + + def self.resource_picture_io=(pclass) + @@resource_picture_io = pclass + end + + def self.setup + yield self + end + +end diff --git a/lib/s3_picture.rb b/lib/s3_picture.rb new file mode 100644 index 00000000..f6d7bf8a --- /dev/null +++ b/lib/s3_picture.rb @@ -0,0 +1,68 @@ +require 'picture_io' +require 'aws/s3' +class PictureIO + class S3Picture + def initialize base_dir = 'pettanr' + @base = base_dir + end + + def base + @base + end + + def base=(b) + @base = b + end + + def self.subdirs + ['', 'v', 'h', 'vh', 'thumbnail'] + end + + def dir(subdir = nil) + sd = if subdir.to_s.empty? + '' + else + subdir.to_s + '/' + end + sd + end + + def put(bindata, filename, subdir = nil) + AWS::S3::S3Object.store(dir(subdir) + filename, bindata, base) + end + + def get(filename, subdir = nil) + bindata = '' + # if AWS::S3::S3Object.exists?(fn, 'pettanr') + AWS::S3::S3Object.stream(dir(subdir) + filename, base) do |st| + bindata += st if st + end + bindata + end + + def store(dt) + iw, ih = Image.fix_size_both(80, 80, dt.columns, dt.rows) + n = dt.to_blob + v = dt.flip.to_blob + h = dt.flop.to_blob + vh = dt.flip.flop.to_blob + AWS::S3::S3Object.store(filename, n, 'pettanr') + AWS::S3::S3Object.store('v/' + filename, v, 'pettanr') if v + AWS::S3::S3Object.store('h/' + filename, h, 'pettanr') if h + AWS::S3::S3Object.store('vh/' + filename, vh, 'pettanr') if vh + + t = Image.resize(dt.to_blob, iw, ih).to_blob + AWS::S3::S3Object.store('thumbnail/' + filename, t, 'pettanr') + end + + def restore(turn) + dt = '' + # if AWS::S3::S3Object.exists?(fn, 'pettanr') + d = turn ? "#{turn}/" : '' + AWS::S3::S3Object.stream(d + filename, 'pettanr') do |st| + dt += st if st + end + dt + end + end +end diff --git a/lib/tasks/.gitkeep b/lib/tasks/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/lib/tasks/cucumber.rake b/lib/tasks/cucumber.rake new file mode 100644 index 00000000..83f79471 --- /dev/null +++ b/lib/tasks/cucumber.rake @@ -0,0 +1,65 @@ +# IMPORTANT: This file is generated by cucumber-rails - edit at your own peril. +# It is recommended to regenerate this file in the future when you upgrade to a +# newer version of cucumber-rails. Consider adding your own code to a new file +# instead of editing this one. Cucumber will automatically load all features/**/*.rb +# files. + + +unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks + +vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first +$LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil? + +begin + require 'cucumber/rake/task' + + namespace :cucumber do + Cucumber::Rake::Task.new({:ok => 'db:test:prepare'}, 'Run features that should pass') do |t| + t.binary = vendored_cucumber_bin # If nil, the gem's binary is used. + t.fork = true # You may get faster startup if you set this to false + t.profile = 'default' + end + + Cucumber::Rake::Task.new({:wip => 'db:test:prepare'}, 'Run features that are being worked on') do |t| + t.binary = vendored_cucumber_bin + t.fork = true # You may get faster startup if you set this to false + t.profile = 'wip' + end + + Cucumber::Rake::Task.new({:rerun => 'db:test:prepare'}, 'Record failing features and run only them if any exist') do |t| + t.binary = vendored_cucumber_bin + t.fork = true # You may get faster startup if you set this to false + t.profile = 'rerun' + end + + desc 'Run all features' + task :all => [:ok, :wip] + + task :statsetup do + require 'rails/code_statistics' + ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features') + ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features') + end + end + desc 'Alias for cucumber:ok' + task :cucumber => 'cucumber:ok' + + task :default => :cucumber + + task :features => :cucumber do + STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***" + end + + # In case we don't have ActiveRecord, append a no-op task that we can depend upon. + task 'db:test:prepare' do + end + + task :stats => 'cucumber:statsetup' +rescue LoadError + desc 'cucumber rake task not available (cucumber not installed)' + task :cucumber do + abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin' + end +end + +end diff --git a/log/.gitkeep b/log/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/public/404.html b/public/404.html new file mode 100644 index 00000000..9a48320a --- /dev/null +++ b/public/404.html @@ -0,0 +1,26 @@ + + + + The page you were looking for doesn't exist (404) + + + + + +
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
+ + diff --git a/public/422.html b/public/422.html new file mode 100644 index 00000000..83660ab1 --- /dev/null +++ b/public/422.html @@ -0,0 +1,26 @@ + + + + The change you wanted was rejected (422) + + + + + +
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+ + diff --git a/public/500.html b/public/500.html new file mode 100644 index 00000000..b80307fc --- /dev/null +++ b/public/500.html @@ -0,0 +1,26 @@ + + + + We're sorry, but something went wrong (500) + + + + + +
+

We're sorry, but something went wrong.

+

We've been notified about this issue and we'll take a look at it shortly.

+
+ + diff --git a/public/assets/application-00960e5186894b532975562d59176a6a.css b/public/assets/application-00960e5186894b532975562d59176a6a.css new file mode 100644 index 00000000..5b8f3ee7 --- /dev/null +++ b/public/assets/application-00960e5186894b532975562d59176a6a.css @@ -0,0 +1 @@ +body{background-color:#fff;color:#333;font-family:verdana, arial, helvetica, sans-serif;font-size:13px;line-height:18px}p,ol,ul,td{font-family:verdana, arial, helvetica, sans-serif;font-size:13px;line-height:18px}pre{background-color:#eee;padding:10px;font-size:11px}a{color:#000}a:visited{color:#666}a:hover{color:#fff;background-color:#000}div.field,div.actions{margin-bottom:10px}#notice{color:green}.field_with_errors{padding:2px;background-color:red;display:table}#error_explanation{width:450px;border:2px solid red;padding:7px;padding-bottom:0;margin-bottom:20px;background-color:#f0f0f0}#error_explanation h2{text-align:left;font-weight:bold;padding:5px 5px 5px 15px;font-size:12px;margin:-7px;margin-bottom:0px;background-color:#c00;color:#fff}#error_explanation ul li{font-size:12px;list-style:square} diff --git a/public/assets/application-00960e5186894b532975562d59176a6a.css.gz b/public/assets/application-00960e5186894b532975562d59176a6a.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..005387e7c299fcdf11c9ee66a83259f576b4789e GIT binary patch literal 372 zcmV-)0gL`0iwFQ3px#ab1GSOeZi6rkh41$iNWFzAv}-qohp7y4z?z$|B>h{&yDyZo zUv4LaNgWTy7akqyN#W@oWx44u6_dfDLu$Jq%a{H#^tt8y$azrlAIu#t%!G(l4@!|~ zWhs*Gn@yQi5bqa-5Cg~)c?ziJ=5Du3&CVvm`0bJY#*Au3r$f*Y#W4AF3|B_! S-;UsLc=!PANc0vf0{{R3wY2*H literal 0 HcmV?d00001 diff --git a/public/assets/application-fd525bbd17efb79c1bb774c528fe1959.js b/public/assets/application-fd525bbd17efb79c1bb774c528fe1959.js new file mode 100644 index 00000000..31da46dc --- /dev/null +++ b/public/assets/application-fd525bbd17efb79c1bb774c528fe1959.js @@ -0,0 +1,19 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(a,b){function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c=0===c})}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function bj(a,b){if(b.nodeType!==1||!f.hasData(a))return;var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d0){if(c!=="border")for(;g").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c=a.document,d=a.navigator,e=a.location,f=function(){function I(){if(e.isReady)return;try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}e.ready()}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,toString=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};return e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(a==="body"&&!d&&c.body)return this.context=c,this[0]=c.body,this.selector=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?g=[null,a,null]:g=i.exec(a);if(g&&(g[1]||!d)){if(g[1])return d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes),e.merge(this,a);h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}return this.context=c,this.selector=a,this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}return e.isFunction(a)?f.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),e.makeArray(a,this))},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();return e.isArray(a)?D.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return e.each(this,a,b)},ready:function(a){return e.bindReady(),A.add(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(A)return;A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&I()}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):H[toString.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||C.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}var b=i.call(arguments,0),c=0,d=b.length,e=new Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;return k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];if(!r)return;j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i)}),b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?f.cache[a[f.expando]]:a[f.expando],!!a&&!m(a)},data:function(a,c,d,e){if(!f.acceptData(a))return;var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);return g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d),o&&!h[c]?g.events:(k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h,i)},removeData:function(a,b,c){if(!f.acceptData(a))return;var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g)return c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type],c&&"get"in c&&(d=c.get(g,"value"))!==b?d:(d=g.value,typeof d=="string"?d.replace(q,""):d==null?"":d);return}return e=f.isFunction(a),this.each(function(d){var g=f(this),h;if(this.nodeType!==1)return;e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return;if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}return h&&"set"in h&&i&&(g=h.set(a,d,c))!==b?g:(a.setAttribute(c,""+d),d)}return h&&"get"in h&&i&&(g=h.get(a,c))!==null?g:(g=a.getAttribute(c),g===null?b:g)},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);return b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)")),b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g) +{var h,i,j,k,l,m,n,o,p,q,r,s;if(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))return;d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f=="undefined"||!!a&&f.event.triggered===a.type?b:f.event.dispatch.apply(i.elem,arguments)},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function v(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,toString=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\r\n/g,k=/\W/;[0,0].sort(function(){return h=!1,0});var l=function(b,d,e,f){e=e||[],d=d||c;var g=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var h,i,j,k,m,p,q,s,t=!0,u=l.isXML(d),v=[],w=b;do{a.exec(""),h=a.exec(w);if(h){w=h[3],v.push(h[1]);if(h[2]){k=h[3];break}}}while(h);if(v.length>1&&o.exec(b))if(v.length===2&&n.relative[v[0]])i=x(v[0]+v[1],d,f);else{i=n.relative[v[0]]?[d]:l(v.shift(),d);while(v.length)b=v.shift(),n.relative[b]&&(b+=v.shift()),i=x(b,i,f)}else{!f&&v.length>1&&d.nodeType===9&&!u&&n.match.ID.test(v[0])&&!n.match.ID.test(v[v.length-1])&&(m=l.find(v.shift(),d,u),d=m.expr?l.filter(m.expr,m.set)[0]:m.set[0]);if(d){m=f?{expr:v.pop(),set:r(f)}:l.find(v.pop(),v.length!==1||v[0]!=="~"&&v[0]!=="+"||!d.parentNode?d:d.parentNode,u),i=m.expr?l.filter(m.expr,m.set):m.set,v.length>0?j=r(i):t=!1;while(v.length)p=v.pop(),q=p,n.relative[p]?q=v.pop():p="",q==null&&(q=d),n.relative[p](j,q,u)}else j=v=[]}j||(j=i),j||l.error(p||b);if(toString.call(j)==="[object Array]")if(!t)e.push.apply(e,j);else if(d&&d.nodeType===1)for(s=0;j[s]!=null;s++)j[s]&&(j[s]===!0||j[s].nodeType===1&&l.contains(d,j[s]))&&e.push(i[s]);else for(s=0;j[s]!=null;s++)j[s]&&j[s].nodeType===1&&e.push(i[s]);else r(j,e);return k&&(l(k,g,e,f),l.uniqueSort(e)),e};l.uniqueSort=function(a){if(t){g=h,a.sort(t);if(g)for(var b=1;b0},l.find=function(a,b,c){var d,e,f,g,h,j;if(!a)return[];for(e=0,f=n.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!k.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||l.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&l.error(a[0]);return a[0]=e++,a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");return!f&&n.attrMap[g]&&(a[1]=n.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" "),a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=l(b[3],null,null,c);else{var g=l.filter(b[3],c,d,!0^f);return d||e.push.apply(e,g),!1}else if(n.match.POS.test(b[0])||n.match.CHILD.test(b[0]))return!0;return b},POS:function(a){return a.unshift(!0),a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!l(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=n.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||m([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attr?l.attr(a,c):n.attrHandle[c]?n.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&l.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=n.setFilters[e];if(f)return f(a,c,b,d)}}},o=n.match.POS,p=function(a,b){return"\\"+(b-0+1)};for(var q in n.match)n.match[q]=new RegExp(n.match[q].source+/(?![^\[]*\])(?![^\(]*\))/.source),n.leftMatch[q]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[q].source.replace(/\\(\d+)/g,p));var r=function(a,b){return a=Array.prototype.slice.call(a,0),b?(b.push.apply(b,a),b):a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(s){r=function(a,b){var c=0,d=b||[];if(toString.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(n.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},n.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(n.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(n.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=l,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(b.querySelectorAll&&b.querySelectorAll(".TEST").length===0)return;l=function(b,e,f,g){e=e||c;if(!g&&!l.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return r(e.getElementsByTagName(b),f);if(h[2]&&n.find.CLASS&&e.getElementsByClassName)return r(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return r([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return r([],f);if(i.id===h[3])return r([i],f)}try{return r(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,m=e.getAttribute("id"),o=m||d,p=e.parentNode,q=/^\s*[+~]/.test(b);m?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),q&&p&&(e=e.parentNode);try{if(!q||p)return r(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{m||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)l[e]=a[e];b=null}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}l.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!l.isXML(a))try{if(e||!n.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return l(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!a.getElementsByClassName||a.getElementsByClassName("e").length===0)return;a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;n.order.splice(1,0,"CLASS"),n.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}(),c.documentElement.contains?l.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?l.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:l.contains=function(){return!1},l.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var x=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=n.match.PSEUDO.exec(a))f+=d[0],a=a.replace(n.match.PSEUDO,"");a=n.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}return c=c.length>1?f.unique(c):c,this.pushStack(c,"closest",a)},index:function(a){return a?typeof a=="string"?f.inArray(this[0],f(a)):f.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);return L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse()),this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.isFunction(a)?this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))}):typeof a!="object"&&a!==b?this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a)):f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return f.isFunction(a)?this.each(function(b){f(this).wrapInner(a.call(this,b))}):this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);return a.push.apply(a,this.toArray()),this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);return a.push.apply(a,f.clean(arguments)),a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData +(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}return d=e=null,h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;return f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight}),c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;return b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;return f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d)),f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;return f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}}),this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){return f.isFunction(d)&&(g=g||e,e=d,d=b),f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b),a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s===2)return;s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return s||(d.mimeType=a),this},abort:function(a){return a=a||"abort",p&&p.abort(a),w(0,a),this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(!d.beforeSend||d.beforeSend.call(e,v,d)!==!1&&s!==2){for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v}return v.abort(),!1},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";return b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){return g||f.error(h+" was not called"),g[0]},b.dataTypes[0]="json","script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return f.globalEval(a),a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}return i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update(),!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;return c===b?(e=this[0],e?(g=cy(e),g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]):null):this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window),function(a,b){var c;a.rails=c={linkClickSelector:"a[data-confirm], a[data-method], a[data-remote], a[data-disable-with]",inputChangeSelector:"select[data-remote], input[data-remote], textarea[data-remote]",formSubmitSelector:"form",formInputClickSelector:"form input[type=submit], form input[type=image], form button[type=submit], form button:not(button[type])",disableSelector:"input[data-disable-with], button[data-disable-with], textarea[data-disable-with]",enableSelector:"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled",requiredInputSelector:"input[name][required]:not([disabled]),textarea[name][required]:not([disabled])",fileInputSelector:"input:file",linkDisableSelector:"a[data-disable-with]",CSRFProtection:function(b){var c=a('meta[name="csrf-token"]').attr("content");c&&b.setRequestHeader("X-CSRF-Token",c)},fire:function(b,c,d){var e=a.Event(c);return b.trigger(e,d),e.result!==!1},confirm:function(a){return confirm(a)},ajax:function(b){return a.ajax(b)},handleRemote:function(d){var e,f,g,h=d.data("cross-domain")||null,i=d.data("type")||a.ajaxSettings&&a.ajaxSettings.dataType,j;if(c.fire(d,"ajax:before")){if(d.is("form")){e=d.attr("method"),f=d.attr("action"),g=d.serializeArray();var k=d.data("ujs:submit-button");k&&(g.push(k),d.data("ujs:submit-button",null))}else d.is(c.inputChangeSelector)?(e=d.data("method"),f=d.data("url"),g=d.serialize(),d.data("params")&&(g=g+"&"+d.data("params"))):(e=d.data("method"),f=d.attr("href"),g=d.data("params")||null);return j={type:e||"GET",data:g,dataType:i,crossDomain:h,beforeSend:function(a,e){return e.dataType===b&&a.setRequestHeader("accept","*/*;q=0.5, "+e.accepts.script),c.fire(d,"ajax:beforeSend",[a,e])},success:function(a,b,c){d.trigger("ajax:success",[a,b,c])},complete:function(a,b){d.trigger("ajax:complete",[a,b])},error:function(a,b,c){d.trigger("ajax:error",[a,b,c])}},f&&(j.url=f),c.ajax(j)}return!1},handleMethod:function(c){var d=c.attr("href"),e=c.data("method"),f=c.attr("target"),g=a("meta[name=csrf-token]").attr("content"),h=a("meta[name=csrf-param]").attr("content"),i=a('
'),j='';h!==b&&g!==b&&(j+=''),f&&i.attr("target",f),i.hide().append(j).appendTo("body"),i.submit()},disableFormElements:function(b){b.find(c.disableSelector).each(function(){var b=a(this),c=b.is("button")?"html":"val";b.data("ujs:enable-with",b[c]()),b[c](b.data("disable-with")),b.prop("disabled",!0)})},enableFormElements:function(b){b.find(c.enableSelector).each(function(){var b=a(this),c=b.is("button")?"html":"val";b.data("ujs:enable-with")&&b[c](b.data("ujs:enable-with")),b.prop("disabled",!1)})},allowAction:function(a){var b=a.data("confirm"),d=!1,e;return b?(c.fire(a,"confirm")&&(d=c.confirm(b),e=c.fire(a,"confirm:complete",[d])),d&&e):!0},blankInputs:function(b,c,d){var e=a(),f,g=c||"input,textarea";return b.find(g).each(function(){f=a(this);if(d?f.val():!f.val())e=e.add(f)}),e.length?e:!1},nonBlankInputs:function(a,b){return c.blankInputs(a,b,!0)},stopEverything:function(b){return a(b.target).trigger("ujs:everythingStopped"),b.stopImmediatePropagation(),!1},callFormSubmitBindings:function(c,d){var e=c.data("events"),f=!0;return e!==b&&e.submit!==b&&a.each(e.submit,function(a,b){if(typeof b.handler=="function")return f=b.handler(d)}),f},disableElement:function(a){a.data("ujs:enable-with",a.html()),a.html(a.data("disable-with")),a.bind("click.railsDisable",function(a){return c.stopEverything(a)})},enableElement:function(a){a.data("ujs:enable-with")!==b&&(a.html(a.data("ujs:enable-with")),a.data("ujs:enable-with",!1)),a.unbind("click.railsDisable")}},a.ajaxPrefilter(function(a,b,d){a.crossDomain||c.CSRFProtection(d)}),a(document).delegate(c.linkDisableSelector,"ajax:complete",function(){c.enableElement(a(this))}),a(document).delegate(c.linkClickSelector,"click.rails",function(d){var e=a(this),f=e.data("method"),g=e.data("params");if(!c.allowAction(e))return c.stopEverything(d);e.is(c.linkDisableSelector)&&c.disableElement(e);if(e.data("remote")!==b)return(d.metaKey||d.ctrlKey)&&(!f||f==="GET")&&!g?!0:(c.handleRemote(e)===!1&&c.enableElement(e),!1);if(e.data +("method"))return c.handleMethod(e),!1}),a(document).delegate(c.inputChangeSelector,"change.rails",function(b){var d=a(this);return c.allowAction(d)?(c.handleRemote(d),!1):c.stopEverything(b)}),a(document).delegate(c.formSubmitSelector,"submit.rails",function(d){var e=a(this),f=e.data("remote")!==b,g=c.blankInputs(e,c.requiredInputSelector),h=c.nonBlankInputs(e,c.fileInputSelector);if(!c.allowAction(e))return c.stopEverything(d);if(g&&e.attr("novalidate")==b&&c.fire(e,"ajax:aborted:required",[g]))return c.stopEverything(d);if(f)return h?c.fire(e,"ajax:aborted:file",[h]):!a.support.submitBubbles&&a().jquery<"1.7"&&c.callFormSubmitBindings(e,d)===!1?c.stopEverything(d):(c.handleRemote(e),!1);setTimeout(function(){c.disableFormElements(e)},13)}),a(document).delegate(c.formInputClickSelector,"click.rails",function(b){var d=a(this);if(!c.allowAction(d))return c.stopEverything(b);var e=d.attr("name"),f=e?{name:e,value:d.val()}:null;d.closest("form").data("ujs:submit-button",f)}),a(document).delegate(c.formSubmitSelector,"ajax:beforeSend.rails",function(b){this==b.target&&c.disableFormElements(a(this))}),a(document).delegate(c.formSubmitSelector,"ajax:complete.rails",function(b){this==b.target&&c.enableFormElements(a(this))})}(jQuery) \ No newline at end of file diff --git a/public/assets/application-fd525bbd17efb79c1bb774c528fe1959.js.gz b/public/assets/application-fd525bbd17efb79c1bb774c528fe1959.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..d8dde8b09ea8bce501617bbc7783f95492217553 GIT binary patch literal 34939 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 S-;UsLc=!PANc0vf0{{Rqj

C literal 0 HcmV?d00001 diff --git a/public/assets/application.js b/public/assets/application.js new file mode 100644 index 00000000..31da46dc --- /dev/null +++ b/public/assets/application.js @@ -0,0 +1,19 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(a,b){function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c=0===c})}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function bj(a,b){if(b.nodeType!==1||!f.hasData(a))return;var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d0){if(c!=="border")for(;g").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c=a.document,d=a.navigator,e=a.location,f=function(){function I(){if(e.isReady)return;try{c.documentElement.doScroll("left")}catch(a){setTimeout(I,1);return}e.ready()}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,toString=Object.prototype.toString,C=Object.prototype.hasOwnProperty,D=Array.prototype.push,E=Array.prototype.slice,F=String.prototype.trim,G=Array.prototype.indexOf,H={};return e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(a==="body"&&!d&&c.body)return this.context=c,this[0]=c.body,this.selector=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?g=[null,a,null]:g=i.exec(a);if(g&&(g[1]||!d)){if(g[1])return d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes),e.merge(this,a);h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}return this.context=c,this.selector=a,this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}return e.isFunction(a)?f.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),e.makeArray(a,this))},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return E.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();return e.isArray(a)?D.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return e.each(this,a,b)},ready:function(a){return e.bindReady(),A.add(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(E.apply(this,arguments),"slice",E.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:D,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(A)return;A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&I()}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):H[toString.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!C.call(a,"constructor")&&!C.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||C.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}var b=i.call(arguments,0),c=0,d=b.length,e=new Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c

a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;return k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];if(!r)return;j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i)}),b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?f.cache[a[f.expando]]:a[f.expando],!!a&&!m(a)},data:function(a,c,d,e){if(!f.acceptData(a))return;var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);return g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d),o&&!h[c]?g.events:(k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h,i)},removeData:function(a,b,c){if(!f.acceptData(a))return;var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];if(!arguments.length){if(g)return c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type],c&&"get"in c&&(d=c.get(g,"value"))!==b?d:(d=g.value,typeof d=="string"?d.replace(q,""):d==null?"":d);return}return e=f.isFunction(a),this.each(function(d){var g=f(this),h;if(this.nodeType!==1)return;e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!a||j===3||j===8||j===2)return;if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}return h&&"set"in h&&i&&(g=h.set(a,d,c))!==b?g:(a.setAttribute(c,""+d),d)}return h&&"get"in h&&i&&(g=h.get(a,c))!==null?g:(g=a.getAttribute(c),g===null?b:g)},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);return b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)")),b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g) +{var h,i,j,k,l,m,n,o,p,q,r,s;if(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))return;d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f=="undefined"||!!a&&f.event.triggered===a.type?b:f.event.dispatch.apply(i.elem,arguments)},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function v(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,toString=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\r\n/g,k=/\W/;[0,0].sort(function(){return h=!1,0});var l=function(b,d,e,f){e=e||[],d=d||c;var g=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var h,i,j,k,m,p,q,s,t=!0,u=l.isXML(d),v=[],w=b;do{a.exec(""),h=a.exec(w);if(h){w=h[3],v.push(h[1]);if(h[2]){k=h[3];break}}}while(h);if(v.length>1&&o.exec(b))if(v.length===2&&n.relative[v[0]])i=x(v[0]+v[1],d,f);else{i=n.relative[v[0]]?[d]:l(v.shift(),d);while(v.length)b=v.shift(),n.relative[b]&&(b+=v.shift()),i=x(b,i,f)}else{!f&&v.length>1&&d.nodeType===9&&!u&&n.match.ID.test(v[0])&&!n.match.ID.test(v[v.length-1])&&(m=l.find(v.shift(),d,u),d=m.expr?l.filter(m.expr,m.set)[0]:m.set[0]);if(d){m=f?{expr:v.pop(),set:r(f)}:l.find(v.pop(),v.length!==1||v[0]!=="~"&&v[0]!=="+"||!d.parentNode?d:d.parentNode,u),i=m.expr?l.filter(m.expr,m.set):m.set,v.length>0?j=r(i):t=!1;while(v.length)p=v.pop(),q=p,n.relative[p]?q=v.pop():p="",q==null&&(q=d),n.relative[p](j,q,u)}else j=v=[]}j||(j=i),j||l.error(p||b);if(toString.call(j)==="[object Array]")if(!t)e.push.apply(e,j);else if(d&&d.nodeType===1)for(s=0;j[s]!=null;s++)j[s]&&(j[s]===!0||j[s].nodeType===1&&l.contains(d,j[s]))&&e.push(i[s]);else for(s=0;j[s]!=null;s++)j[s]&&j[s].nodeType===1&&e.push(i[s]);else r(j,e);return k&&(l(k,g,e,f),l.uniqueSort(e)),e};l.uniqueSort=function(a){if(t){g=h,a.sort(t);if(g)for(var b=1;b0},l.find=function(a,b,c){var d,e,f,g,h,j;if(!a)return[];for(e=0,f=n.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!k.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||l.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&l.error(a[0]);return a[0]=e++,a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");return!f&&n.attrMap[g]&&(a[1]=n.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" "),a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=l(b[3],null,null,c);else{var g=l.filter(b[3],c,d,!0^f);return d||e.push.apply(e,g),!1}else if(n.match.POS.test(b[0])||n.match.CHILD.test(b[0]))return!0;return b},POS:function(a){return a.unshift(!0),a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!l(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=n.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||m([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attr?l.attr(a,c):n.attrHandle[c]?n.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&l.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=n.setFilters[e];if(f)return f(a,c,b,d)}}},o=n.match.POS,p=function(a,b){return"\\"+(b-0+1)};for(var q in n.match)n.match[q]=new RegExp(n.match[q].source+/(?![^\[]*\])(?![^\(]*\))/.source),n.leftMatch[q]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[q].source.replace(/\\(\d+)/g,p));var r=function(a,b){return a=Array.prototype.slice.call(a,0),b?(b.push.apply(b,a),b):a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(s){r=function(a,b){var c=0,d=b||[];if(toString.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(n.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},n.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(n.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(n.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=l,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(b.querySelectorAll&&b.querySelectorAll(".TEST").length===0)return;l=function(b,e,f,g){e=e||c;if(!g&&!l.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return r(e.getElementsByTagName(b),f);if(h[2]&&n.find.CLASS&&e.getElementsByClassName)return r(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return r([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return r([],f);if(i.id===h[3])return r([i],f)}try{return r(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,m=e.getAttribute("id"),o=m||d,p=e.parentNode,q=/^\s*[+~]/.test(b);m?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),q&&p&&(e=e.parentNode);try{if(!q||p)return r(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{m||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)l[e]=a[e];b=null}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}l.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!l.isXML(a))try{if(e||!n.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return l(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!a.getElementsByClassName||a.getElementsByClassName("e").length===0)return;a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;n.order.splice(1,0,"CLASS"),n.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}(),c.documentElement.contains?l.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?l.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:l.contains=function(){return!1},l.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var x=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=n.match.PSEUDO.exec(a))f+=d[0],a=a.replace(n.match.PSEUDO,"");a=n.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}return c=c.length>1?f.unique(c):c,this.pushStack(c,"closest",a)},index:function(a){return a?typeof a=="string"?f.inArray(this[0],f(a)):f.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);return L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse()),this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.isFunction(a)?this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))}):typeof a!="object"&&a!==b?this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a)):f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return f.isFunction(a)?this.each(function(b){f(this).wrapInner(a.call(this,b))}):this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);return a.push.apply(a,this.toArray()),this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);return a.push.apply(a,f.clean(arguments)),a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData +(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}return d=e=null,h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;return f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight}),c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;return b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;return f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d)),f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;return f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}}),this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){return f.isFunction(d)&&(g=g||e,e=d,d=b),f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b),a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s===2)return;s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return s||(d.mimeType=a),this},abort:function(a){return a=a||"abort",p&&p.abort(a),w(0,a),this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(!d.beforeSend||d.beforeSend.call(e,v,d)!==!1&&s!==2){for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v}return v.abort(),!1},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";return b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){return g||f.error(h+" was not called"),g[0]},b.dataTypes[0]="json","script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return f.globalEval(a),a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}return i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update(),!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;return c===b?(e=this[0],e?(g=cy(e),g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]):null):this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window),function(a,b){var c;a.rails=c={linkClickSelector:"a[data-confirm], a[data-method], a[data-remote], a[data-disable-with]",inputChangeSelector:"select[data-remote], input[data-remote], textarea[data-remote]",formSubmitSelector:"form",formInputClickSelector:"form input[type=submit], form input[type=image], form button[type=submit], form button:not(button[type])",disableSelector:"input[data-disable-with], button[data-disable-with], textarea[data-disable-with]",enableSelector:"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled",requiredInputSelector:"input[name][required]:not([disabled]),textarea[name][required]:not([disabled])",fileInputSelector:"input:file",linkDisableSelector:"a[data-disable-with]",CSRFProtection:function(b){var c=a('meta[name="csrf-token"]').attr("content");c&&b.setRequestHeader("X-CSRF-Token",c)},fire:function(b,c,d){var e=a.Event(c);return b.trigger(e,d),e.result!==!1},confirm:function(a){return confirm(a)},ajax:function(b){return a.ajax(b)},handleRemote:function(d){var e,f,g,h=d.data("cross-domain")||null,i=d.data("type")||a.ajaxSettings&&a.ajaxSettings.dataType,j;if(c.fire(d,"ajax:before")){if(d.is("form")){e=d.attr("method"),f=d.attr("action"),g=d.serializeArray();var k=d.data("ujs:submit-button");k&&(g.push(k),d.data("ujs:submit-button",null))}else d.is(c.inputChangeSelector)?(e=d.data("method"),f=d.data("url"),g=d.serialize(),d.data("params")&&(g=g+"&"+d.data("params"))):(e=d.data("method"),f=d.attr("href"),g=d.data("params")||null);return j={type:e||"GET",data:g,dataType:i,crossDomain:h,beforeSend:function(a,e){return e.dataType===b&&a.setRequestHeader("accept","*/*;q=0.5, "+e.accepts.script),c.fire(d,"ajax:beforeSend",[a,e])},success:function(a,b,c){d.trigger("ajax:success",[a,b,c])},complete:function(a,b){d.trigger("ajax:complete",[a,b])},error:function(a,b,c){d.trigger("ajax:error",[a,b,c])}},f&&(j.url=f),c.ajax(j)}return!1},handleMethod:function(c){var d=c.attr("href"),e=c.data("method"),f=c.attr("target"),g=a("meta[name=csrf-token]").attr("content"),h=a("meta[name=csrf-param]").attr("content"),i=a('
'),j='';h!==b&&g!==b&&(j+=''),f&&i.attr("target",f),i.hide().append(j).appendTo("body"),i.submit()},disableFormElements:function(b){b.find(c.disableSelector).each(function(){var b=a(this),c=b.is("button")?"html":"val";b.data("ujs:enable-with",b[c]()),b[c](b.data("disable-with")),b.prop("disabled",!0)})},enableFormElements:function(b){b.find(c.enableSelector).each(function(){var b=a(this),c=b.is("button")?"html":"val";b.data("ujs:enable-with")&&b[c](b.data("ujs:enable-with")),b.prop("disabled",!1)})},allowAction:function(a){var b=a.data("confirm"),d=!1,e;return b?(c.fire(a,"confirm")&&(d=c.confirm(b),e=c.fire(a,"confirm:complete",[d])),d&&e):!0},blankInputs:function(b,c,d){var e=a(),f,g=c||"input,textarea";return b.find(g).each(function(){f=a(this);if(d?f.val():!f.val())e=e.add(f)}),e.length?e:!1},nonBlankInputs:function(a,b){return c.blankInputs(a,b,!0)},stopEverything:function(b){return a(b.target).trigger("ujs:everythingStopped"),b.stopImmediatePropagation(),!1},callFormSubmitBindings:function(c,d){var e=c.data("events"),f=!0;return e!==b&&e.submit!==b&&a.each(e.submit,function(a,b){if(typeof b.handler=="function")return f=b.handler(d)}),f},disableElement:function(a){a.data("ujs:enable-with",a.html()),a.html(a.data("disable-with")),a.bind("click.railsDisable",function(a){return c.stopEverything(a)})},enableElement:function(a){a.data("ujs:enable-with")!==b&&(a.html(a.data("ujs:enable-with")),a.data("ujs:enable-with",!1)),a.unbind("click.railsDisable")}},a.ajaxPrefilter(function(a,b,d){a.crossDomain||c.CSRFProtection(d)}),a(document).delegate(c.linkDisableSelector,"ajax:complete",function(){c.enableElement(a(this))}),a(document).delegate(c.linkClickSelector,"click.rails",function(d){var e=a(this),f=e.data("method"),g=e.data("params");if(!c.allowAction(e))return c.stopEverything(d);e.is(c.linkDisableSelector)&&c.disableElement(e);if(e.data("remote")!==b)return(d.metaKey||d.ctrlKey)&&(!f||f==="GET")&&!g?!0:(c.handleRemote(e)===!1&&c.enableElement(e),!1);if(e.data +("method"))return c.handleMethod(e),!1}),a(document).delegate(c.inputChangeSelector,"change.rails",function(b){var d=a(this);return c.allowAction(d)?(c.handleRemote(d),!1):c.stopEverything(b)}),a(document).delegate(c.formSubmitSelector,"submit.rails",function(d){var e=a(this),f=e.data("remote")!==b,g=c.blankInputs(e,c.requiredInputSelector),h=c.nonBlankInputs(e,c.fileInputSelector);if(!c.allowAction(e))return c.stopEverything(d);if(g&&e.attr("novalidate")==b&&c.fire(e,"ajax:aborted:required",[g]))return c.stopEverything(d);if(f)return h?c.fire(e,"ajax:aborted:file",[h]):!a.support.submitBubbles&&a().jquery<"1.7"&&c.callFormSubmitBindings(e,d)===!1?c.stopEverything(d):(c.handleRemote(e),!1);setTimeout(function(){c.disableFormElements(e)},13)}),a(document).delegate(c.formInputClickSelector,"click.rails",function(b){var d=a(this);if(!c.allowAction(d))return c.stopEverything(b);var e=d.attr("name"),f=e?{name:e,value:d.val()}:null;d.closest("form").data("ujs:submit-button",f)}),a(document).delegate(c.formSubmitSelector,"ajax:beforeSend.rails",function(b){this==b.target&&c.disableFormElements(a(this))}),a(document).delegate(c.formSubmitSelector,"ajax:complete.rails",function(b){this==b.target&&c.enableFormElements(a(this))})}(jQuery) \ No newline at end of file diff --git a/public/assets/application.js.gz b/public/assets/application.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..21eb736e496d09d7f6934a2fb67ce262758af88b GIT binary patch literal 34939 zcmV(zK<2+6iwFQQr`}Ei1H`@gdgDfxFZh2y1&PX50?801rR~05ppd-jw6pALZ(W&H zu4;<*hm9a8ZX&5%EV7?vo@JhF&hMOvKmY`l?)v7=coDG#Vm)!TILpPe?!R=Nb!Pv0 zpKm^P{v5xH-=v#zz3Y5eCYzWZy}RoFul^OvOn19=cyTeiL(zV^T3pamym+-*f83PC zbk}))d3B{ae_lS{A{*09X;yhTk6AC ztJ$jadPSXzchmtC`%6C0Rspg75x`p zU4@sQaa*19%P%f3socfC_>=o(il+QnCBcKa>rDMPcz73YI!RQF;&JqFP^roWaTNEr z>v_5JFK)KIi(oKWZTvL4R2jXP=gVR@9i-RUAno;nWE79m@i^*U4mSDjezWW(2V4J~ z+M^1ChjQX)Q4}R-XK{bI%JR1#*E!u^N$Yv!(M-hWUN7x$^7TAUbN^O(=TEM@pubyv zw|bv%UeWCM!2mrd^4-hbZc`@ryWG!%0ad=E`c{(;wc%~)&9d-u+J z&u{+x=EooKB0Hqx7nyi|d1*RVJ%G2K|mz|iWDM6P| zhj(^{?tHyi?>_#R%<^>S$D?E%1nFwIE0^~<#+`IAx)plj1=2|OO1IX%tXkuRSE)=l zb*SfM`6SHE2CQ-8AUt$@sP_NCQYH&fj|BCn9G~UWaF-tVSv=I(cIc;mZwE|~j zC$!I085RBf9r}%VD}#rO=+G|jOsU3YHqU9t$!j7FLIr@S$^e%c5rjM{3HuwGkX`44 zjA+6{KI+F=M$M!>AB9HQxWA-%*{%t_552w@dS1{wdZY9c^UL@&I86DM@Pb^>DDn?G znopldmOKg^z)5apvUm~(M^k3zh&CWm-HjzC+q1KyM}DA^K2d}suNP}P!rZ1&V&S7f zwg8mCkSj*yUXb(&8|IsD-hTfb!Lq#`Fu_1!;PrC3zTbI(ot<>tOQ(5yo2))~prhvD zCeF&0$B-dytT6{@V@r#f?sCvfLih3geD_8_sTzu$hWKVj6H7QSMg{t-zs2+WysCt6 zg|^W?M3?f6R>l^8C68z}^vlQ=!(_h0=hX37uK3G$x&{6vbfS@eMdq>IYXZrYyUKG1 zZ)t4Tz8AZZ2fk`jF7wPgxnG}oL1?RC?oXy`wRt(8H>+sAm(NFIr+ZA|X^v&7B6t1F zqDIyF#m(unljc;ptT3Vp;P!q(Kiig^Hva99ZeXEQ*j@2?t+8CLCmneC>4vDIWkywlIP4b9y*IfM!D zZBEhTLzsLdM1M*6JvZ1GJok%B!3$XWWVIpD!eiV$D6Xf2f>3q3-}~8lrH*GExjQhQ;ez7LQqRny?7y=!i8<0}E(%bfLMcyjWT z(@>OE|e!1yg2yZwI)C|-)n)bK%33bN5qCue(#AC#x z>6riQ_ahMY*^to7c3Mt$#00GGw^MIST{|3{F+ULzirAM4@hK0JXhP(vZ+7sOcq-~- zvELKl7oJnK9K^D@@N& zT+N+%_!V#UqG?_Z`0Y);BN?#R_9ydr_ahVhEhdAD*H0Am0GM{H#*(Bi- zlgET^d{6i69CJYU2K#&(*v9jK?sIDH>e>iRGX?Pt^7Q?<<^Tamg`n8 z|7|q4;63m1v$Hc?+y)PeXwFl7tCmqdTG0IGgg5YjtLQF+hjo^<;{5>tm-@pIvo84~xmz>z}?N008hzE2?NIGl#@Fl%`m;YTW)V%M@bhFy7COfY2 z?c1NcpuMuKRVH;Dbym7lp!Ayvih=jOi%n=pKhO(D8JgZZLMh~Ft5je-n%)6osBv(^ z^N&7JN_w<~?%BVj?*ip0&(hIuT5bu-4%EEU#5*l=bko~WJg)d}C=^r{O?>a#>k(3X zK}@VL-EUXmxO3Vg;7EuwC-8|s66|D}X%*>}C6(oB3FRMO6A+~YRDL=?X79_%h6DpB zYUX{u{F2$Eh;Er-#l@8Q*ys{$v&;Ucb8fGjE{IrCxwa_Y!mh%9|HN)>Fm)Yhx#hVI|cPJ@^{&x!3byNm|pY^QJ4mEn~RkeR4f+EYS~ z>n9k_p3eJ|CCO)m^1!J~g9DRmIay*_{e)@2#V`Ia9R2c#>+v)HdUW&t=I3$mMKJp1 z#rWBi{U3ZhIUhd@o&*m|J&-HcWEaJbo0wHJg*FK%wou6J{DbCFDzo85SSKe{~sV|+e&dH#C* z@cALQDAYQ-@J7F&(DG(8e&+3QV6o?OiaofU{rT`F>rq8F{hRDrFhrI4*W*!-`iwWh zkSe*0F6j9$`*5!U6s0bXf*!rt(2MtZa$D|#QRn7jjKTKDJsRnj-mKR7CdLQ-XBvM8 z!$z?k6Q5Nbw&C&T{ zdw!ulv@WTi^hB5OSK2|Em>$$eLQnVGeDksZsQ#v2sxQ@U^@izhB)Gi4-mG>jY~a3m zqh1}qo5tH8-!FgKVAQ*h>Z^$PPNx9G5%u-aW5&bkbtE;rjcv+>`qNQ)+GzQQA1CS? z2hjskNj$fOq6flS#6;Xfg%surKpeW7ay1bQ4lV}lCGcWwcqtHo0c)3U^ZbHsRl#qVD5J9+dX`fON4BWwv0RPZwni>M^=B`2nl2}ePUMM0bmQI9MT zZjSEEc(Mq>(RLRvQYS&039WuKx^4X;^k)Pg$vx2nd!R8w_s42haTH5c*^P? zw&ibm=+IDiUZl{0&>7dw7&SEWX!EdtN}iS9VZfy2DnkA{T~SwhD9v ziovLD(rLF+fBzz!ih9W>UNmF|X_eo#uTw8pz`EyGvR1<48wl5TD(+o@m4Uwd6zJr4 zKHy;D4H3Rwv7zt)Q=L*EpP2nl<5{Jp0%C{}O!vsJnDNw~vSSj6kL0XN#f zHd;#yb!DbKfaW%!bfT$8y~IhM?7D@l{r(70Sx+ng9)6{^tIaMPjr;gjkdbLZaLZQ* zW!XrFKI0j^5ak%(nQNyz*d?ODn`m`|ogUViJRFFKTtWY69vf}MJnCKzG<7VQ3a{pQ z%-Z64RMslGG8H|ys>!lz6<?>CQPYf;Bna*E2CdDAv*vT*$SjIKrx~Y8!->Y~{B~j~LV2+3=RYi0uU5+m zEw{5>5(n;{(3o%>iK~L-Gw>ZEN7xtoc0$yEdLn`kj+Pif{2UYiMx$EI1tZipLp;(9w6qpnal-7{&N=t$S#rh}CIyQqpq5pA17Ybk_Ma9F`Z+E zuR21ijMCV4bHBHp$O24(W13i-f`(P29hx=9Q>-W?&J2^-LFEYJ)ecz+Nfue>>;?Yvqld z+dD-(sF_(GgRrF7(~S`S83aBMu-2G=yCkqKvks4sU+V$?{rm5#@!F%m2?IvlCsg$l zN^OSzBtlE}0o1!Ph}WCdLPK(@*q-O&!(tA5GC$*Q9#eu-ec+G#Y&BtQW$7MxiC#lb zUzxjBrma3iw{F(NKM?2IjYhbq8=efBNo|=2s^6F&Ob1O*$~^mWwOYGWgoGh$y-@=a zLUuD_w8(@TGQ60WJ2)$WA|j`64P1lagnfoesgHALpIWhnUHJFPTWrrANO-3{1n8#N z<+O_zmEDf9hSmmSj>-%Bt*HcS3M}@la-uCijFyBr$Ej@ChCs|l6ug5<*`*WNp+dZv z^XKF94DAzXlk*;?Z`O>WUbyJ>T8p9Yh|j5oj#6sMizNJ7_kGS!yj(TjDS+vR+=l4RKUlR=DsGLjgMV+XJq z(eRZ<=`g*%9DX0~rXyr&-v zRHlhc5q!b^?Sy`0G*zeTNn`r$XGPyrxm$v z%F?yHPCI>MOkC{zka$^BZ0`3nk%;t+&8n#)d^meSJb%mw@$qPO4(XB#M3(|oMyJF0 z;x;hmGHfM7(@T9VseS5^niyjYe>yU@HW0rCb~6{U{pB;>$B%uc$3Hzf3B|EaabIR6 zUJ+~a;bQ|>9LPAfc4v__ji7YNV2#jiU_}Fw$w1bwspL>3a~ILE0wUJkOVvd8*FVya z5V16aD*6}z+*hif{l3t@Isf*0syL`PP4n%xvHYT4kTI1NY}H3@3}Gw_HWO2zyf1Z9 zRWp^6jL)@YL4`p<8F({1Orq|TrTN-4Wr2n6TiS}Z*X7`rz=3$>(JicMCd15NYr4Nx z<^?ew8FjmA$Oz^`l(Vcp!uK@%Laq>cVvtH_Tr}ZrT{# z{eHi#E_c;sYz}ICPtJx*HtD~n?Qvg~8X2tckPw$jY)hE1M#l4$J~E>R&+*{WBLQoB zpM-5Erg2TrCH4sB>=JJddCd-sHOwR+ZtsZ+Nayi(D>@u}MB}a0RCwwK{M;1+0P!%! z)4I_6MA_ynGf`f`%^l5meS0*M# z(xKmGULOtzRLlBT?@Q5#b$(#H)e(wpS?dm?DTa^EU-IJX59^LFw4P%Dqv~Y&n~^t? zJ--tkKDDywkZD03}6Yg_P}JDsL-;7}_plluKoJiYkV2us zVuAq+CvxCZSC22aX6j1`V6FA5)cUFi+p4MOt7xW;U))+EagvR~*WqEf` z^tQXg;j+&jZ>bRV0SyH^$B91i zZ#0o1aDZ+WfEs1iKyg)R19PD69EX-r(66Eg0>XxRPcukyHHd{n7*#o}h8Gf^$&FPQ zF*R!GHsBs3LRAWAZf`58^w_Gg$~=MAKdIu=h&ih!Stb@>08cb4UUasY&rAwm2eC3`GR`h~CCw@vy!U%<(ojKs7E5@g- z)n>qwj2t$LXp6GindBR4npiadESNhsC;OeM71rwb>O#oz*T+M*3)i& zux#8)5KkH5><9obs9e#$f=_L&3hM$hIjP|$Y3h-eS^cGbo<|-m%)sXYZ*KDKYEIiC zq5Z-7xRh9`T{-y}(kxG-hitW^mmn2t5|{IksRmeS5^RXo%=nfubj!TyqYiE%3)u-L z&-l@doyn*+d9<76%OfetFnoRVfhMGn4iIMUo7O?aWd7s%`}pIwr3dn{#&)H%a9ml- zb6w%OT<51cH0hh=s=Sgj*hn+;Au~3Lm8YlH8_UcQ{CP6R^u$i!C{>$~+W zrned#o8<+tseIBbuVOY;0>4|TlIYk$y|074!|~7CJa^zZ4m;20dGL#?Vc8TtFNr9t z^Yen_bF-F=zh>aE8^HvQJcMX0|ATfC;y(p8xP@EzfgA*RwG>wp4kD@aGptzF=eTen z!s#xtG1+wlwxj{IaRs$;=p| z%%)gCs~yrb585Z1K^gj#7;5GE>ugAKj8kg^fwvH0CXm|JtIe)yDUc}3j2d=T91+yr z2{%c#iH?r-26z3f8wA5+@epccPkC^~ymLG#y-ufdJujEH7cZ{aW&OqVh5n5@(@j2! zo?gUHJM2ssJtgijyjp)4OmKu2!dQ2(TE}Tgd`AC^F9uIv#Mc+`i);4zWT)Hcsqt!k zdhx;|n7BLbUQ1wd>TS%9@@(QLCkX;rOy9NeeHawSb0juC9+>r_Zb;rNY5bz$k#_gE zD=Tny5EQi+~pU+;zo-*ru@yjJGv8|db>+6@a z;kR2pR;AvWcjl2|2>5XsmfDdUs;DI@whrgv)Ow@CfbEUb9hy`Nz8ucPQ~8oj@u{h! zRU}NXpc&C6cp|@e1vAL-sOU1L?ISjluw#U&MdeJ4maao8Lc4)~Jm_r}ryx~wV;@zS5sdVFOc zOzlfPTGW9b?s)a}3Evh@)wL0l40#}6ZK@p3&hF~U0^TRN(Hz`0jT};9oNqnXp~a4g z%b*z`vHGxVl~onInUDQXv_rZ9M}Sn>z?kehr;PJGoH1}Ekq#U%ZuwHrE`4mS&{Y@p zlmW}`r$Usd+gj{oWZD^D5=7y8X@&DW$n>OzBJc#3`f z;T%Il&fZ|RvuJ*TM9nlp5bqxE(z8z%6(IBTyL!pz>knRI@@C>0bF>d4G41%4TJ?{6 zN0gX3&;9}rr`sH0WS)A)pV+O_2(Y72G;fGVPCG>h({ zl6h=3@sErU>#T(^7Mq%(w@X`WbQ&hQ8)Jx8C(v)5zr5> zA2SN#$irwercAd6^fD(gxcQX53!T0H4Fk=OT;VoapPjWg&_G;u1Y_>>*uNv- zjl3(&{G?ADD?9<`B*fUuJ2&PARsY;r+nS1gTdfw2=qUbOb0k9ZtG?hP+EoZ6(#8z5 zw0d_uW%U)tPSEQr;P*N0zo%v|P*Y9rqTUE`KhFc(ihDt5(h8IK_8aR#6$Atq5tgWu)i76 z&p3F(UXcFi<@tY&gNwpZb+Q){%(3rrDu1bTbf(Y~3u&+CPjCPz9x**O6xpD_!VfAV znv0vSE(#dZ5Z8?GW#L1rq3?EGb-*&tbPq8b^(ZMm-#B8S!ac_3yV5)&w?467s%kd_&< z5kjj78|kORMc9a28o*dUyLGbxPHN)});dm`jK^roS|wUt1||5O^&Q*rp;H&ngkZXo zgNU})V7}nVjhnINhDT5QX%KP@BkfW2Yu2{(_FO@SF@*;cdv{dOaHKD{=AYF$k)Xm+ zd?J+KSk~UyEa_9zMo?VQ2bLM@c#RgwJZ{$XtU*d&&!J4tgtx*CTHR@$}=9CD$^j znl4ysvVFFRyzKRH`bTVXgg=Ov*~10gOo957p+6PF9_@bf4ae);_#OcQ07#1WysoE4 z8OP``0fwA4<7h+mMN=Fkw3>%lO#}NWcZI*_Pf%|VPPOM^b95S@eX(Q8BkqPu$Ajdk z&)cIu=YUjab_g`p@pmGgAAQPRgRMxq;T?Ij9!|_*yDGA4%$E5TL5>^NzKBbjM1Hd0 zdy@|c8zMoJtBA&l@|_!2LG-TB$zSi6NA+>+qbf!Yg1NzVu`5Of)La^+(vpsPl$r+f zC>~yheih*raqzB!^Q!?k9s3Xgx$5zi6CGcfkI|LXhHyNJ<2|1?7`E2DwbAQv(plt= znN3fi+OKF+8VqY?Xu>KFYqlJeBYzz1XE2%}1}s1Bkq*RcCj{r|TuR!7X@#+1K}@JY zrXyqOvs(_%SCyd;cs0SiAkJ!P168@-1n%PYy#D5X$uMh-AXR;r=T(0W2$-!>d%V#M zbZx?Mi-DR{EK7qK(sLUGN2vU0Uecq`sEsIr04iQFjZn<2RfyoxeeIMM1M%3-8P2-9 z%}K7Nq1st3>-ni2+FHr{$N=9m`!q=(hWJBx6(TpAkj2DZS)dVzf2lQT_$12)bNmYv z1W!oW$f{-zhoHfxOor7tD1P>zj}A|Rh3>~_+nTJPK zIzjk|xP~`s=dMCXy=Ol9N7x(jBNkZ;^wWdd~pIj~H zAL-)m9tJr3ZAve)y*X*)4!w&iF1T^>rrxU$>f@k>N5F2i@1=<`A~%5%6i&pLKeOca zW&P{lM{eFb(!Q1 zPC)kxeD<-qmk#JDHmA)Xtd++>O9x2*1vJskYE!?A<*k+_9VIDkMevbO`bt%7fWnd-NiB%tTey8SQ#%?(U7hRr+wzqNHpVFE$ZtLxc;q}T#ow5!d2Q7 zuApCW!a4R*6192~*O5Lfj#p)>?PlCpp4V8Y-Kr?&M+;S1&6zm^%vSMUO`wc{6AaId z`_r;?X|;4to3*7&8%qb~5e}j4T#$*KUvoCfwI`+#dI-+hNz1OPkjgxoi8EsvWy3P; zBHO}NIz&9=bW{#Kv-!Qyb3n}-Q-MP*c7G+1>-harxf6O3@Hf`JmMXs zS}>tozfc~VBoOBh?dC9ps-O@v1$CVKXqeS~)5ENCZna)tHfmPX*gtKAQM(@&7PO~E zxzn0iBOk&Yx!PN>ML~r906rA4(*CYgh&tp%)YTq}!)Y&K&@z%DJi}R2fzUxy^$G9Y z9)M2ls_p#Ro_=Z}M5ltakT9hCeV6qUydnYOG1H9FaZ3td_L{&D2oIKSTefe5H64BdQ}|{5F#XCAGYaI|Bu&YI zBOkUkMFxE;<{o`jXB-0^AO-%$pUKa^%g=M?aD&JdJC2KZ@p>6JlSR-3cT`6&T?3T5 zlG<_zVEwft^`MMqHgi(BMbL{C2Y4)5T2AZeflq7D3&9U5PR8!VMlubCAHw%?5T?Cn zb)q}*_OA&z&S{oa7)y{FpcViWYp17-Utr6VYFuAP@Iq%Rq=eIZS>PnvnpR}Psj1+a zq#nkOR8`STpqIj0Tfa}j;*=<7!Pv0R;*j5x(eG4piFM%Ql@KH`y)Kyf&!dbOe3kS3 zS7KU@kmp*&L>>V?Dn34)c{j{M8iigIxC2SpGWfb7>Ol93b(wYzL(ZEKJ{<2;8qh|k zE~rjsFhVC9rj2>d!J^kXl58i9mrr+{B=3k$I`f>g1r@HVj0{PHs*?YJIde0MX#+-s zIN};9=)|q2j9SI2%SOm;0*Moz^E#m{kjrV~sJFr;N5E}oDg z=t7>{Z*zoh@aXsZcPJSP@9zGe5@JS*A4Dl|zQzSa-CV?{`nox(&KJVL9b zpw&{)YU!d?gDRr375PmYn-7RC<%A=6VvwIcULO_}>MGbxv^c_B#GGLFWnobvCsXza zGf80?ve~41>Dzglw1LOiEY>rCQ)QP*p~A2DCTl~QYUcUsG6=Uvdmcdo+VB7j=ZBXe zpq2SMi&OfhWp}>%W(ev-)ZBs9QEOBYr&<=s?xi)QKte7jI%L*1_7tj9aZ31`&ag%j zT7#G&)3K9P=34tJ_TR*rmO=jHgVIw`qUJd#BuoZGQ3aXykHuU0T%d;S9i`Kt5U z>&JGS@Q`^Hd33R2LhXK`J(C=O5sph$xfsXw!`hlAVEo7;)uq!)6CipB;&?*M+-O?y z&$aI?M*WRy=U;0nx~h=M+9Sjj9b+Rma_(IQTRtZHO%ANgsg^$SlEvW@rI#o$`sJoS zmQ)lseZP;C4^J-Cm(j&dGKF2Nf78Et(+h?-$%T4FAKd02FVt63^@?sv)jeglit*C=!I{u$Cvn8Y1uUV2j9Q_(*~$AJ3UW(#nk z6oxjwiR#nHrKyt9XX6Ne&d%WFD$!14<8xHbguOLPtFu0_(4Y7rMk}R04m6kMYxyW{$_s7cfEj zHfn)xlfjqiWIXTll5(0EqgVV=dAy9k_?stJ9ljw3he>`I&Q@E<@#KE+M-$(mPxHHQVgbM{5Ral*l%0I+@+}xaHwPF5Z3)?B&vX#E>tP#gD&MciT)QaYY>)=kYDk@ic3Bydn!O8knNf-)scTb2U{1d|W*qqYgQpc(9BWB|o zF4Z$?So=La$Q?AH8{7F;t9t@oR&jJe{C4+i#1P{PW8;$($d)=F<#DL!VN3Mr1%W#i z4&%DF~n+GIG0%lM1X8 zhQ}k&h8}8qT^%QL3O@tdI5rm0o<+A&2{@Y5&vRM&nZy;~NE0iYv|MLBi`9$|p?Pp5 z*9=Uo`@{MOhG!-^zfS^Y9sbuY{LcvRR$Q7l+onncFdx z`?*k&ZI!1z2(&$)6gE3h2Pu7qG=|kvl(mq!^=2tb0`bNf6gG3Ylf|x!SFC7%IHoMhAyu}~1=`Q5qZFN~0xw43? zNrn?6T2oZ^J>bCN&WYS-h~wzo|GR8cr2i34I#mc|bZTSjM6T1`5y7%sbXwVMbUkpA zCJnI8T!QkyDofD(_E{|^M&h8Bwgrzs` z^Itbm5!l=IJzxI59ZnR}na>b0D_Q91O+$~5>$;o{RC|*!K9~d1&4L*M#|b>1ojEr& zYe$R;0~ePOxD^(pYm-$U5C?F3Ki@?Oriplye8-HbTt?VPQ6}MDhwk}T7KDi0XN_x9 zc#t;n>Xh*+Cnv3PPS{J$7Ueenw9#`$qfxFZ#Jk^5wR1{=tfjOY#NV31#)eQPg!ZtF z>e!pUBs8t}z_vFHhIv>!Ok745*$x(iMYM1a3N&dQ5!W*&W+Yk+mLxwQl}J6&7|@@T zT-LKTE^ApEVX?LaF2YI@W}jbIIIj!HgyCCUaLUFvyVZIPvrY~cNR)r>B3R*iU&yXc)O;@9=@+{9s0sG`yBbQPZgF zU`k$8ivmv)AGI44oM{jdyUdmpoMQ3{N>zH^&B;HrFh`u5XGFi zzQ`Npc%ev8CDu)3za2@=YJ`V!poyy5RCic@m-GVbxc7qAH!e$?ia+T_d!K5eM@(O|fmG}_ z3Dm~&&swV@AME!Vt8360Nv1&+lKwj3D7l()F4a)z~99vplj9zn3ChMY?sciT;y+d@nYS1NAwI)_tR-TICJ?ypYyaQE zC=Sy%uh4ILjsJ1or~=vGPbtH>N$b>W?vuW$Rx>8mgD~mqRsx0Cgsj!7_e*d~M}BD9 z<|R$b-}Uc5IQO}kVIc;8*T4Vh&=Tf<=fD5xY|~AiFaNH8|Iyj4^jDu4o;?AUOaPh2 zb)4niX}hu&;6}|HWPROV8-X9^T84JjF<`1D#HutR&#{9DCx10H+bVnh1jKX8`KAzQ zW4|w8i|jtQ49=yLeB+dIAMhz6Pm`_vAGO-wuGY26`MyziRmQm|nM-w{#B|_R>}47c zqf#_-d^61Yc6q{*YhXwc9w2c*YkGDyyb7mh&xfDU-_M87!%G1q0`(*3Uq=eDn)=F1 zoXsR1iY==D*wEnz8#r^l9qL?&bZIgX=r`JUnXd=%fDoakF!trvW-l8AFw{Fg&&Dbq z<%q7CJGn3{XKyZX-fvL}!3tJPgORJY<*CtM*a8lZtPlg6aY=jfNmN%03vH z3)%-o5XJ|k5pnn+8T1}lKNn7_tel8H9B1K!VftBwW)3cVs3~eZedd6epTyI(zFplT z_gBKPdhVA}v2L+(xashG%p90}v#X{1b(A6}nO09Ua9CS$Cvk1#jX0*m476O_&ud|P zwSvx^Vp}z*+_kjZh} z-OkA$lRQ2MmwL2%y;-fQDQ=?H5ck6)m)f>c(7m?B$7kRDt6HKUQ;QSZ9$z;?-FrPg zyHQB+>z-#-oA#$#@wyIIm^kYWzvLwtI+ zlXJ3S7%V03viiQuxTjUGAaKtkXZD`Q(H@_K8PF8IE;_LGptW0yapN^T1$tH zncDwBmm1ZZApbR>MoW$>((5-dXZf0bInjIZI@Z60{4%|cHoK8FIZ z?WNYfRj@+!*qWZEeRL;G1|-jSGt*IF>Dw!Xlc9utI6|H%ivPSa((j+JD8b9C88cT`s?g|yVEu48CEBu zvaP}6TAFL$+R&9c1_@KW_B-aYo1pR=JMNZnXE73OQU&e(Glo-IyY!n$I_g-Qb`$gI zDd10(_t>Pj1Ha|*KD`;-k+*Gz;|`k5a00zLBi3NoiRBRLf4PZ`69UXlsJ@AmWD=I7HrXC5&UMA@KyR-FSFwIxe7>>W6qRokSI+-N>*W2eoxM^Q^^IjF5| zkTDHv#GbO*?aYy0EzCs*U2&9XCuT`Is6{2esVfewG$UsVg?%PYaN~>pE~R(PC>Ec z4urptSc6O(Moob_5q_b8w6IDr-^b=fK=or0(shkrEgk<(V+C@BPbZTjrv>qVZ!*(t zQE&EYWoB(3IWBUILjakS+&N2?oT@#<$#Nct@>n^nT3(rfF$A1|F%xU7a3P7>ENDQ; zWLXCzZ8#0Nsx|tdh7Q+Wm=(TR^yg2kj*EX{yFB1xPX(YeKp$(doaNE`<op zc%mL3cOa5vJD%I`iP0KpT$k!d3YoS13KGuZYhJtSz$_xpwG^ANKC)t!>gz$J$o=8+K&NbSmkL>ormuE~t9;TUVxo9qq7S z(UPzAoyIPF)>2Uf31E{q1K2!B6lI**izoSmB+Di7ZWhf(@mPcGjJNYlCm9SLZt0U5 zv2nix5iE1!kN!&!r8IGB<|>iGmTIg-Lf-j;2L)au+^K`Q^{(7e5&HZi2mB z1h~8z;nisL%gyL!JbrdF-jAMoZ9QZfeXNvw0hG?$8zuD|>mcg^&q9A1K(G;-#me=!ZF|>PbE_&j5*fSbYdQIZ` zNGugAt*K3EuL_8`Qy8$7(Z$UTH8evAw3{Ve-O|<17lYBILezek-yKUvQ+$7^okiwu zdQ))k6GVK-*-j*jh_s{<0z2Y(ky$NRh;dic_kYy1Z6wB8iDjkSH8<{d1J`?C!B!(% zwZow9qq+FC!uReS%rV{*&1`qF}>FBeudMD-)Q#e}i8~9TY zyx^q)nS(&MfaN=zR1LW=#ppN)oEPxGJv&?WO&s{qI}XNLMjw1!_1>{@yV5z+AIhj% zbV%DFoKt0I1Y7SUV+TR44J_pk_DK>xoP+8rwQY61ItWF!gs%7hTk z*lK6^fHEPi&}t1YgnSond>Th+8<7{L6XN9jPKToWZxRvBb-b0C($-w!p8EfBh$CLXzec0dOW-{??TQjaA)c29io-j%K9?`@_Unw zE&^yD;G;5&$^gzPa~+sqz27H-GWCuZIc>)IzD)XSw!$2H9N29aE_zFFx4u+!i*8a1vb& zlIz$IN@VTjG?!6CKeQA0xJE4B6SjOmRB6xW#-1r^>(7PWD^E{LI{c@7*xUFCmam^VQSutBz96k_sAB+iPVX{ z8oxW3B^R6q)y&J4PM|!~(YWctAQA)!@NRC1*ca@gS6CN4L;XsoeHk@|VZmaukkAqm zltm)3#8KtBrtubhJLpS`)y=Z7TbPYD*P8OCmH=j$oX&TMypZCjnJLCzFaT=?PxXD!y2rBLD=KqmXO1QW_Amk^Zb_* zkpfC>3br275HCY~NJ9Uu<|@?IR6tI>x2a{jeMrg`&`kn9JM_7usUn><|=OE}JV z0EHwE;uIKx_X5dg4N6Tw%r4`t!Nc4n6$s;~$+C`ibR}Lte-vzKf-*tId?hgfq9X>b z_PQ3!iPH~pPg*{*FYRp4c#^T^Sc59<&>$Xgrk5%`QIPi{PUB)}n>d!@=kuxw8q2e^CfeY8I-@FMgZu*}ph!&{a2zt;6 z0?D(-zu+P_;|ulj?c2ZLLlQ_H{{jVup?~vc7@2ES68QaR!{Fw#z5j>dBi}y@_Vh1( zhc;;*!i!&8n|oFp{Wsr!N3#_A9P@a&o9>}k+VheJ=P9Q;g20CEK*Zm#vTTo9dsNHt zChNI3ByTOH-~0q!$$G&s;7$d>@Iw9c;~O-FcJjM@vD?peThgp)ArMIsHQuljdPK4x z_4*0*_@_5t|MjaMQOl!qDK%jFhJleeZ;Z@I;|a#kFyqg;UxWe-?uOYcv?bri>+qp1 z^id-`k`93-$8rw{obh`C8%VC$14o(sJ>@wX6^ytH>q>p=d5=YRO`If18Cy@>8XXQH z8{B6D3CiCHEEd>|AQMhd6Wh?`gUNL53-qgy(_|Py2iSkgZTdI~AW2hw?x;2OH4eMmEWJl9M^Wn7z zAA+%QuSbjcesDZ7?j*DU0?y&+(|1IoeXr_=hny1T)I^aC_m zA~H+Qm#{2X!TBZiR)>r^zZ5g;x1VeO!D zL|14lS1&e=w0;(+vBz_BHq&b&GYJjU}W3AX$C*r)#vVPvY@EU7@MKtyJf4Z(GRr8chtYq^eq$#o8nz-l>@5I_;E;xcKL% zg1>gF+vMB)|MgyTrEV+o?tk7)C#m&bH(@KTw@h<`f^B=xjVEVwC++3C)=eq)lI=nN z5xU-WTkNyRtx1>8aq)Mr4eDh~($2P^@6e6M+udp7A{5H3ij$BQaS$h}``71E;VR1> zD?ydacc<)cp=P!P2K_i;DyBI$}NMTSpvKq)NL4w zrVRsBt~l=};HgaTZH`pKqU9~DY9+p#a}w6m%QVcRc(8q6B16c4pR;xsB)P| zZPs|j=CRRb)$$}tI7w?bA`q3225B%WnL{Il$13FwKqT$ehef}1OTFdsDgJa49W znOF5hy z`e77^*jM$sIO?B8Y36Oa2IioSg-laFi-1U4O^bA4M0y6`j8*|+ z!fd)SE4?>47f2mBt9v_GmJ@1^xcNG!{WE`KnDL^!_>vO@b6%jj)VB!6{ ziX53nty>R=aVkfm>iH%0>0nXiog5SL$ALM)x+B4{3Q<)(?Qd82n>6oT_`@zNop5## z$hAL)`uswdfCWQ!)L5_X!vDoJcpBP|dPfaa693JO4?R87HwGf{pEv=JBermG?4R85 zGzd$R4E@BF4w2atKFsl9fE<92e4aLgBJ}z20VogwZ`^FxI%D7#!Asiq9kS;nFqS&D z*N9u~HJaUW29T+^vfHr7X+~{kaw`RudM>U~0Op*lM=OZ1i5*Lf0q&3Ao9!z$b31iE zXqlJQ0_4FkXFsjBC1zl_JGE$>*c!*IG>;*n%o7z5K21(me)6l~`Biuoo_q}j@8?|R z5c(~i+mfr#I&Pqk5~o&xlxYtflbl;8jC%F(yjEmjld3?kI>Dc5jjD38MCW!E@xcHz zp{1$+o;%4$%~SpCoY{u1EplZIGjpq(m?7Tn%%$M7sI=uKkCaQRG_i0radNtdIVgvl zJv+O-&Ny@rIJMC&GX)4XYkQ4{iXT~19Z1AOj0cYqJTTP75_T@Rk6M)HwUtQ+CS1G2 zQ5bV^dt{wd(}Z}bPEo^CT-B|D#W2(a_}2iAq*U+N`o!C&n{vG)%nB6u6%`5iM7><( zoLu*4Zwxe_`_0?$zl*%$Ha+VO^X<{o zw_m?`iz!;a;4`D7rP1SOzSqZh7A_oFZBR4N);9iZpq<)~n8uDQ4@_`a4zS;Q66}Ae zBI@Jr57o_uF?MERgyX7)#8bQfqd1wfUA3Ncu+y!enFO$g*2dR3&S3avp-7{T>YGl6%JQ$mfot?oTTxJVS5)C}bFNORPr&88} zg4!xgWu;(I{-%0c;`ITHs57vmb?2$lJmw5psSW#=A6dw@3!GioCf9hvfsCSR{|3{ASQJ=vEtsyO7)$tKYsqe)>L7Zp&TEi^aC_kTHZo+u(>r zI%!2e`Ue4Pcvh1WvW)UZSjBGi^yxShbmf_eWZw=}kv(FC%#lV@M`Vj&X9eFFxXNgw zFM@~Y>65FcV{IU5P*5BMddUexSq}qILYkb5gt0EV(S^CyRwQd<>(L1LxDj7tJ^3xrB6%PvADK z25Q54UfxO;NcM{j0d?|oOQzS~S(%NvY%Id9S@5Ou7+-sVa?yA6`wU;)CXWqZ+HE$f zK8n>wjc^}}rJ{l!R{jVl1X3H`&wf%}($))M(-i)Gx%U(8b-Vtf(&^Q|vAfH09kv3T zC&*T6$$aA@gJUDeV;o)vN1}HUEm3eGd?WZJVf1QV49@B;zA zs58DQ$A;G!P$0oqmdVSlDlcWF=r!cqJ2yv*V%-gatvZ?fUT;u zjK-5qRnerPYWWGac_F@wF8;dQmGdVT>U&9_BouVJ#}Na+;wvJPFb$3_)P?$y3ie08 zgnzgh-SpM?8GZXxyT(lYrx`}2So}-$z#1=Vg%cFW(G6!1Uh2%jXb`a$2eoh?lX?sS z1DNdTO;W0B2Y&4HrxPX1Vma=*wCGxqR_U{B%6KOZSAyJb>~C++F|-q-&TkJ{=FKin zZ%O`A9{TD*C&kkS{Ifg~&`2qJSgVF^bp!GYFw zF({3?q=ZQNRoIr;3ET3Y z`hYnY+GrCt0tFuc*hmX}qEH1Kl}y`)_=oO<#*TCGL8bH6Hs7|V0Eg)$2Y1zt3~CwM zVk>|dZ5_w2ZDb25#P>u3xLyvj%J&SxUT}PYaN)?u8CYA&2b&=Y&lN}iF4R1Km(Rl~ z?Sg`^rNh({P*$S62sw7%tg6S^qCA(04i;vnGrZJ6W)V`t-89*C&Ru=b(~udbamis) z4okff1x~F(*-uTD(=QaJOOLNGo1#7tn_H-8(me#;p$-={Iq52>?=0}K#zbvsus5-s zVX7L?nIaGwFS~|GPF&ljY8bY_WR;cAgz&)DML1RSJnqj}p>e6Rt`ocB& z)p36r?fV8kLmUFeMD4r6WXlQ)Z841?BicFEz)&6 zFX!_|ht<;1r#?B+((juKw>_Q=%es7e8k;uv_Yz7if6`F>orL+&q#9(w051??dO%k(~>UgSW&^@RnKx=taEN#N64W z-&F`6vD7$!vPKD+>ki?g22J?jv>Md0JE915{{pVu?&&-TbLH2{?Ds!Na~V9qzc)>5 z4G@9?ZP>x5iDwaa@TW$O5t9;4d4WL#mfbu`4&d55L9mOwka!W_>yZo*cnD`$iMPWO zl!r}Uh=Ca40*)085~Twd6MVKOZwD6uL+*6!Qh7HL21f>K5Ga$hUDJ1(xS(kFgD>Ez zTA+HzAMwaK4Bbi4#MQv4`sK72ev>%iZRX&l26{d5?Gew^%8y-dhZ8K1Q*X`6=g8hh zq-{;oE8Z2krn!%Qi@Z2VHv4$9E7N(tkGEw;fA6z$wNK;ayLh`t)Tw#7-R%*VyPR+L zld?$TH6I$&<^3k#PgW~}ioF;I@2ACPb-&&(;?3=Tk>kZOez#xU?_i`zvQPnc+5I-> zaqYMF3o7|>kHFUZchvgIQ$I%+o!NhaI^Sfyh?Br(y*=CWdKZQIJ1aw}XQEqEx@q_5SP+!<+ZL!G%gq4WdOU22vu6>H&hs=#S-}E=X~R`=vN}9OE*;{dD}hEIhG=A@ z>xXZGALtWX-#=ozn~75btpbKRhYy*BndcTI;GcTGiPuezO3Q-I_=3~n1VQAbvc9gX zK0*#q?8FVMbONfi+d)6S^Dn9A^VKqk*UI2nr~s>6GfFU(6WIh$aik09P^UUDMeV$| zc7R(mPHlMcTN-1hUnbBEzR8pMEwtL; zS}jr#CT1uxM}EYcHtkKl--FYjkRF3VGIYC7600Tr`Fx(9HvI2X$h8jwe!F{aR9FSDIGV zArE{}BZJM>UcXvj-Hj2A)hZpK#4}y)Ce2t}9O07tz_}{3(*{Fr(bscgt@I{>uEwLUM6v+=sqvK9@{>6VJf|7}Al(^e0sdcdSs!kY~n4K{8 zk78|j-n|OxMU?2Kpm8$#MxFLUy?-;abv4B%N@GZ7ir zqi6ktc(x~3#DP9}{=yRjjT&gT9*<~Pe++m{kw-w-6sZo{1n~8L0Tir^*n$Q1lUxJdBZ(DNvp> zS}5T|6EYmbIC;RNd!>W581mDuw=oW15tQ)iHqwDg-OMZ`?!E$gAP)B^s5r9W=?R~? zJ2=T?Th1P1_bV2!B9YqTU6Z)lv^-i@Zk*)|q;mj*nFAoXN{5Apqc90n(P*_PTa?l4 z?94R~cZ5Ng$dpJxTRU;VgNj+K=E{YDJbIXH;zF`79zy6JlY9E)wSK6{zPb%KsgfzH zrmZz!4T}gdfGVO97PVUm?+7C%kSWXg7RuXgyehoOoUq-(?I%)vpI;5;*9*?NooNHB zVN%LO&5?W}G?%#~W``KR-!GswonJ49hPq6_kkZnI)8KGx6Xogyj$4(i>x7QAp0zot z8)vjauzLc+D9A6_tFI}}a_j?DYMItNHw}?^Uq+n%v6|s_I5$BZufMo@PRlMX@H0-m z`f^92C+sh;nW80TL)0i*wY%W{QEi%9A;9bxwovL8VwVl1)HDFHMZRL4#Pf<(&r@i# zX+(K+YPfz-v3)d?NIp;7gS+5X8xhooSAnVkm$sBy@37z$hqk^aizYPMki{>^j z+BYMV)<*_q9mFoKlnXW$_ow5M`!?ph)nkN$Hu+3)0K3ItDa$joxZ)o_X(&SBqp z@k+F=0UNH>jk4p$dACkaFXl#Ue~>`1n{rsIxi~k_?^MuU0ds>AxC$MG?2{Eyai_~76U%SNR>4tteIa%b^Ae% z-_?TO1O*-|@+8bS_CRSNa7GY#JMeD_iO#H$!zs{p7j7$WJ8JQ^7nv}iw^cOMikrW6 z;#{K8uL2pjL2w%-O-16Zj(>9--Jaseg*F-1{`N7}p6C}z0rN4Tjak%H_G{N-B118@5|Zmh@R^d`EE?3~no9k*OT)-4a)0?M0@< zwH+jwY!S7F|Ix8UauXN?_u4R@cH&@4n~--OjOJ<#8{R16mj`6n#S>khy*!T30yX^w zj;YM2Iy^d8=*nk}``YT_9gP!zbzuLAd|%IZfu-0YQx|P!dEYMonyw&y*;HEtYCY6c zjb^S;nB@`ZyZGY+rP)NR0j=8hPL4lO2(pzm&yv=Z#hJk)FL>t?AL1 ztKDw3z_Z^}@=_&VifwSZ-L~f#YLTExZb&0@E=MaDr)j?38eLpk*W%Yg_hfvWN3e@i zZT*fapvJk)17{(!Y~6OtiGjigJ=@_!k?)QpO;%2pzd;+W3wza7Wx@c&;tjnkFH8@W zQ#d-)*M$+kfg1jSaVugK&F4Sr)-f#F2|wqURNT#po%zPzt*Twe6?CFLJkbK>!v&iSX{Zlxd>ykvlc&#LfQ#mGl!1p``y5H|PSETFM zjie7At(sR#{)d7n7-Rq#Aj4{@E5UAOz#vm&`lMVw^a%fNWn%maoS=xXR8sd0D1+!uko#T zq?shjpob`CTetA8qb_7JKz63W5Ti^hO6Twr#PXj~amm!Wt5CRepN>^+?$a@NZw7A* zEu0lh!&RW=L9-ME%h`olic8y5o7e~Y>No4<^P6l>wS8YZBy|KWlAh~cdI^V^HK2o- z#nokm{BncTMA(q57V?o(2;YmKm)>t)!EXrzHZuCioATD9eNKCfWa;sdEN!O?SymgU zqnd0XV-_2%CKFn`pHXEO;fs=2T6Ysdzd_^2?R(eZj6^C^27c)QM>{)4Q{7}|BS@Qh zB`)59T=C*fUReLIPSOLQH4=_%M8i3!%@EDQs0Brux;D~0$aIV;1;_LTlRd28>T|Eq zU`Cy^g2R6eo$iV$QvbV=h7^3%{_!T5^XI9p*DVSg#+s zqH52Ezy$v`P3eU>mqZtXn>&Yytn(_ z{$Pt}^o2g^=&t(e1u@y#l9_dVRu|QawwdKIt%5!3)p>74g4q%*s%Invrw?gt*rhbl zTj{;zwCDw)oiMj2^gXZz+_O)gXsf@>id&crI**_&&&tI$4QI|%4C(Dj)C$6`Dm(Bf ztwwRJyxte*P3U6f=Lc|uPP<~gnjbW;gZME2$i%h!r4D`0uoCd%7WqI(zHzrXXsY3; zn@EL~Oheln1JvsA=&X1Q$J1lO!SM6--1TQ7X$ma?+VNMH_)Eu!_KZK{(vkwIXuwp^7&Ta>2 z@=5=Cc2~?Hu`;zYWwN6!;jnkCMY&|VDXA)iK>rY>Pe?_5s-6G%px$x(lR%VCLSIDa zsLeyc;R1{=E6*bAxj>u)5rqe}13%IcDX&T*2hG;Q!bt*Zk-a=}BN=o6P1r z>CSFZBASQDS383nyIUcC>TX>mt8BX46m!NT6${_(YQDQIimQM%sJ}_8Nm_0!FcTjP1LTNUdai3o^S9pcOWE*1Rs+c&%KzkTvefV3ZA`+D~7 zjDEhL;fU$)kI~s;_+*L~LqxJSqlNnor?BYzhEDI77FddSdgL5$!i zDP$s2-VoJRrEhS9k^ap8|Dw`gRr;2+z6WRCs7rsmkpK?-5(xr}mPFHk21q+_mrr0) z{EJ|<5Wl4?`e~p38l|r^?8q;TNFW?=vSvbxu7$@@kZO0{>1!+Zyl#&^%o4YA{ZR|% zZs61mfFN)O8J!dYmBDQncUpKbm@3#HUQ!2;-sJSeqvb)O1QQMCMmGy$8{$56VvJjZ zRb~ZjGwx@IsC${*y)HHzc)^emlH{z@Cv#R!Uj78M7}=V$$PGv@1^s(k`EWBs%$KQx zQ9aZ*2_@t4b4XnwE{CIw1Gzk7dy(~Zxm@!BC9r_juZnd!zbSHG?j>?u&$xty3hi;t z$hXdum_|`-gso{ng(;E#$U>C(*-l7U2-sU?Ch~c%hCoD2MtoT#Rsd^bjU2XF^vI~` z$m2Srv3hgLa?&xI!ggyRxqa8?d9mxiQ+uP0724dJ-HMicZYImnAicxORV*&~=$6=! z2FkD|jC`|1>Cc^XK179SX06+fxNNKqZj!n0o?@_xlwfjNw^dr2;!~8Vwu78|bURGB z_v!``Pgt1~rQazJ)E)RMLD-TtYtJh8d2U2*UhqWlHYf6{yyhRz^djX4j*lkqw|sOY zzj3GfM*?BDMVoi~GGuL6dDrE7Q`Zh*sta}8N#dKrc5CHauB`zn3J6u)$py;nP~MxF zl8wqcGFNN)s<5cG>}21#v!t%QW}XqYp1O^-YL0_od+fYdl=!#TKmB;z8_y|qxd!z3 zUTG4vy*{EA#_4ZtMd^|%Qg&00DBeg`oHymL6Yh(UDHU;@+4=`C{4o8S)^&dc4v3n} z%al?(1EFP1T#cKakTj6{8L=el-q~I6_V%_nE?0{lRa-1G+CF>*Ut(DKz?^DI*6)`Y z|De&n-cTRz7V}0$i@7@Ci-bE6Otue{iv^*e?B5^>w76$WPhrsNbs$Ao;@n0kKwYG7 z9bZFk9qpV+JKV&XRLGT_F|s^U5)sdJ#OQM^b`h9_a1OxJlecE zkTm!Igg*$QA&)%yA=A`#fhD8UF%Bk~8YJ0ro@{<%cM_^x`;4O+%x4EM&6wtw#P{V) zApLJYeG_ov8*yhHr*Ijv0#GA~b^h;& z37O&!6dJv{A?lOl?}@H#h{1n7h#!Rm=9;Bisja#thI|*z<18hvbED=#n5y^c16v$_ z9X%Y7ke)pLYCu9dtU*)z@een{4vp2l0{TKv z6BWs$g|{b&nChAH0^W11NVWPI}eESb;KB)eMsUP*;c7R91mkv>S{m^&kj zj;Sj(hp@lEe@lr`OZ#Ds`17r|Hqi{?QC@47I)244-WdH+VQ7KV++cRN(Y3Ay*CYze04?kv1HNlA)<^L{)F5 z1w^d0VcehhiB&|tpCGas{S3Np6sz>Fs`mJUVu_&Zot*)Uvu^|>+`jV}ZIwg=_Mmz8 zr^UncCCX;2lB9uhL5$nRYhPL2lsnTanG zNf7&j7%@T`s+-`V!BT-Oh!ap2x=<2}G&gn@Ka(D3qbByJ$=XB*?xcU$XaJ&^fYus9 z+U?3=*Aa3`^1i+fb88Il&Bx1ZbZNj|m?p4PV(*k_f9wTa^OgD%o}XYb!}<6SUTh&a zBA2Y>y9lNWxAYb7C0n)1{-L}t&VP%%?p<&p>+^k=*n1@T;-kIrxJ-!9dV9Z`xay1W z~x$QU}6Dd+pE1Rzm5$o)O>h z4okB3AwtN}N`53N(_?r`ugV=TB|6CdgvD;p-NbCHl=rnjKCHhP#Yf+C{dz)&k&t6g z0Yda`*Sk3RJsR`}e76*YRW&%(lH0>AC>hO^u$`c#zguNr54R(;SjA`;swYOgdXlS2 zqPQv#IuZqL-C-VNTDvz|-nn9;On>c3%=tdJp+@|iTOvu8HtWyMX6;-Dw|?(jc|VpX zR*d#cP(4@JJ#UenSWz~z4h;tMAPoCPglC4M{yka?>^Y=q*Iz_49#3b6f@n(y;z+cn zRftJFtQD6qf}wu;T)^_uR2Zk_ zrGnh;(iK!F&F^+;pMUAi?PuDuF=duOayx0HHi@~BMumepxh`u4q_JGzdG|u1T7ch;#$clw^LJykEPthx5+hrcoQO z8F5U!@+YvF#YJAfI`A0k!!J3|7#(7*o=jNB<5*!dPA9j?`h-;K6RcgR>k75*Rbw5< z;g~&Hs}`%?0QN{pGK5WQRCQ82B07=|e3iEJyI%FibB~a8Yfgo`D(6|_Ac)U%bS3SG z3nBo1i^JoDeWKg;q&d)XYe=lHrD1pZ36PPAD?sx*7B1yLFVQU`r)|pexAvwO-pHx5 z!mrJkT|>HRH^#+V4|dkb(vF>bzplX#FzSAOc-LjkdNng8s)IlHAbIs{iX)Z{%dwgK zjvDV!c)fz=j2)c!%O!5UBK%->4n3-%vdc-)u(O2u5m2%nw!hn*p>&b&j7V{21lB53 z5PZB9cH3yUl*7-b?p4l#)2aQ5|8Ou+_LPalf`(InUXOfopzPAfqAlqW>9prTWk#F9 zoZ$(xs<*;C<2KKAaKvmHWK$v`QbX7wsS4q_v*|^HZQo5-AFEVrLIM{dhtfpRXFiek z?9vBZ^sKfHElai6`0AbyG&>!drIL0WW0`ulv(5C`s>o?TXUTjGW4dG??ES;u`GIS+ zg}1Cu)wYD|=LNYibGHHro3#d|9_X#nzP9=HLar_|X&oMh7g>Kxa|l@^p7zUY(%>`R zu`1(rn#qD!RW|x*uH_L%;xh1w)J)sVe%e13Gfog?7_+DDK*eIZfQ&N zt0E*#W_1$ODTdzLo|g4V{b9d4DDSQ5k@xn+58soLu3tF5^W6C&m>#MQm#SdXeG!DO zg8Thc#N(`{8fMI6c7izu^Zja@YcHuw9NDRbTAGLod|J5MOciXH{*ucc=6cG^ln zNR}(FRW_y_CmJ*DnVBdx_=2i7k`f+aNVP038pdTb)#o}SVNCn2CwJ_YgmcAc+IMa! z)DodU8q}7$x#-_5=FyT036A!(cJs`idu3Zik{--5pmfjMcP=r0cB9rOIlhdf+L&lm z_-ODbL`=!^hY!DE`RC!_5onE6cufL0s2Qm!*TH^4%9D>#Unqoi?&!sPIO1_mVwpdS zy4`HTKU=xGioCwZqItYg4X8`PRo+Lyq!477#xJN;zb4TjeAenfiBs*XO6Z#(9!$yYXV zO*5#u&L_*+B0&_(EwO8=z*AoZO3GTZWAKS-4fta6nEt^DT)8o?BBa3A-xBSZxJiL#hgGIw+Q0xns%Ylx=T7WjB6a*$4!cbEfJ4z5M_= z3KP5i`-7g?SiGd)RDBMb{XO!XxN6(i4|lNy!?sXwpPC~Sbmz!A;~vZrqf&l+q7KJY zaU=vis>kQ;$aohmL#*4it=68anU(>qV~hMIn>OTCF29vYYBiO2uAS1dgcF!|(GHW= zP?b`RKB8M}w~-1HXYAHfXC<0LfZC9}2fh1#JgFi;`GG?uLv%508&3%26Uv~JRZf{MQ*Pe=b5ftcm_cqUGOz{nQhp51f_eWp)izw*V3ZBg`VJe22qQ) za*)g`1el{5fx|$)8B#?;aA2@hT#rHEyHMG-(W}By3#V7*MQXa8YlGuiu{Q1!GdTsi zpVZtvW+c2JEG`r*T7*#oM_0}1@f+4-d}dUgRZRl~Qax-4#S!mIm!RLIWQWIcrpCkY z+hk4joa1P^36uvXCj~zcy;$FxgBJFg;dMfcPCMA}>fum^_UOXsGZo57z(#fxE-su) zVBs|r3fSon65)7W-bO<)4-=0qov2#U-nJ$F69bkRPqjLQ7E^gkz$J%vo^h$aW9BPG zp2E2P$D+vBKP2yAlDZ>uUbp&k>W`gnS)x)i(+`~-;>QpK`)UL_=BBIV`y#K}!`0fl zWZYOHPIm@&XeR52)>O6>y%MXZw0uE6UT^H~3_eXfpE@PZ>x3a3z)-+HQd*UEDa1Oz zJO%1f?xXygRn6jN@72DnbfYa70a(({kGJtP^Wn~YU9U@-X{iBARbK1v1 ziE^kF@EsiT=9JWsH}cZgnMh@XVdbVgL|QULx(%61>|c$MgkZFG3^b!OfZOizou`JQ zBe+$TBu`z|h*;a%=)(8{Ga{Kdl;XqCQ9l<0T`Cg6gAmuoq#CZ)>>pPxz~CZ>`uy8= z$>be|XPhdwH>{!A3-Cz*M+wpt=znfR09LgTG5ilC;Jg7NfI=m!V}fwMe5y}nqogaD z>s7f~xycGOCGGVt0=ROBH?zPkv2l)O;QY?aCp((tF@v%Il!RZdlbeE-7@X__S;q#c zL7?8?!bkMAPR4>nUdZH#yb$bb(Hhos+M3^#x67~+vCjj=$vts9^4OJ{L>l;MyK!D{ZAMJss;YOo!cXJrCx;@15fM@&7}V}dc*`9T%c@&>#~>)K z?=RTM=}SHw+R^GyvCbMoTcYyqiqCpO(*2oPhLSba_ehRNN9p^Eyl+atqW=#5Ch;Jw zj0DU}>z5i=iDC5<%bCmbcf!=!{vKAj7%AVRTf`AjE%a*B0%S!@27!6N#;)$ENUmlx zC{32CpHcmE&9$dRp@0ty=eZ*YDBVKbSgJai1lx`k+VsBGFwXhjjPgA=X|g&lc4poD z0ig14n?U()E+2Q`Q~H#(pFH57FP{fz54-)p1P}6VM(a|DP6%&@yMyH<_Q+yX8EF_x z-r*V;^_pZZqM^jpS2ILs!yg!Q$x@}6vBAHh`|WjJ6KdJH6E)L zl>+6<{8PrE?a+u3PbJl^iNK67F~=4xS+3lv!mOK4$G$ZRRU^SEBod8=f>mi$31Cj& zk<;=>@z+l3uCqbh!T#bqL->Tz_DREJ-}C@*8pcZm#T_Y#!P2? zccEpmWW`tRQ3j7xoS;doOE63`15uUNE{Ae$Q)%A_t3uR{O_b|kPIzcYI@Nbn63AvSn9lLabO)SXikY9#vS%73Xhs!C5`EQNf;bS1tqo zR)Sx1>8bh_qpHDd9dvpv?CIZ-S~d1%?G5jItJ~)}xN?X7kerELIlR?YK6|*&!MYuxfEuTfF)_u=qNfS?<-X?>37P zuD2F#x7KZSuD2D_Q{0ZUsld*dbtDiAONecGgVqXC*e-Pjf^&EtXb{WUf%@jCk?Sc5 z)>pr-l518a*A`%s0mI(XzkeQJ8%#A7^-R59HyuS)Gq{6iFD}``w8{9VuR~qq_ii`i z#T0z}E6tjiLT{9Xm9iesf(NGMps^y^-NLzt9N(#XkiY|a$4pYIJ(&p@ls&EjZ+5#u!m5<&B%rwX z2@OKdb67pdbPP*f#xj3Wu{dy^klgV6tA>6U+_R&GrP3LZ1|r;I%`FmTNXi6J>3<&# zNV;EdLR>7{C@7Bx15F#OxL+3(wHv)AQ}!ef=ry<0Gh0#JUcnVL+^1pU3K?O%Mnek4`D})Xw`65YkXR&Sg>3qcQ63wuhV_7D$D2iu$v_twOfDy z(9EtC7q8kHrbDqshxP{H-rP>zMrZ%pu%q?7*yX#a+%nzCJrywbcJMhu>IEF_o|fAs z?tq@nXT@^!3c3?t1~={sV?HGpclxM31}$I@+3G*}MBo)&4K8fO$=-#7XFJOjAfJs0 zE4ogD=AQBh)G;0y@X!vTZUu?DnN)6#5oVe7`D}#fVaqj(F$7tFp_{p zpTMz!=}8vfV=HET`d9jKnv zGUAW!&U=@tjO44ki=K&n#-G2G&oB4;@UxcK|Mvx^u|QCi(_XR>5Aa(#qIZ2YO{2*H zFbP6$^9sPsI{+y(*O&3-AwEhf_$Xmo2j-dE9>`3ZCrpfX!eKa9CzJ@W8Ipo#@@J|e zDwzo%&+dr9YH+*L)2qG#x?_kCy!3QnyX=qkvxnP@YROfPyo4|dkTvGr`uB8eALJP9 z1jY@ywlrL8qxCl3tdeZAwjKOQONR7GzX*N^3@$3MH1ag8i1)wP z&8sMbw_|;dO~`msf9fwFSX5u%3l zeFQvJ*~hZ60Y@Oy#b1?b*0N_1uY*r<4@_-UX23lN_ti{RkT=zoRMT&QzJm-iJCxDz z19pqlHM66pKoUyAocl{OjbR2WY|Py*cL)gIo9m#>avY?FQ#BhQlC@&98}Xb}%Ztm{ zpGQ>(+3so1EOtqM8O129Uq8tPSh`6w8Nh>+U8anJaz`q|ge|D4YI})yg{O$qdJ|@G z3kiNY-Z*&#LW%$M1RM!hSKby{3xupRPW${|nz{5RCiE`o_YF)=%>~2Ik#m zUR7`=h-5mw@F0J@jHPwDP$iu8@}>b12=4cY){`1(GTh<&Ob`<%MwVL|X3wBDCbA!n z(e4a9vmJMHppTryzxZ)B%;?pN_7CPx~pk3?WBQ!i&V~D>umV3V*0$SQ(&Kj=S zJk}oLyVKCuJS1xS*UoFKX>#1Mdva^a=T-gm1MRFWO_keCv#A5wy22JY))rz1(2UA% zrOA{%b+py|u(iUK~+gb1g#YjCED<15b- z%?cyPfpThV(8h|cl5sYcz_*Jn`kuXheg2G7h`mloPdYuFx>eGuhR9X8_DcU{zSqh& z#YcN3n&YtA&`3HcPh%dug?QTab z1P?>A#YvbjtRQc-q%R?&iROI~jZJn5OabXZuL9UGaauoF+$8y)I0wSeLA7|r z0VLDE<+ag-GZJWnq`yLV>?n(Hae4J@KFh95fb-BxhB&qFW#w`_TP;TFL?AD5J+FWyKYN7dJwjjc8($no`Q!d*|$QzCu?_?SU42h2KubOtgt2Q>uRNwZh z{^5-=Eta3xLTCWOKGKwv=Ob;}T!<$0`*yY}avtSoAK=6>8k#I49-pBp3v(RP#3wS+ zM3Pw1)$ARF~qkgK>dPH1}4AtqKe#(%P4O9Eg3n48BktV6xey zL?|UxxBLLFk5z{&+t2OgI+V@ZlU+cw$Y}5;6p1>XQ=|4u07>p&)^DL`LCl8vQcJD7 zy5iNm*;l`6mfh3Wo(6jBdZ%8u`3m-lM_P~p0XU{^qFz#a1et|)83||{08ZF#l2PL( z6;|9#IleF9R8^=1Vcn&uk`;7Oxs6X+Hb9#H@|2(i!d z7~jU5@Y1P2O9d0%$(?w8)zkI#_j>n|ZpefgMo%ZZTI-*m@M7?c173Mz0S zPQ2QB_~h*CFE0RoPitu+f8ZltujtF}6a{THlh$ei%)qQZKx%AmrmJwRm*y8~QaY?T zj@+0K;676Glke!Oj3;o7%%%cDn)Ms3KRDw2kT`+jLGcV#iUnFV^ys_1i_{@X!tj}) zc?$Qbu*~4UCYQ_eJU;2c6{1b29mGLG_gZ%N^taSyjQ^WY(U-&i(f6(2an9dC8c})s zq`}givrf&zggwH$nk{xK-OzBNL{*u@ytr?8YASoKkZ6zWHVL?OM9-1wi;bvpWcr3uIVMqT63ex9DfA+^53BpEB4MA#_ ztnYjPlex}7n`o1~vU*Q#yJm}yfI%}T`zxr3B2T6*2GF}}hD1pDp8xq` zQRK5^Q^49GnI!u3lcgP++V8A@|8&OJn@*RV;WPwM;yW=x>X*{4Upk+v(|ZkI>D0IV`;07En**Cut>^sHYO z>SY!Z-)Q{-$0eJvmsr0=RZvYAjYvbhWJ@<(QYU-wPKhvq)Ap=4-$5GK_=@Xk| zBsjU5?>ht!M?J@;Iu9-ikyBf~J77QY+DfIm*l|-gDk`?;#^V9lAc+WnFW$o@JKL=0 z^pj)hjdweagaAPjhLn@IGYHu)z0xv#_CSK+baPmSh$+_3z!MLX%Ss;hU6~MZ{^B-9v?$m&V)TlK85?VEL z2zgn*PX0Offr9PEQt-xU`~cJ{uC3=th3O&jlI%~JT%=T{y7pVcQya!6@Dsmj@#jv7C*qh zIhOJ6_K0n?*d`*T7TDuW-}m`9Kz3~>+7`DUkbAraU%yi+R{N~~XA2B%zt-4=tLimUer9!2M~N{G5bftFij_O&)a zsHnOppFIzebQ`RA0$!yUM-lg#*o@_O2wf422iLnM6cU(ktYU8#;*G!QGhIy9+ZfzKjLuZo%@a z-i@9A`X%J{^;2q&ZHY3C(B%gqCPW!8{9C0PMcNZccefK){s|V5-xxtHQc@uf>XqhD z7#N^siWqetgq29aX>G^olMf=bbRF6@Y(}zYxw6o!9WBdG1unP}<(V;zKlcR2p86fq zYjaqB^;Ycq>Wy@5T1xOzG3tucG3e%nPvajaN{CrFbnzv^9&K3$NrDm*eQe4`BGQ2bI;dFEwyt>hK%X!L6)82aOZp zsrGcJ#7PoX7)s|~t6is?FfX*7vWdREi58tiY4S)t6u*|kv?J)d_$r+CH#eZ?Ef+I_ z(eVlX8dh~4QP?o*E`_MgaNFIKj*rtN(0Raj3ECjSXcWfd#27NYs&~?t`QZFT}!Zaf=ldZIhi}LhQlqLo+o5(Pvui&{7PD__^53f9j>HW`Q z_V8X5j~$|GP9qXu0C#!@RX2}lXD35@3N5{BkUi%jtaPQ*H6OX2zIz4QPuqmTv3`vG{zc>l3t0B9E75h< z8&twGh%dp7WPNI+tRl%#gf2}Epg8st+~O4GjtwJsXfN;EjAmyr6z5dnaFU(;IV~QK zW62fogF~zA``(Q>_SmD!izc6Y4zq*97|NAPHp1j5X7Op2%;GLYm>^HEMyObo6s7l) zE3n|aOHi5~B84!}b^b*-aL2E)>OEJX_tJ~t<#VJ?bT?lDwyDB&5SZ$_1aUhmAY}#* zs@V1I+c5md9%R-o#_DUfqVtRk>59{+Opd5Yu%dAU#VQW}^m}x-30ftBx#527{^pI4 z6l2C6C7QBG$~NLYb3rVdLD#Z{+SleOp`(Lg5J}`kxdTHe(nV5BdpLrD=l|)e$gEqA zwI6vuX-PFCtcDIH>bGY2dwq&^tf+&R?)nY-@7_j%4CMRAF}C9w%p86W<2!aSY$p+k zrkFtG=cGo38RnrG28;?PNk%7a@faaXq&MS*&?1Z`7Ojw7(#>}ZG4nMAs3VXxfdW>i zY4VX02c5;f7jDPY_7@Oa)CHH}cH<3y#}_!nng^W+h1e-RL*YFYOteC@h?BtJZ+?sE zy)P5^8Mregx{nQaw1NY-|3>{Z)|0`?zc?G2-acYiSU`tj#sSGfm7k86ZQ0SQgPevcklHxM9<~4yW zR796sisf1|!#{Z=e^)0;_8iUhL8g(;j$l=02FTPZ(dZV@s#aQ`DHkLM6=YsbE4iQ!b#*374l0Jw5;jD%J;vQayq=nD8-kHI~f9Ux|32SJUM`> zGp2UGK*4t?cRKi!2he`zI#j0f${I#f-jeT?u_C7S4WsA0)ryi-1L0(@%pa^&g5x=e z=KW9+Nn(=)1T&S8g_ug%dgk*~l2O-$r9#zEGBdQsweO%t*6F4c8JC36JtTizCyy+E4h%G(+ z5>y$%0txMuQ$e~wjFgN(xrAndHQo`Za+K*?gUVDTBV&Ap^}|{w#CIq{DRe}+l@(Ec zCCV6f_?dY_{+f{}6XGn!pL_up?}@>KijT^$w#Lb6iHW&^8RP~g6y=vZBXx~B9nI^i zGexaPjcd(%)zGw!DG_dDwh-7x6+ST#R^${iz_M$uM!da8SxgB_;Z0G%Y*HpvLjKw; zX=ir7i1O$-T|*TBoH$dlW+TLf5j5sep^DlDtkox;Kg{Q%EXWedJq@J@%VAcK)j3y1 zShM!CS#qax;D@RND%2t3W6kv+#Ky0F9<3YKDbV^XJ=^$s(Vtza8V72YY)577nnldI zHMA0PUo!F3j(ubV*CM@PiK<^|RM2(DuCbG7`W}Rg(xdYC>C~ z;1KJGLN&$cRxSZunjXcntykmpFJ7;dk>shY(DdK&3K_JDJ6R%D`e~6Qv67@Rwu+q9 z*|NG{r}4F8f{Dfzt0+cZMd$fvlX3Q`dzM46@r?ISxr;9gBTG2rmfiGOD*#c*3f)cc zF+PFZobY$-^}J8 z%n=h4;x2}cP!@SiVd!v;^Wwo0(N??-ygDr7gG^NKxDjSo{5T{?$|Qo5;8V!~D6O;F*I zuY!gd@+2j_8Rn=UWDa#*4E2auWoGYDddMW7t0=yuC(xLWky?vLimM~!$3fgu!dR>p z?L?!8z>6v$|MsLb&dU?ob)Zd!B)!a*Z2eTE7 zKCzP&e}XO>CT%=o(v+WUY`Az*`9inbTG& z_9_*oQKw;sc8{ipoBC`S4Tb7a%tUE)1fE+~ib$;|(`|4QbXc2>VzFi%1nX%ti;^s3~NIL0R}!!a{0A zyCRp0F7Y&vcP&3`&Dzv5!&#h}F2R-h&QhIfq*ts&qO13{_CP}1*sLz!hI9VoTSzTu zok5pV0+~jrGymE~{TgbS#nN5+*rF7ij)cnSLQw0Ltc70zmk|O!O(kM<3zw-sUvkx~ z2`y+{xAwKSa-0}n7{$I@Zop7CWy%_xIeN1e-7&OjQ6vZZPbZ^3_ z(~=;ZSP98S2oB#35b1~_x`2gWiPdIVddEf`AD9<@c_s)TM;3J$T_l?pr{<7PTgdiy zBc5IGx)g~n=s+Z$RzYCmv8PlJu%gkh^;%mTGMc)UwRINVD~K;`Rl!5@hhGg;y>5qj zq|u-Yf0q_~Y+Mbivkkfa0nAOzB1acnytogsj_m7FB(-FjihMek#GAU4M!iXCgdK8a zjoKm?*|iz7;dHm4$^hh(`Ufl>yb>$hjIA-;>{>C}G0Di%bGvUsJkfLAV|xq32c>RqJqTBJ3Dx zYC;*Dt|S$b6)aCJFnK(Eey$M1DpVV~_MIhwK> zygo(jWC|_IRw|456`roEyXtkNLWNAt-4N1qyN$I@DvBzt;e|?g<*HK1%~cq|^u*}C zmMrwh>{QAq?Ar~4l^DqT%SQ)w)FA(#7#u+N;>E975rYML>)LgE`2<7nN=C1pC{IkV zVw}_&v6j&S?QVh*)wF3#XmE@0($^BVl1969csLKUBNer{suVd!a~B!0MxWY?=(GD6 zy$G&ERFR#i6G4=2F?R4}Mz3B?3tnpoX3)qFF2sh9-Jn*e%9F>i{WG7$_~XyOO2!+@ z6k+38KyD@-0=uee54D0!Z1@B^ilj~StchdOn(*qvg~s5QJpWGc!6U^Aj!xt-HZn_V zS%|fyQ5YS@EP2lBIodXCLjG_+a)%En+7jzngk@J>6D~^xbxKkvf-R0-c%mX+o{?&j zZZ%RxFeav8Y0gkwtdtrwUb-i0Egd2C=ADu%w5VV-hNJvl)GZ?M;y$!?b=S+wKRK7Q zcOjPT!p<*#8m;TsBih=@Xc&c)?Vy`Ys>IvK@|1%N+M6J-^RCRaZcPP2eQh9DEGZr+ z?8B~wF14mk4Xkuen{wY^CWwS1PI<8gikY*)3?RSo5l8es4*J z43k_BIwc}of=6Pfs%xIxlMDGOJN zvl!a>G)52XMqA%fbgkZi%)%bN*ZzZw2!rn4@+J)2eK#kWuEW{)W~-`y1vhA5-7p%R z&f5N!a9f8cK1Xa=O}=9{wg%}Ur^+8Y(!UCeqw>%wj@|bYHD-bZO~mk3L$9_^MmF3G zvCiK^e@q6G?tHkM8%GqsBMZaB20W$UEt_5r~jc#WlR>Bv{6W>A=!#InoY zLOd04@Rz?*7PpW8u|+}bt`?+Z(GsX{Br4A2$ZZ(26Degmr9`O=t2KgHTL*==R3xcP z&Y(J7hC@6_x8zVz!CX3l4Xtss6i7r#E6kXMNN1~>9KTRzewfp))ij%)SBBl0fZdYP zd!zzQD5u8yk-u|41|Rqz7_tCFUMThZJVj)yQf6^Cwtn|Ew6cm5J|u1Bq>MWX-AfB&NE;C z62@=-0le`E6-CurMKjoIy)BuUmhMGJb}pPx!@GLWMT+wH2R?wA=MEy)o57~feFp8P zY@YXAyt4<1FD<|iw{FGQu~GEI<4C64)V*QiVk+VzOV^9GWf4ir#oYgHJz!wq>iZV#_6@_{)&lum)4x z_Of*CLVQ7wdT#XT-(h0qH%mcIF7yzMIvvTN3bPceK>PpJi(=3Nny zbSn}p$dGKQUlX&-t~RR)#F7I<8NCD^yke(vdf#4^aAh}M-{tS9-&^tC4`KU_pToXy z+|K8sx}a)Kh{h{;*V1#hs1xB%(?j>)g~`Wv(9F)f=Qn)(daVB7hZtcp^#LrEr1T1J zZSJ*lVyVVjhy)mkex9Whn=EinKDHe@KlfQI-Fl7M?-c~HnW0;C;+MbUY8?FToy;A+ zs&Nc7VZ=Of+e!G6s#+S5WBU)kgQq_I1@!uH74GJ-+O|%0HXm9Mqlvp|j%0`T>fr9^ zK;qo>XdwZW<>%tTA+<(1^6(>=-2N;hRgBnjvEjN;VbKMbFg--WrGy|XESoH1p|M4` z86(gC^vB4qScASZ&cdpT{~QDN-jC|GJ(RYoW1VW4!SSn- zhQds9&RBKn6M&GVK_Aayt(Hekbnw=tr>f z^o@v9_*iQO1*zeOrts9Q-$pc@!StS&kz$cF`s@pM`rmJXTP&h5G)A74!0e%ZJbl}( zssI|_!%~_hZFypv*S^JE5N&Kvmx7KiG<|fGMO=WrH+@Yhuj+KwiS#l4>@%2nl zS)mDikfmokO4q2A)hRVZBq2-5q&XC>%HOLkOYxZ66(s86?=0s4z5xbiOV)}L-&6b)h6(~CIaR#JNw~46+WBiU7IhB zq!NuR4!TsYnyBg>@G=Ib*cMq^k<}AMpCeYEf&dzfiGI-wOQ7hb+nA zkN7_){y&c3xC0 AQ~&?~ literal 0 HcmV?d00001 diff --git a/public/assets/rails.png b/public/assets/rails.png new file mode 100644 index 0000000000000000000000000000000000000000..d5edc04e65f555e3ba4dcdaad39dc352e75b575e GIT binary patch literal 6646 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 AQ~&?~ literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 00000000..e69de29b diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 00000000..085187fa --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,5 @@ +# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-Agent: * +# Disallow: / diff --git a/script/cucumber b/script/cucumber new file mode 100644 index 00000000..7fa5c920 --- /dev/null +++ b/script/cucumber @@ -0,0 +1,10 @@ +#!/usr/bin/env ruby + +vendored_cucumber_bin = Dir["#{File.dirname(__FILE__)}/../vendor/{gems,plugins}/cucumber*/bin/cucumber"].first +if vendored_cucumber_bin + load File.expand_path(vendored_cucumber_bin) +else + require 'rubygems' unless ENV['NO_RUBYGEMS'] + require 'cucumber' + load Cucumber::BINARY +end diff --git a/script/encode64.rb b/script/encode64.rb new file mode 100644 index 00000000..0519f4cd --- /dev/null +++ b/script/encode64.rb @@ -0,0 +1,10 @@ +require 'base64' +d = nil +File.open(ARGV[0], 'rb') do |f| + d = f.read +end +b = Base64.encode64 d +File.open(ARGV[1], 'wb') do |f| + f.write b +end + diff --git a/script/rails b/script/rails new file mode 100644 index 00000000..81eab02f --- /dev/null +++ b/script/rails @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby.exe +# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. + +APP_PATH = File.expand_path('../../config/application', __FILE__) +require File.expand_path('../../config/boot', __FILE__) +require 'rails/commands' diff --git a/spec/controllers/admins/sessions_controller_spec.rb b/spec/controllers/admins/sessions_controller_spec.rb new file mode 100644 index 00000000..9f303bf0 --- /dev/null +++ b/spec/controllers/admins/sessions_controller_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Admins::SessionsController do + +end diff --git a/spec/controllers/artists_controller_spec.rb b/spec/controllers/artists_controller_spec.rb new file mode 100644 index 00000000..ea5123de --- /dev/null +++ b/spec/controllers/artists_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe ArtistsController do + + # This should return the minimal set of attributes required to create a valid + # Artist. As you add validations to Artist, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all artists as @artists" do + artist = Artist.create! valid_attributes + get :index + assigns(:artists).should eq([artist]) + end + end + + describe "GET show" do + it "assigns the requested artist as @artist" do + artist = Artist.create! valid_attributes + get :show, :id => artist.id + assigns(:artist).should eq(artist) + end + end + + describe "GET new" do + it "assigns a new artist as @artist" do + get :new + assigns(:artist).should be_a_new(Artist) + end + end + + describe "GET edit" do + it "assigns the requested artist as @artist" do + artist = Artist.create! valid_attributes + get :edit, :id => artist.id + assigns(:artist).should eq(artist) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Artist" do + expect { + post :create, :artist => valid_attributes + }.to change(Artist, :count).by(1) + end + + it "assigns a newly created artist as @artist" do + post :create, :artist => valid_attributes + assigns(:artist).should be_a(Artist) + assigns(:artist).should be_persisted + end + + it "redirects to the created artist" do + post :create, :artist => valid_attributes + response.should redirect_to(Artist.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved artist as @artist" do + # Trigger the behavior that occurs when invalid params are submitted + Artist.any_instance.stub(:save).and_return(false) + post :create, :artist => {} + assigns(:artist).should be_a_new(Artist) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Artist.any_instance.stub(:save).and_return(false) + post :create, :artist => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested artist" do + artist = Artist.create! valid_attributes + # Assuming there are no other artists in the database, this + # specifies that the Artist created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Artist.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => artist.id, :artist => {'these' => 'params'} + end + + it "assigns the requested artist as @artist" do + artist = Artist.create! valid_attributes + put :update, :id => artist.id, :artist => valid_attributes + assigns(:artist).should eq(artist) + end + + it "redirects to the artist" do + artist = Artist.create! valid_attributes + put :update, :id => artist.id, :artist => valid_attributes + response.should redirect_to(artist) + end + end + + describe "with invalid params" do + it "assigns the artist as @artist" do + artist = Artist.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Artist.any_instance.stub(:save).and_return(false) + put :update, :id => artist.id, :artist => {} + assigns(:artist).should eq(artist) + end + + it "re-renders the 'edit' template" do + artist = Artist.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Artist.any_instance.stub(:save).and_return(false) + put :update, :id => artist.id, :artist => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested artist" do + artist = Artist.create! valid_attributes + expect { + delete :destroy, :id => artist.id + }.to change(Artist, :count).by(-1) + end + + it "redirects to the artists list" do + artist = Artist.create! valid_attributes + delete :destroy, :id => artist.id + response.should redirect_to(artists_url) + end + end + +end diff --git a/spec/controllers/authors/sessions_controller_spec.rb b/spec/controllers/authors/sessions_controller_spec.rb new file mode 100644 index 00000000..09824840 --- /dev/null +++ b/spec/controllers/authors/sessions_controller_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Authors::SessionsController do + +end diff --git a/spec/controllers/baloon_templates_controller_spec.rb b/spec/controllers/baloon_templates_controller_spec.rb new file mode 100644 index 00000000..34c28974 --- /dev/null +++ b/spec/controllers/baloon_templates_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe BaloonTemplatesController do + + # This should return the minimal set of attributes required to create a valid + # BaloonTemplate. As you add validations to BaloonTemplate, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all baloon_templates as @baloon_templates" do + baloon_template = BaloonTemplate.create! valid_attributes + get :index + assigns(:baloon_templates).should eq([baloon_template]) + end + end + + describe "GET show" do + it "assigns the requested baloon_template as @baloon_template" do + baloon_template = BaloonTemplate.create! valid_attributes + get :show, :id => baloon_template.id + assigns(:baloon_template).should eq(baloon_template) + end + end + + describe "GET new" do + it "assigns a new baloon_template as @baloon_template" do + get :new + assigns(:baloon_template).should be_a_new(BaloonTemplate) + end + end + + describe "GET edit" do + it "assigns the requested baloon_template as @baloon_template" do + baloon_template = BaloonTemplate.create! valid_attributes + get :edit, :id => baloon_template.id + assigns(:baloon_template).should eq(baloon_template) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new BaloonTemplate" do + expect { + post :create, :baloon_template => valid_attributes + }.to change(BaloonTemplate, :count).by(1) + end + + it "assigns a newly created baloon_template as @baloon_template" do + post :create, :baloon_template => valid_attributes + assigns(:baloon_template).should be_a(BaloonTemplate) + assigns(:baloon_template).should be_persisted + end + + it "redirects to the created baloon_template" do + post :create, :baloon_template => valid_attributes + response.should redirect_to(BaloonTemplate.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved baloon_template as @baloon_template" do + # Trigger the behavior that occurs when invalid params are submitted + BaloonTemplate.any_instance.stub(:save).and_return(false) + post :create, :baloon_template => {} + assigns(:baloon_template).should be_a_new(BaloonTemplate) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + BaloonTemplate.any_instance.stub(:save).and_return(false) + post :create, :baloon_template => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested baloon_template" do + baloon_template = BaloonTemplate.create! valid_attributes + # Assuming there are no other baloon_templates in the database, this + # specifies that the BaloonTemplate created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + BaloonTemplate.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => baloon_template.id, :baloon_template => {'these' => 'params'} + end + + it "assigns the requested baloon_template as @baloon_template" do + baloon_template = BaloonTemplate.create! valid_attributes + put :update, :id => baloon_template.id, :baloon_template => valid_attributes + assigns(:baloon_template).should eq(baloon_template) + end + + it "redirects to the baloon_template" do + baloon_template = BaloonTemplate.create! valid_attributes + put :update, :id => baloon_template.id, :baloon_template => valid_attributes + response.should redirect_to(baloon_template) + end + end + + describe "with invalid params" do + it "assigns the baloon_template as @baloon_template" do + baloon_template = BaloonTemplate.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + BaloonTemplate.any_instance.stub(:save).and_return(false) + put :update, :id => baloon_template.id, :baloon_template => {} + assigns(:baloon_template).should eq(baloon_template) + end + + it "re-renders the 'edit' template" do + baloon_template = BaloonTemplate.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + BaloonTemplate.any_instance.stub(:save).and_return(false) + put :update, :id => baloon_template.id, :baloon_template => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested baloon_template" do + baloon_template = BaloonTemplate.create! valid_attributes + expect { + delete :destroy, :id => baloon_template.id + }.to change(BaloonTemplate, :count).by(-1) + end + + it "redirects to the baloon_templates list" do + baloon_template = BaloonTemplate.create! valid_attributes + delete :destroy, :id => baloon_template.id + response.should redirect_to(baloon_templates_url) + end + end + +end diff --git a/spec/controllers/baloon_types_controller_spec.rb b/spec/controllers/baloon_types_controller_spec.rb new file mode 100644 index 00000000..f24963e4 --- /dev/null +++ b/spec/controllers/baloon_types_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe BaloonTypesController do + + # This should return the minimal set of attributes required to create a valid + # BaloonType. As you add validations to BaloonType, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all baloon_types as @baloon_types" do + baloon_type = BaloonType.create! valid_attributes + get :index + assigns(:baloon_types).should eq([baloon_type]) + end + end + + describe "GET show" do + it "assigns the requested baloon_type as @baloon_type" do + baloon_type = BaloonType.create! valid_attributes + get :show, :id => baloon_type.id + assigns(:baloon_type).should eq(baloon_type) + end + end + + describe "GET new" do + it "assigns a new baloon_type as @baloon_type" do + get :new + assigns(:baloon_type).should be_a_new(BaloonType) + end + end + + describe "GET edit" do + it "assigns the requested baloon_type as @baloon_type" do + baloon_type = BaloonType.create! valid_attributes + get :edit, :id => baloon_type.id + assigns(:baloon_type).should eq(baloon_type) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new BaloonType" do + expect { + post :create, :baloon_type => valid_attributes + }.to change(BaloonType, :count).by(1) + end + + it "assigns a newly created baloon_type as @baloon_type" do + post :create, :baloon_type => valid_attributes + assigns(:baloon_type).should be_a(BaloonType) + assigns(:baloon_type).should be_persisted + end + + it "redirects to the created baloon_type" do + post :create, :baloon_type => valid_attributes + response.should redirect_to(BaloonType.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved baloon_type as @baloon_type" do + # Trigger the behavior that occurs when invalid params are submitted + BaloonType.any_instance.stub(:save).and_return(false) + post :create, :baloon_type => {} + assigns(:baloon_type).should be_a_new(BaloonType) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + BaloonType.any_instance.stub(:save).and_return(false) + post :create, :baloon_type => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested baloon_type" do + baloon_type = BaloonType.create! valid_attributes + # Assuming there are no other baloon_types in the database, this + # specifies that the BaloonType created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + BaloonType.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => baloon_type.id, :baloon_type => {'these' => 'params'} + end + + it "assigns the requested baloon_type as @baloon_type" do + baloon_type = BaloonType.create! valid_attributes + put :update, :id => baloon_type.id, :baloon_type => valid_attributes + assigns(:baloon_type).should eq(baloon_type) + end + + it "redirects to the baloon_type" do + baloon_type = BaloonType.create! valid_attributes + put :update, :id => baloon_type.id, :baloon_type => valid_attributes + response.should redirect_to(baloon_type) + end + end + + describe "with invalid params" do + it "assigns the baloon_type as @baloon_type" do + baloon_type = BaloonType.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + BaloonType.any_instance.stub(:save).and_return(false) + put :update, :id => baloon_type.id, :baloon_type => {} + assigns(:baloon_type).should eq(baloon_type) + end + + it "re-renders the 'edit' template" do + baloon_type = BaloonType.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + BaloonType.any_instance.stub(:save).and_return(false) + put :update, :id => baloon_type.id, :baloon_type => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested baloon_type" do + baloon_type = BaloonType.create! valid_attributes + expect { + delete :destroy, :id => baloon_type.id + }.to change(BaloonType, :count).by(-1) + end + + it "redirects to the baloon_types list" do + baloon_type = BaloonType.create! valid_attributes + delete :destroy, :id => baloon_type.id + response.should redirect_to(baloon_types_url) + end + end + +end diff --git a/spec/controllers/baloons_controller_spec.rb b/spec/controllers/baloons_controller_spec.rb new file mode 100644 index 00000000..a8a461f5 --- /dev/null +++ b/spec/controllers/baloons_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe BaloonsController do + + # This should return the minimal set of attributes required to create a valid + # Baloon. As you add validations to Baloon, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all baloons as @baloons" do + baloon = Baloon.create! valid_attributes + get :index + assigns(:baloons).should eq([baloon]) + end + end + + describe "GET show" do + it "assigns the requested baloon as @baloon" do + baloon = Baloon.create! valid_attributes + get :show, :id => baloon.id + assigns(:baloon).should eq(baloon) + end + end + + describe "GET new" do + it "assigns a new baloon as @baloon" do + get :new + assigns(:baloon).should be_a_new(Baloon) + end + end + + describe "GET edit" do + it "assigns the requested baloon as @baloon" do + baloon = Baloon.create! valid_attributes + get :edit, :id => baloon.id + assigns(:baloon).should eq(baloon) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Baloon" do + expect { + post :create, :baloon => valid_attributes + }.to change(Baloon, :count).by(1) + end + + it "assigns a newly created baloon as @baloon" do + post :create, :baloon => valid_attributes + assigns(:baloon).should be_a(Baloon) + assigns(:baloon).should be_persisted + end + + it "redirects to the created baloon" do + post :create, :baloon => valid_attributes + response.should redirect_to(Baloon.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved baloon as @baloon" do + # Trigger the behavior that occurs when invalid params are submitted + Baloon.any_instance.stub(:save).and_return(false) + post :create, :baloon => {} + assigns(:baloon).should be_a_new(Baloon) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Baloon.any_instance.stub(:save).and_return(false) + post :create, :baloon => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested baloon" do + baloon = Baloon.create! valid_attributes + # Assuming there are no other baloons in the database, this + # specifies that the Baloon created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Baloon.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => baloon.id, :baloon => {'these' => 'params'} + end + + it "assigns the requested baloon as @baloon" do + baloon = Baloon.create! valid_attributes + put :update, :id => baloon.id, :baloon => valid_attributes + assigns(:baloon).should eq(baloon) + end + + it "redirects to the baloon" do + baloon = Baloon.create! valid_attributes + put :update, :id => baloon.id, :baloon => valid_attributes + response.should redirect_to(baloon) + end + end + + describe "with invalid params" do + it "assigns the baloon as @baloon" do + baloon = Baloon.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Baloon.any_instance.stub(:save).and_return(false) + put :update, :id => baloon.id, :baloon => {} + assigns(:baloon).should eq(baloon) + end + + it "re-renders the 'edit' template" do + baloon = Baloon.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Baloon.any_instance.stub(:save).and_return(false) + put :update, :id => baloon.id, :baloon => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested baloon" do + baloon = Baloon.create! valid_attributes + expect { + delete :destroy, :id => baloon.id + }.to change(Baloon, :count).by(-1) + end + + it "redirects to the baloons list" do + baloon = Baloon.create! valid_attributes + delete :destroy, :id => baloon.id + response.should redirect_to(baloons_url) + end + end + +end diff --git a/spec/controllers/comics_controller_spec.rb b/spec/controllers/comics_controller_spec.rb new file mode 100644 index 00000000..7a11c895 --- /dev/null +++ b/spec/controllers/comics_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe ComicsController do + + # This should return the minimal set of attributes required to create a valid + # Comic. As you add validations to Comic, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all comics as @comics" do + comic = Comic.create! valid_attributes + get :index + assigns(:comics).should eq([comic]) + end + end + + describe "GET show" do + it "assigns the requested comic as @comic" do + comic = Comic.create! valid_attributes + get :show, :id => comic.id + assigns(:comic).should eq(comic) + end + end + + describe "GET new" do + it "assigns a new comic as @comic" do + get :new + assigns(:comic).should be_a_new(Comic) + end + end + + describe "GET edit" do + it "assigns the requested comic as @comic" do + comic = Comic.create! valid_attributes + get :edit, :id => comic.id + assigns(:comic).should eq(comic) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Comic" do + expect { + post :create, :comic => valid_attributes + }.to change(Comic, :count).by(1) + end + + it "assigns a newly created comic as @comic" do + post :create, :comic => valid_attributes + assigns(:comic).should be_a(Comic) + assigns(:comic).should be_persisted + end + + it "redirects to the created comic" do + post :create, :comic => valid_attributes + response.should redirect_to(Comic.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved comic as @comic" do + # Trigger the behavior that occurs when invalid params are submitted + Comic.any_instance.stub(:save).and_return(false) + post :create, :comic => {} + assigns(:comic).should be_a_new(Comic) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Comic.any_instance.stub(:save).and_return(false) + post :create, :comic => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested comic" do + comic = Comic.create! valid_attributes + # Assuming there are no other comics in the database, this + # specifies that the Comic created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Comic.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => comic.id, :comic => {'these' => 'params'} + end + + it "assigns the requested comic as @comic" do + comic = Comic.create! valid_attributes + put :update, :id => comic.id, :comic => valid_attributes + assigns(:comic).should eq(comic) + end + + it "redirects to the comic" do + comic = Comic.create! valid_attributes + put :update, :id => comic.id, :comic => valid_attributes + response.should redirect_to(comic) + end + end + + describe "with invalid params" do + it "assigns the comic as @comic" do + comic = Comic.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Comic.any_instance.stub(:save).and_return(false) + put :update, :id => comic.id, :comic => {} + assigns(:comic).should eq(comic) + end + + it "re-renders the 'edit' template" do + comic = Comic.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Comic.any_instance.stub(:save).and_return(false) + put :update, :id => comic.id, :comic => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested comic" do + comic = Comic.create! valid_attributes + expect { + delete :destroy, :id => comic.id + }.to change(Comic, :count).by(-1) + end + + it "redirects to the comics list" do + comic = Comic.create! valid_attributes + delete :destroy, :id => comic.id + response.should redirect_to(comics_url) + end + end + +end diff --git a/spec/controllers/common_lisences_controller_spec.rb b/spec/controllers/common_lisences_controller_spec.rb new file mode 100644 index 00000000..b0889e11 --- /dev/null +++ b/spec/controllers/common_lisences_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe CommonLisencesController do + + # This should return the minimal set of attributes required to create a valid + # CommonLisence. As you add validations to CommonLisence, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all common_lisences as @common_lisences" do + common_lisence = CommonLisence.create! valid_attributes + get :index + assigns(:common_lisences).should eq([common_lisence]) + end + end + + describe "GET show" do + it "assigns the requested common_lisence as @common_lisence" do + common_lisence = CommonLisence.create! valid_attributes + get :show, :id => common_lisence.id + assigns(:common_lisence).should eq(common_lisence) + end + end + + describe "GET new" do + it "assigns a new common_lisence as @common_lisence" do + get :new + assigns(:common_lisence).should be_a_new(CommonLisence) + end + end + + describe "GET edit" do + it "assigns the requested common_lisence as @common_lisence" do + common_lisence = CommonLisence.create! valid_attributes + get :edit, :id => common_lisence.id + assigns(:common_lisence).should eq(common_lisence) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new CommonLisence" do + expect { + post :create, :common_lisence => valid_attributes + }.to change(CommonLisence, :count).by(1) + end + + it "assigns a newly created common_lisence as @common_lisence" do + post :create, :common_lisence => valid_attributes + assigns(:common_lisence).should be_a(CommonLisence) + assigns(:common_lisence).should be_persisted + end + + it "redirects to the created common_lisence" do + post :create, :common_lisence => valid_attributes + response.should redirect_to(CommonLisence.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved common_lisence as @common_lisence" do + # Trigger the behavior that occurs when invalid params are submitted + CommonLisence.any_instance.stub(:save).and_return(false) + post :create, :common_lisence => {} + assigns(:common_lisence).should be_a_new(CommonLisence) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + CommonLisence.any_instance.stub(:save).and_return(false) + post :create, :common_lisence => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested common_lisence" do + common_lisence = CommonLisence.create! valid_attributes + # Assuming there are no other common_lisences in the database, this + # specifies that the CommonLisence created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + CommonLisence.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => common_lisence.id, :common_lisence => {'these' => 'params'} + end + + it "assigns the requested common_lisence as @common_lisence" do + common_lisence = CommonLisence.create! valid_attributes + put :update, :id => common_lisence.id, :common_lisence => valid_attributes + assigns(:common_lisence).should eq(common_lisence) + end + + it "redirects to the common_lisence" do + common_lisence = CommonLisence.create! valid_attributes + put :update, :id => common_lisence.id, :common_lisence => valid_attributes + response.should redirect_to(common_lisence) + end + end + + describe "with invalid params" do + it "assigns the common_lisence as @common_lisence" do + common_lisence = CommonLisence.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + CommonLisence.any_instance.stub(:save).and_return(false) + put :update, :id => common_lisence.id, :common_lisence => {} + assigns(:common_lisence).should eq(common_lisence) + end + + it "re-renders the 'edit' template" do + common_lisence = CommonLisence.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + CommonLisence.any_instance.stub(:save).and_return(false) + put :update, :id => common_lisence.id, :common_lisence => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested common_lisence" do + common_lisence = CommonLisence.create! valid_attributes + expect { + delete :destroy, :id => common_lisence.id + }.to change(CommonLisence, :count).by(-1) + end + + it "redirects to the common_lisences list" do + common_lisence = CommonLisence.create! valid_attributes + delete :destroy, :id => common_lisence.id + response.should redirect_to(common_lisences_url) + end + end + +end diff --git a/spec/controllers/help_controller_spec.rb b/spec/controllers/help_controller_spec.rb new file mode 100644 index 00000000..54cdcf5f --- /dev/null +++ b/spec/controllers/help_controller_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe HelpController do + +end diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb new file mode 100644 index 00000000..9d48b6aa --- /dev/null +++ b/spec/controllers/home_controller_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe HomeController do + +end diff --git a/spec/controllers/lisences_controller_spec.rb b/spec/controllers/lisences_controller_spec.rb new file mode 100644 index 00000000..3172fd31 --- /dev/null +++ b/spec/controllers/lisences_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe LisencesController do + + # This should return the minimal set of attributes required to create a valid + # Lisence. As you add validations to Lisence, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all lisences as @lisences" do + lisence = Lisence.create! valid_attributes + get :index + assigns(:lisences).should eq([lisence]) + end + end + + describe "GET show" do + it "assigns the requested lisence as @lisence" do + lisence = Lisence.create! valid_attributes + get :show, :id => lisence.id + assigns(:lisence).should eq(lisence) + end + end + + describe "GET new" do + it "assigns a new lisence as @lisence" do + get :new + assigns(:lisence).should be_a_new(Lisence) + end + end + + describe "GET edit" do + it "assigns the requested lisence as @lisence" do + lisence = Lisence.create! valid_attributes + get :edit, :id => lisence.id + assigns(:lisence).should eq(lisence) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Lisence" do + expect { + post :create, :lisence => valid_attributes + }.to change(Lisence, :count).by(1) + end + + it "assigns a newly created lisence as @lisence" do + post :create, :lisence => valid_attributes + assigns(:lisence).should be_a(Lisence) + assigns(:lisence).should be_persisted + end + + it "redirects to the created lisence" do + post :create, :lisence => valid_attributes + response.should redirect_to(Lisence.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved lisence as @lisence" do + # Trigger the behavior that occurs when invalid params are submitted + Lisence.any_instance.stub(:save).and_return(false) + post :create, :lisence => {} + assigns(:lisence).should be_a_new(Lisence) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Lisence.any_instance.stub(:save).and_return(false) + post :create, :lisence => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested lisence" do + lisence = Lisence.create! valid_attributes + # Assuming there are no other lisences in the database, this + # specifies that the Lisence created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Lisence.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => lisence.id, :lisence => {'these' => 'params'} + end + + it "assigns the requested lisence as @lisence" do + lisence = Lisence.create! valid_attributes + put :update, :id => lisence.id, :lisence => valid_attributes + assigns(:lisence).should eq(lisence) + end + + it "redirects to the lisence" do + lisence = Lisence.create! valid_attributes + put :update, :id => lisence.id, :lisence => valid_attributes + response.should redirect_to(lisence) + end + end + + describe "with invalid params" do + it "assigns the lisence as @lisence" do + lisence = Lisence.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Lisence.any_instance.stub(:save).and_return(false) + put :update, :id => lisence.id, :lisence => {} + assigns(:lisence).should eq(lisence) + end + + it "re-renders the 'edit' template" do + lisence = Lisence.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Lisence.any_instance.stub(:save).and_return(false) + put :update, :id => lisence.id, :lisence => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested lisence" do + lisence = Lisence.create! valid_attributes + expect { + delete :destroy, :id => lisence.id + }.to change(Lisence, :count).by(-1) + end + + it "redirects to the lisences list" do + lisence = Lisence.create! valid_attributes + delete :destroy, :id => lisence.id + response.should redirect_to(lisences_url) + end + end + +end diff --git a/spec/controllers/original_lisences_controller_spec.rb b/spec/controllers/original_lisences_controller_spec.rb new file mode 100644 index 00000000..ecd6f09b --- /dev/null +++ b/spec/controllers/original_lisences_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe OriginalLisencesController do + + # This should return the minimal set of attributes required to create a valid + # OriginalLisence. As you add validations to OriginalLisence, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all original_lisences as @original_lisences" do + original_lisence = OriginalLisence.create! valid_attributes + get :index + assigns(:original_lisences).should eq([original_lisence]) + end + end + + describe "GET show" do + it "assigns the requested original_lisence as @original_lisence" do + original_lisence = OriginalLisence.create! valid_attributes + get :show, :id => original_lisence.id + assigns(:original_lisence).should eq(original_lisence) + end + end + + describe "GET new" do + it "assigns a new original_lisence as @original_lisence" do + get :new + assigns(:original_lisence).should be_a_new(OriginalLisence) + end + end + + describe "GET edit" do + it "assigns the requested original_lisence as @original_lisence" do + original_lisence = OriginalLisence.create! valid_attributes + get :edit, :id => original_lisence.id + assigns(:original_lisence).should eq(original_lisence) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new OriginalLisence" do + expect { + post :create, :original_lisence => valid_attributes + }.to change(OriginalLisence, :count).by(1) + end + + it "assigns a newly created original_lisence as @original_lisence" do + post :create, :original_lisence => valid_attributes + assigns(:original_lisence).should be_a(OriginalLisence) + assigns(:original_lisence).should be_persisted + end + + it "redirects to the created original_lisence" do + post :create, :original_lisence => valid_attributes + response.should redirect_to(OriginalLisence.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved original_lisence as @original_lisence" do + # Trigger the behavior that occurs when invalid params are submitted + OriginalLisence.any_instance.stub(:save).and_return(false) + post :create, :original_lisence => {} + assigns(:original_lisence).should be_a_new(OriginalLisence) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + OriginalLisence.any_instance.stub(:save).and_return(false) + post :create, :original_lisence => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested original_lisence" do + original_lisence = OriginalLisence.create! valid_attributes + # Assuming there are no other original_lisences in the database, this + # specifies that the OriginalLisence created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + OriginalLisence.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => original_lisence.id, :original_lisence => {'these' => 'params'} + end + + it "assigns the requested original_lisence as @original_lisence" do + original_lisence = OriginalLisence.create! valid_attributes + put :update, :id => original_lisence.id, :original_lisence => valid_attributes + assigns(:original_lisence).should eq(original_lisence) + end + + it "redirects to the original_lisence" do + original_lisence = OriginalLisence.create! valid_attributes + put :update, :id => original_lisence.id, :original_lisence => valid_attributes + response.should redirect_to(original_lisence) + end + end + + describe "with invalid params" do + it "assigns the original_lisence as @original_lisence" do + original_lisence = OriginalLisence.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + OriginalLisence.any_instance.stub(:save).and_return(false) + put :update, :id => original_lisence.id, :original_lisence => {} + assigns(:original_lisence).should eq(original_lisence) + end + + it "re-renders the 'edit' template" do + original_lisence = OriginalLisence.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + OriginalLisence.any_instance.stub(:save).and_return(false) + put :update, :id => original_lisence.id, :original_lisence => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested original_lisence" do + original_lisence = OriginalLisence.create! valid_attributes + expect { + delete :destroy, :id => original_lisence.id + }.to change(OriginalLisence, :count).by(-1) + end + + it "redirects to the original_lisences list" do + original_lisence = OriginalLisence.create! valid_attributes + delete :destroy, :id => original_lisence.id + response.should redirect_to(original_lisences_url) + end + end + +end diff --git a/spec/controllers/original_pictures_controller_spec.rb b/spec/controllers/original_pictures_controller_spec.rb new file mode 100644 index 00000000..b60ecdf7 --- /dev/null +++ b/spec/controllers/original_pictures_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe OriginalPicturesController do + + # This should return the minimal set of attributes required to create a valid + # OriginalPicture. As you add validations to OriginalPicture, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all original_pictures as @original_pictures" do + original_picture = OriginalPicture.create! valid_attributes + get :index + assigns(:original_pictures).should eq([original_picture]) + end + end + + describe "GET show" do + it "assigns the requested original_picture as @original_picture" do + original_picture = OriginalPicture.create! valid_attributes + get :show, :id => original_picture.id + assigns(:original_picture).should eq(original_picture) + end + end + + describe "GET new" do + it "assigns a new original_picture as @original_picture" do + get :new + assigns(:original_picture).should be_a_new(OriginalPicture) + end + end + + describe "GET edit" do + it "assigns the requested original_picture as @original_picture" do + original_picture = OriginalPicture.create! valid_attributes + get :edit, :id => original_picture.id + assigns(:original_picture).should eq(original_picture) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new OriginalPicture" do + expect { + post :create, :original_picture => valid_attributes + }.to change(OriginalPicture, :count).by(1) + end + + it "assigns a newly created original_picture as @original_picture" do + post :create, :original_picture => valid_attributes + assigns(:original_picture).should be_a(OriginalPicture) + assigns(:original_picture).should be_persisted + end + + it "redirects to the created original_picture" do + post :create, :original_picture => valid_attributes + response.should redirect_to(OriginalPicture.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved original_picture as @original_picture" do + # Trigger the behavior that occurs when invalid params are submitted + OriginalPicture.any_instance.stub(:save).and_return(false) + post :create, :original_picture => {} + assigns(:original_picture).should be_a_new(OriginalPicture) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + OriginalPicture.any_instance.stub(:save).and_return(false) + post :create, :original_picture => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested original_picture" do + original_picture = OriginalPicture.create! valid_attributes + # Assuming there are no other original_pictures in the database, this + # specifies that the OriginalPicture created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + OriginalPicture.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => original_picture.id, :original_picture => {'these' => 'params'} + end + + it "assigns the requested original_picture as @original_picture" do + original_picture = OriginalPicture.create! valid_attributes + put :update, :id => original_picture.id, :original_picture => valid_attributes + assigns(:original_picture).should eq(original_picture) + end + + it "redirects to the original_picture" do + original_picture = OriginalPicture.create! valid_attributes + put :update, :id => original_picture.id, :original_picture => valid_attributes + response.should redirect_to(original_picture) + end + end + + describe "with invalid params" do + it "assigns the original_picture as @original_picture" do + original_picture = OriginalPicture.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + OriginalPicture.any_instance.stub(:save).and_return(false) + put :update, :id => original_picture.id, :original_picture => {} + assigns(:original_picture).should eq(original_picture) + end + + it "re-renders the 'edit' template" do + original_picture = OriginalPicture.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + OriginalPicture.any_instance.stub(:save).and_return(false) + put :update, :id => original_picture.id, :original_picture => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested original_picture" do + original_picture = OriginalPicture.create! valid_attributes + expect { + delete :destroy, :id => original_picture.id + }.to change(OriginalPicture, :count).by(-1) + end + + it "redirects to the original_pictures list" do + original_picture = OriginalPicture.create! valid_attributes + delete :destroy, :id => original_picture.id + response.should redirect_to(original_pictures_url) + end + end + +end diff --git a/spec/controllers/panels_controller_spec.rb b/spec/controllers/panels_controller_spec.rb new file mode 100644 index 00000000..1400a919 --- /dev/null +++ b/spec/controllers/panels_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe PanelsController do + + # This should return the minimal set of attributes required to create a valid + # Panel. As you add validations to Panel, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all panels as @panels" do + panel = Panel.create! valid_attributes + get :index + assigns(:panels).should eq([panel]) + end + end + + describe "GET show" do + it "assigns the requested panel as @panel" do + panel = Panel.create! valid_attributes + get :show, :id => panel.id + assigns(:panel).should eq(panel) + end + end + + describe "GET new" do + it "assigns a new panel as @panel" do + get :new + assigns(:panel).should be_a_new(Panel) + end + end + + describe "GET edit" do + it "assigns the requested panel as @panel" do + panel = Panel.create! valid_attributes + get :edit, :id => panel.id + assigns(:panel).should eq(panel) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Panel" do + expect { + post :create, :panel => valid_attributes + }.to change(Panel, :count).by(1) + end + + it "assigns a newly created panel as @panel" do + post :create, :panel => valid_attributes + assigns(:panel).should be_a(Panel) + assigns(:panel).should be_persisted + end + + it "redirects to the created panel" do + post :create, :panel => valid_attributes + response.should redirect_to(Panel.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved panel as @panel" do + # Trigger the behavior that occurs when invalid params are submitted + Panel.any_instance.stub(:save).and_return(false) + post :create, :panel => {} + assigns(:panel).should be_a_new(Panel) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Panel.any_instance.stub(:save).and_return(false) + post :create, :panel => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested panel" do + panel = Panel.create! valid_attributes + # Assuming there are no other panels in the database, this + # specifies that the Panel created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Panel.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => panel.id, :panel => {'these' => 'params'} + end + + it "assigns the requested panel as @panel" do + panel = Panel.create! valid_attributes + put :update, :id => panel.id, :panel => valid_attributes + assigns(:panel).should eq(panel) + end + + it "redirects to the panel" do + panel = Panel.create! valid_attributes + put :update, :id => panel.id, :panel => valid_attributes + response.should redirect_to(panel) + end + end + + describe "with invalid params" do + it "assigns the panel as @panel" do + panel = Panel.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Panel.any_instance.stub(:save).and_return(false) + put :update, :id => panel.id, :panel => {} + assigns(:panel).should eq(panel) + end + + it "re-renders the 'edit' template" do + panel = Panel.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Panel.any_instance.stub(:save).and_return(false) + put :update, :id => panel.id, :panel => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested panel" do + panel = Panel.create! valid_attributes + expect { + delete :destroy, :id => panel.id + }.to change(Panel, :count).by(-1) + end + + it "redirects to the panels list" do + panel = Panel.create! valid_attributes + delete :destroy, :id => panel.id + response.should redirect_to(panels_url) + end + end + +end diff --git a/spec/controllers/pictures_controller_spec.rb b/spec/controllers/pictures_controller_spec.rb new file mode 100644 index 00000000..76639f4c --- /dev/null +++ b/spec/controllers/pictures_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe PicturesController do + + # This should return the minimal set of attributes required to create a valid + # Picture. As you add validations to Picture, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all pictures as @pictures" do + picture = Picture.create! valid_attributes + get :index + assigns(:pictures).should eq([picture]) + end + end + + describe "GET show" do + it "assigns the requested picture as @picture" do + picture = Picture.create! valid_attributes + get :show, :id => picture.id + assigns(:picture).should eq(picture) + end + end + + describe "GET new" do + it "assigns a new picture as @picture" do + get :new + assigns(:picture).should be_a_new(Picture) + end + end + + describe "GET edit" do + it "assigns the requested picture as @picture" do + picture = Picture.create! valid_attributes + get :edit, :id => picture.id + assigns(:picture).should eq(picture) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Picture" do + expect { + post :create, :picture => valid_attributes + }.to change(Picture, :count).by(1) + end + + it "assigns a newly created picture as @picture" do + post :create, :picture => valid_attributes + assigns(:picture).should be_a(Picture) + assigns(:picture).should be_persisted + end + + it "redirects to the created picture" do + post :create, :picture => valid_attributes + response.should redirect_to(Picture.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved picture as @picture" do + # Trigger the behavior that occurs when invalid params are submitted + Picture.any_instance.stub(:save).and_return(false) + post :create, :picture => {} + assigns(:picture).should be_a_new(Picture) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Picture.any_instance.stub(:save).and_return(false) + post :create, :picture => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested picture" do + picture = Picture.create! valid_attributes + # Assuming there are no other pictures in the database, this + # specifies that the Picture created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Picture.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => picture.id, :picture => {'these' => 'params'} + end + + it "assigns the requested picture as @picture" do + picture = Picture.create! valid_attributes + put :update, :id => picture.id, :picture => valid_attributes + assigns(:picture).should eq(picture) + end + + it "redirects to the picture" do + picture = Picture.create! valid_attributes + put :update, :id => picture.id, :picture => valid_attributes + response.should redirect_to(picture) + end + end + + describe "with invalid params" do + it "assigns the picture as @picture" do + picture = Picture.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Picture.any_instance.stub(:save).and_return(false) + put :update, :id => picture.id, :picture => {} + assigns(:picture).should eq(picture) + end + + it "re-renders the 'edit' template" do + picture = Picture.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Picture.any_instance.stub(:save).and_return(false) + put :update, :id => picture.id, :picture => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested picture" do + picture = Picture.create! valid_attributes + expect { + delete :destroy, :id => picture.id + }.to change(Picture, :count).by(-1) + end + + it "redirects to the pictures list" do + picture = Picture.create! valid_attributes + delete :destroy, :id => picture.id + response.should redirect_to(pictures_url) + end + end + +end diff --git a/spec/controllers/source_pictures_controller_spec.rb b/spec/controllers/source_pictures_controller_spec.rb new file mode 100644 index 00000000..8ee713cf --- /dev/null +++ b/spec/controllers/source_pictures_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe SourcePicturesController do + + # This should return the minimal set of attributes required to create a valid + # SourcePicture. As you add validations to SourcePicture, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all source_pictures as @source_pictures" do + source_picture = SourcePicture.create! valid_attributes + get :index + assigns(:source_pictures).should eq([source_picture]) + end + end + + describe "GET show" do + it "assigns the requested source_picture as @source_picture" do + source_picture = SourcePicture.create! valid_attributes + get :show, :id => source_picture.id + assigns(:source_picture).should eq(source_picture) + end + end + + describe "GET new" do + it "assigns a new source_picture as @source_picture" do + get :new + assigns(:source_picture).should be_a_new(SourcePicture) + end + end + + describe "GET edit" do + it "assigns the requested source_picture as @source_picture" do + source_picture = SourcePicture.create! valid_attributes + get :edit, :id => source_picture.id + assigns(:source_picture).should eq(source_picture) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new SourcePicture" do + expect { + post :create, :source_picture => valid_attributes + }.to change(SourcePicture, :count).by(1) + end + + it "assigns a newly created source_picture as @source_picture" do + post :create, :source_picture => valid_attributes + assigns(:source_picture).should be_a(SourcePicture) + assigns(:source_picture).should be_persisted + end + + it "redirects to the created source_picture" do + post :create, :source_picture => valid_attributes + response.should redirect_to(SourcePicture.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved source_picture as @source_picture" do + # Trigger the behavior that occurs when invalid params are submitted + SourcePicture.any_instance.stub(:save).and_return(false) + post :create, :source_picture => {} + assigns(:source_picture).should be_a_new(SourcePicture) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + SourcePicture.any_instance.stub(:save).and_return(false) + post :create, :source_picture => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested source_picture" do + source_picture = SourcePicture.create! valid_attributes + # Assuming there are no other source_pictures in the database, this + # specifies that the SourcePicture created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + SourcePicture.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => source_picture.id, :source_picture => {'these' => 'params'} + end + + it "assigns the requested source_picture as @source_picture" do + source_picture = SourcePicture.create! valid_attributes + put :update, :id => source_picture.id, :source_picture => valid_attributes + assigns(:source_picture).should eq(source_picture) + end + + it "redirects to the source_picture" do + source_picture = SourcePicture.create! valid_attributes + put :update, :id => source_picture.id, :source_picture => valid_attributes + response.should redirect_to(source_picture) + end + end + + describe "with invalid params" do + it "assigns the source_picture as @source_picture" do + source_picture = SourcePicture.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + SourcePicture.any_instance.stub(:save).and_return(false) + put :update, :id => source_picture.id, :source_picture => {} + assigns(:source_picture).should eq(source_picture) + end + + it "re-renders the 'edit' template" do + source_picture = SourcePicture.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + SourcePicture.any_instance.stub(:save).and_return(false) + put :update, :id => source_picture.id, :source_picture => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested source_picture" do + source_picture = SourcePicture.create! valid_attributes + expect { + delete :destroy, :id => source_picture.id + }.to change(SourcePicture, :count).by(-1) + end + + it "redirects to the source_pictures list" do + source_picture = SourcePicture.create! valid_attributes + delete :destroy, :id => source_picture.id + response.should redirect_to(source_pictures_url) + end + end + +end diff --git a/spec/controllers/speach_baloons_controller_spec.rb b/spec/controllers/speach_baloons_controller_spec.rb new file mode 100644 index 00000000..6f337921 --- /dev/null +++ b/spec/controllers/speach_baloons_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe SpeachBaloonsController do + + # This should return the minimal set of attributes required to create a valid + # SpeachBaloon. As you add validations to SpeachBaloon, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all speach_baloons as @speach_baloons" do + speach_baloon = SpeachBaloon.create! valid_attributes + get :index + assigns(:speach_baloons).should eq([speach_baloon]) + end + end + + describe "GET show" do + it "assigns the requested speach_baloon as @speach_baloon" do + speach_baloon = SpeachBaloon.create! valid_attributes + get :show, :id => speach_baloon.id + assigns(:speach_baloon).should eq(speach_baloon) + end + end + + describe "GET new" do + it "assigns a new speach_baloon as @speach_baloon" do + get :new + assigns(:speach_baloon).should be_a_new(SpeachBaloon) + end + end + + describe "GET edit" do + it "assigns the requested speach_baloon as @speach_baloon" do + speach_baloon = SpeachBaloon.create! valid_attributes + get :edit, :id => speach_baloon.id + assigns(:speach_baloon).should eq(speach_baloon) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new SpeachBaloon" do + expect { + post :create, :speach_baloon => valid_attributes + }.to change(SpeachBaloon, :count).by(1) + end + + it "assigns a newly created speach_baloon as @speach_baloon" do + post :create, :speach_baloon => valid_attributes + assigns(:speach_baloon).should be_a(SpeachBaloon) + assigns(:speach_baloon).should be_persisted + end + + it "redirects to the created speach_baloon" do + post :create, :speach_baloon => valid_attributes + response.should redirect_to(SpeachBaloon.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved speach_baloon as @speach_baloon" do + # Trigger the behavior that occurs when invalid params are submitted + SpeachBaloon.any_instance.stub(:save).and_return(false) + post :create, :speach_baloon => {} + assigns(:speach_baloon).should be_a_new(SpeachBaloon) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + SpeachBaloon.any_instance.stub(:save).and_return(false) + post :create, :speach_baloon => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested speach_baloon" do + speach_baloon = SpeachBaloon.create! valid_attributes + # Assuming there are no other speach_baloons in the database, this + # specifies that the SpeachBaloon created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + SpeachBaloon.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => speach_baloon.id, :speach_baloon => {'these' => 'params'} + end + + it "assigns the requested speach_baloon as @speach_baloon" do + speach_baloon = SpeachBaloon.create! valid_attributes + put :update, :id => speach_baloon.id, :speach_baloon => valid_attributes + assigns(:speach_baloon).should eq(speach_baloon) + end + + it "redirects to the speach_baloon" do + speach_baloon = SpeachBaloon.create! valid_attributes + put :update, :id => speach_baloon.id, :speach_baloon => valid_attributes + response.should redirect_to(speach_baloon) + end + end + + describe "with invalid params" do + it "assigns the speach_baloon as @speach_baloon" do + speach_baloon = SpeachBaloon.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + SpeachBaloon.any_instance.stub(:save).and_return(false) + put :update, :id => speach_baloon.id, :speach_baloon => {} + assigns(:speach_baloon).should eq(speach_baloon) + end + + it "re-renders the 'edit' template" do + speach_baloon = SpeachBaloon.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + SpeachBaloon.any_instance.stub(:save).and_return(false) + put :update, :id => speach_baloon.id, :speach_baloon => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested speach_baloon" do + speach_baloon = SpeachBaloon.create! valid_attributes + expect { + delete :destroy, :id => speach_baloon.id + }.to change(SpeachBaloon, :count).by(-1) + end + + it "redirects to the speach_baloons list" do + speach_baloon = SpeachBaloon.create! valid_attributes + delete :destroy, :id => speach_baloon.id + response.should redirect_to(speach_baloons_url) + end + end + +end diff --git a/spec/controllers/speach_templates_controller_spec.rb b/spec/controllers/speach_templates_controller_spec.rb new file mode 100644 index 00000000..a01b04cd --- /dev/null +++ b/spec/controllers/speach_templates_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe SpeachTemplatesController do + + # This should return the minimal set of attributes required to create a valid + # SpeachTemplate. As you add validations to SpeachTemplate, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all speach_templates as @speach_templates" do + speach_template = SpeachTemplate.create! valid_attributes + get :index + assigns(:speach_templates).should eq([speach_template]) + end + end + + describe "GET show" do + it "assigns the requested speach_template as @speach_template" do + speach_template = SpeachTemplate.create! valid_attributes + get :show, :id => speach_template.id + assigns(:speach_template).should eq(speach_template) + end + end + + describe "GET new" do + it "assigns a new speach_template as @speach_template" do + get :new + assigns(:speach_template).should be_a_new(SpeachTemplate) + end + end + + describe "GET edit" do + it "assigns the requested speach_template as @speach_template" do + speach_template = SpeachTemplate.create! valid_attributes + get :edit, :id => speach_template.id + assigns(:speach_template).should eq(speach_template) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new SpeachTemplate" do + expect { + post :create, :speach_template => valid_attributes + }.to change(SpeachTemplate, :count).by(1) + end + + it "assigns a newly created speach_template as @speach_template" do + post :create, :speach_template => valid_attributes + assigns(:speach_template).should be_a(SpeachTemplate) + assigns(:speach_template).should be_persisted + end + + it "redirects to the created speach_template" do + post :create, :speach_template => valid_attributes + response.should redirect_to(SpeachTemplate.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved speach_template as @speach_template" do + # Trigger the behavior that occurs when invalid params are submitted + SpeachTemplate.any_instance.stub(:save).and_return(false) + post :create, :speach_template => {} + assigns(:speach_template).should be_a_new(SpeachTemplate) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + SpeachTemplate.any_instance.stub(:save).and_return(false) + post :create, :speach_template => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested speach_template" do + speach_template = SpeachTemplate.create! valid_attributes + # Assuming there are no other speach_templates in the database, this + # specifies that the SpeachTemplate created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + SpeachTemplate.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => speach_template.id, :speach_template => {'these' => 'params'} + end + + it "assigns the requested speach_template as @speach_template" do + speach_template = SpeachTemplate.create! valid_attributes + put :update, :id => speach_template.id, :speach_template => valid_attributes + assigns(:speach_template).should eq(speach_template) + end + + it "redirects to the speach_template" do + speach_template = SpeachTemplate.create! valid_attributes + put :update, :id => speach_template.id, :speach_template => valid_attributes + response.should redirect_to(speach_template) + end + end + + describe "with invalid params" do + it "assigns the speach_template as @speach_template" do + speach_template = SpeachTemplate.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + SpeachTemplate.any_instance.stub(:save).and_return(false) + put :update, :id => speach_template.id, :speach_template => {} + assigns(:speach_template).should eq(speach_template) + end + + it "re-renders the 'edit' template" do + speach_template = SpeachTemplate.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + SpeachTemplate.any_instance.stub(:save).and_return(false) + put :update, :id => speach_template.id, :speach_template => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested speach_template" do + speach_template = SpeachTemplate.create! valid_attributes + expect { + delete :destroy, :id => speach_template.id + }.to change(SpeachTemplate, :count).by(-1) + end + + it "redirects to the speach_templates list" do + speach_template = SpeachTemplate.create! valid_attributes + delete :destroy, :id => speach_template.id + response.should redirect_to(speach_templates_url) + end + end + +end diff --git a/spec/controllers/speachbaloons_controller_spec.rb b/spec/controllers/speachbaloons_controller_spec.rb new file mode 100644 index 00000000..8ee2c2de --- /dev/null +++ b/spec/controllers/speachbaloons_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe SpeachbaloonsController do + + # This should return the minimal set of attributes required to create a valid + # Speachbaloon. As you add validations to Speachbaloon, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all speachbaloons as @speachbaloons" do + speachbaloon = Speachbaloon.create! valid_attributes + get :index + assigns(:speachbaloons).should eq([speachbaloon]) + end + end + + describe "GET show" do + it "assigns the requested speachbaloon as @speachbaloon" do + speachbaloon = Speachbaloon.create! valid_attributes + get :show, :id => speachbaloon.id + assigns(:speachbaloon).should eq(speachbaloon) + end + end + + describe "GET new" do + it "assigns a new speachbaloon as @speachbaloon" do + get :new + assigns(:speachbaloon).should be_a_new(Speachbaloon) + end + end + + describe "GET edit" do + it "assigns the requested speachbaloon as @speachbaloon" do + speachbaloon = Speachbaloon.create! valid_attributes + get :edit, :id => speachbaloon.id + assigns(:speachbaloon).should eq(speachbaloon) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Speachbaloon" do + expect { + post :create, :speachbaloon => valid_attributes + }.to change(Speachbaloon, :count).by(1) + end + + it "assigns a newly created speachbaloon as @speachbaloon" do + post :create, :speachbaloon => valid_attributes + assigns(:speachbaloon).should be_a(Speachbaloon) + assigns(:speachbaloon).should be_persisted + end + + it "redirects to the created speachbaloon" do + post :create, :speachbaloon => valid_attributes + response.should redirect_to(Speachbaloon.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved speachbaloon as @speachbaloon" do + # Trigger the behavior that occurs when invalid params are submitted + Speachbaloon.any_instance.stub(:save).and_return(false) + post :create, :speachbaloon => {} + assigns(:speachbaloon).should be_a_new(Speachbaloon) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Speachbaloon.any_instance.stub(:save).and_return(false) + post :create, :speachbaloon => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested speachbaloon" do + speachbaloon = Speachbaloon.create! valid_attributes + # Assuming there are no other speachbaloons in the database, this + # specifies that the Speachbaloon created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Speachbaloon.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => speachbaloon.id, :speachbaloon => {'these' => 'params'} + end + + it "assigns the requested speachbaloon as @speachbaloon" do + speachbaloon = Speachbaloon.create! valid_attributes + put :update, :id => speachbaloon.id, :speachbaloon => valid_attributes + assigns(:speachbaloon).should eq(speachbaloon) + end + + it "redirects to the speachbaloon" do + speachbaloon = Speachbaloon.create! valid_attributes + put :update, :id => speachbaloon.id, :speachbaloon => valid_attributes + response.should redirect_to(speachbaloon) + end + end + + describe "with invalid params" do + it "assigns the speachbaloon as @speachbaloon" do + speachbaloon = Speachbaloon.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Speachbaloon.any_instance.stub(:save).and_return(false) + put :update, :id => speachbaloon.id, :speachbaloon => {} + assigns(:speachbaloon).should eq(speachbaloon) + end + + it "re-renders the 'edit' template" do + speachbaloon = Speachbaloon.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Speachbaloon.any_instance.stub(:save).and_return(false) + put :update, :id => speachbaloon.id, :speachbaloon => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested speachbaloon" do + speachbaloon = Speachbaloon.create! valid_attributes + expect { + delete :destroy, :id => speachbaloon.id + }.to change(Speachbaloon, :count).by(-1) + end + + it "redirects to the speachbaloons list" do + speachbaloon = Speachbaloon.create! valid_attributes + delete :destroy, :id => speachbaloon.id + response.should redirect_to(speachbaloons_url) + end + end + +end diff --git a/spec/controllers/speaches_controller_spec.rb b/spec/controllers/speaches_controller_spec.rb new file mode 100644 index 00000000..1bb9b27b --- /dev/null +++ b/spec/controllers/speaches_controller_spec.rb @@ -0,0 +1,157 @@ +require 'spec_helper' + +# This spec was generated by rspec-rails when you ran the scaffold generator. +# It demonstrates how one might use RSpec to specify the controller code that +# was generated by Rails when you ran the scaffold generator. +# +# It assumes that the implementation code is generated by the rails scaffold +# generator. If you are using any extension libraries to generate different +# controller code, this generated spec may or may not pass. +# +# It only uses APIs available in rails and/or rspec-rails. There are a number +# of tools you can use to make these specs even more expressive, but we're +# sticking to rails and rspec-rails APIs to keep things simple and stable. +# +# Compared to earlier versions of this generator, there is very limited use of +# stubs and message expectations in this spec. Stubs are only used when there +# is no simpler way to get a handle on the object needed for the example. +# Message expectations are only used when there is no simpler way to specify +# that an instance is receiving a specific message. + +describe SpeachesController do + + # This should return the minimal set of attributes required to create a valid + # Speach. As you add validations to Speach, be sure to + # update the return value of this method accordingly. + def valid_attributes + {} + end + + describe "GET index" do + it "assigns all speaches as @speaches" do + speach = Speach.create! valid_attributes + get :index + assigns(:speaches).should eq([speach]) + end + end + + describe "GET show" do + it "assigns the requested speach as @speach" do + speach = Speach.create! valid_attributes + get :show, :id => speach.id + assigns(:speach).should eq(speach) + end + end + + describe "GET new" do + it "assigns a new speach as @speach" do + get :new + assigns(:speach).should be_a_new(Speach) + end + end + + describe "GET edit" do + it "assigns the requested speach as @speach" do + speach = Speach.create! valid_attributes + get :edit, :id => speach.id + assigns(:speach).should eq(speach) + end + end + + describe "POST create" do + describe "with valid params" do + it "creates a new Speach" do + expect { + post :create, :speach => valid_attributes + }.to change(Speach, :count).by(1) + end + + it "assigns a newly created speach as @speach" do + post :create, :speach => valid_attributes + assigns(:speach).should be_a(Speach) + assigns(:speach).should be_persisted + end + + it "redirects to the created speach" do + post :create, :speach => valid_attributes + response.should redirect_to(Speach.last) + end + end + + describe "with invalid params" do + it "assigns a newly created but unsaved speach as @speach" do + # Trigger the behavior that occurs when invalid params are submitted + Speach.any_instance.stub(:save).and_return(false) + post :create, :speach => {} + assigns(:speach).should be_a_new(Speach) + end + + it "re-renders the 'new' template" do + # Trigger the behavior that occurs when invalid params are submitted + Speach.any_instance.stub(:save).and_return(false) + post :create, :speach => {} + response.should render_template("new") + end + end + end + + describe "PUT update" do + describe "with valid params" do + it "updates the requested speach" do + speach = Speach.create! valid_attributes + # Assuming there are no other speaches in the database, this + # specifies that the Speach created on the previous line + # receives the :update_attributes message with whatever params are + # submitted in the request. + Speach.any_instance.should_receive(:update_attributes).with({'these' => 'params'}) + put :update, :id => speach.id, :speach => {'these' => 'params'} + end + + it "assigns the requested speach as @speach" do + speach = Speach.create! valid_attributes + put :update, :id => speach.id, :speach => valid_attributes + assigns(:speach).should eq(speach) + end + + it "redirects to the speach" do + speach = Speach.create! valid_attributes + put :update, :id => speach.id, :speach => valid_attributes + response.should redirect_to(speach) + end + end + + describe "with invalid params" do + it "assigns the speach as @speach" do + speach = Speach.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Speach.any_instance.stub(:save).and_return(false) + put :update, :id => speach.id, :speach => {} + assigns(:speach).should eq(speach) + end + + it "re-renders the 'edit' template" do + speach = Speach.create! valid_attributes + # Trigger the behavior that occurs when invalid params are submitted + Speach.any_instance.stub(:save).and_return(false) + put :update, :id => speach.id, :speach => {} + response.should render_template("edit") + end + end + end + + describe "DELETE destroy" do + it "destroys the requested speach" do + speach = Speach.create! valid_attributes + expect { + delete :destroy, :id => speach.id + }.to change(Speach, :count).by(-1) + end + + it "redirects to the speaches list" do + speach = Speach.create! valid_attributes + delete :destroy, :id => speach.id + response.should redirect_to(speaches_url) + end + end + +end diff --git a/spec/controllers/system_controller_spec.rb b/spec/controllers/system_controller_spec.rb new file mode 100644 index 00000000..8d221210 --- /dev/null +++ b/spec/controllers/system_controller_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe SystemController do + +end diff --git a/spec/helpers/admins/sessions_helper_spec.rb b/spec/helpers/admins/sessions_helper_spec.rb new file mode 100644 index 00000000..08151429 --- /dev/null +++ b/spec/helpers/admins/sessions_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the Admins::SessionsHelper. For example: +# +# describe Admins::SessionsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe Admins::SessionsHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/artists_helper_spec.rb b/spec/helpers/artists_helper_spec.rb new file mode 100644 index 00000000..7a1305af --- /dev/null +++ b/spec/helpers/artists_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the ArtistsHelper. For example: +# +# describe ArtistsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe ArtistsHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/authors/sessions_helper_spec.rb b/spec/helpers/authors/sessions_helper_spec.rb new file mode 100644 index 00000000..ddb409ea --- /dev/null +++ b/spec/helpers/authors/sessions_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the Authors::SessionsHelper. For example: +# +# describe Authors::SessionsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe Authors::SessionsHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/baloon_templates_helper_spec.rb b/spec/helpers/baloon_templates_helper_spec.rb new file mode 100644 index 00000000..c5576f18 --- /dev/null +++ b/spec/helpers/baloon_templates_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the BaloonTemplatesHelper. For example: +# +# describe BaloonTemplatesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe BaloonTemplatesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/baloon_types_helper_spec.rb b/spec/helpers/baloon_types_helper_spec.rb new file mode 100644 index 00000000..835a5e2b --- /dev/null +++ b/spec/helpers/baloon_types_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the BaloonTypesHelper. For example: +# +# describe BaloonTypesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe BaloonTypesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/baloons_helper_spec.rb b/spec/helpers/baloons_helper_spec.rb new file mode 100644 index 00000000..f693f740 --- /dev/null +++ b/spec/helpers/baloons_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the BaloonsHelper. For example: +# +# describe BaloonsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe BaloonsHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/comics_helper_spec.rb b/spec/helpers/comics_helper_spec.rb new file mode 100644 index 00000000..30bdaafa --- /dev/null +++ b/spec/helpers/comics_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the ComicsHelper. For example: +# +# describe ComicsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe ComicsHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/common_lisences_helper_spec.rb b/spec/helpers/common_lisences_helper_spec.rb new file mode 100644 index 00000000..25c85dc0 --- /dev/null +++ b/spec/helpers/common_lisences_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the CommonLisencesHelper. For example: +# +# describe CommonLisencesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe CommonLisencesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/help_helper_spec.rb b/spec/helpers/help_helper_spec.rb new file mode 100644 index 00000000..29709b96 --- /dev/null +++ b/spec/helpers/help_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the HelpHelper. For example: +# +# describe HelpHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe HelpHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/home_helper_spec.rb b/spec/helpers/home_helper_spec.rb new file mode 100644 index 00000000..4a376330 --- /dev/null +++ b/spec/helpers/home_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the HomeHelper. For example: +# +# describe HomeHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe HomeHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/lisences_helper_spec.rb b/spec/helpers/lisences_helper_spec.rb new file mode 100644 index 00000000..bf41193c --- /dev/null +++ b/spec/helpers/lisences_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the LisencesHelper. For example: +# +# describe LisencesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe LisencesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/original_lisences_helper_spec.rb b/spec/helpers/original_lisences_helper_spec.rb new file mode 100644 index 00000000..e7e138f6 --- /dev/null +++ b/spec/helpers/original_lisences_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the OriginalLisencesHelper. For example: +# +# describe OriginalLisencesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe OriginalLisencesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/original_pictures_helper_spec.rb b/spec/helpers/original_pictures_helper_spec.rb new file mode 100644 index 00000000..b5062052 --- /dev/null +++ b/spec/helpers/original_pictures_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the OriginalPicturesHelper. For example: +# +# describe OriginalPicturesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe OriginalPicturesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/panels_helper_spec.rb b/spec/helpers/panels_helper_spec.rb new file mode 100644 index 00000000..8a383885 --- /dev/null +++ b/spec/helpers/panels_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the PanelsHelper. For example: +# +# describe PanelsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe PanelsHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/pictures_helper_spec.rb b/spec/helpers/pictures_helper_spec.rb new file mode 100644 index 00000000..d0a47d3a --- /dev/null +++ b/spec/helpers/pictures_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the PicturesHelper. For example: +# +# describe PicturesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe PicturesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/source_pictures_helper_spec.rb b/spec/helpers/source_pictures_helper_spec.rb new file mode 100644 index 00000000..5e0a5a58 --- /dev/null +++ b/spec/helpers/source_pictures_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the SourcePicturesHelper. For example: +# +# describe SourcePicturesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe SourcePicturesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/speach_baloons_helper_spec.rb b/spec/helpers/speach_baloons_helper_spec.rb new file mode 100644 index 00000000..e68fc3f9 --- /dev/null +++ b/spec/helpers/speach_baloons_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the SpeachBaloonsHelper. For example: +# +# describe SpeachBaloonsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe SpeachBaloonsHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/speach_templates_helper_spec.rb b/spec/helpers/speach_templates_helper_spec.rb new file mode 100644 index 00000000..143e65ee --- /dev/null +++ b/spec/helpers/speach_templates_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the SpeachTemplatesHelper. For example: +# +# describe SpeachTemplatesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe SpeachTemplatesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/speachbaloons_helper_spec.rb b/spec/helpers/speachbaloons_helper_spec.rb new file mode 100644 index 00000000..2fab07c9 --- /dev/null +++ b/spec/helpers/speachbaloons_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the SpeachbaloonsHelper. For example: +# +# describe SpeachbaloonsHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe SpeachbaloonsHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/speaches_helper_spec.rb b/spec/helpers/speaches_helper_spec.rb new file mode 100644 index 00000000..6a4a3641 --- /dev/null +++ b/spec/helpers/speaches_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the SpeachesHelper. For example: +# +# describe SpeachesHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe SpeachesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/helpers/system_helper_spec.rb b/spec/helpers/system_helper_spec.rb new file mode 100644 index 00000000..8f363454 --- /dev/null +++ b/spec/helpers/system_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the SystemHelper. For example: +# +# describe SystemHelper do +# describe "string concat" do +# it "concats two strings with spaces" do +# helper.concat_strings("this","that").should == "this that" +# end +# end +# end +describe SystemHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/admin_spec.rb b/spec/models/admin_spec.rb new file mode 100644 index 00000000..ccc4624d --- /dev/null +++ b/spec/models/admin_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Admin do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/artist_spec.rb b/spec/models/artist_spec.rb new file mode 100644 index 00000000..4efbc733 --- /dev/null +++ b/spec/models/artist_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Artist do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/author_spec.rb b/spec/models/author_spec.rb new file mode 100644 index 00000000..0a1954ff --- /dev/null +++ b/spec/models/author_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Author do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/baloon_spec.rb b/spec/models/baloon_spec.rb new file mode 100644 index 00000000..9f91cd04 --- /dev/null +++ b/spec/models/baloon_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Baloon do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/baloon_template_spec.rb b/spec/models/baloon_template_spec.rb new file mode 100644 index 00000000..2cdb4905 --- /dev/null +++ b/spec/models/baloon_template_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe BaloonTemplate do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/baloon_type_spec.rb b/spec/models/baloon_type_spec.rb new file mode 100644 index 00000000..94ab96cf --- /dev/null +++ b/spec/models/baloon_type_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe BaloonType do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/comic_spec.rb b/spec/models/comic_spec.rb new file mode 100644 index 00000000..51b9fa8c --- /dev/null +++ b/spec/models/comic_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Comic do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/common_lisence_spec.rb b/spec/models/common_lisence_spec.rb new file mode 100644 index 00000000..a364231d --- /dev/null +++ b/spec/models/common_lisence_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe CommonLisence do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/lisence_spec.rb b/spec/models/lisence_spec.rb new file mode 100644 index 00000000..237d81e1 --- /dev/null +++ b/spec/models/lisence_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Lisence do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/original_lisence_spec.rb b/spec/models/original_lisence_spec.rb new file mode 100644 index 00000000..35c5c9ef --- /dev/null +++ b/spec/models/original_lisence_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe OriginalLisence do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/original_picture_spec.rb b/spec/models/original_picture_spec.rb new file mode 100644 index 00000000..2b896d61 --- /dev/null +++ b/spec/models/original_picture_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe OriginalPicture do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/panel_spec.rb b/spec/models/panel_spec.rb new file mode 100644 index 00000000..ad5959d8 --- /dev/null +++ b/spec/models/panel_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Panel do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/picture_spec.rb b/spec/models/picture_spec.rb new file mode 100644 index 00000000..5ef8eeae --- /dev/null +++ b/spec/models/picture_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Picture do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/source_picture_spec.rb b/spec/models/source_picture_spec.rb new file mode 100644 index 00000000..e5022190 --- /dev/null +++ b/spec/models/source_picture_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe SourcePicture do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/speach_baloon_spec.rb b/spec/models/speach_baloon_spec.rb new file mode 100644 index 00000000..45ac5347 --- /dev/null +++ b/spec/models/speach_baloon_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe SpeachBaloon do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/speach_spec.rb b/spec/models/speach_spec.rb new file mode 100644 index 00000000..6ac39920 --- /dev/null +++ b/spec/models/speach_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Speach do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/speach_template_spec.rb b/spec/models/speach_template_spec.rb new file mode 100644 index 00000000..31d8b202 --- /dev/null +++ b/spec/models/speach_template_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe SpeachTemplate do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/speachbaloon_spec.rb b/spec/models/speachbaloon_spec.rb new file mode 100644 index 00000000..77f2e135 --- /dev/null +++ b/spec/models/speachbaloon_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Speachbaloon do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/requests/artists_spec.rb b/spec/requests/artists_spec.rb new file mode 100644 index 00000000..ce39a8fc --- /dev/null +++ b/spec/requests/artists_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "Artists" do + describe "GET /artists" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get artists_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/baloon_templates_spec.rb b/spec/requests/baloon_templates_spec.rb new file mode 100644 index 00000000..0826e761 --- /dev/null +++ b/spec/requests/baloon_templates_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "BaloonTemplates" do + describe "GET /baloon_templates" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get baloon_templates_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/baloon_types_spec.rb b/spec/requests/baloon_types_spec.rb new file mode 100644 index 00000000..ecda4f54 --- /dev/null +++ b/spec/requests/baloon_types_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "BaloonTypes" do + describe "GET /baloon_types" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get baloon_types_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/baloons_spec.rb b/spec/requests/baloons_spec.rb new file mode 100644 index 00000000..1c613b73 --- /dev/null +++ b/spec/requests/baloons_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "Baloons" do + describe "GET /baloons" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get baloons_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/comics_spec.rb b/spec/requests/comics_spec.rb new file mode 100644 index 00000000..20de5730 --- /dev/null +++ b/spec/requests/comics_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "Comics" do + describe "GET /comics" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get comics_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/common_lisences_spec.rb b/spec/requests/common_lisences_spec.rb new file mode 100644 index 00000000..d04d49a1 --- /dev/null +++ b/spec/requests/common_lisences_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "CommonLisences" do + describe "GET /common_lisences" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get common_lisences_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/lisences_spec.rb b/spec/requests/lisences_spec.rb new file mode 100644 index 00000000..54ed4c90 --- /dev/null +++ b/spec/requests/lisences_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "Lisences" do + describe "GET /lisences" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get lisences_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/original_lisences_spec.rb b/spec/requests/original_lisences_spec.rb new file mode 100644 index 00000000..6a01a216 --- /dev/null +++ b/spec/requests/original_lisences_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "OriginalLisences" do + describe "GET /original_lisences" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get original_lisences_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/original_pictures_spec.rb b/spec/requests/original_pictures_spec.rb new file mode 100644 index 00000000..f0330b9e --- /dev/null +++ b/spec/requests/original_pictures_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "OriginalPictures" do + describe "GET /original_pictures" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get original_pictures_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/panels_spec.rb b/spec/requests/panels_spec.rb new file mode 100644 index 00000000..b4888115 --- /dev/null +++ b/spec/requests/panels_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "Panels" do + describe "GET /panels" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get panels_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/pictures_spec.rb b/spec/requests/pictures_spec.rb new file mode 100644 index 00000000..18c2c106 --- /dev/null +++ b/spec/requests/pictures_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "Pictures" do + describe "GET /pictures" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get pictures_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/source_pictures_spec.rb b/spec/requests/source_pictures_spec.rb new file mode 100644 index 00000000..f7bfb9c7 --- /dev/null +++ b/spec/requests/source_pictures_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "SourcePictures" do + describe "GET /source_pictures" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get source_pictures_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/speach_baloons_spec.rb b/spec/requests/speach_baloons_spec.rb new file mode 100644 index 00000000..3d1998f7 --- /dev/null +++ b/spec/requests/speach_baloons_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "SpeachBaloons" do + describe "GET /speach_baloons" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get speach_baloons_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/speach_templates_spec.rb b/spec/requests/speach_templates_spec.rb new file mode 100644 index 00000000..38088226 --- /dev/null +++ b/spec/requests/speach_templates_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "SpeachTemplates" do + describe "GET /speach_templates" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get speach_templates_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/speachbaloons_spec.rb b/spec/requests/speachbaloons_spec.rb new file mode 100644 index 00000000..a1b9402a --- /dev/null +++ b/spec/requests/speachbaloons_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "Speachbaloons" do + describe "GET /speachbaloons" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get speachbaloons_path + response.status.should be(200) + end + end +end diff --git a/spec/requests/speaches_spec.rb b/spec/requests/speaches_spec.rb new file mode 100644 index 00000000..9fc57047 --- /dev/null +++ b/spec/requests/speaches_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "Speaches" do + describe "GET /speaches" do + it "works! (now write some real specs)" do + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers + get speaches_path + response.status.should be(200) + end + end +end diff --git a/spec/routing/artists_routing_spec.rb b/spec/routing/artists_routing_spec.rb new file mode 100644 index 00000000..9c399fb5 --- /dev/null +++ b/spec/routing/artists_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe ArtistsController do + describe "routing" do + + it "routes to #index" do + get("/artists").should route_to("artists#index") + end + + it "routes to #new" do + get("/artists/new").should route_to("artists#new") + end + + it "routes to #show" do + get("/artists/1").should route_to("artists#show", :id => "1") + end + + it "routes to #edit" do + get("/artists/1/edit").should route_to("artists#edit", :id => "1") + end + + it "routes to #create" do + post("/artists").should route_to("artists#create") + end + + it "routes to #update" do + put("/artists/1").should route_to("artists#update", :id => "1") + end + + it "routes to #destroy" do + delete("/artists/1").should route_to("artists#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/baloon_templates_routing_spec.rb b/spec/routing/baloon_templates_routing_spec.rb new file mode 100644 index 00000000..8d7f985a --- /dev/null +++ b/spec/routing/baloon_templates_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe BaloonTemplatesController do + describe "routing" do + + it "routes to #index" do + get("/baloon_templates").should route_to("baloon_templates#index") + end + + it "routes to #new" do + get("/baloon_templates/new").should route_to("baloon_templates#new") + end + + it "routes to #show" do + get("/baloon_templates/1").should route_to("baloon_templates#show", :id => "1") + end + + it "routes to #edit" do + get("/baloon_templates/1/edit").should route_to("baloon_templates#edit", :id => "1") + end + + it "routes to #create" do + post("/baloon_templates").should route_to("baloon_templates#create") + end + + it "routes to #update" do + put("/baloon_templates/1").should route_to("baloon_templates#update", :id => "1") + end + + it "routes to #destroy" do + delete("/baloon_templates/1").should route_to("baloon_templates#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/baloon_types_routing_spec.rb b/spec/routing/baloon_types_routing_spec.rb new file mode 100644 index 00000000..add3f9d1 --- /dev/null +++ b/spec/routing/baloon_types_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe BaloonTypesController do + describe "routing" do + + it "routes to #index" do + get("/baloon_types").should route_to("baloon_types#index") + end + + it "routes to #new" do + get("/baloon_types/new").should route_to("baloon_types#new") + end + + it "routes to #show" do + get("/baloon_types/1").should route_to("baloon_types#show", :id => "1") + end + + it "routes to #edit" do + get("/baloon_types/1/edit").should route_to("baloon_types#edit", :id => "1") + end + + it "routes to #create" do + post("/baloon_types").should route_to("baloon_types#create") + end + + it "routes to #update" do + put("/baloon_types/1").should route_to("baloon_types#update", :id => "1") + end + + it "routes to #destroy" do + delete("/baloon_types/1").should route_to("baloon_types#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/baloons_routing_spec.rb b/spec/routing/baloons_routing_spec.rb new file mode 100644 index 00000000..b6d4572c --- /dev/null +++ b/spec/routing/baloons_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe BaloonsController do + describe "routing" do + + it "routes to #index" do + get("/baloons").should route_to("baloons#index") + end + + it "routes to #new" do + get("/baloons/new").should route_to("baloons#new") + end + + it "routes to #show" do + get("/baloons/1").should route_to("baloons#show", :id => "1") + end + + it "routes to #edit" do + get("/baloons/1/edit").should route_to("baloons#edit", :id => "1") + end + + it "routes to #create" do + post("/baloons").should route_to("baloons#create") + end + + it "routes to #update" do + put("/baloons/1").should route_to("baloons#update", :id => "1") + end + + it "routes to #destroy" do + delete("/baloons/1").should route_to("baloons#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/comics_routing_spec.rb b/spec/routing/comics_routing_spec.rb new file mode 100644 index 00000000..173c1ecc --- /dev/null +++ b/spec/routing/comics_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe ComicsController do + describe "routing" do + + it "routes to #index" do + get("/comics").should route_to("comics#index") + end + + it "routes to #new" do + get("/comics/new").should route_to("comics#new") + end + + it "routes to #show" do + get("/comics/1").should route_to("comics#show", :id => "1") + end + + it "routes to #edit" do + get("/comics/1/edit").should route_to("comics#edit", :id => "1") + end + + it "routes to #create" do + post("/comics").should route_to("comics#create") + end + + it "routes to #update" do + put("/comics/1").should route_to("comics#update", :id => "1") + end + + it "routes to #destroy" do + delete("/comics/1").should route_to("comics#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/common_lisences_routing_spec.rb b/spec/routing/common_lisences_routing_spec.rb new file mode 100644 index 00000000..f42578f4 --- /dev/null +++ b/spec/routing/common_lisences_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe CommonLisencesController do + describe "routing" do + + it "routes to #index" do + get("/common_lisences").should route_to("common_lisences#index") + end + + it "routes to #new" do + get("/common_lisences/new").should route_to("common_lisences#new") + end + + it "routes to #show" do + get("/common_lisences/1").should route_to("common_lisences#show", :id => "1") + end + + it "routes to #edit" do + get("/common_lisences/1/edit").should route_to("common_lisences#edit", :id => "1") + end + + it "routes to #create" do + post("/common_lisences").should route_to("common_lisences#create") + end + + it "routes to #update" do + put("/common_lisences/1").should route_to("common_lisences#update", :id => "1") + end + + it "routes to #destroy" do + delete("/common_lisences/1").should route_to("common_lisences#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/lisences_routing_spec.rb b/spec/routing/lisences_routing_spec.rb new file mode 100644 index 00000000..2882601b --- /dev/null +++ b/spec/routing/lisences_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe LisencesController do + describe "routing" do + + it "routes to #index" do + get("/lisences").should route_to("lisences#index") + end + + it "routes to #new" do + get("/lisences/new").should route_to("lisences#new") + end + + it "routes to #show" do + get("/lisences/1").should route_to("lisences#show", :id => "1") + end + + it "routes to #edit" do + get("/lisences/1/edit").should route_to("lisences#edit", :id => "1") + end + + it "routes to #create" do + post("/lisences").should route_to("lisences#create") + end + + it "routes to #update" do + put("/lisences/1").should route_to("lisences#update", :id => "1") + end + + it "routes to #destroy" do + delete("/lisences/1").should route_to("lisences#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/original_lisences_routing_spec.rb b/spec/routing/original_lisences_routing_spec.rb new file mode 100644 index 00000000..95d3d488 --- /dev/null +++ b/spec/routing/original_lisences_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe OriginalLisencesController do + describe "routing" do + + it "routes to #index" do + get("/original_lisences").should route_to("original_lisences#index") + end + + it "routes to #new" do + get("/original_lisences/new").should route_to("original_lisences#new") + end + + it "routes to #show" do + get("/original_lisences/1").should route_to("original_lisences#show", :id => "1") + end + + it "routes to #edit" do + get("/original_lisences/1/edit").should route_to("original_lisences#edit", :id => "1") + end + + it "routes to #create" do + post("/original_lisences").should route_to("original_lisences#create") + end + + it "routes to #update" do + put("/original_lisences/1").should route_to("original_lisences#update", :id => "1") + end + + it "routes to #destroy" do + delete("/original_lisences/1").should route_to("original_lisences#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/original_pictures_routing_spec.rb b/spec/routing/original_pictures_routing_spec.rb new file mode 100644 index 00000000..b4558c85 --- /dev/null +++ b/spec/routing/original_pictures_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe OriginalPicturesController do + describe "routing" do + + it "routes to #index" do + get("/original_pictures").should route_to("original_pictures#index") + end + + it "routes to #new" do + get("/original_pictures/new").should route_to("original_pictures#new") + end + + it "routes to #show" do + get("/original_pictures/1").should route_to("original_pictures#show", :id => "1") + end + + it "routes to #edit" do + get("/original_pictures/1/edit").should route_to("original_pictures#edit", :id => "1") + end + + it "routes to #create" do + post("/original_pictures").should route_to("original_pictures#create") + end + + it "routes to #update" do + put("/original_pictures/1").should route_to("original_pictures#update", :id => "1") + end + + it "routes to #destroy" do + delete("/original_pictures/1").should route_to("original_pictures#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/panels_routing_spec.rb b/spec/routing/panels_routing_spec.rb new file mode 100644 index 00000000..973c126e --- /dev/null +++ b/spec/routing/panels_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe PanelsController do + describe "routing" do + + it "routes to #index" do + get("/panels").should route_to("panels#index") + end + + it "routes to #new" do + get("/panels/new").should route_to("panels#new") + end + + it "routes to #show" do + get("/panels/1").should route_to("panels#show", :id => "1") + end + + it "routes to #edit" do + get("/panels/1/edit").should route_to("panels#edit", :id => "1") + end + + it "routes to #create" do + post("/panels").should route_to("panels#create") + end + + it "routes to #update" do + put("/panels/1").should route_to("panels#update", :id => "1") + end + + it "routes to #destroy" do + delete("/panels/1").should route_to("panels#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/pictures_routing_spec.rb b/spec/routing/pictures_routing_spec.rb new file mode 100644 index 00000000..69c68778 --- /dev/null +++ b/spec/routing/pictures_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe PicturesController do + describe "routing" do + + it "routes to #index" do + get("/pictures").should route_to("pictures#index") + end + + it "routes to #new" do + get("/pictures/new").should route_to("pictures#new") + end + + it "routes to #show" do + get("/pictures/1").should route_to("pictures#show", :id => "1") + end + + it "routes to #edit" do + get("/pictures/1/edit").should route_to("pictures#edit", :id => "1") + end + + it "routes to #create" do + post("/pictures").should route_to("pictures#create") + end + + it "routes to #update" do + put("/pictures/1").should route_to("pictures#update", :id => "1") + end + + it "routes to #destroy" do + delete("/pictures/1").should route_to("pictures#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/source_pictures_routing_spec.rb b/spec/routing/source_pictures_routing_spec.rb new file mode 100644 index 00000000..dcb207c7 --- /dev/null +++ b/spec/routing/source_pictures_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe SourcePicturesController do + describe "routing" do + + it "routes to #index" do + get("/source_pictures").should route_to("source_pictures#index") + end + + it "routes to #new" do + get("/source_pictures/new").should route_to("source_pictures#new") + end + + it "routes to #show" do + get("/source_pictures/1").should route_to("source_pictures#show", :id => "1") + end + + it "routes to #edit" do + get("/source_pictures/1/edit").should route_to("source_pictures#edit", :id => "1") + end + + it "routes to #create" do + post("/source_pictures").should route_to("source_pictures#create") + end + + it "routes to #update" do + put("/source_pictures/1").should route_to("source_pictures#update", :id => "1") + end + + it "routes to #destroy" do + delete("/source_pictures/1").should route_to("source_pictures#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/speach_baloons_routing_spec.rb b/spec/routing/speach_baloons_routing_spec.rb new file mode 100644 index 00000000..c52d53f1 --- /dev/null +++ b/spec/routing/speach_baloons_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe SpeachBaloonsController do + describe "routing" do + + it "routes to #index" do + get("/speach_baloons").should route_to("speach_baloons#index") + end + + it "routes to #new" do + get("/speach_baloons/new").should route_to("speach_baloons#new") + end + + it "routes to #show" do + get("/speach_baloons/1").should route_to("speach_baloons#show", :id => "1") + end + + it "routes to #edit" do + get("/speach_baloons/1/edit").should route_to("speach_baloons#edit", :id => "1") + end + + it "routes to #create" do + post("/speach_baloons").should route_to("speach_baloons#create") + end + + it "routes to #update" do + put("/speach_baloons/1").should route_to("speach_baloons#update", :id => "1") + end + + it "routes to #destroy" do + delete("/speach_baloons/1").should route_to("speach_baloons#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/speach_templates_routing_spec.rb b/spec/routing/speach_templates_routing_spec.rb new file mode 100644 index 00000000..da923f1c --- /dev/null +++ b/spec/routing/speach_templates_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe SpeachTemplatesController do + describe "routing" do + + it "routes to #index" do + get("/speach_templates").should route_to("speach_templates#index") + end + + it "routes to #new" do + get("/speach_templates/new").should route_to("speach_templates#new") + end + + it "routes to #show" do + get("/speach_templates/1").should route_to("speach_templates#show", :id => "1") + end + + it "routes to #edit" do + get("/speach_templates/1/edit").should route_to("speach_templates#edit", :id => "1") + end + + it "routes to #create" do + post("/speach_templates").should route_to("speach_templates#create") + end + + it "routes to #update" do + put("/speach_templates/1").should route_to("speach_templates#update", :id => "1") + end + + it "routes to #destroy" do + delete("/speach_templates/1").should route_to("speach_templates#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/speachbaloons_routing_spec.rb b/spec/routing/speachbaloons_routing_spec.rb new file mode 100644 index 00000000..f9c5c60b --- /dev/null +++ b/spec/routing/speachbaloons_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe SpeachbaloonsController do + describe "routing" do + + it "routes to #index" do + get("/speachbaloons").should route_to("speachbaloons#index") + end + + it "routes to #new" do + get("/speachbaloons/new").should route_to("speachbaloons#new") + end + + it "routes to #show" do + get("/speachbaloons/1").should route_to("speachbaloons#show", :id => "1") + end + + it "routes to #edit" do + get("/speachbaloons/1/edit").should route_to("speachbaloons#edit", :id => "1") + end + + it "routes to #create" do + post("/speachbaloons").should route_to("speachbaloons#create") + end + + it "routes to #update" do + put("/speachbaloons/1").should route_to("speachbaloons#update", :id => "1") + end + + it "routes to #destroy" do + delete("/speachbaloons/1").should route_to("speachbaloons#destroy", :id => "1") + end + + end +end diff --git a/spec/routing/speaches_routing_spec.rb b/spec/routing/speaches_routing_spec.rb new file mode 100644 index 00000000..5debf268 --- /dev/null +++ b/spec/routing/speaches_routing_spec.rb @@ -0,0 +1,35 @@ +require "spec_helper" + +describe SpeachesController do + describe "routing" do + + it "routes to #index" do + get("/speaches").should route_to("speaches#index") + end + + it "routes to #new" do + get("/speaches/new").should route_to("speaches#new") + end + + it "routes to #show" do + get("/speaches/1").should route_to("speaches#show", :id => "1") + end + + it "routes to #edit" do + get("/speaches/1/edit").should route_to("speaches#edit", :id => "1") + end + + it "routes to #create" do + post("/speaches").should route_to("speaches#create") + end + + it "routes to #update" do + put("/speaches/1").should route_to("speaches#update", :id => "1") + end + + it "routes to #destroy" do + delete("/speaches/1").should route_to("speaches#destroy", :id => "1") + end + + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 00000000..6d7f66d2 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,33 @@ +# This file is copied to spec/ when you run 'rails generate rspec:install' +ENV["RAILS_ENV"] ||= 'test' +require File.expand_path("../../config/environment", __FILE__) +require 'rspec/rails' +require 'rspec/autorun' + +# Requires supporting ruby files with custom matchers and macros, etc, +# in spec/support/ and its subdirectories. +Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} + +RSpec.configure do |config| + # == Mock Framework + # + # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: + # + # config.mock_with :mocha + # config.mock_with :flexmock + # config.mock_with :rr + config.mock_with :rspec + + # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures + config.fixture_path = "#{::Rails.root}/spec/fixtures" + + # If you're not using ActiveRecord, or you'd prefer not to run each of your + # examples within a transaction, remove the following line or assign false + # instead of true. + config.use_transactional_fixtures = true + + # If true, the base class of anonymous controllers will be inferred + # automatically. This will be the default behavior in future versions of + # rspec-rails. + config.infer_base_class_for_anonymous_controllers = false +end diff --git a/spec/views/artists/edit.html.erb_spec.rb b/spec/views/artists/edit.html.erb_spec.rb new file mode 100644 index 00000000..a3a27817 --- /dev/null +++ b/spec/views/artists/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "artists/edit.html.erb" do + before(:each) do + @artist = assign(:artist, stub_model(Artist)) + end + + it "renders the edit artist form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => artists_path(@artist), :method => "post" do + end + end +end diff --git a/spec/views/artists/index.html.erb_spec.rb b/spec/views/artists/index.html.erb_spec.rb new file mode 100644 index 00000000..de4959ad --- /dev/null +++ b/spec/views/artists/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "artists/index.html.erb" do + before(:each) do + assign(:artists, [ + stub_model(Artist), + stub_model(Artist) + ]) + end + + it "renders a list of artists" do + render + end +end diff --git a/spec/views/artists/new.html.erb_spec.rb b/spec/views/artists/new.html.erb_spec.rb new file mode 100644 index 00000000..bff7d48a --- /dev/null +++ b/spec/views/artists/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "artists/new.html.erb" do + before(:each) do + assign(:artist, stub_model(Artist).as_new_record) + end + + it "renders new artist form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => artists_path, :method => "post" do + end + end +end diff --git a/spec/views/artists/show.html.erb_spec.rb b/spec/views/artists/show.html.erb_spec.rb new file mode 100644 index 00000000..76cac49e --- /dev/null +++ b/spec/views/artists/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "artists/show.html.erb" do + before(:each) do + @artist = assign(:artist, stub_model(Artist)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/baloon_templates/edit.html.erb_spec.rb b/spec/views/baloon_templates/edit.html.erb_spec.rb new file mode 100644 index 00000000..081b4eed --- /dev/null +++ b/spec/views/baloon_templates/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "baloon_templates/edit.html.erb" do + before(:each) do + @baloon_template = assign(:baloon_template, stub_model(BaloonTemplate)) + end + + it "renders the edit baloon_template form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => baloon_templates_path(@baloon_template), :method => "post" do + end + end +end diff --git a/spec/views/baloon_templates/index.html.erb_spec.rb b/spec/views/baloon_templates/index.html.erb_spec.rb new file mode 100644 index 00000000..7ff4294d --- /dev/null +++ b/spec/views/baloon_templates/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "baloon_templates/index.html.erb" do + before(:each) do + assign(:baloon_templates, [ + stub_model(BaloonTemplate), + stub_model(BaloonTemplate) + ]) + end + + it "renders a list of baloon_templates" do + render + end +end diff --git a/spec/views/baloon_templates/new.html.erb_spec.rb b/spec/views/baloon_templates/new.html.erb_spec.rb new file mode 100644 index 00000000..fa5c8095 --- /dev/null +++ b/spec/views/baloon_templates/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "baloon_templates/new.html.erb" do + before(:each) do + assign(:baloon_template, stub_model(BaloonTemplate).as_new_record) + end + + it "renders new baloon_template form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => baloon_templates_path, :method => "post" do + end + end +end diff --git a/spec/views/baloon_templates/show.html.erb_spec.rb b/spec/views/baloon_templates/show.html.erb_spec.rb new file mode 100644 index 00000000..63357276 --- /dev/null +++ b/spec/views/baloon_templates/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "baloon_templates/show.html.erb" do + before(:each) do + @baloon_template = assign(:baloon_template, stub_model(BaloonTemplate)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/baloon_types/edit.html.erb_spec.rb b/spec/views/baloon_types/edit.html.erb_spec.rb new file mode 100644 index 00000000..3ffc1d05 --- /dev/null +++ b/spec/views/baloon_types/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "baloon_types/edit.html.erb" do + before(:each) do + @baloon_type = assign(:baloon_type, stub_model(BaloonType)) + end + + it "renders the edit baloon_type form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => baloon_types_path(@baloon_type), :method => "post" do + end + end +end diff --git a/spec/views/baloon_types/index.html.erb_spec.rb b/spec/views/baloon_types/index.html.erb_spec.rb new file mode 100644 index 00000000..3b0e8632 --- /dev/null +++ b/spec/views/baloon_types/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "baloon_types/index.html.erb" do + before(:each) do + assign(:baloon_types, [ + stub_model(BaloonType), + stub_model(BaloonType) + ]) + end + + it "renders a list of baloon_types" do + render + end +end diff --git a/spec/views/baloon_types/new.html.erb_spec.rb b/spec/views/baloon_types/new.html.erb_spec.rb new file mode 100644 index 00000000..9c950b94 --- /dev/null +++ b/spec/views/baloon_types/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "baloon_types/new.html.erb" do + before(:each) do + assign(:baloon_type, stub_model(BaloonType).as_new_record) + end + + it "renders new baloon_type form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => baloon_types_path, :method => "post" do + end + end +end diff --git a/spec/views/baloon_types/show.html.erb_spec.rb b/spec/views/baloon_types/show.html.erb_spec.rb new file mode 100644 index 00000000..765570a9 --- /dev/null +++ b/spec/views/baloon_types/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "baloon_types/show.html.erb" do + before(:each) do + @baloon_type = assign(:baloon_type, stub_model(BaloonType)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/baloons/edit.html.erb_spec.rb b/spec/views/baloons/edit.html.erb_spec.rb new file mode 100644 index 00000000..2c9b4880 --- /dev/null +++ b/spec/views/baloons/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "baloons/edit.html.erb" do + before(:each) do + @baloon = assign(:baloon, stub_model(Baloon)) + end + + it "renders the edit baloon form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => baloons_path(@baloon), :method => "post" do + end + end +end diff --git a/spec/views/baloons/index.html.erb_spec.rb b/spec/views/baloons/index.html.erb_spec.rb new file mode 100644 index 00000000..c9d7c35c --- /dev/null +++ b/spec/views/baloons/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "baloons/index.html.erb" do + before(:each) do + assign(:baloons, [ + stub_model(Baloon), + stub_model(Baloon) + ]) + end + + it "renders a list of baloons" do + render + end +end diff --git a/spec/views/baloons/new.html.erb_spec.rb b/spec/views/baloons/new.html.erb_spec.rb new file mode 100644 index 00000000..47d89e13 --- /dev/null +++ b/spec/views/baloons/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "baloons/new.html.erb" do + before(:each) do + assign(:baloon, stub_model(Baloon).as_new_record) + end + + it "renders new baloon form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => baloons_path, :method => "post" do + end + end +end diff --git a/spec/views/baloons/show.html.erb_spec.rb b/spec/views/baloons/show.html.erb_spec.rb new file mode 100644 index 00000000..2edae9d3 --- /dev/null +++ b/spec/views/baloons/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "baloons/show.html.erb" do + before(:each) do + @baloon = assign(:baloon, stub_model(Baloon)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/comics/edit.html.erb_spec.rb b/spec/views/comics/edit.html.erb_spec.rb new file mode 100644 index 00000000..42357cc1 --- /dev/null +++ b/spec/views/comics/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "comics/edit.html.erb" do + before(:each) do + @comic = assign(:comic, stub_model(Comic)) + end + + it "renders the edit comic form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => comics_path(@comic), :method => "post" do + end + end +end diff --git a/spec/views/comics/index.html.erb_spec.rb b/spec/views/comics/index.html.erb_spec.rb new file mode 100644 index 00000000..306c04cb --- /dev/null +++ b/spec/views/comics/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "comics/index.html.erb" do + before(:each) do + assign(:comics, [ + stub_model(Comic), + stub_model(Comic) + ]) + end + + it "renders a list of comics" do + render + end +end diff --git a/spec/views/comics/new.html.erb_spec.rb b/spec/views/comics/new.html.erb_spec.rb new file mode 100644 index 00000000..d8502159 --- /dev/null +++ b/spec/views/comics/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "comics/new.html.erb" do + before(:each) do + assign(:comic, stub_model(Comic).as_new_record) + end + + it "renders new comic form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => comics_path, :method => "post" do + end + end +end diff --git a/spec/views/comics/show.html.erb_spec.rb b/spec/views/comics/show.html.erb_spec.rb new file mode 100644 index 00000000..b0fc5f2f --- /dev/null +++ b/spec/views/comics/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "comics/show.html.erb" do + before(:each) do + @comic = assign(:comic, stub_model(Comic)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/common_lisences/edit.html.erb_spec.rb b/spec/views/common_lisences/edit.html.erb_spec.rb new file mode 100644 index 00000000..17730cb3 --- /dev/null +++ b/spec/views/common_lisences/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "common_lisences/edit.html.erb" do + before(:each) do + @common_lisence = assign(:common_lisence, stub_model(CommonLisence)) + end + + it "renders the edit common_lisence form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => common_lisences_path(@common_lisence), :method => "post" do + end + end +end diff --git a/spec/views/common_lisences/index.html.erb_spec.rb b/spec/views/common_lisences/index.html.erb_spec.rb new file mode 100644 index 00000000..85fbfcfd --- /dev/null +++ b/spec/views/common_lisences/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "common_lisences/index.html.erb" do + before(:each) do + assign(:common_lisences, [ + stub_model(CommonLisence), + stub_model(CommonLisence) + ]) + end + + it "renders a list of common_lisences" do + render + end +end diff --git a/spec/views/common_lisences/new.html.erb_spec.rb b/spec/views/common_lisences/new.html.erb_spec.rb new file mode 100644 index 00000000..3b449a07 --- /dev/null +++ b/spec/views/common_lisences/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "common_lisences/new.html.erb" do + before(:each) do + assign(:common_lisence, stub_model(CommonLisence).as_new_record) + end + + it "renders new common_lisence form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => common_lisences_path, :method => "post" do + end + end +end diff --git a/spec/views/common_lisences/show.html.erb_spec.rb b/spec/views/common_lisences/show.html.erb_spec.rb new file mode 100644 index 00000000..afd446a9 --- /dev/null +++ b/spec/views/common_lisences/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "common_lisences/show.html.erb" do + before(:each) do + @common_lisence = assign(:common_lisence, stub_model(CommonLisence)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/lisences/edit.html.erb_spec.rb b/spec/views/lisences/edit.html.erb_spec.rb new file mode 100644 index 00000000..df254889 --- /dev/null +++ b/spec/views/lisences/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "lisences/edit.html.erb" do + before(:each) do + @lisence = assign(:lisence, stub_model(Lisence)) + end + + it "renders the edit lisence form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => lisences_path(@lisence), :method => "post" do + end + end +end diff --git a/spec/views/lisences/index.html.erb_spec.rb b/spec/views/lisences/index.html.erb_spec.rb new file mode 100644 index 00000000..81d62e86 --- /dev/null +++ b/spec/views/lisences/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "lisences/index.html.erb" do + before(:each) do + assign(:lisences, [ + stub_model(Lisence), + stub_model(Lisence) + ]) + end + + it "renders a list of lisences" do + render + end +end diff --git a/spec/views/lisences/new.html.erb_spec.rb b/spec/views/lisences/new.html.erb_spec.rb new file mode 100644 index 00000000..8e76acce --- /dev/null +++ b/spec/views/lisences/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "lisences/new.html.erb" do + before(:each) do + assign(:lisence, stub_model(Lisence).as_new_record) + end + + it "renders new lisence form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => lisences_path, :method => "post" do + end + end +end diff --git a/spec/views/lisences/show.html.erb_spec.rb b/spec/views/lisences/show.html.erb_spec.rb new file mode 100644 index 00000000..1fc83c28 --- /dev/null +++ b/spec/views/lisences/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "lisences/show.html.erb" do + before(:each) do + @lisence = assign(:lisence, stub_model(Lisence)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/original_lisences/edit.html.erb_spec.rb b/spec/views/original_lisences/edit.html.erb_spec.rb new file mode 100644 index 00000000..c909a589 --- /dev/null +++ b/spec/views/original_lisences/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "original_lisences/edit.html.erb" do + before(:each) do + @original_lisence = assign(:original_lisence, stub_model(OriginalLisence)) + end + + it "renders the edit original_lisence form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => original_lisences_path(@original_lisence), :method => "post" do + end + end +end diff --git a/spec/views/original_lisences/index.html.erb_spec.rb b/spec/views/original_lisences/index.html.erb_spec.rb new file mode 100644 index 00000000..b9df3778 --- /dev/null +++ b/spec/views/original_lisences/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "original_lisences/index.html.erb" do + before(:each) do + assign(:original_lisences, [ + stub_model(OriginalLisence), + stub_model(OriginalLisence) + ]) + end + + it "renders a list of original_lisences" do + render + end +end diff --git a/spec/views/original_lisences/new.html.erb_spec.rb b/spec/views/original_lisences/new.html.erb_spec.rb new file mode 100644 index 00000000..ff3ca119 --- /dev/null +++ b/spec/views/original_lisences/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "original_lisences/new.html.erb" do + before(:each) do + assign(:original_lisence, stub_model(OriginalLisence).as_new_record) + end + + it "renders new original_lisence form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => original_lisences_path, :method => "post" do + end + end +end diff --git a/spec/views/original_lisences/show.html.erb_spec.rb b/spec/views/original_lisences/show.html.erb_spec.rb new file mode 100644 index 00000000..40939226 --- /dev/null +++ b/spec/views/original_lisences/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "original_lisences/show.html.erb" do + before(:each) do + @original_lisence = assign(:original_lisence, stub_model(OriginalLisence)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/original_pictures/edit.html.erb_spec.rb b/spec/views/original_pictures/edit.html.erb_spec.rb new file mode 100644 index 00000000..7cb7d2c6 --- /dev/null +++ b/spec/views/original_pictures/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "original_pictures/edit.html.erb" do + before(:each) do + @original_picture = assign(:original_picture, stub_model(OriginalPicture)) + end + + it "renders the edit original_picture form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => original_pictures_path(@original_picture), :method => "post" do + end + end +end diff --git a/spec/views/original_pictures/index.html.erb_spec.rb b/spec/views/original_pictures/index.html.erb_spec.rb new file mode 100644 index 00000000..7634112c --- /dev/null +++ b/spec/views/original_pictures/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "original_pictures/index.html.erb" do + before(:each) do + assign(:original_pictures, [ + stub_model(OriginalPicture), + stub_model(OriginalPicture) + ]) + end + + it "renders a list of original_pictures" do + render + end +end diff --git a/spec/views/original_pictures/new.html.erb_spec.rb b/spec/views/original_pictures/new.html.erb_spec.rb new file mode 100644 index 00000000..ce1cba06 --- /dev/null +++ b/spec/views/original_pictures/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "original_pictures/new.html.erb" do + before(:each) do + assign(:original_picture, stub_model(OriginalPicture).as_new_record) + end + + it "renders new original_picture form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => original_pictures_path, :method => "post" do + end + end +end diff --git a/spec/views/original_pictures/show.html.erb_spec.rb b/spec/views/original_pictures/show.html.erb_spec.rb new file mode 100644 index 00000000..51184ac5 --- /dev/null +++ b/spec/views/original_pictures/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "original_pictures/show.html.erb" do + before(:each) do + @original_picture = assign(:original_picture, stub_model(OriginalPicture)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/panels/edit.html.erb_spec.rb b/spec/views/panels/edit.html.erb_spec.rb new file mode 100644 index 00000000..ac7a29ff --- /dev/null +++ b/spec/views/panels/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "panels/edit.html.erb" do + before(:each) do + @panel = assign(:panel, stub_model(Panel)) + end + + it "renders the edit panel form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => panels_path(@panel), :method => "post" do + end + end +end diff --git a/spec/views/panels/index.html.erb_spec.rb b/spec/views/panels/index.html.erb_spec.rb new file mode 100644 index 00000000..b2a5172a --- /dev/null +++ b/spec/views/panels/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "panels/index.html.erb" do + before(:each) do + assign(:panels, [ + stub_model(Panel), + stub_model(Panel) + ]) + end + + it "renders a list of panels" do + render + end +end diff --git a/spec/views/panels/new.html.erb_spec.rb b/spec/views/panels/new.html.erb_spec.rb new file mode 100644 index 00000000..afcefb47 --- /dev/null +++ b/spec/views/panels/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "panels/new.html.erb" do + before(:each) do + assign(:panel, stub_model(Panel).as_new_record) + end + + it "renders new panel form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => panels_path, :method => "post" do + end + end +end diff --git a/spec/views/panels/show.html.erb_spec.rb b/spec/views/panels/show.html.erb_spec.rb new file mode 100644 index 00000000..da66f773 --- /dev/null +++ b/spec/views/panels/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "panels/show.html.erb" do + before(:each) do + @panel = assign(:panel, stub_model(Panel)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/pictures/edit.html.erb_spec.rb b/spec/views/pictures/edit.html.erb_spec.rb new file mode 100644 index 00000000..a9f82b1a --- /dev/null +++ b/spec/views/pictures/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "pictures/edit.html.erb" do + before(:each) do + @picture = assign(:picture, stub_model(Picture)) + end + + it "renders the edit picture form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => pictures_path(@picture), :method => "post" do + end + end +end diff --git a/spec/views/pictures/index.html.erb_spec.rb b/spec/views/pictures/index.html.erb_spec.rb new file mode 100644 index 00000000..06f977b8 --- /dev/null +++ b/spec/views/pictures/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "pictures/index.html.erb" do + before(:each) do + assign(:pictures, [ + stub_model(Picture), + stub_model(Picture) + ]) + end + + it "renders a list of pictures" do + render + end +end diff --git a/spec/views/pictures/new.html.erb_spec.rb b/spec/views/pictures/new.html.erb_spec.rb new file mode 100644 index 00000000..dde03485 --- /dev/null +++ b/spec/views/pictures/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "pictures/new.html.erb" do + before(:each) do + assign(:picture, stub_model(Picture).as_new_record) + end + + it "renders new picture form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => pictures_path, :method => "post" do + end + end +end diff --git a/spec/views/pictures/show.html.erb_spec.rb b/spec/views/pictures/show.html.erb_spec.rb new file mode 100644 index 00000000..dec106eb --- /dev/null +++ b/spec/views/pictures/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "pictures/show.html.erb" do + before(:each) do + @picture = assign(:picture, stub_model(Picture)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/source_pictures/edit.html.erb_spec.rb b/spec/views/source_pictures/edit.html.erb_spec.rb new file mode 100644 index 00000000..c7eb6d7a --- /dev/null +++ b/spec/views/source_pictures/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "source_pictures/edit.html.erb" do + before(:each) do + @source_picture = assign(:source_picture, stub_model(SourcePicture)) + end + + it "renders the edit source_picture form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => source_pictures_path(@source_picture), :method => "post" do + end + end +end diff --git a/spec/views/source_pictures/index.html.erb_spec.rb b/spec/views/source_pictures/index.html.erb_spec.rb new file mode 100644 index 00000000..5f767b37 --- /dev/null +++ b/spec/views/source_pictures/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "source_pictures/index.html.erb" do + before(:each) do + assign(:source_pictures, [ + stub_model(SourcePicture), + stub_model(SourcePicture) + ]) + end + + it "renders a list of source_pictures" do + render + end +end diff --git a/spec/views/source_pictures/new.html.erb_spec.rb b/spec/views/source_pictures/new.html.erb_spec.rb new file mode 100644 index 00000000..29bf705d --- /dev/null +++ b/spec/views/source_pictures/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "source_pictures/new.html.erb" do + before(:each) do + assign(:source_picture, stub_model(SourcePicture).as_new_record) + end + + it "renders new source_picture form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => source_pictures_path, :method => "post" do + end + end +end diff --git a/spec/views/source_pictures/show.html.erb_spec.rb b/spec/views/source_pictures/show.html.erb_spec.rb new file mode 100644 index 00000000..e1da0b62 --- /dev/null +++ b/spec/views/source_pictures/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "source_pictures/show.html.erb" do + before(:each) do + @source_picture = assign(:source_picture, stub_model(SourcePicture)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/speach_baloons/edit.html.erb_spec.rb b/spec/views/speach_baloons/edit.html.erb_spec.rb new file mode 100644 index 00000000..2dcb0153 --- /dev/null +++ b/spec/views/speach_baloons/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "speach_baloons/edit.html.erb" do + before(:each) do + @speach_baloon = assign(:speach_baloon, stub_model(SpeachBaloon)) + end + + it "renders the edit speach_baloon form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => speach_baloons_path(@speach_baloon), :method => "post" do + end + end +end diff --git a/spec/views/speach_baloons/index.html.erb_spec.rb b/spec/views/speach_baloons/index.html.erb_spec.rb new file mode 100644 index 00000000..5b321245 --- /dev/null +++ b/spec/views/speach_baloons/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "speach_baloons/index.html.erb" do + before(:each) do + assign(:speach_baloons, [ + stub_model(SpeachBaloon), + stub_model(SpeachBaloon) + ]) + end + + it "renders a list of speach_baloons" do + render + end +end diff --git a/spec/views/speach_baloons/new.html.erb_spec.rb b/spec/views/speach_baloons/new.html.erb_spec.rb new file mode 100644 index 00000000..3f23037d --- /dev/null +++ b/spec/views/speach_baloons/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "speach_baloons/new.html.erb" do + before(:each) do + assign(:speach_baloon, stub_model(SpeachBaloon).as_new_record) + end + + it "renders new speach_baloon form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => speach_baloons_path, :method => "post" do + end + end +end diff --git a/spec/views/speach_baloons/show.html.erb_spec.rb b/spec/views/speach_baloons/show.html.erb_spec.rb new file mode 100644 index 00000000..c1647e35 --- /dev/null +++ b/spec/views/speach_baloons/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "speach_baloons/show.html.erb" do + before(:each) do + @speach_baloon = assign(:speach_baloon, stub_model(SpeachBaloon)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/speach_templates/edit.html.erb_spec.rb b/spec/views/speach_templates/edit.html.erb_spec.rb new file mode 100644 index 00000000..049a7565 --- /dev/null +++ b/spec/views/speach_templates/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "speach_templates/edit.html.erb" do + before(:each) do + @speach_template = assign(:speach_template, stub_model(SpeachTemplate)) + end + + it "renders the edit speach_template form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => speach_templates_path(@speach_template), :method => "post" do + end + end +end diff --git a/spec/views/speach_templates/index.html.erb_spec.rb b/spec/views/speach_templates/index.html.erb_spec.rb new file mode 100644 index 00000000..84c0e596 --- /dev/null +++ b/spec/views/speach_templates/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "speach_templates/index.html.erb" do + before(:each) do + assign(:speach_templates, [ + stub_model(SpeachTemplate), + stub_model(SpeachTemplate) + ]) + end + + it "renders a list of speach_templates" do + render + end +end diff --git a/spec/views/speach_templates/new.html.erb_spec.rb b/spec/views/speach_templates/new.html.erb_spec.rb new file mode 100644 index 00000000..0b41c703 --- /dev/null +++ b/spec/views/speach_templates/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "speach_templates/new.html.erb" do + before(:each) do + assign(:speach_template, stub_model(SpeachTemplate).as_new_record) + end + + it "renders new speach_template form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => speach_templates_path, :method => "post" do + end + end +end diff --git a/spec/views/speach_templates/show.html.erb_spec.rb b/spec/views/speach_templates/show.html.erb_spec.rb new file mode 100644 index 00000000..a42cd9a7 --- /dev/null +++ b/spec/views/speach_templates/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "speach_templates/show.html.erb" do + before(:each) do + @speach_template = assign(:speach_template, stub_model(SpeachTemplate)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/speachbaloons/edit.html.erb_spec.rb b/spec/views/speachbaloons/edit.html.erb_spec.rb new file mode 100644 index 00000000..152b1bb6 --- /dev/null +++ b/spec/views/speachbaloons/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "speachbaloons/edit.html.erb" do + before(:each) do + @speachbaloon = assign(:speachbaloon, stub_model(Speachbaloon)) + end + + it "renders the edit speachbaloon form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => speachbaloons_path(@speachbaloon), :method => "post" do + end + end +end diff --git a/spec/views/speachbaloons/index.html.erb_spec.rb b/spec/views/speachbaloons/index.html.erb_spec.rb new file mode 100644 index 00000000..e6647afe --- /dev/null +++ b/spec/views/speachbaloons/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "speachbaloons/index.html.erb" do + before(:each) do + assign(:speachbaloons, [ + stub_model(Speachbaloon), + stub_model(Speachbaloon) + ]) + end + + it "renders a list of speachbaloons" do + render + end +end diff --git a/spec/views/speachbaloons/new.html.erb_spec.rb b/spec/views/speachbaloons/new.html.erb_spec.rb new file mode 100644 index 00000000..13dca10c --- /dev/null +++ b/spec/views/speachbaloons/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "speachbaloons/new.html.erb" do + before(:each) do + assign(:speachbaloon, stub_model(Speachbaloon).as_new_record) + end + + it "renders new speachbaloon form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => speachbaloons_path, :method => "post" do + end + end +end diff --git a/spec/views/speachbaloons/show.html.erb_spec.rb b/spec/views/speachbaloons/show.html.erb_spec.rb new file mode 100644 index 00000000..ecea8ec9 --- /dev/null +++ b/spec/views/speachbaloons/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "speachbaloons/show.html.erb" do + before(:each) do + @speachbaloon = assign(:speachbaloon, stub_model(Speachbaloon)) + end + + it "renders attributes in

" do + render + end +end diff --git a/spec/views/speaches/edit.html.erb_spec.rb b/spec/views/speaches/edit.html.erb_spec.rb new file mode 100644 index 00000000..6730778b --- /dev/null +++ b/spec/views/speaches/edit.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "speaches/edit.html.erb" do + before(:each) do + @speach = assign(:speach, stub_model(Speach)) + end + + it "renders the edit speach form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => speaches_path(@speach), :method => "post" do + end + end +end diff --git a/spec/views/speaches/index.html.erb_spec.rb b/spec/views/speaches/index.html.erb_spec.rb new file mode 100644 index 00000000..2a669b6c --- /dev/null +++ b/spec/views/speaches/index.html.erb_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +describe "speaches/index.html.erb" do + before(:each) do + assign(:speaches, [ + stub_model(Speach), + stub_model(Speach) + ]) + end + + it "renders a list of speaches" do + render + end +end diff --git a/spec/views/speaches/new.html.erb_spec.rb b/spec/views/speaches/new.html.erb_spec.rb new file mode 100644 index 00000000..65b98ec6 --- /dev/null +++ b/spec/views/speaches/new.html.erb_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +describe "speaches/new.html.erb" do + before(:each) do + assign(:speach, stub_model(Speach).as_new_record) + end + + it "renders new speach form" do + render + + # Run the generator again with the --webrat flag if you want to use webrat matchers + assert_select "form", :action => speaches_path, :method => "post" do + end + end +end diff --git a/spec/views/speaches/show.html.erb_spec.rb b/spec/views/speaches/show.html.erb_spec.rb new file mode 100644 index 00000000..fa28c093 --- /dev/null +++ b/spec/views/speaches/show.html.erb_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe "speaches/show.html.erb" do + before(:each) do + @speach = assign(:speach, stub_model(Speach)) + end + + it "renders attributes in

" do + render + end +end diff --git a/vendor/assets/stylesheets/.gitkeep b/vendor/assets/stylesheets/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/vendor/plugins/.gitkeep b/vendor/plugins/.gitkeep new file mode 100644 index 00000000..e69de29b -- 2.11.0