aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--app/controllers/admin_controller.rb14
-rw-r--r--app/controllers/admin_public_body_controller.rb83
-rw-r--r--app/controllers/admin_user_controller.rb12
-rw-r--r--app/controllers/application_controller.rb154
-rw-r--r--app/controllers/general_controller.rb151
-rw-r--r--app/controllers/public_body_controller.rb56
-rw-r--r--app/controllers/request_controller.rb140
-rw-r--r--app/controllers/services_controller.rb32
-rw-r--r--app/controllers/user_controller.rb47
-rw-r--r--app/helpers/application_helper.rb19
-rw-r--r--app/helpers/config_helper.rb4
-rwxr-xr-xapp/helpers/link_to_helper.rb27
-rw-r--r--app/models/application_mailer.rb4
-rw-r--r--app/models/exim_log.rb6
-rw-r--r--app/models/incoming_message.rb54
-rw-r--r--app/models/info_request.rb21
-rw-r--r--app/models/info_request_event.rb81
-rw-r--r--app/models/public_body.rb177
-rw-r--r--app/models/request_mailer.rb48
-rw-r--r--app/models/track_mailer.rb18
-rw-r--r--app/models/track_thing.rb107
-rw-r--r--app/models/user.rb39
-rw-r--r--app/models/user_mailer.rb2
-rw-r--r--app/views/admin_public_body/_form.rhtml82
-rw-r--r--app/views/admin_public_body/_tag_help.rhtml18
-rw-r--r--app/views/admin_public_body/edit.rhtml41
-rw-r--r--app/views/admin_public_body/import_csv.rhtml36
-rw-r--r--app/views/admin_public_body/new.rhtml26
-rw-r--r--app/views/admin_public_body/show.rhtml11
-rw-r--r--app/views/admin_user/show.rhtml11
-rw-r--r--app/views/admin_user/show_bounce_message.rhtml3
-rw-r--r--app/views/comment/_single_comment.rhtml2
-rw-r--r--app/views/comment/new.rhtml3
-rw-r--r--app/views/general/_advanced_search_tips.rhtml49
-rw-r--r--app/views/general/_credits.rhtml2
-rw-r--r--app/views/general/_footer.rhtml6
-rw-r--r--app/views/general/_frontpage_intro_sentence.rhtml7
-rw-r--r--app/views/general/_frontpage_search_examples.es.rhtml1
-rw-r--r--app/views/general/_frontpage_search_examples.rhtml1
-rw-r--r--app/views/general/_localised_datepicker.rhtml18
-rw-r--r--app/views/general/_orglink.rhtml2
-rw-r--r--app/views/general/_topnav.rhtml10
-rw-r--r--app/views/general/advanced_search.rhtml0
-rw-r--r--app/views/general/blog.rhtml101
-rw-r--r--app/views/general/exception_caught.rhtml35
-rw-r--r--app/views/general/frontpage.rhtml77
-rw-r--r--app/views/general/search.rhtml302
-rw-r--r--app/views/help/_sidebar.rhtml9
-rw-r--r--app/views/help/about.es.rhtml10
-rw-r--r--app/views/help/about.rhtml96
-rw-r--r--app/views/help/alaveteli.rhtml30
-rw-r--r--app/views/help/api.rhtml155
-rw-r--r--app/views/help/contact.rhtml8
-rw-r--r--app/views/help/credits.rhtml161
-rw-r--r--app/views/help/officers.rhtml476
-rw-r--r--app/views/help/privacy.rhtml100
-rw-r--r--app/views/help/requesting.rhtml548
-rw-r--r--app/views/help/unhappy.rhtml2
-rw-r--r--app/views/layouts/admin.rhtml6
-rw-r--r--app/views/layouts/default.rhtml145
-rw-r--r--app/views/layouts/no_chrome.rhtml41
-rw-r--r--app/views/outgoing_mailer/initial_request.rhtml1
-rw-r--r--app/views/public_body/_body_listing.rhtml2
-rw-r--r--app/views/public_body/_body_listing_single.rhtml4
-rw-r--r--app/views/public_body/_search_ahead.rhtml18
-rw-r--r--app/views/public_body/list.rhtml48
-rw-r--r--app/views/public_body/show.rhtml169
-rw-r--r--app/views/request/_after_actions.rhtml10
-rw-r--r--app/views/request/_correspondence.rhtml20
-rw-r--r--app/views/request/_followup.rhtml37
-rw-r--r--app/views/request/_next_actions.rhtml1
-rw-r--r--app/views/request/_request_filter_form.rhtml52
-rw-r--r--app/views/request/_request_listing_via_event.rhtml29
-rw-r--r--app/views/request/_search_ahead.rhtml12
-rw-r--r--app/views/request/_sidebar.rhtml34
-rw-r--r--app/views/request/list.rhtml63
-rw-r--r--app/views/request/new.rhtml232
-rw-r--r--app/views/request/preview.rhtml10
-rw-r--r--app/views/request/select_authority.rhtml68
-rw-r--r--app/views/request/show.rhtml2
-rw-r--r--app/views/request/simple_correspondence.rhtml45
-rw-r--r--app/views/track/_tracking_links.rhtml17
-rw-r--r--app/views/track_mailer/event_digest.rhtml12
-rw-r--r--app/views/user/_signin.rhtml7
-rw-r--r--app/views/user/_signup.rhtml13
-rw-r--r--app/views/user/set_draft_profile_photo.rhtml4
-rw-r--r--app/views/user/show.rhtml72
-rw-r--r--app/views/user/sign.rhtml23
-rw-r--r--app/views/user/signin_successful.rhtml11
-rw-r--r--app/views/user/wrong_user.rhtml6
m---------commonlib0
-rw-r--r--config/alert-tracks-debian.ugly2
-rw-r--r--config/crontab.ugly2
-rw-r--r--config/custom-routes.rb1
-rw-r--r--config/environment.rb7
-rw-r--r--config/general.yml-example30
-rw-r--r--config/httpd.conf17
-rw-r--r--config/routes.rb34
-rw-r--r--db/migrate/102_add_locale_to_users.rb11
-rw-r--r--db/migrate/103_add_user_bounce_columns.rb15
-rw-r--r--doc/CHANGES.md35
-rw-r--r--doc/INSTALL-exim4.md33
-rw-r--r--doc/INSTALL.md18
-rw-r--r--lib/alaveteli_external_command.rb33
-rw-r--r--lib/external_command.rb135
-rw-r--r--lib/public_body_categories.rb43
-rw-r--r--lib/public_body_categories_en.rb160
-rw-r--r--lib/tasks/stats.rake4
-rw-r--r--lib/world_foi_websites.rb40
-rw-r--r--locale/app.pot3196
-rw-r--r--locale/de/app.po6774
-rw-r--r--locale/es/app.po7139
-rw-r--r--locale/fr/app.po5026
-rw-r--r--locale/sq/app.po2594
-rw-r--r--public/.gitignore2
-rw-r--r--public/images/arrow-left.pngbin0 -> 353 bytes
-rw-r--r--public/images/arrow-right.pngbin0 -> 439 bytes
-rw-r--r--public/images/bighand.pngbin0 -> 2153 bytes
-rw-r--r--public/images/button-gradient-large.pngbin0 -> 266 bytes
-rw-r--r--public/images/button-gradient.pngbin0 -> 329 bytes
-rw-r--r--public/images/button-preview.pngbin0 -> 1743 bytes
-rw-r--r--public/images/button-search.pngbin0 -> 1761 bytes
-rw-r--r--public/images/calendar.pngbin0 -> 388 bytes
-rw-r--r--public/images/defaultprofilepic.pngbin0 -> 4061 bytes
-rw-r--r--public/images/email-16.pngbin593 -> 313 bytes
-rw-r--r--public/images/flying-computer.pngbin0 -> 10357 bytes
-rw-r--r--public/images/home-grad.pngbin0 -> 306 bytes
-rw-r--r--public/images/icon-foi.pngbin0 -> 320 bytes
-rw-r--r--public/images/icon-person.pngbin0 -> 345 bytes
-rw-r--r--public/images/icon-publicbody.pngbin0 -> 356 bytes
-rw-r--r--public/images/link-icon.pngbin0 -> 304 bytes
-rw-r--r--public/images/littlehand.pngbin0 -> 1113 bytes
-rw-r--r--public/images/logo.pngbin0 -> 1064 bytes
-rw-r--r--public/images/quote-marks.pngbin0 -> 470 bytes
-rw-r--r--public/images/quote.pngbin1128 -> 470 bytes
-rw-r--r--public/images/rss-16.pngbin0 -> 905 bytes
-rw-r--r--public/images/rss-blue.pngbin0 -> 490 bytes
-rw-r--r--public/images/rss-orange.pngbin0 -> 545 bytes
-rw-r--r--public/images/search-button.pngbin0 -> 526 bytes
-rw-r--r--public/images/small-white-cross.pngbin0 -> 355 bytes
-rw-r--r--public/images/start-button.pngbin0 -> 809 bytes
-rw-r--r--public/images/status-complete.pngbin0 -> 878 bytes
-rw-r--r--public/images/status-denied.pngbin0 -> 969 bytes
-rw-r--r--public/images/status-error.pngbin0 -> 788 bytes
-rw-r--r--public/images/status-gone-postal.pngbin0 -> 882 bytes
-rw-r--r--public/images/status-internal-review.pngbin0 -> 965 bytes
-rw-r--r--public/images/status-not-held.pngbin0 -> 917 bytes
-rw-r--r--public/images/status-overdue.pngbin0 -> 1049 bytes
-rw-r--r--public/images/status-pending.pngbin0 -> 1031 bytes
-rw-r--r--public/images/status-withdrawn.pngbin0 -> 891 bytes
-rw-r--r--public/images/stripes-70-light.pngbin0 -> 260 bytes
-rw-r--r--public/images/stripes-70-light2.pngbin0 -> 263 bytes
-rw-r--r--public/images/stripes-70.pngbin0 -> 49397 bytes
-rw-r--r--public/images/stripes.pngbin0 -> 49397 bytes
-rw-r--r--public/images/twitter-16.pngbin0 -> 586 bytes
-rw-r--r--public/images/ui-icons-theme.pngbin0 -> 4863 bytes
-rw-r--r--public/javascripts/ba-throttle-debounce.js9
-rw-r--r--public/javascripts/general.js47
-rw-r--r--public/javascripts/jquery-ui.min.js168
-rw-r--r--public/javascripts/jquery.cookie.js111
-rwxr-xr-xpublic/javascripts/jquery.fancybox-1.3.4.pack.js46
-rw-r--r--public/javascripts/jquery.form.js11
-rw-r--r--public/javascripts/jquery.js29
-rw-r--r--public/robots.txt6
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-bg_flat_0_aaaaaa_40x100.pngbin0 -> 180 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-bg_flat_55_fbf9ee_40x100.pngbin0 -> 182 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-bg_flat_65_ffffff_40x100.pngbin0 -> 178 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-bg_flat_75_cccccc_40x100.pngbin0 -> 180 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-bg_flat_75_dadada_40x100.pngbin0 -> 180 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-bg_flat_75_e6e6e6_40x100.pngbin0 -> 180 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-bg_flat_75_ffffff_40x100.pngbin0 -> 178 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.pngbin0 -> 123 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-icons_222222_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-icons_2e83ff_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-icons_454545_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-icons_888888_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/images/ui-icons_cd0a0a_256x240.pngbin0 -> 4369 bytes
-rwxr-xr-xpublic/stylesheets/admin-theme/jquery-ui-1.8.15.custom.css375
-rw-r--r--public/stylesheets/admin.css6
-rwxr-xr-xpublic/stylesheets/fancybox-x.pngbin0 -> 203 bytes
-rwxr-xr-xpublic/stylesheets/fancybox-y.pngbin0 -> 176 bytes
-rwxr-xr-xpublic/stylesheets/fancybox.pngbin0 -> 15287 bytes
-rw-r--r--public/stylesheets/fonts.css73
-rwxr-xr-xpublic/stylesheets/fonts/delicious-bold-webfont.eotbin0 -> 21160 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-bold-webfont.svg222
-rwxr-xr-xpublic/stylesheets/fonts/delicious-bold-webfont.ttfbin0 -> 42648 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-bold-webfont.woffbin0 -> 24328 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-bolditalic-webfont.eotbin0 -> 24992 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-bolditalic-webfont.svg222
-rwxr-xr-xpublic/stylesheets/fonts/delicious-bolditalic-webfont.ttfbin0 -> 51020 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-bolditalic-webfont.woffbin0 -> 28268 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-heavy-webfont.eotbin0 -> 21199 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-heavy-webfont.svg222
-rwxr-xr-xpublic/stylesheets/fonts/delicious-heavy-webfont.ttfbin0 -> 42744 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-heavy-webfont.woffbin0 -> 24308 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-italic-webfont.eotbin0 -> 23704 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-italic-webfont.svg222
-rwxr-xr-xpublic/stylesheets/fonts/delicious-italic-webfont.ttfbin0 -> 50464 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-italic-webfont.woffbin0 -> 27080 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-roman-webfont.eotbin0 -> 20415 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-roman-webfont.svg222
-rwxr-xr-xpublic/stylesheets/fonts/delicious-roman-webfont.ttfbin0 -> 42508 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-roman-webfont.woffbin0 -> 23432 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-smallcaps-webfont.eotbin0 -> 9940 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-smallcaps-webfont.svg222
-rwxr-xr-xpublic/stylesheets/fonts/delicious-smallcaps-webfont.ttfbin0 -> 20936 bytes
-rwxr-xr-xpublic/stylesheets/fonts/delicious-smallcaps-webfont.woffbin0 -> 12284 bytes
-rw-r--r--public/stylesheets/ie7.css18
-rwxr-xr-xpublic/stylesheets/jquery.fancybox-1.3.4.css359
-rw-r--r--public/stylesheets/main.css73
-rw-r--r--public/stylesheets/print.css38
-rw-r--r--public/stylesheets/theme.css1141
-rwxr-xr-xscript/handle-mail-replies149
-rwxr-xr-xscript/mailin24
-rwxr-xr-xscript/rails-post-deploy7
-rw-r--r--spec/controllers/admin_public_body_controller_spec.rb109
-rw-r--r--spec/controllers/admin_request_controller_spec.rb2
-rw-r--r--spec/controllers/general_controller_spec.rb30
-rw-r--r--spec/controllers/public_body_controller_spec.rb76
-rw-r--r--spec/controllers/request_controller_spec.rb157
-rw-r--r--spec/controllers/services_controller_spec.rb31
-rw-r--r--spec/controllers/track_controller_spec.rb17
-rw-r--r--spec/controllers/user_controller_spec.rb30
-rw-r--r--spec/fixtures/files/autoresponse-header.email22
-rw-r--r--spec/fixtures/files/empty-return-path.email21
-rw-r--r--spec/fixtures/files/fake-authority-add-tags.rb4
-rw-r--r--spec/fixtures/files/fake-authority-type-with-field-names.csv8
-rw-r--r--spec/fixtures/files/track-response-exchange-oof-1.email102
-rw-r--r--spec/fixtures/files/track-response-exim-bounce.email67
-rw-r--r--spec/fixtures/files/track-response-generic-oof.email8
-rw-r--r--spec/fixtures/files/track-response-lotus-oof-1.email58
-rw-r--r--spec/fixtures/files/track-response-messageclass-oof.email63
-rw-r--r--spec/fixtures/files/track-response-messagelabs-oof-1.email62
-rw-r--r--spec/fixtures/files/track-response-multipart-report.email113
-rw-r--r--spec/fixtures/users.yml18
-rw-r--r--spec/integration/errors_spec.rb45
-rw-r--r--spec/integration/search_request_spec.rb54
-rwxr-xr-xspec/lib/external_command_scripts/output.sh22
-rw-r--r--spec/lib/external_command_spec.rb40
-rw-r--r--spec/models/customstates.rb20
-rw-r--r--spec/models/incoming_message_spec.rb60
-rw-r--r--spec/models/outgoing_mailer_spec.rb1
-rw-r--r--spec/models/public_body_spec.rb142
-rw-r--r--spec/models/track_mailer_spec.rb40
-rw-r--r--spec/models/track_thing_spec.rb10
-rw-r--r--spec/models/user_spec.rb23
-rw-r--r--spec/script/handle-mail-replies_spec.rb58
-rw-r--r--spec/spec_helper.rb8
-rw-r--r--spec/views/public_body/show.rhtml_spec.rb15
-rw-r--r--spec/views/request/_after_actions.rhtml_spec.rb27
-rw-r--r--spec/views/request/list.rhtml_spec.rb6
-rw-r--r--vendor/gems/fast_gettext-0.5.10/.specification4
-rw-r--r--vendor/gems/fast_gettext-0.5.10/lib/fast_gettext/mo_file.rb8
-rw-r--r--vendor/gems/gettext-2.1.0/.specification36
-rw-r--r--vendor/gems/json-1.5.1/.specification4
-rw-r--r--vendor/gems/locale-2.0.5/.specification22
-rw-r--r--vendor/gems/rack-1.1.0/.specification2
-rw-r--r--vendor/gems/rdoc-2.4.3/.document4
-rw-r--r--vendor/gems/rdoc-2.4.3/.specification57
-rw-r--r--vendor/gems/rdoc-2.4.3/History.txt260
-rw-r--r--vendor/gems/rdoc-2.4.3/Manifest.txt126
-rw-r--r--vendor/gems/rdoc-2.4.3/README.txt47
-rw-r--r--vendor/gems/rdoc-2.4.3/RI.txt58
-rw-r--r--vendor/gems/rdoc-2.4.3/Rakefile71
-rwxr-xr-xvendor/gems/rdoc-2.4.3/bin/rdoc35
-rwxr-xr-xvendor/gems/rdoc-2.4.3/bin/ri5
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc.rb398
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/alias.rb54
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/anon_class.rb10
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/any_method.rb190
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/attr.rb79
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/cache.rb41
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/class_module.rb87
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/code_object.rb152
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/code_objects.rb23
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/constant.rb36
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/context.rb712
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/diagram.rb340
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/dot.rb249
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator.rb8
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/darkfish.rb455
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/markup.rb194
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb230
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/.document0
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/classpage.rhtml281
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/filepage.rhtml114
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/brick.pngbin0 -> 452 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/brick_link.pngbin0 -> 764 bytes
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bug.pngbin0 -> 774 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_black.pngbin0 -> 211 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.pngbin0 -> 207 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.pngbin0 -> 209 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/date.pngbin0 -> 626 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/find.pngbin0 -> 659 bytes
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gifbin0 -> 5886 bytes
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/macFFBgHack.pngbin0 -> 207 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/package.pngbin0 -> 853 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_green.pngbin0 -> 621 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_white_text.pngbin0 -> 342 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_white_width.pngbin0 -> 309 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/plugin.pngbin0 -> 591 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/ruby.pngbin0 -> 592 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/tag_green.pngbin0 -> 613 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/wrench.pngbin0 -> 610 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/wrench_orange.pngbin0 -> 584 bytes
-rwxr-xr-xvendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/zoom.pngbin0 -> 692 bytes
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/index.rhtml64
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/darkfish.js116
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/jquery.js32
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/quicksearch.js114
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js10
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/rdoc.css696
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ghost_method.rb8
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/include.rb39
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/known_classes.rb68
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup.rb378
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/attribute_manager.rb311
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/formatter.rb25
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/fragments.rb377
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/inline.rb126
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/lines.rb156
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/preprocess.rb80
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_flow.rb211
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_html.rb406
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_html_crossref.rb140
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_latex.rb328
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_test.rb53
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_texinfo.rb73
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/meta_method.rb8
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/normal_class.rb18
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/normal_module.rb34
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/options.rb542
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/parser.rb138
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/parser/c.rb678
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/parser/perl.rb165
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/parser/ruby.rb2904
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/parser/simple.rb39
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/rdoc.rb375
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/require.rb32
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ri.rb8
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ri/cache.rb187
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ri/descriptions.rb156
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ri/display.rb340
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ri/driver.rb828
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ri/formatter.rb654
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ri/paths.rb93
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ri/reader.rb106
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ri/util.rb79
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/ri/writer.rb68
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/single_class.rb8
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/stats.rb178
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/task.rb276
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/tokenstream.rb33
-rw-r--r--vendor/gems/rdoc-2.4.3/lib/rdoc/top_level.rb242
-rw-r--r--vendor/gems/rdoc-2.4.3/test/binary.datbin0 -> 1024 bytes
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test.ja.rdoc8
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test.ja.txt8
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_attribute_manager.rb76
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_any_method.rb10
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_code_object.rb80
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_constant.rb15
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_context.rb250
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_include.rb17
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_markup.rb626
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_attribute_manager.rb243
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_to_html.rb81
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_to_html_crossref.rb161
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_normal_module.rb26
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_parser.rb29
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_c.rb401
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_perl.rb74
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_ruby.rb1040
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_require.rb25
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_attribute_formatter.rb44
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_default_display.rb302
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_driver.rb94
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_formatter.rb320
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_html_formatter.rb141
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_overstrike_formatter.rb71
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_task.rb64
-rw-r--r--vendor/gems/rdoc-2.4.3/test/test_rdoc_top_level.rb85
-rw-r--r--vendor/gems/rdoc-2.4.3/test/xref_data.rb46
-rw-r--r--vendor/gems/rdoc-2.4.3/test/xref_test_case.rb48
-rw-r--r--vendor/gems/recaptcha-0.3.1/.specification2
-rw-r--r--vendor/gems/rspec-1.3.1/.specification2
-rw-r--r--vendor/gems/rspec-rails-1.3.3/.specification2
-rw-r--r--vendor/gems/will_paginate-2.3.15/.specification2
-rw-r--r--vendor/plugins/action_mailer_layouts/CHANGELOG21
-rw-r--r--vendor/plugins/action_mailer_layouts/README35
-rw-r--r--vendor/plugins/action_mailer_layouts/init.rb7
-rw-r--r--vendor/plugins/action_mailer_layouts/plugin.rb48
-rw-r--r--vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb6
393 files changed, 43320 insertions, 13474 deletions
diff --git a/.gitignore b/.gitignore
index cef86879d..92831606a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,4 @@ TAGS
/vendor/plugins/*theme
/locale/model_attributes.rb
/files/
+public/download \ No newline at end of file
diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb
index 655670b5a..0bfbcd3d1 100644
--- a/app/controllers/admin_controller.rb
+++ b/app/controllers/admin_controller.rb
@@ -45,13 +45,17 @@ class AdminController < ApplicationController
end
end
private
+
def authenticate
- username = MySociety::Config.get('ADMIN_USERNAME', '')
- password = MySociety::Config.get('ADMIN_PASSWORD', '')
- if !username.empty? && !password.empty?
+ config_username = MySociety::Config.get('ADMIN_USERNAME', '')
+ config_password = MySociety::Config.get('ADMIN_PASSWORD', '')
+ if !config_username.empty? && !config_password.empty?
authenticate_or_request_with_http_basic do |user_name, password|
- user_name == username && password == password
- session[:using_admin] = 1
+ if user_name == config_username && password == config_password
+ session[:using_admin] = 1
+ else
+ request_http_basic_authentication
+ end
end
else
session[:using_admin] = 1
diff --git a/app/controllers/admin_public_body_controller.rb b/app/controllers/admin_public_body_controller.rb
index 021122734..e249cef11 100644
--- a/app/controllers/admin_public_body_controller.rb
+++ b/app/controllers/admin_public_body_controller.rb
@@ -6,6 +6,8 @@
#
# $Id: admin_public_body_controller.rb,v 1.23 2009-08-26 00:58:29 francis Exp $
+require "public_body_categories"
+
class AdminPublicBodyController < AdminController
def index
list
@@ -82,16 +84,12 @@ class AdminPublicBodyController < AdminController
end
def new
- @locale = self.locale_from_params()
- PublicBody.with_locale(@locale) do
- @public_body = PublicBody.new
- render
- end
+ @public_body = PublicBody.new
+ render
end
-
+
def create
- @locale = self.locale_from_params()
- PublicBody.with_locale(@locale) do
+ PublicBody.with_locale(I18n.default_locale) do
params[:public_body][:last_edit_editor] = admin_http_auth_user()
@public_body = PublicBody.new(params[:public_body])
if @public_body.save
@@ -104,17 +102,13 @@ class AdminPublicBodyController < AdminController
end
def edit
- @locale = self.locale_from_params()
- PublicBody.with_locale(@locale) do
- @public_body = PublicBody.find(params[:id])
- @public_body.last_edit_comment = ""
- render
- end
+ @public_body = PublicBody.find(params[:id])
+ @public_body.last_edit_comment = ""
+ render
end
def update
- @locale = self.locale_from_params()
- PublicBody.with_locale(@locale) do
+ PublicBody.with_locale(I18n.default_locale) do
params[:public_body][:last_edit_editor] = admin_http_auth_user()
@public_body = PublicBody.find(params[:id])
if @public_body.update_attributes(params[:public_body])
@@ -146,41 +140,36 @@ class AdminPublicBodyController < AdminController
def import_csv
if params[:csv_file]
- if !params[:tag].empty?
- if params['commit'] == 'Dry run'
- dry_run_only = true
- elsif params['commit'] == 'Upload'
- dry_run_only = false
+ if params['commit'] == 'Dry run'
+ dry_run_only = true
+ elsif params['commit'] == 'Upload'
+ dry_run_only = false
+ else
+ raise "internal error, unknown button label"
+ end
+
+ # Try with dry run first
+ csv_contents = params[:csv_file].read
+ en = PublicBody.import_csv(csv_contents, params[:tag], params[:tag_behaviour], true, admin_http_auth_user(), I18n.available_locales)
+ errors = en[0]
+ notes = en[1]
+
+ if errors.size == 0
+ if dry_run_only
+ notes.push("Dry run was successful, real run would do as above.")
else
- raise "internal error, unknown button label"
- end
-
- # Try with dry run first
- csv_contents = params[:csv_file].read
- en = PublicBody.import_csv(csv_contents, params[:tag], true, admin_http_auth_user(), I18n.available_locales)
- errors = en[0]
- notes = en[1]
-
- if errors.size == 0
- if dry_run_only
- notes.push("Dry run was successful, real run would do as above.")
- else
- # And if OK, with real run
- en = PublicBody.import_csv(csv_contents, params[:tag], false, admin_http_auth_user(), available_locales)
- errors = en[0]
- notes = en[1]
- if errors.size != 0
- raise "dry run mismatched real run"
- end
- notes.push("Import was successful.")
+ # And if OK, with real run
+ en = PublicBody.import_csv(csv_contents, params[:tag], params[:tag_behaviour], false, admin_http_auth_user(), I18n.available_locales)
+ errors = en[0]
+ notes = en[1]
+ if errors.size != 0
+ raise "dry run mismatched real run"
end
+ notes.push("Import was successful.")
end
- @errors = errors.join("\n")
- @notes = notes.join("\n")
- else
- @errors = "Please enter a tag, use a singular e.g. sea_fishery_committee"
- @notes = ""
end
+ @errors = errors.join("\n")
+ @notes = notes.join("\n")
else
@errors = ""
@notes = ""
diff --git a/app/controllers/admin_user_controller.rb b/app/controllers/admin_user_controller.rb
index 404c4c3fe..5d90e74fe 100644
--- a/app/controllers/admin_user_controller.rb
+++ b/app/controllers/admin_user_controller.rb
@@ -28,6 +28,10 @@ class AdminUserController < AdminController
# Don't use @user as that is any logged in user
@admin_user = User.find(params[:id])
end
+
+ def show_bounce_message
+ @admin_user = User.find(params[:id])
+ end
def edit
@admin_user = User.find(params[:id])
@@ -57,6 +61,14 @@ class AdminUserController < AdminController
flash[:notice] = 'Track destroyed'
redirect_to user_admin_url(track_thing.tracking_user)
end
+
+ def clear_bounce
+ user = User.find(params[:id])
+ user.email_bounced_at = nil
+ user.email_bounce_message = ""
+ user.save!
+ redirect_to user_admin_url(user)
+ end
def login_as
@admin_user = User.find(params[:id]) # check user does exist
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 0df3e22da..b7457c48e 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -8,13 +8,20 @@
#
# $Id: application.rb,v 1.59 2009-09-17 13:01:56 francis Exp $
+require 'open-uri'
class ApplicationController < ActionController::Base
# Standard headers, footers and navigation for whole site
layout "default"
include FastGettext::Translation # make functions like _, n_, N_ etc available)
+
+ # Note: a filter stops the chain if it redirects or renders something
+ before_filter :authentication_check
before_filter :set_gettext_locale
+ before_filter :check_in_post_redirect
+ before_filter :session_remember_me
before_filter :set_vary_header
+
# scrub sensitive parameters from the logs
filter_parameter_logging :password
@@ -47,7 +54,14 @@ class ApplicationController < ActionController::Base
else
requested_locale = params[:locale] || session[:locale] || cookies[:locale] || I18n.default_locale
end
+ requested_locale = FastGettext.best_locale_in(requested_locale)
session[:locale] = FastGettext.set_locale(requested_locale)
+ if !@user.nil?
+ if @user.locale != requested_locale
+ @user.locale = session[:locale]
+ @user.save!
+ end
+ end
end
# scrub sensitive parameters from the logs
@@ -84,7 +98,6 @@ class ApplicationController < ActionController::Base
# Set cookie expiry according to "remember me" checkbox, as per "An easier
# and more flexible hack" on this page:
# http://wiki.rubyonrails.org/rails/pages/HowtoChangeSessionOptions
- before_filter :session_remember_me
def session_remember_me
# Reset the "sliding window" session expiry time.
if request.env['rack.session.options']
@@ -101,11 +114,17 @@ class ApplicationController < ActionController::Base
# Make sure expiry time for session is set (before_filters are
# otherwise missed by this override)
session_remember_me
-
+ case exception
+ when ActiveRecord::RecordNotFound, ActionController::UnknownAction, ActionController::RoutingError
+ @status = 404
+ else
+ @status = 500
+ end
# Display user appropriate error message
@exception_backtrace = exception.backtrace.join("\n")
@exception_class = exception.class.to_s
- render :template => "general/exception_caught.rhtml", :status => 404
+ @exception_message = exception.message
+ render :template => "general/exception_caught.rhtml", :status => @status
end
# For development sites.
@@ -192,7 +211,9 @@ class ApplicationController < ActionController::Base
post_redirect = PostRedirect.new(:uri => request.request_uri, :post_params => params,
:reason_params => reason_params)
post_redirect.save!
- redirect_to signin_url(:token => post_redirect.token)
+ # 'modal' controls whether the sign-in form will be displayed in the typical full-blown
+ # page or on its own, useful for pop-ups
+ redirect_to signin_url(:token => post_redirect.token, :modal => params[:modal])
return false
end
return true
@@ -256,7 +277,6 @@ class ApplicationController < ActionController::Base
end
# If we are in a faked redirect to POST request, then set post params.
- before_filter :check_in_post_redirect
def check_in_post_redirect
if params[:post_redirect] and session[:post_redirect_token]
post_redirect = PostRedirect.find_by_token(session[:post_redirect_token])
@@ -265,7 +285,6 @@ class ApplicationController < ActionController::Base
end
# Default layout shows user in corner, so needs access to it
- before_filter :authentication_check
def authentication_check
if session[:user_id]
@user = authenticated_user
@@ -339,14 +358,127 @@ class ApplicationController < ActionController::Base
return (params[:page] || "1").to_i
end
- # Store last visited pages, for contact form
+ # Store last visited pages, for contact form; but only for logged in users, as otherwise this breaks caching
def set_last_request(info_request)
- session[:last_request_id] = info_request.id
- session[:last_body_id] = nil
+ if !session[:user_id].nil?
+ session[:last_request_id] = info_request.id
+ session[:last_body_id] = nil
+ end
end
def set_last_body(public_body)
- session[:last_request_id] = nil
- session[:last_body_id] = public_body.id
+ if !session[:user_id].nil?
+ session[:last_request_id] = nil
+ session[:last_body_id] = public_body.id
+ end
+ end
+
+ def param_exists(item)
+ return params[item] && !params[item].empty?
+ end
+
+ def get_request_variety_from_params
+ query = ""
+ sortby = "newest"
+ varieties = []
+ if params[:request_variety] && !(query =~ /variety:/)
+ if params[:request_variety].include? "sent"
+ varieties -= ['variety:sent', 'variety:followup_sent', 'variety:response', 'variety:comment']
+ varieties << ['variety:sent', 'variety:followup_sent']
+ end
+ if params[:request_variety].include? "response"
+ varieties << ['variety:response']
+ end
+ if params[:request_variety].include? "comment"
+ varieties << ['variety:comment']
+ end
+ end
+ if !varieties.empty?
+ query = " (#{varieties.join(' OR ')})"
+ end
+ return query
+ end
+
+ def get_status_from_params
+ query = ""
+ if params[:latest_status]
+ statuses = []
+ if params[:latest_status].class == String
+ params[:latest_status] = [params[:latest_status]]
+ end
+ if params[:latest_status].include?("recent") || params[:latest_status].include?("all")
+ query += " variety:sent"
+ end
+ if params[:latest_status].include? "successful"
+ statuses << ['latest_status:successful', 'latest_status:partially_successful']
+ end
+ if params[:latest_status].include? "unsuccessful"
+ statuses << ['latest_status:rejected', 'latest_status:not_held']
+ end
+ if params[:latest_status].include? "awaiting"
+ statuses << ['latest_status:waiting_response', 'latest_status:waiting_clarification', 'waiting_classification:true']
+ end
+ if params[:latest_status].include? "internal_review"
+ statuses << ['status:internal_review']
+ end
+ if params[:latest_status].include? "other"
+ statuses << ['latest_status:gone_postal', 'latest_status:error_message', 'latest_status:requires_admin', 'latest_status:user_withdrawn']
+ end
+ if params[:latest_status].include? "gone_postal"
+ statuses << ['latest_status:gone_postal']
+ end
+ if !statuses.empty?
+ query = " (#{statuses.join(' OR ')})"
+ end
+ end
+ return query
+ end
+
+ def get_date_range_from_params
+ query = ""
+ if param_exists(:request_date_after) && !param_exists(:request_date_before)
+ params[:request_date_before] = Time.now.strftime("%d/%m/%Y")
+ query += " #{params[:request_date_after]}..#{params[:request_date_before]}"
+ elsif !param_exists(:request_date_after) && param_exists(:request_date_before)
+ params[:request_date_after] = "01/01/2001"
+ end
+ if param_exists(:request_date_after)
+ query = " #{params[:request_date_after]}..#{params[:request_date_before]}"
+ end
+ return query
+ end
+
+ def get_tags_from_params
+ query = ""
+ tags = []
+ if param_exists(:tags)
+ params[:tags].split().each do |tag|
+ tags << "tag:#{tag}"
+ end
+ end
+ if !tags.empty?
+ query = " (#{tags.join(' OR ')})"
+ end
+ return query
+ end
+
+ def make_query_from_params
+ query = params[:query] || "" if query.nil?
+ query += get_date_range_from_params
+ query += get_request_variety_from_params
+ query += get_status_from_params
+ query += get_tags_from_params
+ return query
+ end
+
+ def country_from_ip
+ gaze = MySociety::Config.get('GAZE_URL', '')
+ default = MySociety::Config.get('ISO_COUNTRY_CODE', '')
+ country = ""
+ if !gaze.empty?
+ country = open("#{gaze}/gaze-rest?f=get_country_from_ip;ip=#{request.remote_ip}").read.strip
+ end
+ country = default if country.empty?
+ return country
end
# URL generating functions are needed by all controllers (for redirects),
diff --git a/app/controllers/general_controller.rb b/app/controllers/general_controller.rb
index 4fa603aab..194a1cec0 100644
--- a/app/controllers/general_controller.rb
+++ b/app/controllers/general_controller.rb
@@ -45,20 +45,23 @@ class GeneralController < ApplicationController
:joins => :translations)
end
end
- @search_examples = MySociety::Config.get('FRONTPAGE_SEARCH_EXAMPLES', '').split(/\s*;\s*/)
- if @search_examples.empty?
- @search_examples = @popular_bodies.map { |body| body.name }
- end
# Get some successful requests #
begin
query = 'variety:response (status:successful OR status:partially_successful)'
# query = 'variety:response' # XXX debug
sortby = "described"
- xapian_object = perform_search([InfoRequestEvent], query, sortby, 'request_title_collapse', 8)
- @successful_request_events = xapian_object.results.map { |r| r[:model] }
- @successful_request_events = @successful_request_events.sort_by { |e| e.described_at }.reverse
+ max_count = 5
+ xapian_object = perform_search([InfoRequestEvent], query, sortby, 'request_title_collapse', max_count)
+ @request_events = xapian_object.results.map { |r| r[:model] }
+ @request_events = @request_events.sort_by { |e| e.described_at }.reverse
+ if @request_events.count < max_count
+ query = 'variety:sent'
+ xapian_object = perform_search([InfoRequestEvent], query, sortby, 'request_title_collapse', max_count-@request_events.count)
+ more_events = xapian_object.results.map { |r| r[:model] }
+ @request_events += more_events.sort_by { |e| e.described_at }.reverse
+ end
rescue
- @successful_request_events = []
+ @request_events = []
end
end
end
@@ -67,13 +70,13 @@ class GeneralController < ApplicationController
def blog
medium_cache
@feed_autodetect = []
- feed_url = MySociety::Config.get('BLOG_FEED', '')
- if not feed_url.empty?
- content = open(feed_url).read
+ @feed_url = "#{MySociety::Config.get('BLOG_FEED', '')}?lang=#{self.locale_from_params()}"
+ if not @feed_url.empty?
+ content = open(@feed_url).read
@data = XmlSimple.xml_in(content)
@channel = @data['channel'][0]
@blog_items = @channel['item']
- @feed_autodetect = [{:url => feed_url, :title => "#{site_name} blog"}]
+ @feed_autodetect = [{:url => @feed_url, :title => "#{site_name} blog"}]
else
@blog_items = []
end
@@ -82,20 +85,34 @@ class GeneralController < ApplicationController
# Just does a redirect from ?query= search to /query
def search_redirect
- @query = params[:query]
+ if params[:advanced].nil?
+ @query, _ = make_query_from_params
+ else
+ @query, _ = params[:query]
+ end
@sortby = params[:sortby]
- @bodies = params[:bodies]
+ path = request.path.split("/")
+ if path.size > 0 && (['newest', 'described', 'relevant'].include?(path[-1]))
+ @sort_postfix = path.pop
+ end
+ if path.size > 0 && (['bodies', 'requests', 'users', 'all'].include?(path[-1]))
+ @variety_postfix = path.pop
+ end
+ @variety_postfix = "bodies" if @variety_postfix.nil? && !params[:bodies].nil?
+ @variety_postfix = "requests" if @variety_postfix.nil?
+ if @variety_postfix != "users"
+ @common_query = get_tags_from_params
+ end
+ [:latest_status, :request_variety, :request_date_after, :request_date_before, :query, :tags].each do |x|
+ session[x] = params[x]
+ end
if @query.nil? || @query.empty?
@query = nil
@page = 1
+ @advanced = !params[:advanced].nil?
render :action => "search"
else
- if (@bodies == '1') && (@sortby.nil? || @sortby.empty?)
- @postfix = 'bodies'
- else
- @postfix = @sortby
- end
- redirect_to search_url(@query, @postfix)
+ redirect_to search_url(@query, @variety_postfix, @sort_postfix, params[:advanced])
end
end
@@ -103,23 +120,59 @@ class GeneralController < ApplicationController
def search
# XXX Why is this so complicated with arrays and stuff? Look at the route
# in config/routes.rb for comments.
+ if !params[:commit].nil?
+ search_redirect
+ return
+ end
+ [:latest_status, :request_variety, :request_date_after, :request_date_before, :query, :tags].each do |x|
+ params[x] = session[x] if params[x].nil?
+ end
combined = params[:combined]
@sortby = nil
- @bodies = false # searching from front page, largely for a public authority
+ @bodies = @requests = @users = true
+ if combined.size > 0 && (['advanced'].include?(combined[-1]))
+ combined.pop
+ @advanced = true
+ else
+ @advanced = false
+ end
# XXX currently /described isn't linked to anywhere, just used in RSS and for /list/successful
# This is because it's confusingly different from /newest - but still useful for power users.
- if combined.size > 1 && (['newest', 'described', 'bodies', 'relevant'].include?(combined[-1]))
- @postfix = combined[-1]
- combined = combined[0..-2]
- if @postfix == 'bodies'
+ if combined.size > 0 && (['newest', 'described', 'relevant'].include?(combined[-1]))
+ @sort_postfix = combined.pop
+ @sortby = @sort_postfix
+ end
+ if !params[:view].nil?
+ combined += [params[:view]]
+ end
+ if combined.size > 0 && (['bodies', 'requests', 'users', 'all'].include?(combined[-1]))
+ @variety_postfix = combined.pop
+ case @variety_postfix
+ when 'bodies'
@bodies = true
+ @requests = false
+ @users = false
+ when 'requests'
+ @bodies = false
+ @requests = true
+ @users = false
+ when 'users'
+ @bodies = false
+ @requests = false
+ @users = true
else
- @sortby = @postfix
+ @variety_postfix = "all"
end
end
@query = combined.join("/")
-
+ if params[:query].nil?
+ params[:query] = @query
+ end
+ if @variety_postfix != "all" && @requests
+ @query, _ = make_query_from_params
+ end
@inputted_sortby = @sortby
+ @common_query = get_tags_from_params
if @sortby.nil?
# Parse query, so can work out if it has prefix terms only - if so then it is a
# structured query which should show newest first, rather than a free text search
@@ -145,21 +198,41 @@ class GeneralController < ApplicationController
if params[:requests_per_page]
requests_per_page = params[:requests_per_page].to_i
end
- @xapian_requests = perform_search([InfoRequestEvent], @query, @sortby, 'request_collapse', requests_per_page)
- @requests_per_page = @per_page
- @xapian_bodies = perform_search([PublicBody], @query, @sortby, nil, 5)
- @bodies_per_page = @per_page
- @xapian_users = perform_search([User], @query, @sortby, nil, 5)
- @users_per_page = @per_page
-
- @this_page_hits = @xapian_requests.results.size + @xapian_bodies.results.size + @xapian_users.results.size
- @total_hits = @xapian_requests.matches_estimated + @xapian_bodies.matches_estimated + @xapian_users.matches_estimated
+ @this_page_hits = @total_hits = @xapian_requests_hits = @xapian_bodies_hits = @xapian_users_hits = 0
+ if @requests
+ @xapian_requests = perform_search([InfoRequestEvent], @query, @sortby, 'request_collapse', requests_per_page)
+ @requests_per_page = @per_page
+ @this_page_hits += @xapian_requests.results.size
+ @xapian_requests_hits = @xapian_requests.results.size
+ @xapian_requests_total_hits = @xapian_requests.matches_estimated
+ @total_hits += @xapian_requests.matches_estimated
+ end
+ if @bodies
+ @xapian_bodies = perform_search([PublicBody], @query, @sortby, nil, 5)
+ @bodies_per_page = @per_page
+ @this_page_hits += @xapian_bodies.results.size
+ @xapian_bodies_hits = @xapian_bodies.results.size
+ @xapian_bodies_total_hits = @xapian_bodies.matches_estimated
+ @total_hits += @xapian_bodies.matches_estimated
+ end
+ if @users
+ @xapian_users = perform_search([User], @query, @sortby, nil, 5)
+ @users_per_page = @per_page
+ @this_page_hits += @xapian_users.results.size
+ @xapian_users_hits = @xapian_users.results.size
+ @xapian_users_total_hits = @xapian_users.matches_estimated
+ @total_hits += @xapian_users.matches_estimated
+ end
# Spelling and highight words are same for all three queries
- @spelling_correction = @xapian_requests.spelling_correction
- @highlight_words = @xapian_requests.words_to_highlight
+ if !@xapian_requests.nil?
+ @highlight_words = @xapian_requests.words_to_highlight
+ if !(@xapian_requests.spelling_correction =~ /[a-z]+:/)
+ @spelling_correction = @xapian_requests.spelling_correction
+ end
+ end
- @track_thing = TrackThing.create_track_for_search_query(@query)
+ @track_thing = TrackThing.create_track_for_search_query(@query, @variety_postfix)
@feed_autodetect = [ { :url => do_track_url(@track_thing, 'feed'), :title => @track_thing.params[:title_in_rss], :has_json => true } ]
end
diff --git a/app/controllers/public_body_controller.rb b/app/controllers/public_body_controller.rb
index 05acf4868..251ab5efe 100644
--- a/app/controllers/public_body_controller.rb
+++ b/app/controllers/public_body_controller.rb
@@ -16,11 +16,10 @@ class PublicBodyController < ApplicationController
redirect_to :url_name => MySociety::Format.simplify_url_part(params[:url_name], 'body'), :status => :moved_permanently
return
end
-
@locale = self.locale_from_params()
PublicBody.with_locale(@locale) do
@public_body = PublicBody.find_by_url_name_with_historic(params[:url_name])
- raise "None found" if @public_body.nil? # XXX proper 404
+ raise ActiveRecord::RecordNotFound.new("None found") if @public_body.nil?
if @public_body.url_name.nil?
redirect_to :back
return
@@ -39,11 +38,16 @@ class PublicBodyController < ApplicationController
if !referrer.nil? && referrer.match(%r{^#{top_url}search/.*/bodies$})
@searched_to_send_request = true
end
+ @view = params[:view]
+ params[:latest_status] = @view
+ query = make_query_from_params
+ query += " requested_from:#{@public_body.url_name}"
# Use search query for this so can collapse and paginate easily
# XXX really should just use SQL query here rather than Xapian.
+ sortby = "described"
begin
- @xapian_requests = perform_search([InfoRequestEvent], 'requested_from:' + @public_body.url_name, 'newest', 'request_collapse')
+ @xapian_requests = perform_search([InfoRequestEvent], query, sortby, 'request_collapse')
if (@page > 1)
@page_desc = " (page " + @page.to_s + ")"
else
@@ -65,8 +69,9 @@ class PublicBodyController < ApplicationController
end
def view_email
- @public_bodies = PublicBody.find(:all, :conditions => [ "url_name = ?", params[:url_name] ])
- @public_body = @public_bodies[0]
+ @public_body = PublicBody.find_by_url_name_with_historic(params[:url_name])
+ raise ActiveRecord::RecordNotFound.new("None found") if @public_body.nil?
+
PublicBody.with_locale(self.locale_from_params()) do
if params[:submitted_view_email]
if verify_recaptcha
@@ -83,39 +88,46 @@ class PublicBodyController < ApplicationController
def list
long_cache
# XXX move some of these tag SQL queries into has_tag_string.rb
+ @query = "%#{params[:public_body_query].nil? ? "" : params[:public_body_query]}%"
@tag = params[:tag]
@locale = self.locale_from_params()
- locale_condition = 'public_body_translations.locale = ?'
- if @tag.nil?
+
+ locale_condition = "(upper(public_body_translations.name) LIKE upper(?)
+ OR upper(public_body_translations.notes) LIKE upper (?))
+ AND public_body_translations.locale = ?
+ AND public_bodies.id <> #{PublicBody.internal_admin_body.id}"
+ if @tag.nil? or @tag == "all"
@tag = "all"
- conditions = [locale_condition, @locale]
+ conditions = [locale_condition, @query, @query, @locale]
elsif @tag == 'other'
- category_list = PublicBodyCategories::CATEGORIES.map{|c| "'"+c+"'"}.join(",")
+ category_list = PublicBodyCategories::get().tags().map{|c| "'"+c+"'"}.join(",")
conditions = [locale_condition + ' AND (select count(*) from has_tag_string_tags where has_tag_string_tags.model_id = public_bodies.id
and has_tag_string_tags.model = \'PublicBody\'
- and has_tag_string_tags.name in (' + category_list + ')) = 0', @locale]
+ and has_tag_string_tags.name in (' + category_list + ')) = 0', @query, @query, @locale]
elsif @tag.size == 1
@tag.upcase!
- conditions = [locale_condition + ' AND public_body_translations.first_letter = ?', @locale, @tag]
+ conditions = [locale_condition + ' AND public_body_translations.first_letter = ?', @query, @query, @locale, @tag]
elsif @tag.include?(":")
name, value = HasTagString::HasTagStringTag.split_tag_into_name_value(@tag)
conditions = [locale_condition + ' AND (select count(*) from has_tag_string_tags where has_tag_string_tags.model_id = public_bodies.id
and has_tag_string_tags.model = \'PublicBody\'
- and has_tag_string_tags.name = ? and has_tag_string_tags.value = ?) > 0', @locale, name, value]
+ and has_tag_string_tags.name = ? and has_tag_string_tags.value = ?) > 0', @query, @query, @locale, name, value]
else
conditions = [locale_condition + ' AND (select count(*) from has_tag_string_tags where has_tag_string_tags.model_id = public_bodies.id
and has_tag_string_tags.model = \'PublicBody\'
- and has_tag_string_tags.name = ?) > 0', @locale, @tag]
+ and has_tag_string_tags.name = ?) > 0', @query, @query, @locale, @tag]
end
- if @tag.size == 1
+ if @tag == "all"
+ @description = ""
+ elsif @tag.size == 1
@description = _("beginning with") + " '" + @tag + "'"
else
- @description = PublicBodyCategories::CATEGORIES_BY_TAG[@tag]
+ @description = PublicBodyCategories::get().by_tag()[@tag]
if @description.nil?
@description = @tag
end
end
- PublicBody.with_locale(@locale) do
+ PublicBody.with_locale(@locale) do
@public_bodies = PublicBody.paginate(
:order => "public_body_translations.name", :page => params[:page], :per_page => 1000, # fit all councils on one page
:conditions => conditions,
@@ -168,5 +180,17 @@ class PublicBodyController < ApplicationController
:filename => 'all-authorities.csv',
:disposition =>'attachment', :encoding => 'utf8')
end
+
+ # Type ahead search
+ def search_typeahead
+ # Since acts_as_xapian doesn't support the Partial match flag, we work around it
+ # by making the last work a wildcard, which is quite the same
+ query = params[:q] + '*'
+
+ query = query.split(' ').join(' OR ') # XXX: HACK for OR instead of default AND!
+ @xapian_requests = perform_search([PublicBody], query, 'relevant', nil, 5)
+
+ render :partial => "public_body/search_ahead"
+ end
end
diff --git a/app/controllers/request_controller.rb b/app/controllers/request_controller.rb
index c1a13273a..4b7884065 100644
--- a/app/controllers/request_controller.rb
+++ b/app/controllers/request_controller.rb
@@ -7,6 +7,8 @@
# $Id: request_controller.rb,v 1.192 2009-10-19 19:26:40 francis Exp $
require 'alaveteli_file_types'
+require 'zip/zip'
+require 'open-uri'
class RequestController < ApplicationController
before_filter :check_read_only, :only => [ :new, :show_response, :describe_state, :upload_response ]
@@ -22,6 +24,26 @@ class RequestController < ApplicationController
rescue MissingSourceFile, NameError
end
+ def select_authority
+ # Check whether we force the user to sign in right at the start, or we allow her
+ # to start filling the request anonymously
+ if force_registration_on_new_request && !authenticated?(
+ :web => _("To send your FOI request"),
+ :email => _("Then you'll be allowed to send FOI requests."),
+ :email_subject => _("Confirm your email address")
+ )
+ # do nothing - as "authenticated?" has done the redirect to signin page for us
+ return
+ end
+
+ if !params[:query].nil?
+ query = params[:query] + '*'
+ query = query.split(' ').join(' OR ') # XXX: HACK for OR instead of default AND!
+ @xapian_requests = perform_search([PublicBody], query, 'relevant', nil, 5)
+ end
+ medium_cache
+ end
+
def show
medium_cache
@locale = self.locale_from_params()
@@ -37,7 +59,7 @@ class RequestController < ApplicationController
# Look up by new style text names
@info_request = InfoRequest.find_by_url_title(params[:url_title])
if @info_request.nil?
- raise "Request not found"
+ raise ActiveRecord::RecordNotFound.new("Request not found")
end
set_last_request(@info_request)
@@ -52,7 +74,6 @@ class RequestController < ApplicationController
@status = @info_request.calculate_status
@collapse_quotes = params[:unfold] ? false : true
@update_status = params[:update_status] ? true : false
- @is_owning_user = @info_request.is_owning_user?(authenticated_user)
@old_unclassified = @info_request.is_old_unclassified? && !authenticated_user.nil?
if @update_status
@@ -66,7 +87,7 @@ class RequestController < ApplicationController
@last_info_request_event_id = @info_request.last_event_id_needing_description
@new_responses_count = @info_request.events_needing_description.select {|i| i.event_type == 'response'}.size
-1
+
# Sidebar stuff
# ... requests that have similar imporant terms
behavior_cache :tag => ['similar', @info_request.id] do
@@ -86,7 +107,7 @@ class RequestController < ApplicationController
# For send followup link at bottom
@last_response = @info_request.get_last_response
-
+ @is_owning_user = @info_request.is_owning_user?(authenticated_user)
respond_to do |format|
format.html { @has_json = true; render :template => 'request/show'}
format.json { render :json => @info_request.json_for_api(true) }
@@ -129,26 +150,10 @@ class RequestController < ApplicationController
def list
medium_cache
@view = params[:view]
-
- if @view.nil?
- redirect_to request_list_url(:view => 'successful')
- return
- end
-
- if @view == 'recent'
- @title = _("Recently sent Freedom of Information requests")
- query = "variety:sent";
- sortby = "newest"
- @track_thing = TrackThing.create_track_for_all_new_requests
- elsif @view == 'successful'
- @title = _("Recently successful responses")
- query = 'variety:response (status:successful OR status:partially_successful)'
- sortby = "described"
- @track_thing = TrackThing.create_track_for_all_successful_requests
- else
- raise "unknown request list view " + @view.to_s
- end
-
+ params[:latest_status] = @view
+ query = make_query_from_params
+ @title = _("View and search requests")
+ sortby = "newest"
@page = get_search_page_from_params if !@page # used in cache case, as perform_search sets @page as side effect
behavior_cache :tag => [@view, @page] do
xapian_object = perform_search([InfoRequestEvent], query, sortby, 'request_collapse')
@@ -157,7 +162,7 @@ class RequestController < ApplicationController
end
@title = @title + " (page " + @page.to_s + ")" if (@page > 1)
-
+ @track_thing = TrackThing.create_track_for_search_query(query)
@feed_autodetect = [ { :url => do_track_url(@track_thing, 'feed'), :title => @track_thing.params[:title_in_rss], :has_json => true } ]
# Don't let robots go more than 20 pages in
@@ -203,7 +208,7 @@ class RequestController < ApplicationController
params[:info_request][:public_body_id] = params[:url_name]
else
public_body = PublicBody.find_by_url_name_with_historic(params[:url_name])
- raise "None found" if public_body.nil? # XXX proper 404
+ raise ActiveRecord::RecordNotFound.new("None found") if public_body.nil? # XXX proper 404
params[:info_request][:public_body_id] = public_body.id
end
elsif params[:public_body_id]
@@ -309,10 +314,11 @@ class RequestController < ApplicationController
# XXX send_message needs the database id, so we send after saving, which isn't ideal if the request broke here.
@outgoing_message.send_message
flash[:notice] = _("<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>
- <p><strong>We will email you</strong> when there is a response, or after 20 working days if the authority still hasn't
+ <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't
replied by then.</p>
<p>If you write about this request (for example in a forum or a blog) please link to this page, and add an
- annotation below telling people about your writing.</p>",:law_used_full=>@info_request.law_used_full)
+ annotation below telling people about your writing.</p>",:law_used_full=>@info_request.law_used_full,
+ :late_number_of_days => MySociety::Config.get('REPLY_LATE_AFTER_DAYS', 20))
redirect_to show_new_request_path(:url_title => @info_request.url_title)
end
@@ -686,10 +692,10 @@ class RequestController < ApplicationController
raise "internal error, pre-auth filter should have caught this" if !@info_request.user_can_view?(authenticated_user)
@attachment = IncomingMessage.get_attachment_by_url_part_number(@incoming_message.get_attachments_for_display, @part_number)
- raise "attachment not found part number " + @part_number.to_s + " incoming_message " + @incoming_message.id.to_s if @attachment.nil?
+ raise ActiveRecord::RecordNotFound.new("attachment not found part number " + @part_number.to_s + " incoming_message " + @incoming_message.id.to_s) if @attachment.nil?
# check filename in URL matches that in database (use a censor rule if you want to change a filename)
- raise "please use same filename as original file has, display: '" + @attachment.display_filename + "' old_display: '" + @attachment.old_display_filename + "' original: '" + @original_filename + "'" if @attachment.display_filename != @original_filename && @attachment.old_display_filename != @original_filename
+ raise ActiveRecord::RecordNotFound.new("please use same filename as original file has, display: '" + @attachment.display_filename + "' old_display: '" + @attachment.old_display_filename + "' original: '" + @original_filename + "'") if @attachment.display_filename != @original_filename && @attachment.old_display_filename != @original_filename
@attachment_url = get_attachment_url(:id => @incoming_message.info_request_id,
:incoming_message_id => @incoming_message.id, :part => @part_number,
@@ -743,5 +749,79 @@ class RequestController < ApplicationController
return
end
end
+
+ # Type ahead search
+ def search_typeahead
+ # Since acts_as_xapian doesn't support the Partial match flag, we work around it
+ # by making the last work a wildcard, which is quite the same
+ query = params[:q] + '*'
+
+ query = query.split(' ').join(' OR ') # XXX: HACK for OR instead of default AND!
+ @xapian_requests = perform_search([InfoRequestEvent], query, 'relevant', 'request_collapse', 5)
+
+ render :partial => "request/search_ahead.rhtml"
+ end
+
+ def download_entire_request
+ @locale = self.locale_from_params()
+ PublicBody.with_locale(@locale) do
+ info_request = InfoRequest.find_by_url_title(params[:url_title])
+ if info_request.nil?
+ raise ActiveRecord::RecordNotFound.new("Request not found")
+ end
+ if authenticated?(
+ :web => _("To download the zip file"),
+ :email => _("Then you can download a zip file of {{info_request_title}}.",:info_request_title=>info_request.title),
+ :email_subject => _("Log in to download a zip file of {{info_request_title}}",:info_request_title=>info_request.title)
+ )
+ updated = Digest::SHA1.hexdigest(info_request.get_last_event.created_at.to_s + info_request.updated_at.to_s)
+ @url_path = "/download/#{updated[0..1]}/#{updated}/#{params[:url_title]}.zip"
+ file_path = File.join(File.dirname(__FILE__), '../../cache/zips', @url_path)
+ if !File.exists?(file_path)
+ FileUtils.mkdir_p(File.dirname(file_path))
+ Zip::ZipFile.open(file_path, Zip::ZipFile::CREATE) { |zipfile|
+ convert_command = MySociety::Config.get("HTML_TO_PDF_COMMAND")
+ done = false
+ if File.exists?(convert_command)
+ domain = MySociety::Config.get("DOMAIN")
+ url = "http://#{domain}#{request_url(info_request)}?print_stylesheet=1"
+ tempfile = Tempfile.new('foihtml2pdf')
+ output = AlaveteliExternalCommand.run(convert_command, url, tempfile.path)
+ if !output.nil?
+ zipfile.get_output_stream("correspondence.pdf") { |f|
+ f.puts(File.open(tempfile.path).read)
+ }
+ done = true
+ else
+ logger.error("Could not convert info request #{info_request.id} to PDF with command '#{convert_command} #{url} #{tempfile.path}'")
+ end
+ tempfile.close
+ else
+ logger.warn("No HTML -> PDF converter found at #{convert_command}")
+ end
+ if !done
+ @info_request = info_request
+ @info_request_events = info_request.info_request_events
+ template = File.read(File.join(File.dirname(__FILE__), "..", "views", "request", "simple_correspondence.rhtml"))
+ output = ERB.new(template).result(binding)
+ zipfile.get_output_stream("correspondence.txt") { |f|
+ f.puts(output)
+ }
+ end
+ for message in info_request.incoming_messages
+ attachments = message.get_attachments_for_display
+ for attachment in attachments
+ zipfile.get_output_stream(attachment.display_filename) { |f|
+ f.puts(attachment.body)
+ }
+ end
+ end
+ }
+ File.chmod(0644, file_path)
+ end
+ redirect_to @url_path
+ end
+ end
+ end
end
diff --git a/app/controllers/services_controller.rb b/app/controllers/services_controller.rb
new file mode 100644
index 000000000..6fb20336e
--- /dev/null
+++ b/app/controllers/services_controller.rb
@@ -0,0 +1,32 @@
+# controllers/application.rb:
+# Parent class of all controllers in FOI site. Filters added to this controller
+# apply to all controllers in the application. Likewise, all the methods added
+# will be available for all controllers.
+#
+# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
+# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
+#
+# $Id: application.rb,v 1.59 2009-09-17 13:01:56 francis Exp $
+
+require 'open-uri'
+
+class ServicesController < ApplicationController
+ def other_country_message
+ text = ""
+ iso_country_code = MySociety::Config.get('ISO_COUNTRY_CODE').downcase
+ if country_from_ip.downcase != iso_country_code
+ found_country = WorldFOIWebsites.by_code(country_from_ip)
+ found_country_name = !found_country.nil? && found_country[:country_name]
+ if found_country_name
+ text = _("Hello! You can make Freedom of Information requests within {{country_name}} at {{link_to_website}}", :country_name => found_country_name, :link_to_website => "<a href=\"#{found_country[:url]}\">#{found_country[:name]}</a>")
+ else
+ current_country = WorldFOIWebsites.by_code(iso_country_code)[:country_name]
+ text = _("Hello! We have an <a href=\"/help/alaveteli?country_name=#{CGI.escape(current_country)}\">important message</a> for visitors outside {{country_name}}", :country_name => current_country)
+ end
+ end
+ if !text.empty?
+ text += ' <span class="close-button">X</span>'
+ end
+ render :text => text, :content_type => "text/plain" # XXX workaround the HTML validation in test suite
+ end
+end
diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb
index d3c42c7f1..96dbfba74 100644
--- a/app/controllers/user_controller.rb
+++ b/app/controllers/user_controller.rb
@@ -8,6 +8,8 @@
class UserController < ApplicationController
+ layout :select_layout
+
protect_from_forgery :only => [ :contact,
:set_profile_photo,
:signchangeemail,
@@ -24,7 +26,7 @@ class UserController < ApplicationController
@display_user = User.find(:first, :conditions => [ "url_name = ? and email_confirmed = ?", params[:url_name], true ])
if not @display_user
- raise "user not found, url_name=" + params[:url_name]
+ raise ActiveRecord::RecordNotFound.new("user not found, url_name=" + params[:url_name])
end
@same_name_users = User.find(:all, :conditions => [ "name ilike ? and email_confirmed = ? and id <> ?", @display_user.name, true, @display_user.id ], :order => "created_at")
@@ -33,9 +35,16 @@ class UserController < ApplicationController
# Use search query for this so can collapse and paginate easily
# XXX really should just use SQL query here rather than Xapian.
begin
- @xapian_requests = perform_search([InfoRequestEvent], 'requested_by:' + @display_user.url_name, 'newest', 'request_collapse')
- @xapian_comments = perform_search([InfoRequestEvent], 'commented_by:' + @display_user.url_name, 'newest', nil)
-
+ requests_query = 'requested_by:' + @display_user.url_name
+ comments_query = 'commented_by:' + @display_user.url_name
+ if !params[:user_query].nil?
+ requests_query += " " + params[:user_query]
+ comments_query += " " + params[:user_query]
+ @match_phrase = _("{{search_results}} matching '{{query}}'", :search_results => "", :query => params[:user_query])
+ end
+ @xapian_requests = perform_search([InfoRequestEvent], requests_query, 'newest', 'request_collapse')
+ @xapian_comments = perform_search([InfoRequestEvent], comments_query, 'newest', nil)
+
if (@page > 1)
@page_desc = " (page " + @page.to_s + ")"
else
@@ -71,7 +80,7 @@ class UserController < ApplicationController
# Login form
def signin
work_out_post_redirect
-
+ @request_from_foreign_country = country_from_ip != MySociety::Config.get('ISO_COUNTRY_CODE', 'GB')
# make sure we have cookies
if session.instance_variable_get(:@dbman)
if not session.instance_variable_get(:@dbman).instance_variable_get(:@original)
@@ -106,7 +115,12 @@ class UserController < ApplicationController
session[:user_id] = @user_signin.id
session[:user_circumstance] = nil
session[:remember_me] = params[:remember_me] ? true : false
- do_post_redirect @post_redirect
+
+ if is_modal_dialog
+ render :action => 'signin_successful'
+ else
+ do_post_redirect @post_redirect
+ end
else
send_confirmation_mail @user_signin
end
@@ -118,10 +132,15 @@ class UserController < ApplicationController
# Create new account form
def signup
work_out_post_redirect
-
+ @request_from_foreign_country = country_from_ip != MySociety::Config.get('ISO_COUNTRY_CODE', 'GB')
# Make the user and try to save it
@user_signup = User.new(params[:user_signup])
- if !@user_signup.valid?
+ error = false
+ if @request_from_foreign_country && !verify_recaptcha
+ flash.now[:error] = _("There was an error with the words you entered, please try again.")
+ error = true
+ end
+ if error || !@user_signup.valid?
# Show the form
render :action => 'sign'
else
@@ -133,7 +152,6 @@ class UserController < ApplicationController
# New unconfirmed user
@user_signup.email_confirmed = false
@user_signup.save!
-
send_confirmation_mail @user_signup
return
end
@@ -454,7 +472,7 @@ class UserController < ApplicationController
def get_profile_photo
@display_user = User.find(:first, :conditions => [ "url_name = ? and email_confirmed = ?", params[:url_name], true ])
if !@display_user
- raise "user not found, url_name=" + params[:url_name]
+ raise ActiveRecord::RecordNotFound.new("user not found, url_name=" + params[:url_name])
end
if !@display_user.profile_photo
raise "user has no profile photo, url_name=" + params[:url_name]
@@ -500,6 +518,15 @@ class UserController < ApplicationController
private
+ def is_modal_dialog
+ (params[:modal].to_i != 0)
+ end
+
+ # when logging in through a modal iframe, don't display chrome around the content
+ def select_layout
+ is_modal_dialog ? 'no_chrome' : 'default'
+ end
+
# Decide where we are going to redirect back to after signin/signup, and record that
def work_out_post_redirect
# Redirect to front page later if nothing else specified
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index ec56566a9..a0f16dfaf 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -94,5 +94,24 @@ module ApplicationHelper
block.call
end
end
+ # (unfortunately) ugly way of getting id of generated form element
+ # ids
+ # see http://chrisblunt.com/2009/10/12/rails-getting-the-id-of-form-fields-inside-a-fields_for-block/
+ def sanitized_object_name(object_name)
+ object_name.gsub(/\]\[|[^-a-zA-Z0-9:.]/,"_").sub(/_$/,"")
+ end
+
+ def sanitized_method_name(method_name)
+ method_name.sub(/\?$/, "")
+ end
+
+ def form_tag_id(object_name, method_name, locale=nil)
+ if locale.nil?
+ return "#{sanitized_object_name(object_name.to_s)}_#{sanitized_method_name(method_name.to_s)}"
+ else
+ return "#{sanitized_object_name(object_name.to_s)}_#{sanitized_method_name(method_name.to_s)}__#{locale.to_s}"
+ end
+ end
+
end
diff --git a/app/helpers/config_helper.rb b/app/helpers/config_helper.rb
index 80f2deed2..b0381a2f5 100644
--- a/app/helpers/config_helper.rb
+++ b/app/helpers/config_helper.rb
@@ -2,4 +2,8 @@ module ConfigHelper
def site_name
MySociety::Config.get('SITE_NAME', 'Alaveteli')
end
+
+ def force_registration_on_new_request
+ MySociety::Config.get('FORCE_REGISTRATION_ON_NEW_REQUEST', false)
+ end
end \ No newline at end of file
diff --git a/app/helpers/link_to_helper.rb b/app/helpers/link_to_helper.rb
index 444129052..54b8d69d0 100755
--- a/app/helpers/link_to_helper.rb
+++ b/app/helpers/link_to_helper.rb
@@ -61,7 +61,7 @@ module LinkToHelper
# Public bodies
def public_body_url(public_body)
- return show_public_body_url(:url_name => public_body.url_name, :only_path => true)
+ public_body.url_name.nil? ? '' : show_public_body_url(:url_name => public_body.url_name, :only_path => true)
end
def public_body_link_short(public_body)
link_to h(public_body.short_or_long_name), public_body_url(public_body)
@@ -79,7 +79,7 @@ module LinkToHelper
link_to(h(public_body.name), main_url(public_body_url(public_body))) + " (" + link_to("admin", public_body_admin_url(public_body)) + ")"
end
def list_public_bodies_default
- list_public_bodies_url(:tag => 'a')
+ list_public_bodies_url(:tag => 'all')
end
# Users
@@ -135,11 +135,10 @@ module LinkToHelper
end
end
- # General pages. postfix is either the sort order, or 'bodies' to show you
- # came from the front page and are looking for public bodies
- def search_url(query, postfix = nil)
+ # General pages.
+ def search_url(query, variety_postfix = nil, sort_postfix = nil, advanced = nil)
+ query = query - ["", nil] if query.kind_of?(Array)
url = search_general_url(:combined => query)
-
# Here we can't escape the slashes, as RFC 2396 doesn't allow slashes
# within a path component. Rails is assuming when generating URLs that
# either there aren't slashes, or we are in a query part where you can
@@ -151,13 +150,19 @@ module LinkToHelper
# http://rails.lighthouseapp.com/projects/8994/tickets/144-patch-bug-in-rails-route-globbing
url = url.gsub("%2F", "/")
- if !postfix.nil? && !postfix.empty?
- url = url + "/" + postfix
+ if !variety_postfix.nil? && !variety_postfix.empty?
+ url = url + "/" + variety_postfix
+ end
+ if !sort_postfix.nil? && !sort_postfix.empty?
+ url = url + "/" + sort_postfix
+ end
+ if !advanced.nil? && (advanced)
+ url = url + "/advanced"
end
return url
end
- def search_link(query, postfix = nil)
- link_to h(query), search_url(query, postfix)
+ def search_link(query, variety_postfix = nil, sort_postfix = nil, advanced = nil)
+ link_to h(query), search_url(query, variety_postfix, sort_postfix, advanced)
end
# Admin pages
@@ -187,7 +192,7 @@ module LinkToHelper
# Basic date format
def simple_date(date)
- return date.strftime("%e %B %Y").strip
+ return I18n.l(date, :format => "%e %B %Y")
end
def simple_time(date)
diff --git a/app/models/application_mailer.rb b/app/models/application_mailer.rb
index 9628d7339..e9f82a2c3 100644
--- a/app/models/application_mailer.rb
+++ b/app/models/application_mailer.rb
@@ -15,8 +15,8 @@ class ApplicationMailer < ActionMailer::Base
self.raise_delivery_errors = true
def contact_from_name_and_email
- contact_name = MySociety::Config.get("CONTACT_NAME", 'contact@localhost')
- contact_email = MySociety::Config.get("CONTACT_EMAIL", 'Alaveteli')
+ contact_name = MySociety::Config.get("CONTACT_NAME", 'Alaveteli')
+ contact_email = MySociety::Config.get("CONTACT_EMAIL", 'contact@localhost')
return "#{contact_name} <#{contact_email}>"
end
diff --git a/app/models/exim_log.rb b/app/models/exim_log.rb
index 80535ab41..83f031a92 100644
--- a/app/models/exim_log.rb
+++ b/app/models/exim_log.rb
@@ -108,10 +108,10 @@ class EximLog < ActiveRecord::Base
# be sure we are parsing the exim line right)
envelope_from = " from <" + ir.incoming_email + "> "
if !exim_log.line.include?(envelope_from)
- raise "unexpected parsing of exim line"
+ $stderr.puts("unexpected parsing of exim line: [#{exim_log.line.chomp}]")
+ else
+ found = true
end
-
- found = true
end
end
if !found
diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb
index 16ae38b92..2b795ddf5 100644
--- a/app/models/incoming_message.rb
+++ b/app/models/incoming_message.rb
@@ -29,7 +29,6 @@
# general not specific to IncomingMessage.
require 'alaveteli_file_types'
-require 'external_command'
require 'htmlentities'
require 'rexml/document'
require 'zip/zip'
@@ -1121,38 +1120,38 @@ class IncomingMessage < ActiveRecord::Base
tempfile.print body
tempfile.flush
if content_type == 'application/vnd.ms-word'
- external_command("/usr/bin/wvText", tempfile.path, tempfile.path + ".txt")
+ AlaveteliExternalCommand.run("/usr/bin/wvText", tempfile.path, tempfile.path + ".txt")
# Try catdoc if we get into trouble (e.g. for InfoRequestEvent 2701)
if not File.exists?(tempfile.path + ".txt")
- external_command("/usr/bin/catdoc", tempfile.path, :append_to => text)
+ AlaveteliExternalCommand.run("/usr/bin/catdoc", tempfile.path, :append_to => text)
else
text += File.read(tempfile.path + ".txt") + "\n\n"
File.unlink(tempfile.path + ".txt")
end
elsif content_type == 'application/rtf'
# catdoc on RTF prodcues less comments and extra bumf than --text option to unrtf
- external_command("/usr/bin/catdoc", tempfile.path, :append_to => text)
+ AlaveteliExternalCommand.run("/usr/bin/catdoc", tempfile.path, :append_to => text)
elsif content_type == 'text/html'
# lynx wordwraps links in its output, which then don't get formatted properly
# by Alaveteli. We use elinks instead, which doesn't do that.
- external_command("/usr/bin/elinks", "-eval", "'set document.codepage.assume = \"utf-8\"'", "-dump-charset", "utf-8", "-force-html", "-dump",
+ AlaveteliExternalCommand.run("/usr/bin/elinks", "-eval", "'set document.codepage.assume = \"utf-8\"'", "-dump-charset", "utf-8", "-force-html", "-dump",
tempfile.path, :append_to => text)
elsif content_type == 'application/vnd.ms-excel'
# Bit crazy using /usr/bin/strings - but xls2csv, xlhtml and
# py_xls2txt only extract text from cells, not from floating
# notes. catdoc may be fooled by weird character sets, but will
# probably do for UK FOI requests.
- external_command("/usr/bin/strings", tempfile.path, :append_to => text)
+ AlaveteliExternalCommand.run("/usr/bin/strings", tempfile.path, :append_to => text)
elsif content_type == 'application/vnd.ms-powerpoint'
# ppthtml seems to catch more text, but only outputs HTML when
# we want text, so just use catppt for now
- external_command("/usr/bin/catppt", tempfile.path, :append_to => text)
+ AlaveteliExternalCommand.run("/usr/bin/catppt", tempfile.path, :append_to => text)
elsif content_type == 'application/pdf'
- external_command("/usr/bin/pdftotext", tempfile.path, "-", :append_to => text)
+ AlaveteliExternalCommand.run("/usr/bin/pdftotext", tempfile.path, "-", :append_to => text)
elsif content_type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
# This is Microsoft's XML office document format.
# Just pull out the main XML file, and strip it of text.
- xml = external_command("/usr/bin/unzip", "-qq", "-c", tempfile.path, "word/document.xml")
+ xml = AlaveteliExternalCommand.run("/usr/bin/unzip", "-qq", "-c", tempfile.path, "word/document.xml")
if !xml.nil?
doc = REXML::Document.new(xml)
text += doc.each_element( './/text()' ){}.join(" ")
@@ -1305,10 +1304,15 @@ class IncomingMessage < ActiveRecord::Base
prefix = email
prefix =~ /^(.*)@/
prefix = $1
- if !prefix.nil? && prefix.downcase.match(/^(postmaster|mailer-daemon|auto_reply|donotreply|no.reply)$/)
+ if !prefix.nil? && prefix.downcase.match(/^(postmaster|mailer-daemon|auto_reply|do.?not.?reply|no.reply)$/)
+ return false
+ end
+ if !self.mail['return-path'].nil? && self.mail['return-path'].addr == "<>"
+ return false
+ end
+ if !self.mail['auto-submitted'].nil? && !self.mail['auto-submitted'].keys.empty?
return false
end
-
return true
end
@@ -1336,34 +1340,6 @@ class IncomingMessage < ActiveRecord::Base
end
private :normalise_content_type
- def self.external_command(program_name, *args)
- # Run an external program, and return its output.
- # Standard error is suppressed unless the program
- # fails (i.e. returns a non-zero exit status).
- opts = {}
- if !args.empty? && args[-1].is_a?(Hash)
- opts = args.pop
- end
-
- xc = ExternalCommand.new(program_name, *args)
- if opts.has_key? :append_to
- xc.out = opts[:append_to]
- end
- xc.run()
- if xc.status != 0
- # Error
- $stderr.puts("Error from #{program_name} #{args.join(' ')}:")
- $stderr.print(xc.err)
- return nil
- else
- if opts.has_key? :append_to
- opts[:append_to] << "\n\n"
- else
- return xc.out
- end
- end
- end
- private_class_method :external_command
end
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index c667e1499..92322f74f 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.rb
@@ -117,13 +117,13 @@ class InfoRequest < ActiveRecord::Base
# only check on create, so existing models with mixed case are allowed
def validate_on_create
if !self.title.nil? && !MySociety::Validate.uses_mixed_capitals(self.title, 10)
- errors.add(:title, N_('Please write the summary using a mixture of capital and lower case letters. This makes it easier for others to read.'))
+ errors.add(:title, _('Please write the summary using a mixture of capital and lower case letters. This makes it easier for others to read.'))
end
if !self.title.nil? && title.size > 200
- errors.add(:title, N_('Please keep the summary short, like in the subject of an email. You can use a phrase, rather than a full sentence.'))
+ errors.add(:title, _('Please keep the summary short, like in the subject of an email. You can use a phrase, rather than a full sentence.'))
end
if !self.title.nil? && self.title =~ /^(FOI|Freedom of Information)\s*requests?$/i
- errors.add(:title, N_('Please describe more what the request is about in the subject. There is no need to say it is an FOI request, we add that on anyway.'))
+ errors.add(:title, _('Please describe more what the request is about in the subject. There is no need to say it is an FOI request, we add that on anyway.'))
end
end
@@ -451,7 +451,7 @@ public
self.log_event("response", params)
self.save!
end
-
+ self.info_request_events.each { |event| event.xapian_mark_needs_index } # for the "waiting_classification" index
RequestMailer.deliver_new_response(self, incoming_message)
end
@@ -564,6 +564,7 @@ public
def calculate_event_states
curr_state = nil
for event in self.info_request_events.reverse
+ event.xapian_mark_needs_index # we need to reindex all events in order to update their latest_* terms
if curr_state.nil?
if !event.described_state.nil?
curr_state = event.described_state
@@ -779,8 +780,7 @@ public
# Display version of status
- def display_status
- status = self.calculate_status
+ def InfoRequest.get_status_description(status)
if status == 'waiting_classification'
_("Awaiting classification.")
elsif status == 'waiting_response'
@@ -818,6 +818,10 @@ public
end
end
+ def display_status
+ InfoRequest.get_status_description(self.calculate_status)
+ end
+
# Completely delete this request and all objects depending on it
def fully_destroy
self.track_things.each do |track_thing|
@@ -918,10 +922,13 @@ public
end
# List of incoming messages to followup, by unique email
- def who_can_followup_to
+ def who_can_followup_to(skip_message = nil)
ret = []
done = {}
for incoming_message in self.incoming_messages.reverse
+ if incoming_message == skip_message
+ next
+ end
incoming_message.safe_mail_from
email = OutgoingMailer.email_for_followup(self, incoming_message)
diff --git a/app/models/info_request_event.rb b/app/models/info_request_event.rb
index d79647c98..4ea89bf81 100644
--- a/app/models/info_request_event.rb
+++ b/app/models/info_request_event.rb
@@ -57,22 +57,7 @@ class InfoRequestEvent < ActiveRecord::Base
]
# user described state (also update in info_request)
- validates_inclusion_of :described_state, :in => [
- nil,
- 'waiting_response',
- 'waiting_clarification',
- 'gone_postal',
- 'deadline_extended',
- 'wrong_response',
- 'not_held',
- 'rejected',
- 'successful',
- 'partially_successful',
- 'internal_review',
- 'error_message',
- 'requires_admin',
- 'user_withdrawn'
- ]
+ validate :must_be_valid_state
# whether event is publicly visible
validates_inclusion_of :prominence, :in => [
@@ -81,6 +66,12 @@ class InfoRequestEvent < ActiveRecord::Base
'requester_only'
]
+ def must_be_valid_state
+ if !described_state.nil? and !InfoRequest.enumerate_states.include?(described_state)
+ errors.add(described_state, "is not a valid state")
+ end
+ end
+
def user_can_view?(user)
if !self.info_request.user_can_view?(user)
raise "internal error, called user_can_view? on event when there is not permission to view entire request"
@@ -103,7 +94,7 @@ class InfoRequestEvent < ActiveRecord::Base
[ :created_at_numeric, 1, "created_at", :number ], # for sorting
[ :described_at_numeric, 2, "described_at", :number ], # XXX using :number for lack of :datetime support in Xapian values
[ :request, 3, "request_collapse", :string ],
- [ :request_title_collapse, 4, "request_title_collapse", :string ]
+ [ :request_title_collapse, 4, "request_title_collapse", :string ],
],
:terms => [ [ :calculated_state, 'S', "status" ],
[ :requested_by, 'B', "requested_by" ],
@@ -111,6 +102,9 @@ class InfoRequestEvent < ActiveRecord::Base
[ :commented_by, 'C', "commented_by" ],
[ :request, 'R', "request" ],
[ :variety, 'V', "variety" ],
+ [ :latest_variety, 'K', "latest_variety" ],
+ [ :latest_status, 'L', "latest_status" ],
+ [ :waiting_classification, 'W', "waiting_classification" ],
[ :filetype, 'T', "filetype" ],
[ :tags, 'U', "tag" ]
],
@@ -138,6 +132,27 @@ class InfoRequestEvent < ActiveRecord::Base
def request
self.info_request.url_title
end
+
+ def latest_variety
+ for event in self.info_request.info_request_events.reverse
+ if !event.variety.nil? and !event.variety.empty?
+ return event.variety
+ end
+ end
+ end
+
+ def latest_status
+ for event in self.info_request.info_request_events.reverse
+ if !event.calculated_state.nil? and !event.calculated_state.empty?
+ return event.calculated_state
+ end
+ end
+ end
+
+ def waiting_classification
+ self.info_request.awaiting_description == true ? "yes" : "no"
+ end
+
def request_title_collapse
url_title = self.info_request.url_title
# remove numeric section from the end, use this to group lots
@@ -288,37 +303,7 @@ class InfoRequestEvent < ActiveRecord::Base
def display_status
if is_incoming_message?
status = self.calculated_state
- if !status.nil?
- if status == 'waiting_response'
- return _("Acknowledgement")
- elsif status == 'waiting_clarification'
- return _("Clarification required")
- elsif status == 'gone_postal'
- return _("Handled by post")
- elsif status == 'deadline_extended'
- return _("Deadline Extended")
- elsif status == 'wrong_response'
- return _("Wrong Response")
- elsif status == 'not_held'
- return _("Information not held")
- elsif status == 'rejected'
- return _("Refused")
- elsif status == 'partially_successful'
- return _("Some information sent")
- elsif status == 'successful'
- return _("All information sent")
- elsif status == 'internal_review'
- return _("Internal review acknowledgement")
- elsif status == 'user_withdrawn'
- return _("Withdrawn by requester")
- elsif status == 'error_message'
- return _("Delivery error")
- elsif status == 'requires_admin'
- return _("Unusual response")
- end
- raise "unknown status " + status
- end
- return "Response"
+ return status.nil? ? _("Response") : InfoRequest.get_status_description(status)
end
if is_outgoing_message?
diff --git a/app/models/public_body.rb b/app/models/public_body.rb
index b75da4331..ab836657b 100644
--- a/app/models/public_body.rb
+++ b/app/models/public_body.rb
@@ -38,7 +38,7 @@ class PublicBody < ActiveRecord::Base
validates_uniqueness_of :short_name, :message => N_("Short name is already taken"), :if => Proc.new { |pb| pb.short_name != "" }
validates_uniqueness_of :name, :message => N_("Name is already taken")
-
+
has_many :info_requests, :order => 'created_at desc'
has_many :track_things, :order => 'created_at desc'
@@ -46,6 +46,40 @@ class PublicBody < ActiveRecord::Base
translates :name, :short_name, :request_email, :url_name, :notes, :first_letter, :publication_scheme
+ # Convenience methods for creating/editing translations via forms
+ def translation(locale)
+ self.translations.find_by_locale(locale)
+ end
+
+ # XXX - Don't like repeating this!
+ def calculate_cached_fields(t)
+ t.first_letter = t.name.scan(/^./mu)[0].upcase unless t.name.nil? or t.name.empty?
+ short_long_name = t.name
+ short_long_name = t.short_name if t.short_name and !t.short_name.empty?
+ t.url_name = MySociety::Format.simplify_url_part(short_long_name, 'body')
+ end
+
+ def translated_versions
+ translations
+ end
+
+ def translated_versions=(translation_attrs)
+ if translation_attrs.respond_to? :each_value # Hash => updating
+ translation_attrs.each_value do |attrs|
+ t = translation(attrs[:locale]) || PublicBody::Translation.new
+ t.attributes = attrs
+ calculate_cached_fields(t)
+ t.save!
+ end
+ else # Array => creating
+ translation_attrs.each do |attrs|
+ new_translation = PublicBody::Translation.new(attrs)
+ calculate_cached_fields(new_translation)
+ translations << new_translation
+ end
+ end
+ end
+
# Make sure publication_scheme gets the correct default value.
# (This would work automatically, were publication_scheme not a translated attribute)
def after_initialize
@@ -78,16 +112,6 @@ class PublicBody < ActiveRecord::Base
end
end
- # XXX this should be saner; probably implement categories as data
- begin
- load "public_body_categories_#{I18n.locale.to_s}.rb"
- rescue MissingSourceFile
- begin
- load "public_body_categories_#{I18n.default_locale.to_s}.rb"
- rescue MissingSourceFile
- load "public_body_categories.rb"
- end
- end
# Set the first letter, which is used for faster queries
before_save(:set_first_letter)
def set_first_letter
@@ -172,7 +196,7 @@ class PublicBody < ActiveRecord::Base
return self.created_at.strftime("%Y%m%d%H%M%S")
end
def variety
- "authority"
+ return "authority"
end
# if the URL name has changed, then all requested_from: queries
@@ -191,7 +215,6 @@ class PublicBody < ActiveRecord::Base
# When name or short name is changed, also change the url name
def short_name=(short_name)
-
globalize.write(self.class.locale || I18n.locale, :short_name, short_name)
self[:short_name] = short_name
self.update_url_name
@@ -204,15 +227,15 @@ class PublicBody < ActiveRecord::Base
end
def update_url_name
- url_name = MySociety::Format.simplify_url_part(self.short_or_long_name, 'body')
- self.url_name = url_name
+ self.url_name = MySociety::Format.simplify_url_part(self.short_or_long_name, 'body')
end
+
# Return the short name if present, or else long name
def short_or_long_name
- if self.short_name.nil? # can happen during construction
+ if self.short_name.nil? || self.short_name.empty? # 'nil' can happen during construction
self.name
else
- self.short_name.empty? ? self.name : self.short_name
+ self.short_name
end
end
@@ -222,8 +245,8 @@ class PublicBody < ActiveRecord::Base
types = []
first = true
for tag in self.tags
- if PublicBodyCategories::CATEGORIES_BY_TAG.include?(tag.name)
- desc = PublicBodyCategories::CATEGORY_SINGULAR_BY_TAG[tag.name]
+ if PublicBodyCategories::get().by_tag().include?(tag.name)
+ desc = PublicBodyCategories::get().singular_by_tag()[tag.name]
if first
# terrible that Ruby/Rails doesn't have an equivalent of ucfirst
# (capitalize shockingly converts later characters to lowercase)
@@ -311,9 +334,10 @@ class PublicBody < ActiveRecord::Base
# Import from CSV. Just tests things and returns messages if dry_run is true.
# Returns an array of [array of errors, array of notes]. If there are errors,
# always rolls back (as with dry_run).
- def self.import_csv(csv, tag, dry_run, editor, additional_locales = [])
+ def self.import_csv(csv, tag, tag_behaviour, dry_run, editor, available_locales = [])
errors = []
notes = []
+ available_locales = [I18n.default_locale] if available_locales.empty?
begin
ActiveRecord::Base.transaction do
@@ -323,14 +347,18 @@ class PublicBody < ActiveRecord::Base
bodies_by_name = {}
set_of_existing = Set.new()
PublicBody.with_locale(I18n.default_locale) do
- for existing_body in PublicBody.find_by_tag(tag)
+ bodies = (tag.nil? || tag.empty?) ? PublicBody.find(:all) : PublicBody.find_by_tag(tag)
+ for existing_body in bodies
+ # Hide InternalAdminBody from import notes
+ next if existing_body.id == PublicBody.internal_admin_body.id
+
bodies_by_name[existing_body.name] = existing_body
set_of_existing.add(existing_body.name)
end
end
set_of_importing = Set.new()
- field_names = { 'name'=>1, 'email'=>2 } # Default values in case no field list is given
+ field_names = { 'name'=>1, 'request_email'=>2 } # Default values in case no field list is given
line = 0
CSV::Reader.parse(csv) do |row|
line = line + 1
@@ -341,57 +369,82 @@ class PublicBody < ActiveRecord::Base
row.each_with_index {|field, i| field_names[field] = i}
next
end
+
+ fields = {}
+ field_names.each{|name, i| fields[name] = row[i]}
name = row[field_names['name']]
- email = row[field_names['email']]
+ email = row[field_names['request_email']]
next if name.nil?
- if email.nil?
- email = '' # unknown/bad contact is empty string
- end
name.strip!
- email.strip!
+ email.strip! unless email.nil?
- if email != "" && !MySociety::Validate.is_valid_email(email)
- errors.push "error: line " + line.to_s + ": invalid email " + email + " for authority '" + name + "'"
+ if !email.nil? && !email.empty? && !MySociety::Validate.is_valid_email(email)
+ errors.push "error: line #{line.to_s}: invalid email '#{email}' for authority '#{name}'"
next
end
+
+ field_list = ['name', 'short_name', 'request_email', 'notes', 'publication_scheme', 'home_page', 'tag_string']
+
+ if public_body = bodies_by_name[name] # Existing public body
+ available_locales.each do |locale|
+ PublicBody.with_locale(locale) do
+ changed = {}
+ field_list.each do |field_name|
+ localized_field_name = (locale.to_s == I18n.default_locale.to_s) ? field_name : "#{field_name}.#{locale}"
+ localized_value = field_names[localized_field_name] && row[field_names[localized_field_name]]
+
+ # Tags are a special case, as we support adding to the field, not just setting a new value
+ if localized_field_name == 'tag_string'
+ if localized_value.nil?
+ localized_value = tag unless tag.empty?
+ else
+ if tag_behaviour == 'add'
+ localized_value = "#{localized_value} #{tag}" unless tag.empty?
+ localized_value = "#{localized_value} #{public_body.tag_string}"
+ end
+ end
+ end
+
+ if !localized_value.nil? and public_body.send(field_name) != localized_value
+ changed[field_name] = "#{public_body.send(field_name)}: #{localized_value}"
+ public_body.send("#{field_name}=", localized_value)
+ end
+ end
- if bodies_by_name[name]
- # Already have the public body, just update email
- public_body = bodies_by_name[name]
- if public_body.request_email != email
- notes.push "line " + line.to_s + ": updating email for '" + name + "' from " + public_body.request_email + " to " + email
- public_body.request_email = email
- public_body.last_edit_editor = editor
- public_body.last_edit_comment = 'Updated from spreadsheet'
- public_body.save!
- end
-
- additional_locales.each do |locale|
- localized_name = field_names["name.#{locale}"] && row[field_names["name.#{locale}"]]
- PublicBody.with_locale(locale) do
- if !localized_name.nil? and public_body.name != localized_name
- notes.push "line " + line.to_s + ": updating name for '#{name}' from '#{public_body.name}' to '#{localized_name}' (locale: #{locale})."
- public_body.name = localized_name
+ unless changed.empty?
+ notes.push "line #{line.to_s}: updating authority '#{name}' (locale: #{locale}):\n\t#{changed.to_json}"
+ public_body.last_edit_editor = editor
+ public_body.last_edit_comment = 'Updated from spreadsheet'
public_body.save!
end
end
end
- else
- # New public body
- notes.push "line " + line.to_s + ": new authority '" + name + "' with email " + email
- public_body = PublicBody.new(:name => name, :request_email => email, :short_name => "", :home_page => "", :publication_scheme => "", :notes => "", :last_edit_editor => editor, :last_edit_comment => 'Created from spreadsheet')
- public_body.tag_string = tag
- public_body.save!
-
- additional_locales.each do |locale|
- localized_name = field_names["name.#{locale}"] && row[field_names["name.#{locale}"]]
- if !localized_name.nil?
- PublicBody.with_locale(locale) do
- notes.push "line " + line.to_s + ": (aka '#{localized_name}' in locale #{locale})"
- public_body.name = localized_name
- public_body.publication_scheme = ""
+ else # New public body
+ public_body = PublicBody.new(:name=>"", :short_name=>"", :request_email=>"")
+ available_locales.each do |locale|
+ PublicBody.with_locale(locale) do
+ changed = {}
+ field_list.each do |field_name|
+ localized_field_name = (locale.to_s == I18n.default_locale.to_s) ? field_name : "#{field_name}.#{locale}"
+ localized_value = field_names[localized_field_name] && row[field_names[localized_field_name]]
+
+ if localized_field_name == 'tag_string' and tag_behaviour == 'add'
+ localized_value = "#{localized_value} #{tag}" unless tag.empty?
+ end
+
+ if !localized_value.nil? and public_body.send(field_name) != localized_value
+ changed[field_name] = localized_value
+ public_body.send("#{field_name}=", localized_value)
+ end
+ end
+
+ unless changed.empty?
+ notes.push "line #{line.to_s}: creating new authority '#{name}' (locale: #{locale}):\n\t#{changed.to_json}"
+ public_body.publication_scheme = public_body.publication_scheme || ""
+ public_body.last_edit_editor = editor
+ public_body.last_edit_comment = 'Created from spreadsheet'
public_body.save!
end
end
@@ -404,7 +457,7 @@ class PublicBody < ActiveRecord::Base
# Give an error listing ones that are to be deleted
deleted_ones = set_of_existing - set_of_importing
if deleted_ones.size > 0
- notes.push "notes: Some " + tag + " bodies are in database, but not in CSV file:\n " + Array(deleted_ones).join("\n ") + "\nYou may want to delete them manually.\n"
+ notes.push "Notes: Some " + tag + " bodies are in database, but not in CSV file:\n " + Array(deleted_ones).join("\n ") + "\nYou may want to delete them manually.\n"
end
# Rollback if a dry run, or we had errors
@@ -473,7 +526,7 @@ class PublicBody < ActiveRecord::Base
end
def notes_without_html
# assume notes are reasonably behaved HTML, so just use simple regexp on this
- self.notes.gsub(/<\/?[^>]*>/, "")
+ self.notes.nil? ? '' : self.notes.gsub(/<\/?[^>]*>/, "")
end
def json_for_api
diff --git a/app/models/request_mailer.rb b/app/models/request_mailer.rb
index fc317d20d..75dc58447 100644
--- a/app/models/request_mailer.rb
+++ b/app/models/request_mailer.rb
@@ -47,7 +47,7 @@ class RequestMailer < ApplicationMailer
def requires_admin(info_request)
@from = info_request.user.name_and_email
@recipients = contact_from_name_and_email
- @subject = "FOI response requires admin - " + info_request.title
+ @subject = _("FOI response requires admin - ") + info_request.title
url = main_url(request_url(info_request))
admin_url = request_admin_url(info_request)
@body = {:info_request => info_request, :url => url, :admin_url => admin_url }
@@ -61,9 +61,10 @@ class RequestMailer < ApplicationMailer
@from = contact_from_name_and_email
headers 'Return-Path' => blackhole_email, 'Reply-To' => @from, # not much we can do if the user's email is broken
- 'Auto-Submitted' => 'auto-generated' # http://tools.ietf.org/html/rfc3834
+ 'Auto-Submitted' => 'auto-generated', # http://tools.ietf.org/html/rfc3834
+ 'X-Auto-Response-Suppress' => 'OOF'
@recipients = info_request.user.name_and_email
- @subject = "New response to your FOI request - " + info_request.title
+ @subject = _("New response to your FOI request - ") + info_request.title
@body = { :incoming_message => incoming_message, :info_request => info_request, :url => url }
end
@@ -79,9 +80,10 @@ class RequestMailer < ApplicationMailer
@from = contact_from_name_and_email
headers 'Return-Path' => blackhole_email, 'Reply-To' => @from, # not much we can do if the user's email is broken
- 'Auto-Submitted' => 'auto-generated' # http://tools.ietf.org/html/rfc3834
+ 'Auto-Submitted' => 'auto-generated', # http://tools.ietf.org/html/rfc3834
+ 'X-Auto-Response-Suppress' => 'OOF'
@recipients = user.name_and_email
- @subject = "Delayed response to your FOI request - " + info_request.title
+ @subject = _("Delayed response to your FOI request - ") + info_request.title
@body = { :info_request => info_request, :url => url }
end
@@ -97,9 +99,10 @@ class RequestMailer < ApplicationMailer
@from = contact_from_name_and_email
headers 'Return-Path' => blackhole_email, 'Reply-To' => @from, # not much we can do if the user's email is broken
- 'Auto-Submitted' => 'auto-generated' # http://tools.ietf.org/html/rfc3834
+ 'Auto-Submitted' => 'auto-generated', # http://tools.ietf.org/html/rfc3834
+ 'X-Auto-Response-Suppress' => 'OOF'
@recipients = user.name_and_email
- @subject = "You're long overdue a response to your FOI request - " + info_request.title
+ @subject = _("You're long overdue a response to your FOI request - ") + info_request.title
@body = { :info_request => info_request, :url => url }
end
@@ -116,9 +119,10 @@ class RequestMailer < ApplicationMailer
@from = contact_from_name_and_email
headers 'Return-Path' => blackhole_email, 'Reply-To' => @from, # not much we can do if the user's email is broken
- 'Auto-Submitted' => 'auto-generated' # http://tools.ietf.org/html/rfc3834
+ 'Auto-Submitted' => 'auto-generated', # http://tools.ietf.org/html/rfc3834
+ 'X-Auto-Response-Suppress' => 'OOF'
@recipients = info_request.user.name_and_email
- @subject = "Was the response you got to your FOI request any good?"
+ @subject = _("Was the response you got to your FOI request any good?")
@body = { :incoming_message => incoming_message, :info_request => info_request, :url => url }
end
@@ -126,7 +130,8 @@ class RequestMailer < ApplicationMailer
def old_unclassified_updated(info_request)
@from = contact_from_name_and_email
headers 'Return-Path' => blackhole_email, 'Reply-To' => @from, # not much we can do if the user's email is broken
- 'Auto-Submitted' => 'auto-generated' # http://tools.ietf.org/html/rfc3834
+ 'Auto-Submitted' => 'auto-generated', # http://tools.ietf.org/html/rfc3834
+ 'X-Auto-Response-Suppress' => 'OOF'
@recipients = info_request.user.name_and_email
@subject = "Someone has updated the status of your request"
url = main_url(request_url(info_request))
@@ -146,7 +151,8 @@ class RequestMailer < ApplicationMailer
@from = contact_from_name_and_email
headers 'Return-Path' => blackhole_email, 'Reply-To' => @from, # not much we can do if the user's email is broken
- 'Auto-Submitted' => 'auto-generated' # http://tools.ietf.org/html/rfc3834
+ 'Auto-Submitted' => 'auto-generated', # http://tools.ietf.org/html/rfc3834
+ 'X-Auto-Response-Suppress' => 'OOF'
@recipients = info_request.user.name_and_email
@subject = "Clarify your FOI request - " + info_request.title
@body = { :incoming_message => incoming_message, :info_request => info_request, :url => url }
@@ -156,17 +162,19 @@ class RequestMailer < ApplicationMailer
def comment_on_alert(info_request, comment)
@from = contact_from_name_and_email
headers 'Return-Path' => blackhole_email, 'Reply-To' => @from, # not much we can do if the user's email is broken
- 'Auto-Submitted' => 'auto-generated' # http://tools.ietf.org/html/rfc3834
+ 'Auto-Submitted' => 'auto-generated', # http://tools.ietf.org/html/rfc3834
+ 'X-Auto-Response-Suppress' => 'OOF'
@recipients = info_request.user.name_and_email
- @subject = "Somebody added a note to your FOI request - " + info_request.title
+ @subject = _("Somebody added a note to your FOI request - ") + info_request.title
@body = { :comment => comment, :info_request => info_request, :url => main_url(comment_url(comment)) }
end
def comment_on_alert_plural(info_request, count, earliest_unalerted_comment)
@from = contact_from_name_and_email
headers 'Return-Path' => blackhole_email, 'Reply-To' => @from, # not much we can do if the user's email is broken
- 'Auto-Submitted' => 'auto-generated' # http://tools.ietf.org/html/rfc3834
+ 'Auto-Submitted' => 'auto-generated', # http://tools.ietf.org/html/rfc3834
+ 'X-Auto-Response-Suppress' => 'OOF'
@recipients = info_request.user.name_and_email
- @subject = "Some notes have been added to your FOI request - " + info_request.title
+ @subject = _("Some notes have been added to your FOI request - ") + info_request.title
@body = { :count => count, :info_request => info_request, :url => main_url(comment_url(earliest_unalerted_comment)) }
end
@@ -266,12 +274,12 @@ class RequestMailer < ApplicationMailer
end
end
- # Send email alerts for new responses which haven't been classified. Goes
- # out 3 days after last update of event, then after 7, then after 24.
+ # Send email alerts for new responses which haven't been classified. By default,
+ # it goes out 3 days after last update of event, then after 10, then after 24.
def self.alert_new_response_reminders
- self.alert_new_response_reminders_internal(3, 'new_response_reminder_1')
- self.alert_new_response_reminders_internal(10, 'new_response_reminder_2')
- self.alert_new_response_reminders_internal(24, 'new_response_reminder_3')
+ MySociety::Config.get("NEW_RESPONSE_REMINDER_AFTER_DAYS", [3, 10, 24]).each_with_index do |days, i|
+ self.alert_new_response_reminders_internal(days, "new_response_reminder_#{i+1}")
+ end
end
def self.alert_new_response_reminders_internal(days_since, type_code)
info_requests = InfoRequest.find_old_unclassified(:order => 'info_requests.id',
diff --git a/app/models/track_mailer.rb b/app/models/track_mailer.rb
index 4b7c603a7..0c053c4ad 100644
--- a/app/models/track_mailer.rb
+++ b/app/models/track_mailer.rb
@@ -26,6 +26,12 @@ class TrackMailer < ApplicationMailer
@body = { :user => user, :email_about_things => email_about_things, :unsubscribe_url => unsubscribe_url }
end
+ def contact_from_name_and_email
+ contact_name = MySociety::Config.get("TRACK_SENDER_NAME", 'Alaveteli')
+ contact_email = MySociety::Config.get("TRACK_SENDER_EMAIL", 'contact@localhost')
+ return "#{contact_name} <#{contact_email}>"
+ end
+
# Send email alerts for tracked things. Never more than one email
# a day, nor about events which are more than a week old, nor
# events about which emails have been sent within the last two
@@ -34,12 +40,15 @@ class TrackMailer < ApplicationMailer
# Useful query to run by hand to see how many alerts are due:
# User.find(:all, :conditions => [ "last_daily_track_email < ?", Time.now - 1.day ]).size
def self.alert_tracks
+ done_something = false
now = Time.now()
users = User.find(:all, :conditions => [ "last_daily_track_email < ?", now - 1.day ])
if users.empty?
- return false
+ return done_something
end
for user in users
+ next if !user.should_be_emailed?
+
email_about_things = []
track_things = TrackThing.find(:all, :conditions => [ "tracking_user_id = ? and track_medium = ?", user.id, 'email_daily' ])
for track_thing in track_things
@@ -85,7 +94,11 @@ class TrackMailer < ApplicationMailer
# If we have anything to send, then send everything for the user in one mail
if email_about_things.size > 0
# Send the email
+
+ previous_locale = I18n.locale
+ I18n.locale = user.get_locale
TrackMailer.deliver_event_digest(user, email_about_things)
+ I18n.locale = previous_locale
end
# Record that we've now sent those alerts to that user
@@ -104,8 +117,9 @@ class TrackMailer < ApplicationMailer
user.last_daily_track_email = now
user.no_xapian_reindex = true
user.save!
+ done_something = true
end
- return true
+ return done_something
end
def self.alert_tracks_loop
diff --git a/app/models/track_thing.rb b/app/models/track_thing.rb
index 16a0dab87..b74f7dad5 100644
--- a/app/models/track_thing.rb
+++ b/app/models/track_thing.rb
@@ -22,6 +22,7 @@
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
# $Id: track_thing.rb,v 1.53 2009-09-17 21:10:05 francis Exp $
+require 'set'
class TrackThing < ActiveRecord::Base
belongs_to :tracking_user, :class_name => 'User'
@@ -67,6 +68,63 @@ class TrackThing < ActiveRecord::Base
TrackThing.track_type_description(self.track_type)
end
+ def track_query_description
+ # XXX this is very brittle... we should probably ask users
+ # simply to name their tracks when they make them?
+ self.track_query = self.track_query.gsub(/([()]|OR)/, "")
+ filters = self.track_query.scan /\b\S+:\S+\b/
+ text = self.track_query
+ varieties = Set.new
+ date = ""
+ statuses = Set.new
+ for filter in filters
+ text = text.sub(filter, "")
+ if filter =~ /variety:user/
+ varieties << _("users")
+ end
+ if filter =~ /variety:comment/
+ varieties << _("comments")
+ end
+ if filter =~ /variety:authority/
+ varieties << _("authorities")
+ end
+ if filter =~ /(variety:(sent|followup_sent|response)|latest_status)/
+ varieties << _("requests")
+ end
+ if filter =~ /[0-9\/]+\.\.[0-9\/]+/
+ date = _("between two dates")
+ end
+ if filter =~ /(rejected|not_held)/
+ statuses << _("unsuccessful")
+ end
+ if filter =~ /(:successful|:partially_successful)/
+ statuses << _("successful")
+ end
+ if filter =~ /waiting/
+ statuses << _("awaiting a response")
+ end
+ end
+ if filters.empty?
+ text = self.track_query
+ end
+ descriptions = []
+ if varieties.include? _("requests")
+ descriptions << _("requests which are {{list_of_statuses}}", :list_of_statuses => Array(statuses).join(_(' or ')))
+ varieties -= [_("requests")]
+ end
+ if descriptions.empty? and varieties.empty?
+ varieties << _("anything")
+ end
+ descriptions += Array(varieties)
+ text = text.strip
+ descriptions = descriptions.join(_(" or "))
+ if !text.empty?
+ descriptions += _("{{list_of_things}} matching text '{{search_query}}'", :list_of_things => "", :search_query => text)
+ end
+ return descriptions
+ end
+
+
def TrackThing.create_track_for_request(info_request)
track_thing = TrackThing.new
track_thing.track_type = 'request_updates'
@@ -105,10 +163,25 @@ class TrackThing < ActiveRecord::Base
return track_thing
end
- def TrackThing.create_track_for_search_query(query)
+ def TrackThing.create_track_for_search_query(query, variety_postfix = nil)
track_thing = TrackThing.new
track_thing.track_type = 'search_query'
+ if !(query =~ /variety:/)
+ case variety_postfix
+ when "requests"
+ query += " variety:sent"
+ when "users"
+ query += " variety:user"
+ when "authorities"
+ query += " variety:authority"
+ end
+ end
track_thing.track_query = query
+ # XXX should extract requested_by:, request:, requested_from:
+ # and stick their values into the respective relations.
+ # Should also update "params" to make the list_description
+ # nicer and more generic. It will need to do some clever
+ # parsing of the query to do this nicely
return track_thing
end
@@ -119,16 +192,16 @@ class TrackThing < ActiveRecord::Base
if self.track_type == 'request_updates'
@params = {
# Website
- :list_description => "'<a href=\"/request/" + CGI.escapeHTML(self.info_request.url_title) + "\">" + CGI.escapeHTML(self.info_request.title) + "</a>', a request", # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how
+ :list_description => _("'{{link_to_request}}', a request", :link_to_request => "<a href=\"/request/" + CGI.escapeHTML(self.info_request.url_title) + "\">" + CGI.escapeHTML(self.info_request.title) + "</a>"), # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how
:verb_on_page => _("Track this request by email"),
:verb_on_page_already => _("You are already tracking this request by email"),
# Email
- :title_in_email => "New updates for the request '" + self.info_request.title + "'",
- :title_in_rss => "New updates for the request '" + self.info_request.title + "'",
+ :title_in_email => _("New updates for the request '{{request_title}}'", :request_title => self.info_request.title),
+ :title_in_rss => _("New updates for the request '{{request_title}}'", :request_title => self.info_request.title),
# Authentication
- :web => "To follow updates to the request '" + CGI.escapeHTML(self.info_request.title) + "'",
- :email => "Then you will be emailed whenever the request '" + CGI.escapeHTML(self.info_request.title) + "' is updated.",
- :email_subject => "Confirm you want to follow updates to the request '" + self.info_request.title + "'",
+ :web => _("To follow updates to the request '{{request_title}}'", :request_title => CGI.escapeHTML(self.info_request.title)),
+ :email => _("Then you will be emailed whenever the request '{{request_title}}' is updated.", :request_title => CGI.escapeHTML(self.info_request.title)),
+ :email_subject => _("Confirm you want to follow updates to the request '{{request_title}}'", :request_title => self.info_request.title),
# RSS sorting
:feed_sortby => 'newest'
}
@@ -170,7 +243,7 @@ class TrackThing < ActiveRecord::Base
elsif self.track_type == 'public_body_updates'
@params = {
# Website
- :list_description => "'<a href=\"/body/" + CGI.escapeHTML(self.public_body.url_name) + "\">" + CGI.escapeHTML(self.public_body.name) + "</a>', a public authority", # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how
+ :list_description => _("'{{link_to_authority}}', a public authority", :link_to_authority => "<a href=\"/body/" + CGI.escapeHTML(self.public_body.url_name) + "\">" + CGI.escapeHTML(self.public_body.name) + "</a>"), # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how
:verb_on_page => _("Track requests to {{public_body_name}} by email",:public_body_name=>CGI.escapeHTML(self.public_body.name)),
:verb_on_page_already => _("You are already tracking requests to {{public_body_name}} by email", :public_body_name=>CGI.escapeHTML(self.public_body.name)),
# Email
@@ -186,7 +259,7 @@ class TrackThing < ActiveRecord::Base
elsif self.track_type == 'user_updates'
@params = {
# Website
- :list_description => "'<a href=\"/user/" + CGI.escapeHTML(self.tracked_user.url_name) + "\">" + CGI.escapeHTML(self.tracked_user.name) + "</a>', a person", # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how
+ :list_description => _("'{{link_to_user}}', a person", :link_to_user => "<a href=\"/user/" + CGI.escapeHTML(self.tracked_user.url_name) + "\">" + CGI.escapeHTML(self.tracked_user.name) + "</a>"), # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how
:verb_on_page => _("Track this person by email"),
:verb_on_page_already => _("You are already tracking this person by email"),
# Email
@@ -202,16 +275,16 @@ class TrackThing < ActiveRecord::Base
elsif self.track_type == 'search_query'
@params = {
# Website
- :list_description => "'<a href=\"/search/" + CGI.escapeHTML(self.track_query) + "/newest\">" + CGI.escapeHTML(self.track_query) + "</a>' in new requests/responses", # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how
- :verb_on_page => _("Track things matching '{{query}}' by email", :query=>CGI.escapeHTML(self.track_query)),
- :verb_on_page_already => _("You are already tracking things matching '{{query}}' by email", :query=>CGI.escapeHTML(self.track_query)),
+ :list_description => "<a href=\"/search/" + CGI.escapeHTML(self.track_query) + "/newest/advanced\">" + self.track_query_description + "</a>", # XXX yeuch, sometimes I just want to call view helpers from the model, sorry! can't work out how
+ :verb_on_page => _("Track things matching this search by email"),
+ :verb_on_page_already => _("You are already tracking things matching this search by email"),
# Email
- :title_in_email => _("Requests or responses matching '{{query}}'", :query=>self.track_query),
- :title_in_rss => _("Requests or responses matching '{{query}}'", :query=>self.track_query),
+ :title_in_email => _("Requests or responses matching your saved search"),
+ :title_in_rss => _("Requests or responses matching your saved search"),
# Authentication
- :web => _("To follow requests and responses matching '{{query}}'", :query=>CGI.escapeHTML(self.track_query)),
- :email => _("Then you will be emailed whenever a new request or response matches '{{query}}'.", :query=>CGI.escapeHTML(self.track_query)),
- :email_subject => _("Confirm you want to be emailed about new requests or responses matching '{{query}}'", :query=>self.track_query),
+ :web => _("To follow requests and responses matching your search"),
+ :email => _("Then you will be emailed whenever a new request or response matches your search."),
+ :email_subject => _("Confirm you want to be emailed about new requests or responses matching your search"),
# RSS sorting - XXX hmmm, we don't really know which to use
# here for sorting. Might be a query term (e.g. 'cctv'), in
# which case newest is good, or might be something like
diff --git a/app/models/user.rb b/app/models/user.rb
index fddb6b035..e98d777b1 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -16,6 +16,8 @@
# admin_level :string(255) default("none"), not null
# ban_text :text default(""), not null
# about_me :text default(""), not null
+# email_bounced_at :datetime
+# email_bounce_message :text default(""), not null
#
# models/user.rb:
@@ -96,6 +98,15 @@ class User < ActiveRecord::Base
end
end
end
+
+ def get_locale
+ if !self.locale.nil?
+ locale = self.locale
+ else
+ locale = I18n.locale
+ end
+ return locale.to_s
+ end
def visible_comments
self.comments.find(:all, :conditions => 'visible')
@@ -341,15 +352,37 @@ class User < ActiveRecord::Base
}
end
+ def record_bounce(message)
+ self.email_bounced_at = Time.now
+ self.email_bounce_message = message
+ self.save!
+ end
+
+ def should_be_emailed?
+ return (self.email_confirmed && self.email_bounced_at.nil?)
+ end
+
+ ## Private instance methods
private
+ def create_new_salt
+ self.salt = self.object_id.to_s + rand.to_s
+ end
+
+ ## Class methods
def User.encrypted_password(password, salt)
string_to_hash = password + salt # XXX need to add a secret here too?
Digest::SHA1.hexdigest(string_to_hash)
end
-
- def create_new_salt
- self.salt = self.object_id.to_s + rand.to_s
+
+ def User.record_bounce_for_email(email, message)
+ user = User.find_user_by_email(email)
+ return false if user.nil?
+
+ if user.email_bounced_at.nil?
+ user.record_bounce(message)
+ end
+ return true
end
end
diff --git a/app/models/user_mailer.rb b/app/models/user_mailer.rb
index 0972e167d..7adf5b63c 100644
--- a/app/models/user_mailer.rb
+++ b/app/models/user_mailer.rb
@@ -46,7 +46,5 @@ class UserMailer < ApplicationMailer
@body[:old_email] = old_email
@body[:new_email] = new_email
end
-
-
end
diff --git a/app/views/admin_public_body/_form.rhtml b/app/views/admin_public_body/_form.rhtml
index b1516be2e..1cdc9b3fe 100644
--- a/app/views/admin_public_body/_form.rhtml
+++ b/app/views/admin_public_body/_form.rhtml
@@ -2,48 +2,60 @@
<!--[form:public_body]-->
-<div id="tag_help">
- <h2>List of tags</h2>
- <% first_row = true %>
- <% for row in PublicBodyCategories::CATEGORIES_WITH_HEADINGS %>
- <% if row.instance_of?(Array) %>
- <% if row[0] != 'other' %>
- <strong><%= row[0] %></strong>=<%= row[1] %>
- <br/>
- <% end %>
- <% elsif row != 'Miscellaneous' %>
- <% if not first_row %>
- <% else %>
- <% first_row = false %>
- <% end %>
- <h3><%=h row%></h3>
- <% end %>
+<div id="div-locales">
+ <ul>
+ <% for locale in I18n.available_locales do %>
+ <li><a href="#div-locale-<%=locale.to_s%>"><%=locale_name(locale.to_s)%></a></li>
<% end %>
+ </ul>
+
+<%
+ for locale in I18n.available_locales do
+ if locale==I18n.default_locale # The default locale is submitted as part of the bigger object...
+ prefix = 'public_body'
+ object = @public_body
+ else # ...but additional locales go "on the side"
+ prefix = "public_body[translated_versions][]"
+ object = @public_body.new_record? ?
+ PublicBody::Translation.new :
+ @public_body.translation(locale.to_s) || PublicBody::Translation.new
+ end
+
+ fields_for prefix, object do |t|
+%>
+ <div id="div-locale-<%=locale.to_s%>">
+ <%= t.hidden_field :locale, :value => locale.to_s %>
+
+ <p><label for="<%= form_tag_id(t.object_name, :name, locale) %>">Name</label><br/>
+ <%= t.text_field :name, :size => 60, :id => form_tag_id(t.object_name, :name, locale) %></p>
+
+ <p><label for="<%= form_tag_id(t.object_name, :short_name, locale) %>">Short name <small>(only put in abbreviations which are really used, otherwise leave blank. Short or long name is used in the URL - don't worry about breaking URLs through renaming, as the history is used to redirect)</small></label><br/>
+ <%= t.text_field :short_name, :size => 60, :id => form_tag_id(t.object_name, :short_name, locale) %></p>
+
+ <p><label for="<%= form_tag_id(t.object_name, :request_email, locale) %>">Request email <small>(set to <strong>blank</strong> (empty string) if can't find an address; these emails are <strong>public</strong> as anyone can view with a CAPTCHA)</small></label><br/>
+ <%= t.text_field :request_email, :size => 40, :id => form_tag_id(t.object_name, :request_email, locale) %></p>
+
+ <p><label for="<%= form_tag_id(t.object_name, :publication_scheme, locale) %>">Publication scheme URL</label><br/>
+ <%= t.text_field :publication_scheme, :size => 60, :id => form_tag_id(t.object_name, :publication_scheme, locale) %></p>
+
+ <p><label for="<%= form_tag_id(t.object_name, :notes, locale) %>">Public notes</label> <small>(HTML, for users to consider when making FOI requests to the authority)</small><br/>
+ <%= t.text_area :notes, :rows => 3, :cols => 60, :id => form_tag_id(t.object_name, :notes, locale) %></p>
+ </div>
+<%
+ end
+ end
+%>
</div>
-<p><label for="public_body_name">Name</label><br/>
-<%= text_field 'public_body', 'name', :size => 60 %></p>
-
-<p><label for="public_body_short_name">Short name <small>(only put in abbreviations which are really used, otherwise leave blank. Short or long name is used in the URL - don't worry about breaking URLs through renaming, as the history is used to redirect)</small></label><br/>
-<%= text_field 'public_body', 'short_name', :size => 60 %></p>
-
-<p><label for="public_body_request_email">Request email <small>(set to <strong>blank</strong> (empty string) if can't find an address; these emails are <strong>public</strong> as anyone can view with a CAPTCHA)</small></label><br/>
-<%= text_field 'public_body', 'request_email', :size => 40 %></p>
+<h3>Common Fields</h3>
<p><label for="public_body_tag_string">Tags <small>(space separated; see list of tags on the right; also <strong>not_apply</strong> if FOI and EIR no longer apply to authority, <strong>eir_only</strong> if EIR but not FOI applies to authority, <strong>defunct</strong> if the authority no longer exists; charity:NUMBER if a registered charity)</small></label><br/>
-<%= text_field 'public_body', 'tag_string', :size => 60 %></p>
+<%= f.text_field :tag_string, :size => 60 %></p>
<p><label for="public_body_home_page">Home page <small>(of whole authority, not just their FOI page; set to <strong>blank</strong> (empty string) to guess it from the email)</small></label><br/>
-<%= text_field 'public_body', 'home_page', :size => 60 %></p>
-
-<p><label for="public_body_publication_scheme">Publication scheme URL</label><br/>
-<%= text_field 'public_body', 'publication_scheme', :size => 60 %></p>
-
-<p><label for="public_body_notes">Public notes</label> <small>(HTML, for users to consider when making FOI requests to the authority)</small><br/>
-<%= text_area 'public_body', 'notes', :rows => 3, :cols => 60 %></p>
+<%= f.text_field :home_page, :size => 60 %></p>
<p><label for="public_body_last_edit_comment"><strong>Comment</strong> for this edit</label> <small>(put URL or other source of new info)</small><br/>
-<%= text_area 'public_body', 'last_edit_comment', :rows => 3, :cols => 60 %></p>
-<!--[eoform:public_body]-->
-
+<%= f.text_area :last_edit_comment, :rows => 3, :cols => 60 %></p>
+<!--[eoform:public_body]-->
diff --git a/app/views/admin_public_body/_tag_help.rhtml b/app/views/admin_public_body/_tag_help.rhtml
new file mode 100644
index 000000000..0d0f84dda
--- /dev/null
+++ b/app/views/admin_public_body/_tag_help.rhtml
@@ -0,0 +1,18 @@
+<div id="tag_help">
+ <h2>List of tags</h2>
+ <% first_row = true %>
+ <% for row in PublicBodyCategories::get().with_headings() %>
+ <% if row.instance_of?(Array) %>
+ <% if row[0] != 'other' %>
+ <strong><%= row[0] %></strong>=<%= row[1] %>
+ <br/>
+ <% end %>
+ <% elsif row != 'Miscellaneous' %>
+ <% if not first_row %>
+ <% else %>
+ <% first_row = false %>
+ <% end %>
+ <h3><%=h row%></h3>
+ <% end %>
+ <% end %>
+</div> \ No newline at end of file
diff --git a/app/views/admin_public_body/edit.rhtml b/app/views/admin_public_body/edit.rhtml
index 005ec93ce..b91f15a2e 100644
--- a/app/views/admin_public_body/edit.rhtml
+++ b/app/views/admin_public_body/edit.rhtml
@@ -1,23 +1,30 @@
-
-
<h1><%=@title%></h1>
-<% form_tag '../update/' + @public_body.id.to_s do %>
- <%= render :partial => 'form' %>
- <p><%= submit_tag 'Save', :accesskey => 's' %></p>
-<% end %>
+<script type="text/javascript">
+ $(function() {
+ $("#div-locales").tabs();
+ });
+</script>
-<p>
-<%= link_to 'Show', '../show/' + @public_body.id.to_s %> |
-<%= link_to 'List all', '../list' %>
-</p>
+<%= render :partial => 'tag_help' %>
-<% if @public_body.info_requests.size == 0 %>
- <% form_tag('../destroy/' + @public_body.id.to_s) do %>
- <p>
- <%= hidden_field_tag(:public_body_id, { :value => @public_body.id } ) %>
- <%= submit_tag "Destroy " + @public_body.name %> (this is permanent!)
- </p>
+<div id="public_body_form">
+ <% form_for @public_body, :url => {:action => 'update'} do |f| %>
+ <%= render :partial => 'form', :locals => {:f => f} %>
+ <p><%= f.submit 'Save', :accesskey => 's' %></p>
<% end %>
-<% end %>
+ <p>
+ <%= link_to 'Show', '../show/' + @public_body.id.to_s %> |
+ <%= link_to 'List all', '../list' %>
+ </p>
+
+ <% if @public_body.info_requests.size == 0 %>
+ <% form_tag('../destroy/' + @public_body.id.to_s) do %>
+ <p>
+ <%= hidden_field_tag(:public_body_id, { :value => @public_body.id } ) %>
+ <%= submit_tag "Destroy " + @public_body.name %> (this is permanent!)
+ </p>
+ <% end %>
+ <% end %>
+</div>
diff --git a/app/views/admin_public_body/import_csv.rhtml b/app/views/admin_public_body/import_csv.rhtml
index 50a4b951a..ecd2c38b7 100644
--- a/app/views/admin_public_body/import_csv.rhtml
+++ b/app/views/admin_public_body/import_csv.rhtml
@@ -12,33 +12,49 @@
<% form_tag 'import_csv', :multipart => true do %>
<p>
- <label for="tag">Tag to add entries to / alter entries for:</label>
- <%= text_field_tag 'tag', params[:tag] %>
- </p>
-
- <p>
<label for="csv_file">CSV file:</label>
<%= file_field_tag :csv_file, :size => 40 %>
</p>
+ <p>
+ <label for="tag">Optional: Tag to add entries to / alter entries for:</label>
+ <%= text_field_tag 'tag', params[:tag] %>
+ </p>
+
+ <p>
+ <label for="tag_behaviour">What to do with existing tags?</label>
+ <%= select_tag 'tag_behaviour',
+ "<option value='add' selected>Add new tags to existing ones</option>
+ <option value='replace'>Replace existing tags with new ones</option>"
+ %>
+ </p>
+
<p><strong>CSV file format:</strong> A first row with the list of fields,
starting with '#', is optional but highly recommended. The fields 'name'
- and 'email' are required; additionaly, translated values are supported by
+ and 'request_email' are required; additionaly, translated values are supported by
adding the locale name to the field name, e.g. 'name.es', 'name.de'... Example:
</p>
<blockquote>
- #id,name,email,name.es<br/>
- 1,An Authority,a@example.com,Un organismo<br/>
- 2,Another One,another@example.com,Otro organismo<br/>
+ #id,name,request_email,name.es,tag_string<br/>
+ 1,An Authority,a@example.com,Un organismo,a_tag another_tag<br/>
+ 2,Another One,another@example.com,Otro organismo,a_tag<br/>
</blockquote>
+ <p>Supported fields: name (i18n), short_name (i18n), request_email (i18n), notes (i18n),
+ publication_scheme (i18n), home_page, tag_string (tags separated by spaces).</p>
+
<p><strong>Note:</strong> Choose <strong>dry run</strong> to test, without
actually altering the database. Choose <strong>upload</strong> to actually
make the changes. In either case, you will be shown any errors, or details
of the changes. When uploading, any changes since last import will be
overwritten - e.g. email addresses changed back.
</p>
+
+ <p><strong>Note:</strong> The import tag will also be added to the imported bodies
+ if no tags are provided in the CSV file or if the import mode is set to
+ "Add new tags to existing ones".
+ </p>
<p><%= submit_tag 'Dry run' %> <%= submit_tag 'Upload' %></p>
<% end %>
@@ -46,7 +62,7 @@
<hr>
<p>Standard tags:
- <% for category, description in PublicBodyCategories::CATEGORIES_BY_TAG %>
+ <% for category, description in PublicBodyCategories::get().by_tag() %>
<% if category != "other" %>
<strong><%= category %></strong>=<%= description %>;
<% end %>
diff --git a/app/views/admin_public_body/new.rhtml b/app/views/admin_public_body/new.rhtml
index 95208b5b3..b859fdf6a 100644
--- a/app/views/admin_public_body/new.rhtml
+++ b/app/views/admin_public_body/new.rhtml
@@ -2,11 +2,21 @@
<h1><%=@title%></h1>
-<% form_tag 'create' do %>
- <%= render :partial => 'form' %>
- <p><%= submit_tag "Create" %></p>
-<% end %>
-
-<p>
-<%= link_to 'List all', 'list' %>
-</p>
+<script type="text/javascript">
+ $(function() {
+ $("#div-locales").tabs();
+ });
+</script>
+
+<%= render :partial => 'tag_help' %>
+
+<div id="public_body_form">
+ <% form_for :public_body, @public_body, :url => {:action => "create"} do |f| %>
+ <%= render :partial => 'form', :locals => {:f => f} %>
+ <p><%= f.submit "Create" %></p>
+ <% end %>
+
+ <p>
+ <%= link_to 'List all', 'list' %>
+ </p>
+</div>
diff --git a/app/views/admin_public_body/show.rhtml b/app/views/admin_public_body/show.rhtml
index c1292c63a..643ccf5e8 100644
--- a/app/views/admin_public_body/show.rhtml
+++ b/app/views/admin_public_body/show.rhtml
@@ -12,7 +12,7 @@
<% if column.name == 'home_page' and !column.name.empty? %>
<%= link_to(h(@public_body.send(column.name)), @public_body.send(column.name)) %>
<% elsif column.name == 'request_email' and !column.name.empty? %>
- <%= link_to(h(@public_body.send(column.name)), "mailto:" + @public_body.send(column.name)) %>
+ <%= link_to(h(@public_body.send(column.name)), "mailto:#{@public_body.send(column.name)}") %>
<% if !@public_body.is_requestable? %>
(not requestable due to: <%=h @public_body.not_requestable_reason %><% if @public_body.is_followupable? %>; but followupable<% end %>)
<% end %>
@@ -32,7 +32,14 @@
</p>
<p>
- <%= link_to 'Public page', main_url(public_body_url(@public_body)) %>
+ <%=
+ # url_name can be missing if the name hasn't been set for this locale
+ if !@public_body.url_name.nil?
+ link_to 'Public page', main_url(public_body_url(@public_body))
+ else
+ 'Public page not available'
+ end
+ %>
| <%= link_to 'Edit', '../edit/' + @public_body.id.to_s %>
</p>
diff --git a/app/views/admin_user/show.rhtml b/app/views/admin_user/show.rhtml
index 18d23fe73..4af79e45a 100644
--- a/app/views/admin_user/show.rhtml
+++ b/app/views/admin_user/show.rhtml
@@ -13,18 +13,25 @@
<% end %>
-<p>
+<div>
<strong>Id:</strong> <%= @admin_user.id%> <br>
<% for column in User.content_columns %>
<strong><%= column.human_name %>:</strong>
<% if column.name == 'email' %>
<a href="mailto:<%=h @admin_user.email %>"><%=h @admin_user.email%></a>
+ <% elsif column.name == 'email_bounce_message' %>
+ <% if !@admin_user.email_bounce_message.empty? %>
+ <a href="../show_bounce_message/<%= @admin_user.id.to_s %>">See bounce message</a>
+ <% end %>
<% else %>
<%=h @admin_user.send(column.name) %>
<% end %>
+ <% if column.name == 'email_bounced_at' && !@admin_user.email_bounced_at.nil? %>
+ <form action="../clear_bounce/<%= @admin_user.id.to_s %>" style="display: inline;"><input type="submit" name="action" value="Clear bounce"></form>
+ <% end %>
<br>
<% end %>
-</p>
+</div>
<p>
<%= link_to 'Public page', main_url(user_url(@admin_user)) %>
diff --git a/app/views/admin_user/show_bounce_message.rhtml b/app/views/admin_user/show_bounce_message.rhtml
new file mode 100644
index 000000000..ad643a13e
--- /dev/null
+++ b/app/views/admin_user/show_bounce_message.rhtml
@@ -0,0 +1,3 @@
+<h1>Email bounce message for <%= @admin_user.name %></h1>
+
+<pre><%= @admin_user.email_bounce_message %></pre>
diff --git a/app/views/comment/_single_comment.rhtml b/app/views/comment/_single_comment.rhtml
index e6a1728a8..013e5e107 100644
--- a/app/views/comment/_single_comment.rhtml
+++ b/app/views/comment/_single_comment.rhtml
@@ -17,7 +17,7 @@
</div>
<p class="event_actions">
<% if !comment.id.nil? %>
- <%= link_to "Link to this", comment_url(comment) %>
+ <%= link_to "Link to this", comment_url(comment), :class => "link_to_this" %>
<% if !@user.nil? && @user.admin_page_links? %>
| <%= link_to "Admin", admin_url("request/edit_comment/" + comment.id.to_s) %>
<% end %>
diff --git a/app/views/comment/new.rhtml b/app/views/comment/new.rhtml
index 1a4f2c0dc..cf9367b88 100644
--- a/app/views/comment/new.rhtml
+++ b/app/views/comment/new.rhtml
@@ -11,7 +11,8 @@
<%= foi_error_messages_for :comment %>
-<h1><%= _('Add an annotation to ')%>'<%=request_link(@info_request)%>'</h1>
+<h1><%= _('Add an annotation')%></h1>
+<h2>to &ldquo;<%=request_link(@info_request)%>&rdquo;</h2>
<p>
<%= _('Annotations are so anyone, including you, can help the requester with their request. For example:')%>
diff --git a/app/views/general/_advanced_search_tips.rhtml b/app/views/general/_advanced_search_tips.rhtml
new file mode 100644
index 000000000..520cce89b
--- /dev/null
+++ b/app/views/general/_advanced_search_tips.rhtml
@@ -0,0 +1,49 @@
+<div id="advanced-search-tips">
+ <a name="show-tips"></a>
+ <h2><%= _("Advanced search tips")%></h2>
+ <ul>
+ <li><%= _("Enter words that you want to find separated by spaces, e.g. <strong>climbing lane</strong>") %></li>
+ <li><%= _('Use OR (in capital letters) where you don\'t mind which word, e.g. <strong><code>commons OR lords</code></strong>') %>
+ <li><%= _('Use quotes when you want to find an exact phrase, e.g. <strong><code>"Liverpool City Council"</code></strong>') %></li>
+ <li><%= _('<strong><code>status:</code></strong> to select based on the status or historical status of the request, see the <a href="{{statuses_url}}">table of statuses</a> below.', :statuses_url => "#statuses") %></li>
+ <li><%= _('<strong><code>variety:</code></strong> to select type of thing to search for, see the <a href="{{varieties_url}}">table of varieties</a> below.', :varieties_url => "#varieties") %></li>
+ <li><%= _('<strong><code>requested_from:home_office</code></strong> to search requests from the Home Office, typing the name as in the URL.')%></li>
+ <li><%= _('<strong><code>requested_by:julian_todd</code></strong> to search requests made by Julian Todd, typing the name as in the URL.') %></li>
+ <li><%= _('<strong><code>commented_by:tony_bowden</code></strong> to search annotations made by Tony Bowden, typing the name as in the URL.')%></li>
+ <li><%= _('<strong><code>request:</code></strong> to restrict to a specific request, typing the title as in the URL.')%>
+ <li><%= _('<strong><code>filetype:pdf</code></strong> to find all responses with PDF attachments. Or try these: <code>{{list_of_file_extensions}}</code>', :list_of_file_extensions => IncomingMessage.get_all_file_extensions)%></li>
+ <li><%= _('Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show things that happened in the first two weeks of January.')%></li>
+ <li><%= _('<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags,
+ and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags
+ can be present, you have to put <code>AND</code> explicitly if you only want results them all present.')%></li>
+ <li><%= _('Read about <a href="{{advanced_search_url}}">advanced search operators</a>, such as proximity and wildcards.', :advanced_search_url => "http://www.xapian.org/docs/queryparser.html") %></li>
+ </ul>
+
+ <h2 id="statuses"><%= _('Table of statuses') %></h2>
+ <p><%= _("All the options below can use <strong>status</strong> or <strong>latest_status</strong> before the colon. For example, <strong>status:not_held</strong> will match requests which have <em>ever</em> been marked as not held; <strong>latest_status:not_held</strong> will match only requests that are <em>currently</em> marked as not held.") %></p>
+
+ <table class="status_table">
+ <tr><td><strong><%=search_link('status:waiting_response', nil, nil, true)%></strong></td><td><%= _('Waiting for the public authority to reply') %></td></tr>
+ <tr><td><strong><%=search_link('status:not_held', nil, nil, true)%></strong></td><td><%= _('The public authority does not have the information requested') %></td></tr>
+ <tr><td><strong><%=search_link('status:rejected', nil, nil, true)%></strong></td><td><%= _('The request was refused by the public authority') %></td></tr>
+ <tr><td><strong><%=search_link('status:partially_successful', nil, nil, true)%></strong></td><td><%= _('Some of the information requested has been received') %></td></tr>
+ <tr><td><strong><%=search_link('status:successful', nil, nil, true)%></strong></td><td><%= _('All of the information requested has been received') %></td></tr>
+ <tr><td><strong><%=search_link('status:waiting_clarification', nil, nil, true)%></strong></td><td><%= _('The public authority would like part of the request explained') %></td></tr>
+ <tr><td><strong><%=search_link('status:gone_postal', nil, nil, true)%></strong></td><td><%= _('The public authority would like to / has responded by post') %></td></tr>
+ <tr><td><strong><%=search_link('status:internal_review', nil, nil, true)%></strong></td><td><%= _('Waiting for the public authority to complete an internal review of their handling of the request') %></td></tr>
+ <tr><td><strong><%=search_link('status:error_message', nil, nil, true)%></strong></td><td><%= _('Received an error message, such as delivery failure.') %></td></tr>
+ <tr><td><strong><%=search_link('status:requires_admin', nil, nil, true)%></strong></td><td><%= _('A strange reponse, required attention by the {{site_name}} team', :site_name=>site_name) %></td></tr>
+ <tr><td><strong><%=search_link('status:user_withdrawn', nil, nil, true)%></strong></td><td><%= _('The requester has abandoned this request for some reason') %></td></tr>
+ </table>
+
+ <h2 id="varieties"><%= _('Table of varieties') %></h2>
+ <p><%= _("All the options below can use <strong>variety</strong> or <strong>latest_variety</strong> before the colon. For example, <strong>variety:sent</strong> will match requests which have <em>ever</em> been sent; <strong>latest_variety:sent</strong> will match only requests that are <em>currently</em> marked as sent.") %></p>
+ <table class="status_table">
+ <tr><td><strong><%=search_link('variety:sent', nil, nil, true)%></strong></td><td><%= _('Original request sent') %></td></tr>
+ <tr><td><strong><%=search_link('variety:followup_sent', nil, nil, true)%></strong></td><td><%= _('Follow up message sent by requester') %></td></tr>
+ <tr><td><strong><%=search_link('variety:response', nil, nil, true)%></strong></td><td><%= _('Response from a public authority') %></td></tr>
+ <tr><td><strong><%=search_link('variety:comment', nil, nil, true)%></strong></td><td><%= _('Annotation added to request') %></td></tr>
+ <tr><td><strong><%=search_link('variety:authority', nil, nil, true)%></strong></td><td><%= _('A public authority') %></td></tr>
+ <tr><td><strong><%=search_link('variety:user', nil, nil, true)%></strong></td><td><%= _('A {{site_name}} user', :site_name=>site_name) %></td></tr>
+ </table>
+</div>
diff --git a/app/views/general/_credits.rhtml b/app/views/general/_credits.rhtml
index 8c519ce7e..b1a9ce05e 100644
--- a/app/views/general/_credits.rhtml
+++ b/app/views/general/_credits.rhtml
@@ -1 +1 @@
-| <%= _('Powered by <a href="http://www.alaveteli.org/">Alaveteli</a>.') %>
+| <%= _('Powered by <a href="http://www.alaveteli.org/">Alaveteli</a>') %>
diff --git a/app/views/general/_footer.rhtml b/app/views/general/_footer.rhtml
new file mode 100644
index 000000000..2f6c30f5f
--- /dev/null
+++ b/app/views/general/_footer.rhtml
@@ -0,0 +1,6 @@
+<div id="footer">
+ <%= link_to _("Contact {{site_name}}", :site_name => site_name), help_contact_url %>
+| <img src="/images/twitter-16.png" alt="twitter icon" class="twitter-icon"> <a href="http://www.twitter.com/<%= MySociety::Config.get('TWITTER_USERNAME') %>"><%= _("Follow us on twitter") %></a>
+<%= render :partial => 'general/credits' %>
+</div>
+<div class="after-footer">&nbsp;</div>
diff --git a/app/views/general/_frontpage_intro_sentence.rhtml b/app/views/general/_frontpage_intro_sentence.rhtml
index 2c3bcaf83..70b47ad06 100644
--- a/app/views/general/_frontpage_intro_sentence.rhtml
+++ b/app/views/general/_frontpage_intro_sentence.rhtml
@@ -1,3 +1,4 @@
-First, type in the <strong>name of the UK public authority</strong> you'd
-<br>like information from. <strong>By law, they have to respond</strong>
-(<a href="<%= help_about_url %>">why?</a>).
+<h2>
+ Your <strong>Right to Know</strong>
+</h2>
+<p>Every citizen has the right to access information held by public authorities. <strong>By law, they have to respond</strong>. <a href="<%= help_about_url %>">Find out more about freedom of information.</a></p>
diff --git a/app/views/general/_frontpage_search_examples.es.rhtml b/app/views/general/_frontpage_search_examples.es.rhtml
new file mode 100644
index 000000000..63c7c3c1e
--- /dev/null
+++ b/app/views/general/_frontpage_search_examples.es.rhtml
@@ -0,0 +1 @@
+por ejemplo <a href="/es/search/El%20Geraldine%20Quango">El Geraldine Quango</a>, <a href="/search/fancy%20dog">Fancy Dog</a>.
diff --git a/app/views/general/_frontpage_search_examples.rhtml b/app/views/general/_frontpage_search_examples.rhtml
new file mode 100644
index 000000000..359a132e2
--- /dev/null
+++ b/app/views/general/_frontpage_search_examples.rhtml
@@ -0,0 +1 @@
+for example <a href="/search/Geraldine%20Quango">Geraldine Quango</a> or <a href="/search/fancy%20dog">Fancy Dog</a>.
diff --git a/app/views/general/_localised_datepicker.rhtml b/app/views/general/_localised_datepicker.rhtml
new file mode 100644
index 000000000..5fdd63644
--- /dev/null
+++ b/app/views/general/_localised_datepicker.rhtml
@@ -0,0 +1,18 @@
+<script type="text/javascript">
+ $(function() {
+ $(".use-datepicker").datepicker(
+ {closeText: '<%= _("Done") %>',
+ prevText: '<%= _("Prev") %>',
+ nextText: '<%= _("Next") %>',
+ currentText: '<%= _("Today") %>',
+ monthNames: <%= I18n.translate('date.month_names')[1..-1].to_json %>,
+ monthNamesShort: <%= I18n.translate('date.abbr_month_names')[1..-1].to_json %>,
+ dayNames: <%= I18n.translate('date.day_names').to_json %>,
+ dayNamesShort: <%= I18n.translate('date.abbr_day_names').to_json %>,
+ dayNamesMin: <%= I18n.translate('date.abbr_day_names').collect{|x| x[0..0]}.to_json %>,
+ weekHeader: '<%= _("Wk") %>',
+ dateFormat: '<%= I18n.translate('date.formats.default').sub("%Y", "yy").sub("%m", "mm").sub("%d", "dd").gsub("-", "/") %>'}
+ );
+ });
+</script>
+
diff --git a/app/views/general/_orglink.rhtml b/app/views/general/_orglink.rhtml
index 20d0d6ce4..7d74dbaac 100644
--- a/app/views/general/_orglink.rhtml
+++ b/app/views/general/_orglink.rhtml
@@ -1,2 +1,2 @@
<%-# Put the link to your organisation here, or leave blank -%>
-<a href="http://www.alaveteli.org">an Alaveteli site</a>
+<%= link_to image_tag('logo.png'), frontpage_url, :id=>'logo' %>
diff --git a/app/views/general/_topnav.rhtml b/app/views/general/_topnav.rhtml
new file mode 100644
index 000000000..619ff3593
--- /dev/null
+++ b/app/views/general/_topnav.rhtml
@@ -0,0 +1,10 @@
+<div id="topnav">
+ <ul id="navigation">
+ <li class="<%= 'selected' if params[:controller] == 'general' and params[:action] != 'blog' %>"><%= link_to _("Home"), frontpage_url %></li>
+ <li class="<%= 'selected' if params[:controller] == 'request' and ['new', 'select_authority'].include?(params[:action]) %>"><%= link_to _("Make a request"), select_authority_url, :id => 'make-request-link' %></li>
+ <li class="<%= 'selected' if params[:controller] == 'request' and !['new', 'select_authority'].include?(params[:action]) %>"><%= link_to _("View requests"), request_list_successful_url %></li>
+ <li class="<%= 'selected' if params[:controller] == 'public_body' %>"><%= link_to _("View authorities"), list_public_bodies_default %></li>
+ <li class="<%= 'selected' if params[:controller] == 'general' and params[:action] == 'blog' %>"><%= link_to _("Read blog"), blog_url %></li>
+ <li class="<%= 'selected' if params[:controller] == 'help' %>"><%= link_to _("Help"), help_about_url %></li>
+ </ul>
+</div> \ No newline at end of file
diff --git a/app/views/general/advanced_search.rhtml b/app/views/general/advanced_search.rhtml
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/app/views/general/advanced_search.rhtml
diff --git a/app/views/general/blog.rhtml b/app/views/general/blog.rhtml
index c9387c24f..98636a653 100644
--- a/app/views/general/blog.rhtml
+++ b/app/views/general/blog.rhtml
@@ -1,56 +1,63 @@
-<% @title = "#{site_name} blog and tweets" %>
+<% @title = _("{{site_name}} blog and tweets", :site_name => site_name) %>
-<h1><%=@title %></h1>
- <img src="/images/twitter.png" alt="twitter icon" valign="middle"> <a href="http://www.twitter.com/<%= MySociety::Config.get('TWITTER_USERNAME') %>">Follow us on twitter</a>&nbsp;
- <img src="/images/rss.png" alt="RSS icon" valign="middle"> <a href="<%= MySociety::Config.get('BLOG_FEED') %>">Subscribe to blog</a>
<% if !@twitter_user.empty? %>
-<div id="twitter">
-<script src="http://widgets.twimg.com/j/2/widget.js"></script>
-<script>
-new TWTR.Widget({
- version: 2,
- type: 'profile',
- rpp: 15,
- interval: 6000,
- width: 'auto',
- height: 500,
- theme: {
- shell: {
- background: '#eaeaea',
- color: '#000000'
+<div id="right_column">
+ <div class="act_link">
+ <h2><%= _("Stay up to date") %></h2>
+ <img src="/images/twitter-16.png" alt="twitter icon" class="twitter-icon"> <a href="http://www.twitter.com/<%= @twitter_user %>"><%= _("Follow us on twitter") %></a><br/><br/>
+ <img src="/images/feed-16.png" alt="RSS icon" valign="middle"> <a href="<%= @feed_url %>"><%= _("Subscribe to blog") %></a>
+ </div>
+ <div id="twitter">
+ <script src="http://widgets.twimg.com/j/2/widget.js"></script>
+ <script type="text/javascript">
+ new TWTR.Widget({
+ version: 2,
+ type: 'profile',
+ rpp: 15,
+ interval: 6000,
+ width: 'auto',
+ height: 500,
+ theme: {
+ shell: {
+ background: '#eaeaea',
+ color: '#000000'
+ },
+ tweets: {
+ background: '#ffffff',
+ color: '#000000',
+ links: '#0b004a'
+ }
},
- tweets: {
- background: '#ffffff',
- color: '#000000',
- links: '#0b004a'
+ features: {
+ scrollbar: false,
+ loop: false,
+ live: false,
+ hashtags: true,
+ timestamp: true,
+ avatars: true,
+ behavior: 'all'
}
- },
- features: {
- scrollbar: false,
- loop: false,
- live: false,
- hashtags: true,
- timestamp: true,
- avatars: true,
- behavior: 'all'
- }
-}).render().setUser('<%=@twitter_user %>').start();
-</script>
-
+ }).render().setUser('<%=@twitter_user %>').start();
+ </script>
+ </div>
</div>
<% end %>
-<div id="blog">
- <% for item in @blog_items: %>
- <div class="blog_post">
- <h2><a href="<%=item['link']%>"><%=h item['title'] %></a></h2>
- <p class="subtitle">Posted on <%= simple_date(Time.parse(item['pubDate'][0])) %> by <%=h item['creator'] %></p>
- <div><%= item['encoded'] %></div>
- <p><em>
- <a href="<%=item['comments'][0]%>"><%=item['comments'][1]%> comments</a>
- </em>
- </p>
- </div>
- <% end %>
+<div id="left_column">
+ <h1><%=@title %></h1>
+
+ <div id="blog">
+ <% for item in @blog_items: %>
+ <div class="blog_post">
+ <h2 id="<%= Time.parse(item['pubDate'][0]).to_i %>"><a href="<%=item['link']%>"><%=h item['title'] %></a></h2>
+ <p class="subtitle"><%= _("Posted on {{date}} by {{author}}", :date=>simple_date(Time.parse(item['pubDate'][0])), :author=>item['creator']) %></p>
+ <div><%= item['encoded'] %></div>
+ <p><em>
+ <a href="<%=item['comments'][0]%>"><%= _("{{number_of_comments}} comments", :number_of_comments=>item['comments'][1]) %></a>
+ </em>
+ </p>
+ </div>
+ <% end %>
+ </div>
</div>
diff --git a/app/views/general/exception_caught.rhtml b/app/views/general/exception_caught.rhtml
index ca36b592b..b266b53a1 100644
--- a/app/views/general/exception_caught.rhtml
+++ b/app/views/general/exception_caught.rhtml
@@ -1,17 +1,24 @@
-<h1><%= _("Sorry, we couldn't find that page") %></h1>
+<div id="error-page">
+ <% if @status == 404 %>
+ <h1><%= _("Sorry, we couldn't find that page") %></h1>
-<p><%= _("The page either doesn't exist, or is broken. Things you can try now:")%></p>
+ <p><%= _("The page doesn't exist. Things you can try now:")%></p>
-<ul>
-<li><%= _("Check for mistakes if you typed or copied the address.")%></li>
-<li><%= _("Search the site to find what you were looking for.")%>
- <% form_tag({:controller => "general", :action => "search_redirect"}, {:id => "search_form"}) do %>
- <%= text_field_tag 'query', params[:query], { :size => 30 } %>
- <%= submit_tag _("Search") %>
- <% end %>
-</li>
-<li><%= _('<a href="%s">Contact us</a> to tell us about the problem</li>') % [help_contact_path] %>
-<li><%= _('Go to our <a href="%s">front page</a></li>') % ["/"] %>
-</ul>
+ <ul>
+ <li><%= _("Check for mistakes if you typed or copied the address.")%></li>
+ <li><%= _("Search the site to find what you were looking for.")%>
+ <% form_tag({:controller => "general", :action => "search_redirect"}, {:id => "search_form"}) do %>
+ <%= text_field_tag 'query', params[:query], { :size => 30 } %>
+ <%= submit_tag _("Search") %>
+ <% end %>
+ </li>
+ </ul>
+ <% else %>
+ <h1><%= _("Sorry, there was a problem processing this page") %></h1>
+ <p><%= _('You have found a bug. Please <a href="{{contact_url}}">contact us</a> to tell us about the problem', :contact_url => help_contact_path) %></p>
-<p id="error_technical_details"><%= _("<strong>Technical details:</strong>")%> <%=@exception_class ? @exception_class : _("Unknown")%></p>
+ <% end %>
+ <h2><%= _('Technical details') %></h2>
+ <p><strong><%=@exception_class ? @exception_class : _("Unknown")%></strong></p>
+ <p><strong><%=@exception_message %></strong></p>
+</div>
diff --git a/app/views/general/frontpage.rhtml b/app/views/general/frontpage.rhtml
index abed0294e..35751b6a4 100644
--- a/app/views/general/frontpage.rhtml
+++ b/app/views/general/frontpage.rhtml
@@ -1,33 +1,42 @@
-<% view_cache :ttl => 5.minutes, :tag => I18n.locale do %>
-
-<div id="frontpage_search">
- <h1><%= _('Make or explore Freedom of Information requests') %></h1>
-
- <% form_tag({:action => "search_redirect"}, {:id => "search_form"}) do %>
- <p>
- <%= render :partial => 'frontpage_intro_sentence' %>
- <br>
-
- <br>
- <%= text_field_tag 'query', params[:query], { :size => 30 } %>
- <%= hidden_field_tag 'bodies', 1 %>
- <%= submit_tag _('Search') %>
- <br>
- <%= _('e.g.') %>
- <% @search_examples.each_with_index do |name, i| %>
- <%=link_to name, search_url(name, 'bodies')%><% if i < 2 %>, <% else %>. <% break %><% end %>
- <% end %>
-
- <br>
- <br>
- <%= _('OR, <strong>search</strong> for information others have requested using {{site_name}}', :site_name => site_name) %>
- </p>
- <% end %>
-</div>
+<% view_cache :ttl => 5.minutes.to_i, :tag => I18n.locale do %>
+ <div id="frontpage_splash">
+ <div id="left_column">
+ <h1>
+ <%= _("Make a new<br/>
+ <strong>Freedom <span>of</span><br/>
+ Information<br/>
+ request</strong>") %>
+ </h1>
+ <a class="link_button_green_large" href="/select_authority"><%= _("Start now &raquo;") %></a>
+ </div>
+ <div id="right_column">
+ <div id="frontpage_search_box">
+ <h2>
+ <%= _("Search over<br/>
+ <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>
+ <strong>{{number_of_authorities}} authorities</strong>",
+ :number_of_requests => InfoRequest.count, :number_of_authorities => PublicBody.count) %>
+ </h2>
+ <% form_tag({:action => "search_redirect"}, {:id => "search_form"}) do %>
+ <div>
+ <%= text_field_tag 'query', params[:query], { :size => 30 } %>
+ <%= submit_tag _('Search') %>
+ </div>
+ <% end %>
+ </div>
+ <div id="frontpage_right_to_know">
+ <%= render :partial => 'frontpage_intro_sentence' %>
+ </div>
+ </div>
+ <div style="clear:both"></div>
+ </div>
<div id="frontpage_examples">
<% if @popular_bodies.size > 0 %>
<div id="examples_0">
+ <h3><%= _("Who can I request information from?") %></h3>
+ <%= _("{{site_name}} covers requests to {{number_of_authorities}} authorities, including:",
+ :site_name => site_name, :number_of_authorities => PublicBody.count) %>
<ul>
<% for popular_body in @popular_bodies %>
<li><%=public_body_link(popular_body)%>
@@ -36,23 +45,27 @@
<% end%>
</ul>
<p><strong>
- <%= link_to _('More authorities...'), list_public_bodies_default %>
+ <%= link_to _('Browse all authorities...'), list_public_bodies_default %>
</strong></p>
</div>
<% end %>
- <% if @successful_request_events.size > 0 %>
<div id="examples_1">
+ <h3><%= _("What information has been released?") %></h3>
+ <%= _("{{site_name}} users have made {{number_of_requests}} requests, including:",
+ :site_name => site_name, :number_of_requests => InfoRequest.count) %>
<ul>
- <% for event in @successful_request_events %>
- <li><%=link_to h(excerpt(event.info_request.title, "", 30)), request_url(event.info_request)%>
- <%= _('{{length_of_time}} ago', :length_of_time => time_ago_in_words(event.described_at)) %>
+ <% for event in @request_events %>
+ <li>
+ <%= public_body_link(event.info_request.public_body) %> <%= _('answered a request about') %>
+ <%=link_to h(event.info_request.title), request_url(event.info_request)%>
+ <%= _('{{length_of_time}} ago', :length_of_time => time_ago_in_words(event.described_at)) %>
+ <p class="excerpt" onclick="document.location.href='<%=request_url(event.info_request)%>'"><%= excerpt(event.info_request.title, "", 200) %></p>
</li>
<% end %>
</ul>
<p><strong><%=link_to _('More successful requests...'), request_list_successful_url %></strong></p>
</div>
- <% end %>
</div>
diff --git a/app/views/general/search.rhtml b/app/views/general/search.rhtml
index 1d934f65a..87a6ab446 100644
--- a/app/views/general/search.rhtml
+++ b/app/views/general/search.rhtml
@@ -1,166 +1,214 @@
<% @show_tips = @xapian_requests.nil? || (@total_hits == 0) %>
+<% @include_request_link_in_authority_listing = true %>
+
+<%= render :partial => 'localised_datepicker' %>
+
<% if @query.nil? %>
<% @title = _("Search Freedom of Information requests, public authorities and users") %>
- <h1><%=@title%></h1>
<% elsif @total_hits == 0 %>
- <%= _("Nothing found for &#x2018;{{search_terms}}&#x2019;", :search_terms => h(@query)) %>
+ <% @title = _('There were no requests matching your query.') %>
<% else %>
<% @title = _("Results page {{page_number}}", :page_number => @page.to_s) %>
<% end%>
-<% @include_request_link_in_authority_listing = true %>
-
-<% if @bodies && (@page == 1 || @xapian_bodies.results.size > 0) %>
- <div id="stepwise_instructions">
- <p><strong><%=_("Next, select the public authority you'd like to make the request from.") %></strong></p>
- <p><% _('Can\'t find it? <a href="%s">Browse all</a> or <a href="%s">ask us to add it</a>.') % [list_public_bodies_default, "#{help_requesting_path}#missing_body"] %></p>
- <p>
+<div id="header_left">
+ <% if @query.nil? %>
+ <h1><%= _("Search") %></h1>
+ <% else %>
+ <h1><%= _("Search results") %></h1>
+ <% end%>
+
+ <% if @advanced %>
+ <div id="advanced-search">
+ <p><%= _('To use the advanced search, combine phrases and labels as described in the search tips below.') %></p>
+ <% form_tag(advanced_search_url, :method => "get") do %>
+ <p>
+ <%= text_field_tag :query, @query, { :size => 60 } %>
+ <%= hidden_field_tag 'sortby', @inputted_sortby %>
+ <% if @bodies %>
+ <%= hidden_field_tag 'bodies', 1 %>
+ <% end %>
+ <%= submit_tag _("Search") %>
+ &nbsp;&nbsp;<%= link_to _('Simple search'), search_redirect_path %>
+ </p>
+ <% end %>
</div>
-<% end %>
-
-<% form_tag({:action => "search_redirect"}, {:id => "search_form"}) do %>
- <p>
- <%= text_field_tag 'query', @query, { :size => 40 } %>
- <%= hidden_field_tag 'sortby', @inputted_sortby %>
- <% if @bodies %>
- <%= hidden_field_tag 'bodies', 1 %>
- <% end %>
- <%= submit_tag _("Search") %>
- <% if not @show_tips %>
- &nbsp;&nbsp;<%= link_to _('Advanced search tips'), search_redirect_path %>
- <% end %>
- </p>
-<% end %>
-
-<% if !@query.nil? %>
- <p>
- <%=link_to_unless @sortby == 'relevant', _("Show most relevant results first"), search_url(@query, 'relevant') %>
- |
- <%=link_to_unless @sortby == 'newest', _("Newest results first"), search_url(@query, 'newest') %>
- <% if @sortby == 'described' %>
- | <%= _('Recently described results first') %>
- <% end %>
+ <% else %>
+ <% form_tag(request.url, {:method => "get", :id => "search_form"}) do %>
+ <p>
+ <%= text_field_tag 'query', params[:query], { :size => 40 } %>
+ <%= hidden_field_tag 'sortby', @inputted_sortby %>
+ <% if @bodies %>
+ <%= hidden_field_tag 'bodies', 1 %>
+ <% end %>
+ <%= submit_tag _("Search") %>
+ <%= link_to(_("Advanced search"), advanced_search_url) %>
+ </p>
+
+ <div id="common-subfilters">
+ <div id="variety-filter">
+ <h3 class="title"><%= _("Showing") %></h3>
+ <% labels = [
+ ["requests", _("requests")],
+ ["users", _("users")],
+ ["bodies", _("authorities")],
+ ["all", _("everything")]]%>
+ <% for variety, label in labels %>
+ <% if @variety_postfix != variety %>
+ <% if variety != "users" %>
+ <%= link_to label, search_url([params[:query], @common_query], variety, @sort_postfix) %>
+ <% else %>
+ <%= link_to label, search_url(params[:query], variety, @sort_postfix) %>
+ <% end %>
+ <% else %>
+ <%= label %>
+ <% end %>
+ <%= "|" unless variety == labels.last[0]%>
+ <% end %>
+ </div>
+
+ <% if false %>
+ <%-# Commented out for now as tags are of limited use when users can't see them. This will change in the future! -%>
+ <% if @variety_postfix != "users" %>
+ <div>
+ <%= label_tag(:query, _("Tags (separated by a space):")) %><%= text_field_tag(:tags, params[:tags], { :size => 20 }) %>
+ <% for tag in InfoRequest.get_tags %>
+ <%= tag.name_and_value %>
+ <% end %>
+ </div>
+ <% end %>
+ <% end %>
+ </div>
+
+ <% if @variety_postfix == "requests" %>
+ <div id="requests-subfilters">
+ <div>
+ <h3 class="title"><%= _("Restrict to") %></h3>
+ <% [["successful", _("successful requests")],
+ ["unsuccessful", _("unsuccessful requests")],
+ ["awaiting", _("unresolved requests")],
+ ["internal_review", _("internal reviews")]].each_with_index do |item, index|
+ status, title = item %>
+
+ <%= check_box_tag "latest_status[]", status, params[:latest_status].nil? ? false : params[:latest_status].include?(status), :id => "latest_status_#{index}" %>
+ <%= label_tag("latest_status_#{index}", title) %> <br/>
+ <% end %>
+ </div>
+
+ <div>
+ <h3 class="title"><%= _("Search in") %></h3>
+ <% [["sent", _("messages from users")],
+ ["response", _("messages from authorities")],
+ ["comment", _("comments")]].each_with_index do |item, index|
+ variety, title = item %>
+
+ <%= check_box_tag "request_variety[]", variety, params[:request_variety].nil? ? true : params[:request_variety].include?(variety), :id => "request_variety_#{index}" %>
+ <%= label_tag("request_variety_#{index}", title) %> <br/>
+ <% end %>
+ </div>
+
+ <div id="date_range">
+ <label class="form_label title" for="query"><%= _("Made between") %></label>
+ <%= text_field_tag(:request_date_after, params[:request_date_after], {:class => "use-datepicker", :size => 10}) %>
+ <label class="form_label" for="query">&nbsp;<%= _("and") %></label>
+ <%= text_field_tag(:request_date_before, params[:request_date_before], {:class => "use-datepicker", :size => 10}) %>
+ </div>
+ </div>
+ <% end %>
+
+ <div>
+ <%= submit_tag _("Filter") if @variety_postfix == "requests"%>
+ </div>
+ <% end # Search form%>
+
+ <% end # if @advanced %>
+
+ <% if !@query.nil? %>
+ <p id="search_controls">
+ <%=link_to_unless @sortby == 'relevant', _("Show most relevant results first"), search_url(@query, @variety_postfix, 'relevant') %>
+ |
+ <%=link_to_unless @sortby == 'newest', _("Newest results first"), search_url(@query, @variety_postfix, 'newest') %>
+ <% if @sortby == 'described' %>
+ | <%= _('Recently described results first') %>
+ <% end %>
</p>
+ <% end %>
+</div> <!-- header left -->
+
+<% if @track_thing && (@xapian_bodies_hits > 0 || @xapian_users_hits > 0 || @total_hits == 0)%>
+ <div id="header_right">
+ <h2><%= _('Track this search')%></h2>
+ <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'main' } %>
+ </div>
<% end %>
-<% if @bodies && !@query.nil? && @xapian_bodies.results.size == 0 && @page == 1 %>
- <h1><%= _('No public authorities found') %></h1>
- <% if @spelling_correction %>
- <p id="did_you_mean"><%= _('Did you mean: {{correction}}',
- :correction => search_link(@spelling_correction, @postfix)) %></p>
- <% end %>
- <p><%= _('<a href="%s">Browse all</a> or <a href="%s">ask us to add one</a>.') % [list_public_bodies_default, help_requesting_path + '#missing_body'] %></p>
-<% end %>
+<div style="clear:both;"></div>
<% if @total_hits == 0 %>
- <h1><%=@title %></h1>
+ <h2><%=@title %></h2>
<% end %>
<% if not @query.nil? %>
- <% if @spelling_correction %>
- <p id="did_you_mean"><%= _('Did you mean: {{correction}}', :correction => search_link(@spelling_correction, @postfix)) %></p>
- <% end %>
-
- <% if (!@bodies || @xapian_requests.results.size == 0) && @track_thing && (@xapian_bodies.results.size > 0 || @xapian_users.results.size > 0 || @total_hits == 0)%>
- <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'main' } %>
- <% end %>
-
- <% if @xapian_bodies.results.size > 0 %>
- <% if @xapian_bodies.results.size == 1 && @page == 1 %>
- <h1><%= _('One public authority matching &#x2018;{{user_search_query}}&#x2019;', :user_search_query => h(@query)) %></h1>
+ <div class="results_section">
+ <% if @xapian_bodies_hits > 0 %>
+ <% if @xapian_bodies_hits == 1 && @page == 1 %>
+ <h2 class="publicbody_results"><%= _('One public authority found') %></h2>
<% else %>
- <h1><%= _('Public authorities {{start_count}} to {{end_count}} of {{total_count}} for {{user_search_query}}', :start_count => ((@page-1)*@bodies_per_page+1).to_s, :end_count => [@page*@bodies_per_page, @xapian_bodies.matches_estimated].min.to_s, :total_count => @xapian_bodies.matches_estimated.to_s, :user_search_query => h(@query)) %></h1>
+ <h2 class="publicbody_results"><%= _('Public authorities {{start_count}} to {{end_count}} of {{total_count}}', :start_count => ((@page-1)*@bodies_per_page+1).to_s, :end_count => [@page*@bodies_per_page, @xapian_bodies.matches_estimated].min.to_s, :total_count => @xapian_bodies.matches_estimated.to_s) %></h2>
<% end %>
- <% for result in @xapian_bodies.results %>
+ <div class="results_block">
+ <% for result in @xapian_bodies.results %>
<%= render :partial => 'public_body/body_listing_single', :locals => { :public_body => result[:model] } %>
- <% end %>
+ <% end %>
+ </div>
<%= will_paginate WillPaginate::Collection.new(@page, @bodies_per_page, @xapian_bodies.matches_estimated) %>
- <% end %>
+ <% elsif @bodies && !@query.nil? && @xapian_bodies.results.size == 0 && @page == 1 %>
+ <h2 class="publicbody_results"><%= _('No public authorities found') %></h2>
+ <% if @spelling_correction %>
+ <p id="did_you_mean"><%= _('Did you mean: {{correction}}', :correction => search_link(@spelling_correction, @postfix)) %></p>
+ <% end %>
+ <p><%= _('<a href="%s">Browse all</a> or <a href="%s">ask us to add one</a>.') % [list_public_bodies_default, help_requesting_path + '#missing_body'] %></p>
+ <% end %>
+ </div>
- <% if @xapian_users.results.size > 0 %>
- <% if @xapian_users.results.size == 1 && @page == 1 %>
- <h1><%= _("One person matching &#x2018;{{user_search_query}}&#x2019;", :user_search_query => h(@query)) %></h1>
+ <div class="results_section">
+ <% if @xapian_users_hits > 0 %>
+ <% if @xapian_users_hits == 1 && @page == 1 %>
+ <h2 class="person_results"><%= _("One person found") %></h2>
<% else %>
- <h1><%= _("People {{start_count}} to {{end_count}} of {{total_count}} for &#x2018;{{user_search_query}}&#x2019;", :start_count => ((@page-1)*@users_per_page+1).to_s, :end_count => [@page*@users_per_page, @xapian_users.matches_estimated].min.to_s, :total_count => @xapian_users.matches_estimated.to_s, :user_search_query => h(@query)) %></h1>
+ <h2 class="person_results"><%= _("People {{start_count}} to {{end_count}} of {{total_count}}", :start_count => ((@page-1)*@users_per_page+1).to_s, :end_count => [@page*@users_per_page, @xapian_users.matches_estimated].min.to_s, :total_count => @xapian_users.matches_estimated.to_s) %></h2>
<% end %>
- <% for result in @xapian_users.results %>
+ <div class="results_block">
+ <% for result in @xapian_users.results %>
<%= render :partial => 'user/user_listing_single', :locals => { :display_user => result[:model] } %>
- <% end %>
-
- <%= will_paginate WillPaginate::Collection.new(@page, @users_per_page, @xapian_users.matches_estimated) %>
- <% end %>
+ <% end %>
+ </div>
+ <% end %>
+ </div>
- <% if @xapian_requests.results.size > 0 %>
- <% if @xapian_requests.results.size == 1 && @page == 1 %>
- <h1><%= _("One FOI request matching &#x2018;{{user_search_query}}&#x2019;", :user_search_query => h(@query)) %></h1>
+ <div class="results_section">
+ <% if @xapian_requests_hits > 0 %>
+ <% if @xapian_requests_hits == 1 && @page == 1 %>
+ <h2 class="foi_results"><%= _("One FOI request found") %></h2>
<% else %>
- <h1><%= _("FOI requests {{start_count}} to {{end_count}} of {{total_count}} for &#x2018;{{user_search_query}}&#x2019;", :start_count => ((@page-1)*@requests_per_page+1).to_s, :end_count => [@page*@requests_per_page, @xapian_requests.matches_estimated].min.to_s, :total_count => @xapian_requests.matches_estimated.to_s, :user_search_query => h(@query)) %></h1>
+ <h2 class="foi_results"><%= _("FOI requests {{start_count}} to {{end_count}} of {{total_count}}", :start_count => ((@page-1)*@requests_per_page+1).to_s, :end_count => [@page*@requests_per_page, @xapian_requests.matches_estimated].min.to_s, :total_count => @xapian_requests.matches_estimated.to_s) %></h2>
<% end %>
- <% if @track_thing %>
- <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'main' } %>
- <% end %>
-
- <% for result in @xapian_requests.results %>
+ <div class="results_block">
+ <% for result in @xapian_requests.results %>
<%= render :partial => 'request/request_listing_via_event', :locals => { :event => result[:model], :info_request => result[:model].info_request } %>
- <% end %>
+ <% end %>
+ </div>
<%= will_paginate WillPaginate::Collection.new(@page, @requests_per_page, @xapian_requests.matches_estimated) %>
- <% if @track_thing %>
- <p></p>
- <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'main' } %>
- <% end %>
- <% end %>
+ <% end %>
+ </div>
<% end %>
-<% if @show_tips %>
- <h2><%= _("Advanced search tips")%></h2>
- <ul>
- <li><%= _("Enter words that you want to find separated by spaces, e.g. <strong>climbing lane</strong>") %></li>
- <li><%= _('Use OR (in capital letters) where you don\'t mind which word, e.g. <strong><code>commons OR lords</code></strong>') %>
- <li><%= _('Use quotes when you want to find an exact phrase, e.g. <strong><code>"Liverpool City Council"</code></strong>') %></li>
- <li><%= _('<strong><code>status:</code></strong> to select based on the status or historical status of the request, see the <a href="{{statuses_url}}">table of statuses</a> below.', :statuses_url => "#statuses") %></li>
- <li><%= _('<strong><code>variety:</code></strong> to select type of thing to search for, see the <a href="{{varieties_url}}">table of varieties</a> below.', :varieties_url => "#varieties") %></li>
- <li><%= _('<strong><code>requested_from:home_office</code></strong> to search requests from the Home Office, typing the name as in the URL.')%></li>
- <li><%= _('<strong><code>requested_by:julian_todd</code></strong> to search requests made by Julian Todd, typing the name as in the URL.') %></li>
- <li><%= _('<strong><code>commented_by:tony_bowden</code></strong> to search annotations made by Tony Bowden, typing the name as in the URL.')%></li>
- <li><%= _('<strong><code>request:</code></strong> to restrict to a specific request, typing the title as in the URL.')%>
- <li><%= _('<strong><code>filetype:pdf</code></strong> to find all responses with PDF attachments. Or try these: <code>{{list_of_file_extensions}}</code>', :list_of_file_extensions => IncomingMessage.get_all_file_extensions)%></li>
- <li><%= _('Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show things that happened in the first two weeks of January.')%></li>
- <li><%= _('<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags,
- and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags
- can be present, you have to put <code>AND</code> explicitly if you only want results them all present.')%></li>
- <li><%= _('Read about <a href="{{advanced_search_url}}">advanced search operators</a>, such as proximity and wildcards.', :advanced_search_url => "http://www.xapian.org/docs/queryparser.html") %></li>
- </ul>
-
- <h2 id="statuses"><%= _('Table of statuses') %></h2>
- <table class="status_table">
- <tr><td><strong><%=search_link('status:waiting_response')%></strong></td><td><%= _('Waiting for the public authority to reply') %></td></tr>
- <tr><td><strong><%=search_link('status:not_held')%></strong></td><td><%= _('The public authority does not have the information requested') %></td></tr>
- <tr><td><strong><%=search_link('status:rejected')%></strong></td><td><%= _('The request was refused by the public authority') %></td></tr>
- <tr><td><strong><%=search_link('status:partially_successful')%></strong></td><td><%= _('Some of the information requested has been received') %></td></tr>
- <tr><td><strong><%=search_link('status:successful')%></strong></td><td><%= _('All of the information requested has been received') %></td></tr>
- <tr><td><strong><%=search_link('status:waiting_clarification')%></strong></td><td><%= _('The public authority would like part of the request explained') %></td></tr>
- <tr><td><strong><%=search_link('status:gone_postal')%></strong></td><td><%= _('The public authority would like to / has responded by post') %></td></tr>
- <tr><td><strong><%=search_link('status:internal_review')%></strong></td><td><%= _('Waiting for the public authority to complete an internal review of their handling of the request') %></td></tr>
- <tr><td><strong><%=search_link('status:error_message')%></strong></td><td><%= _('Received an error message, such as delivery failure.') %></td></tr>
- <tr><td><strong><%=search_link('status:requires_admin')%></strong></td><td><%= _('A strange reponse, required attention by the {{site_name}} team', :site_name=>site_name) %></td></tr>
- <tr><td><strong><%=search_link('status:user_withdrawn')%></strong></td><td><%= _('The requester has abandoned this request for some reason') %></td></tr>
- </table>
-
- <h2 id="varieties"><%= _('Table of varieties') %></h2>
-
- <table class="status_table">
- <tr><td><strong><%=search_link('variety:sent')%></strong></td><td><%= _('Original request sent') %></td></tr>
- <tr><td><strong><%=search_link('variety:followup_sent')%></strong></td><td><%= _('Follow up message sent by requester') %></td></tr>
- <tr><td><strong><%=search_link('variety:response')%></strong></td><td><%= _('Response from a public authority') %></td></tr>
- <tr><td><strong><%=search_link('variety:comment')%></strong></td><td><%= _('Annotation added to request') %></td></tr>
- <tr><td><strong><%=search_link('variety:authority')%></strong></td><td><%= _('A public authority') %></td></tr>
- <tr><td><strong><%=search_link('variety:user')%></strong></td><td><%= _('A {{site_name}} user', :site_name=>site_name) %></td></tr>
- </table>
-
+<% if @advanced %>
+ <%= render :partial => 'general/advanced_search_tips' %>
<% end %>
diff --git a/app/views/help/_sidebar.rhtml b/app/views/help/_sidebar.rhtml
index 99298e9c6..21038e8df 100644
--- a/app/views/help/_sidebar.rhtml
+++ b/app/views/help/_sidebar.rhtml
@@ -1,16 +1,17 @@
-<div id="about_sidebar">
- <h1>Help pages</h1>
- <ul>
+<div id="right_column_flip">
+ <h2>Help pages</h2>
+ <ul class="no_bullets">
<li><%= link_to_unless_current "Introduction", "/help/about" %></li>
<li><%= link_to_unless_current "Making requests", "/help/requesting" %></li>
<li><%= link_to_unless_current "Your privacy", "/help/privacy" %></li>
<li><%= link_to_unless_current "FOI officers", "/help/officers" %></li>
+ <li><%= link_to_unless_current "About the software", "/help/alaveteli" %></li>
<li><%= link_to_unless_current "Credits", "/help/credits" %></li>
<li><%= link_to_unless_current "Programmers API", "/help/api" %></li>
<li><%= link_to_unless_current "Advanced search", "/search" %></li>
</ul>
- <h1 id="contact">Contact us</h1>
+ <h2 id="contact">Contact us</h2>
<p>If your question isn't answered here, or you just wanted to let us know
something about the site, <a href="/help/contact">contact&nbsp;us</a>.
</p>
diff --git a/app/views/help/about.es.rhtml b/app/views/help/about.es.rhtml
deleted file mode 100644
index 721a582aa..000000000
--- a/app/views/help/about.es.rhtml
+++ /dev/null
@@ -1,10 +0,0 @@
-<% @title = "Sobre" %>
-
-<%= render :partial => 'sidebar' %>
-
-<h1>¡Bonjiorno amis!</h1>
-
-<p>Esta sito tu aidare a faire los requesti a la governmenti Seblano</p>
-
-<div id="hash_link_padding"></div>
-
diff --git a/app/views/help/about.rhtml b/app/views/help/about.rhtml
index d22cc5b30..668a1df7f 100644
--- a/app/views/help/about.rhtml
+++ b/app/views/help/about.rhtml
@@ -2,50 +2,52 @@
<%= render :partial => 'sidebar' %>
-<h1 id="introduction">Introduction to <%= site_name %><a href="#introduction">#</a> </h1>
-<dl>
-
-<dt id="purpose">What is <%= site_name %> for? <a href="#purpose">#</a> </dt>
-<dd>To help you find out inside information about what the UK government
-is doing.
-</dd>
-
-<dt id="premise">How does the site work? <a href="#premise">#</a> </dt>
-<dd>You choose the public authority that you would like information from, then
-write a brief note describing what you want to know. We then send your request
-to the public authority. Any response they make is automatically published on the
-website for you and anyone else to find and read.
-</dd>
-
-<dt id="whybother_me">Why would I bother to do this? <a href="#whybother_me">#</a> </dt>
-<dd>You pay taxes, and then government does things with the money. All sorts of
-things that affect your life, from healthcare through to national defence. Some
-it does badly, some it does well. The more we find out about how government
-works, the better able we are to make suggestions to improve the things that
-are done badly, and to celebrate the things that are done well.
-</dd>
-
-<dt id="whybother_them">Why would the public authority bother to reply? <a href="#whybother_them">#</a> </dt>
-<dd>Under Freedom of Information (FOI) law, they have to respond. The response
-will either contain the information you want, or give a valid legal reason why
-it must be kept confidential.
-</dd>
-
-<dt id="who">Who makes <%= site_name %>? <a href="#who">#</a> </dt>
-<dd><%= site_name %> is created and run by <a href="http://www.mysociety.org">mySociety</a>,
-and was initially <a href="http://www.mysociety.org/2006/12/06/funding-for-freedom-of-information/">funded by the JRSST Charitable Trust</a>. mySociety is a project of the
-registered charity <a href="http://www.ukcod.org.uk/UK_Citizens_Online_Democracy">UK Citizens Online Democracy</a>.
-If you like what we're doing, then you can
-<a href="https://secure.mysociety.org/donate/">make a donation</a>.
-</dd>
-
-<dt id="updates">How can I keep up with news about <%= site_name %>?<a href="#updates">#</a> </dt>
-<dd>We have a <a href="/blog">blog</a> and a <a href="http://www.twitter.com/whatdotheyknow">twitter feed</a>.
-</dd>
-
-
-</dl>
-
-<p><strong>Next</strong>, read about <a href="/help/requesting">making requests</a> --&gt;
-
-<div id="hash_link_padding"></div>
+<div id="left_column_flip">
+ <h1 id="introduction">Introduction</h1>
+ <dl>
+
+ <dt id="purpose">What is WhatDoTheyKnow for? <a href="#purpose">#</a> </dt>
+ <dd>To help you find out inside information about what the UK government
+ is doing.
+ </dd>
+
+ <dt id="premise">How does the site work? <a href="#premise">#</a> </dt>
+ <dd>You choose the public authority that you would like information from, then
+ write a brief note describing what you want to know. We then send your request
+ to the public authority. Any response they make is automatically published on the
+ website for you and anyone else to find and read.
+ </dd>
+
+ <dt id="whybother_me">Why would I bother to do this? <a href="#whybother_me">#</a> </dt>
+ <dd>You pay taxes, and then government does things with the money. All sorts of
+ things that affect your life, from healthcare through to national defence. Some
+ it does badly, some it does well. The more we find out about how government
+ works, the better able we are to make suggestions to improve the things that
+ are done badly, and to celebrate the things that are done well.
+ </dd>
+
+ <dt id="whybother_them">Why would the public authority bother to reply? <a href="#whybother_them">#</a> </dt>
+ <dd>Under Freedom of Information (FOI) law, they have to respond. The response
+ will either contain the information you want, or give a valid legal reason why
+ it must be kept confidential.
+ </dd>
+
+ <dt id="who">Who makes WhatDoTheyKnow? <a href="#who">#</a> </dt>
+ <dd>WhatDoTheyKnow is created and run by <a href="http://www.mysociety.org">mySociety</a>,
+ and was initially <a href="http://www.mysociety.org/2006/12/06/funding-for-freedom-of-information/">funded by the JRSST Charitable Trust</a>. mySociety is a project of the
+ registered charity <a href="http://www.ukcod.org.uk/UK_Citizens_Online_Democracy">UK Citizens Online Democracy</a>.
+ If you like what we're doing, then you can
+ <a href="https://secure.mysociety.org/donate/">make a donation</a>.
+ </dd>
+
+ <dt id="updates">How can I keep up with news about WhatDoTheyKnow?<a href="#updates">#</a> </dt>
+ <dd>We have a <a href="/blog">blog</a> and a <a href="http://www.twitter.com/whatdotheyknow">twitter feed</a>.
+ </dd>
+
+
+ </dl>
+
+ <p><strong>Next</strong>, read about <a href="/help/requesting">making requests</a> --&gt;
+
+ <div id="hash_link_padding"></div>
+</div>
diff --git a/app/views/help/alaveteli.rhtml b/app/views/help/alaveteli.rhtml
new file mode 100644
index 000000000..6210f9f24
--- /dev/null
+++ b/app/views/help/alaveteli.rhtml
@@ -0,0 +1,30 @@
+<% @title = "Making requests" %>
+
+<%= render :partial => 'sidebar' %>
+<div id="left_column_flip">
+ <% if params[:country_name] %>
+ <h1><%= _("Would you like to see a website like this in your country?") %></h1>
+ <% else %>
+ <h1>Powered by Alaveteli</h1>
+ <% end %>
+ <p>This website is powered by Alaveteli. Alaveteli is free software
+ for making Freedom of Information requests. It can easily be
+ translated into any language, and customised for variations of FOI
+ law.</p>
+
+ <p>The development of Alaveteli is sponsored and supported by a
+ number of foundations and charities who are interested in
+ transparency across the world.</p>
+
+ <p>If you would like to set up an Alaveteli website in your own
+ country, we can help. You will need a few days to get the site
+ configured and ready to use, and will then have to spend at least an
+ hour a week moderating and managing the site (more for busy
+ websites).</p>
+
+ <p>Read more on the <a href="http://alaveteli.org">Alaveteli
+ website</a>, or <a href="mailto:hello@alaveteli.org">drop us an
+ email</a>.</p>
+
+ <div id="hash_link_padding"></div>
+</div>
diff --git a/app/views/help/api.rhtml b/app/views/help/api.rhtml
index 3cafbb665..76d2992fb 100644
--- a/app/views/help/api.rhtml
+++ b/app/views/help/api.rhtml
@@ -1,82 +1,81 @@
-<% @title = "Application Programming Interface - API" %>
+<% @title = "About our API" %>
<%= render :partial => 'sidebar' %>
-<h1><%=@title %></h1>
-
-<h2> Introduction </h2>
-
-<p>This page explains how programmers can make other websites and software
-interact with <%= site_name %> via an "API".
-</p>
-
-<p><%= site_name %> does not have a full API yet, but we are gradually adding
-lots of things that are similar in use to an API as they are requested.
-</p>
-
-<hr>
-
-<h2> 1. Linking to new requests </h2>
-
-<p>To encourage your users to make links to a particular public authority, use URLs of the form
-<%= link_to new_request_to_body_url(:url_name => "liverpool_city_council") , new_request_to_body_url(:url_name => "liverpool_city_council") %>.
-These are the parameters you can add to those URLs, either in the URL or from a form.
-
-<ul>
- <li> <strong>title</strong> - default summary of the new request.</li>
- <li> <strong>default_letter</strong> - default text of the body of the letter. The salutation (Dear...) and signoff (Yours...) are wrapped round this. </li>
- <li> <strong>body</strong> - as an alternative to default_letter, this sets the default entire text of the request, so you can customise the salutation and signoff. </li>
- <li> <strong>tags</strong> - space separated list of tags, so you can find and link up any requests made later, e.g. <em>openlylocal spending_id:12345</em>. The : indicates it is a machine tag. The values of machine tags may also include colons, useful for URIs.
-</ul>
-
-<hr>
-
-<h2> 2. RSS (actually, Atom) feeds </h2>
-
-<p>There are Atom feeds on most pages which list FOI requests, which you can
-use to get updates and links in XML format. Find the URL of the Atom feed in
-one of these ways:
-<ul>
- <li>Look for the <img src="/images/feed-16.png" alt=""> RSS feed links.</li>
- <li>Examine the <tt>&lt;link rel="alternate" type="application/atom+xml"&gt;</tt> tag in the head of the HTML. </li>
- <li>Add <tt>/feed</tt> to the start of another URL.
-</ul>
-
-<p>In particular, even complicated search queries have Atom feeds.
-You can do all sorts of things with them, such as query by authority, by file
-type, by date range, or by status. See the <a href="/search">advanced search
-tips</a> for details.
-
-<hr>
-
-<h2> 3. JSON structured data </h2>
-
-<p>Quite a few pages have JSON versions, which let you download information about
-objects in a structured form. Find them by:
-<ul>
- <li>Adding <tt>.json</tt> to the end of the URL. </li>
- <li>Look for the <tt>&lt;link rel="alternate" type="application/json"&gt;</tt> tag in the head of the HTML. </li>
-</ul>
-</p>
-
-<p>Requests, users and authorities all have JSON versions containing basic
-information about them. Every Atom feed has a JSON equivalent, containing
-information about the list of events in the feed.
-</p>
-
-<hr>
-<h2> 4. Spreadsheet of all authorities </h2>
-
-<p>
-A spreadsheet file listing every body in <%= site_name %> is available:
-<%= link_to "all-authorities.csv", all_public_bodies_csv_url() %>
-</p>
-
-<hr>
-
-<p>Please <a href="/help/contact">contact us</a> if you need an API feature that isn't there yet. It's
-very much a work in progress, and we do add things when people ask us to.</p>
-
-<div id="hash_link_padding"></div>
-
+<div id="left_column_flip">
+ <h1><%=@title %></h1>
+ <dl>
+ <dt>Introduction</dt>
+ <dd>
+ <p>This page explains how programmers can make other websites and software
+ interact with WhatDoTheyKnow via an "API".
+ </p>
+
+ <p>WhatDoTheyKnow does not have a full API yet, but we are gradually adding
+ lots of things that are similar in use to an API as they are requested.
+ </p>
+ </dd>
+
+ <dt>Linking to new requests</dt>
+ <dd>
+ <p>To encourage your users to make links to a particular public authority, use URLs of the form
+ <%= link_to new_request_to_body_url(:url_name => "liverpool_city_council") , new_request_to_body_url(:url_name => "liverpool_city_council") %>.
+ These are the parameters you can add to those URLs, either in the URL or from a form.
+
+ <ul>
+ <li> <strong>title</strong> - default summary of the new request.</li>
+ <li> <strong>default_letter</strong> - default text of the body of the letter. The salutation (Dear...) and signoff (Yours...) are wrapped round this. </li>
+ <li> <strong>body</strong> - as an alternative to default_letter, this sets the default entire text of the request, so you can customise the salutation and signoff. </li>
+ <li> <strong>tags</strong> - space separated list of tags, so you can find and link up any requests made later, e.g. <em>openlylocal spending_id:12345</em>. The : indicates it is a machine tag. The values of machine tags may also include colons, useful for URIs.
+ </ul>
+ </dd>
+
+ <dt>RSS (actually, Atom) feeds</h2>
+ <dd>
+ <p>There are Atom feeds on most pages which list FOI requests, which you can
+ use to get updates and links in XML format. Find the URL of the Atom feed in
+ one of these ways:
+ <ul>
+ <li>Look for the <img src="/images/feed-16.png" alt=""> RSS feed links.</li>
+ <li>Examine the <tt>&lt;link rel="alternate" type="application/atom+xml"&gt;</tt> tag in the head of the HTML. </li>
+ <li>Add <tt>/feed</tt> to the start of another URL.
+ </ul>
+
+ <p>In particular, even complicated search queries have Atom feeds.
+ You can do all sorts of things with them, such as query by authority, by file
+ type, by date range, or by status. See the <a href="/search">advanced search
+ tips</a> for details.
+ </dd>
+
+ <dt>JSON structured data</dt>
+ <dd>
+ <p>Quite a few pages have JSON versions, which let you download information about
+ objects in a structured form. Find them by:
+ <ul>
+ <li>Adding <tt>.json</tt> to the end of the URL. </li>
+ <li>Look for the <tt>&lt;link rel="alternate" type="application/json"&gt;</tt> tag in the head of the HTML. </li>
+ </ul>
+ </p>
+
+ <p>Requests, users and authorities all have JSON versions containing basic
+ information about them. Every Atom feed has a JSON equivalent, containing
+ information about the list of events in the feed.
+ </p>
+ </dd>
+
+ <dt>Spreadsheet of all authorities</dt>
+ <dd>
+ <p>
+ A spreadsheet file listing every body in WhatDoTheyKnow is available:
+ <%= link_to "all-authorities.csv", all_public_bodies_csv_url() %>
+ </p>
+
+ </dd>
+ </dl>
+
+ <p>Please <a href="/help/contact">contact us</a> if you need an API feature that isn't there yet. It's
+ very much a work in progress, and we do add things when people ask us to.</p>
+
+ <div id="hash_link_padding"></div>
+</div>
diff --git a/app/views/help/contact.rhtml b/app/views/help/contact.rhtml
index 6c65fb1c9..dd49f7951 100644
--- a/app/views/help/contact.rhtml
+++ b/app/views/help/contact.rhtml
@@ -2,10 +2,12 @@
<%= foi_error_messages_for :contact %>
+<h1><%= @title %></h1>
+
<div id="contact_preamble">
<% if !flash[:notice] %>
- <h1>Contact an authority to get official information</h1>
+ <h2>Contact an authority to get official information</h2>
<ul>
<li><a href="/new">Go here</a> to make a request, in public, for information
from UK public authorities.</li>
@@ -17,7 +19,7 @@
</li>
</ul>
- <h1>Take up an issue with Government</h1>
+ <h2>Take up an issue with Government</h2>
<ul>
<li><a href="http://www.writetothem.com">Write to your MP,
@@ -28,7 +30,7 @@
<% end %>
- <h1>Contact the <%= site_name %> team</h1>
+ <h2>Contact the WhatDoTheyKnow team</h2>
<% if !flash[:notice] %>
<ul>
<li>
diff --git a/app/views/help/credits.rhtml b/app/views/help/credits.rhtml
index 02cd55c90..02f1e40e8 100644
--- a/app/views/help/credits.rhtml
+++ b/app/views/help/credits.rhtml
@@ -1,90 +1,91 @@
-<% @title = "Credit where credit is due" %>
+<% @title = "Credit where credit's due" %>
<%= render :partial => 'sidebar' %>
-<h1 id="credits"><%= @title%> <a href="#credits">#</a> </h1>
+<div id="left_column_flip">
+ <h1 id="credits"><%= @title%></h1>
-<dl>
-
-<dt id="thanks">Which people made <%= site_name %>? <a href="#thanks">#</a> </dt>
-<dd>Oh, nearly everyone (and <a href="http://www.mysociety.org/helpus">maybe you too</a>)!
-<ul>
-<li>
- <a href="http://www.yrtk.org">Heather Brooke</a>
- (<a href="http://www.guardian.co.uk/politics/2008/mar/29/houseofcommons.michaelmartin?gusrc=rss&amp;feed=worldnews">vampy!</a>) has
- been pushing the idea of a UK FOI archive for years now.
-</li>
-<li>
- Both Phil Rodgers and <a href="http://www.flourish.org/blog/">Francis Irving</a>
- entered it in a mySociety competition for ideas for public interest websites to build.
-</li>
-<li>
- <a href="http://www.mysociety.org/2006/09/27/the-mysociety-call-for-proposals-the-winner-and-runners-up/">It won</a>,
- and then Chris Lightfoot (<a href="http://mk.ucant.org/archives/000129.html">RIP :(</a>)
- thought up the wheeze of intercepting email responses to requests and
- automatically publishing them.
-</li>
-<li>
- Tom Steinberg got the cash to pay for the site from
- <a href="http://www.jrrt.org.uk/">a dead chocolate mogul</a> (<em>thank you!</em>) ...
-</li>
-<li>
- ... so that Francis Irving, Angie Ahl, Tommy Martin, Louise Crow, Matthew Somerville
- and Tom Steinberg could do the complex mixture of design and coding to build
- what you see today.
-</li>
-<li>
- Thanks particularly to Julian Todd (<a href="http://www.freesteel.co.uk/wpblog/">great blog!</a>),
- Francis Davey, and Etienne Pollard for using the site early on and giving
- feedback (and/or legal advice!), and also to all our other users and
- testers.
-</li>
-<li>
- The amazing team of volunteers who run the site, answer your support
- emails, maintain the database of public authorities and
- <a href="http://www.mysociety.org/2009/10/13/behind-whatdotheyknow/">so much more</a>.
- Thanks to John Cross, Ben Harris, Adam McGreggor, Alex Skene,
- Richard Taylor.
-</li>
-<li>
- Volunteers who have provided patches to the code - thanks Peter Collingbourne
- and Tony Bowden.
-</li>
-<li>
- Everyone who has helped look up FOI email addresses.
-</li>
-<li>
- We couldn't do any of this without those
- <a href="http://www.ukcod.org.uk/UKCOD_Trustees">crazy people</a> who volunteer,
- amongst many other things, to do the accounts and fill in our VAT return.
-</li>
-<li>
- Finally, all the officers and servants who have answered the many requests
- made through the site. Their diligence, patience and professionalism is
- what has actually made the information that you see here. Thank them for
- helping make Government more transparent.
-</li>
-</ul>
-You're all stars.
-</dd>
-
-<dt id="helpus">Can I help out? <a href="#helpus">#</a> </dt>
-<dd>
- <p>Yes please! We're built out of our supporters and volunteers.</p>
+ <dl>
+ <dt id="thanks">Who made WhatDoTheyKnow? <a href="#thanks">#</a> </dt>
+ <dd>Oh, nearly everyone (and <a href="http://www.mysociety.org/helpus">maybe you too</a>)!
<ul>
- <li>You can <a href="https://secure.mysociety.org/donate/">make a donation</a>. We're a registered charity.</li>
- <li>Help people find successful requests, and monitor performance of authorities, by
- <a href="/categorise/play">playing the categorisation game</a>. </li>
- <li>Find out FOI email addresses of <a href="/help/requesting#missing_body">authorities that we're missing</a>.</li>
- <li>Write a blog post about either <%= site_name %> or an interesting request that you've
- found. Post about it on a forum that you frequent. Tell friends about it.</li> <li>If you're
- a programmer, get the source code for our parent project, <a href="http://alaveteli.org">Alaveteli</a>
- and tell us about patches we can pull. It's made in Ruby on Rails.
- <li>Read more about <a href="http://www.mysociety.org/helpus/">volunteering with mySociety</a>.
+ <li>
+ <a href="http://www.yrtk.org">Heather Brooke</a>
+ (<a href="http://www.guardian.co.uk/politics/2008/mar/29/houseofcommons.michaelmartin?gusrc=rss&amp;feed=worldnews">vampy!</a>) has
+ been pushing the idea of a UK FOI archive for years now.
+ </li>
+ <li>
+ Both Phil Rodgers and <a href="http://www.flourish.org/blog/">Francis Irving</a>
+ entered it in a mySociety competition for ideas for public interest websites to build.
+ </li>
+ <li>
+ <a href="http://www.mysociety.org/2006/09/27/the-mysociety-call-for-proposals-the-winner-and-runners-up/">It won</a>,
+ and then Chris Lightfoot (<a href="http://mk.ucant.org/archives/000129.html">RIP :(</a>)
+ thought up the wheeze of intercepting email responses to requests and
+ automatically publishing them.
+ </li>
+ <li>
+ Tom Steinberg got the cash to pay for the site from
+ <a href="http://www.jrrt.org.uk/">a dead chocolate mogul</a> (<em>thank you!</em>) ...
+ </li>
+ <li>
+ ... so that Francis Irving, Angie Ahl, Tommy Martin, Louise Crow, Matthew Somerville
+ and Tom Steinberg could do the complex mixture of design and coding to build
+ what you see today.
+ </li>
+ <li>
+ Thanks particularly to Julian Todd (<a href="http://www.freesteel.co.uk/wpblog/">great blog!</a>),
+ Francis Davey, and Etienne Pollard for using the site early on and giving
+ feedback (and/or legal advice!), and also to all our other users and
+ testers.
+ </li>
+ <li>
+ The amazing team of volunteers who run the site, answer your support
+ emails, maintain the database of public authorities and
+ <a href="http://www.mysociety.org/2009/10/13/behind-whatdotheyknow/">so much more</a>.
+ Thanks to John Cross, Ben Harris, Adam McGreggor, Alex Skene,
+ Richard Taylor.
+ </li>
+ <li>
+ Volunteers who have provided patches to the code - thanks Peter Collingbourne
+ and Tony Bowden.
+ </li>
+ <li>
+ Everyone who has helped look up FOI email addresses.
+ </li>
+ <li>
+ We couldn't do any of this without those
+ <a href="http://www.ukcod.org.uk/UKCOD_Trustees">crazy people</a> who volunteer,
+ amongst many other things, to do the accounts and fill in our VAT return.
+ </li>
+ <li>
+ Finally, all the officers and servants who have answered the many requests
+ made through the site. Their diligence, patience and professionalism is
+ what has actually made the information that you see here. Thank them for
+ helping make Government more transparent.
+ </li>
</ul>
-</dd>
+ You're all stars.
+ </dd>
+ <dt id="helpus">Can I help out? <a href="#helpus">#</a> </dt>
+ <dd>
+ <p>Yes please! We're built out of our supporters and volunteers.</p>
+ <ul>
+ <li>You can <a href="https://secure.mysociety.org/donate/">make a donation</a>. We're a registered charity.</li>
+ <li>Help people find successful requests, and monitor performance of authorities, by
+ <a href="/categorise/play">playing the categorisation game</a>. </li>
+ <li>Find out FOI email addresses of <a href="/help/requesting#missing_body">authorities that we're missing</a>.</li>
+ <li>Write a blog post about either WhatDoTheyKnow or an interesting request that you've
+ found. Post about it on a forum that you frequent. Tell friends about it.</li> <li>If you're
+ a programmer, get the source code for our parent project, <a href="http://alaveteli.org">Alaveteli</a>
+ and tell us about patches we can pull. It's made in Ruby on Rails.
+ <li>Read more about <a href="http://www.mysociety.org/helpus/">volunteering with mySociety</a>.
+ </ul>
+ </dd>
+ </dl>
-<div id="hash_link_padding"></div>
+ <div id="hash_link_padding"></div>
+</div>
diff --git a/app/views/help/officers.rhtml b/app/views/help/officers.rhtml
index d9656186a..3defec62f 100644
--- a/app/views/help/officers.rhtml
+++ b/app/views/help/officers.rhtml
@@ -2,246 +2,246 @@
<%= render :partial => 'sidebar' %>
-<h1 id="officers"><%= @title %> <a href="#officers">#</a> </h1>
-
-<dl>
-
-<dt id="top">I just got here from bottom of an FOI request, what is going on? <a href="#top">#</a> </dt>
-
-<dd><p><%= site_name %> is a service run by a charity. It helps ordinary members
-of the public make FOI requests, and easily track and share the responses.</p>
-
-<p>The FOI request you received was made by someone using <%= site_name %>. You can
-simply reply to the request as you would any other request from an individual.
-The only difference is that your response will be automatically published on
-the Internet.
-</p>
-<p>If you have privacy or other concerns, please read the answers below.
-You might also like to read the <a
-href="/help/about">introduction to <%= site_name %></a> to find out more about what
-the site does from the point of view of a user. You can also search the
-site to find the authority that you work for, and view the status of
-any requests made using the site.
-
-<p>Finally, we welcome comments and
-thoughts from FOI officers, please <a href="/help/contact">get in touch</a>.
-</p>
-</dd>
-
-<dt id="responses">Why are you publishing responses to FOI requests? <a href="#responses">#</a> </dt>
-
-<dd>We think there are lots of benefits. Most importantly it will encourage the
-public to be more interested and involved in the work of government. We
-also hope that it will reduce the number of duplicate requests on any
-subject that a public body will receive. Given that Freedom of Information
-responses contain public information, which anybody could easily request
-again from the public authority, we think there should be no reason not to
-publish it widely.
-</dd>
-
-<dt id="realpeople">Are the people making requests real people? <a href="#realpeople">#</a> </dt>
-
-<dd>Yes. For the purposes of keeping track of responses we use
-computer-generated email addresses for each request. However, before
-they can send a request, each user must register on the site with a
-unique email address that we then verify. You can search this site and
-find a page listing all requests that each person has made.
-</dd>
-
-<dt id="email_only">An email isn't a sufficient address for an FOI request! <a href="#email_only">#</a> </dt>
-
-<dd>Yes it is. This
-<a href="http://www.whatdotheyknow.com/request/1142/response/2894/attach/5/20080806100741260.pdf">letter from the ICO to Rother District Council</a> gives guidance on the matter, specifically
-in the context of requests made via <%= site_name %>.
-</dd>
-
-<dt id="vexatious">Aren't you making lots of vexatious requests? <a href="#vexatious">#</a> </dt>
-
-<dd><p><%= site_name %> is not making any requests. We are sending requests on
-behalf of our users, who are real people making the requests. </p>
-<p>Look at it like this - if lots of different people made requests from
-different Hotmail email addresses, then you would not think that Microsoft were
-making vexatious requests. It is exactly the same if lots of requests are made
-via <%= site_name %>. Moreover, since all requests are public it is much easier
-for you to see if one of our users is making vexatious requests. </p>
-<p>If that isn't enough for you, the
-<a href="http://www.whatdotheyknow.com/request/1142/response/2894/attach/5/20080806100741260.pdf">letter from the ICO to Rother District Council</a> gives some guidance on the matter.</p>
-</dd>
-
-<dt id="spam_problems">I can see a request on <%= site_name %>, but we never got it by email!<a href="#spam_problems">#</a> </dt>
-
-<dd><p>If a request appears on the site, then we have attempted to send it to
-the authority by email. Any delivery failure messages will automatically
-appear on the site. You can check the address we're using with the "View FOI
-email address" link which appears on the page for the authority. <a
-href="/help/contact">Contact us</a> if there is a better address we can
-use.</p>
-<p>Requests are sometimes not delivered because they are quietly removed by
-"spam filters" in the IT department of the authority. Authorities can make
-sure this doesn't happen by asking their IT departments to "whitelist"
-any email from <strong>@whatdotheyknow.com</strong>.
-If you <a href="/help/contact">ask us</a> we will resend any request,
-and/or give technical details of delivery so an IT department can chase
-up what happened to the message.
-</p>
-<p>Finally, you can respond to any request from your web browser, without
-needing any email, using the "respond to request" link at the bottom of
-each request page.
-</dd>
-
-<dt id="days">How do you calculate the deadline shown on request pages?<a href="#days">#</a> </dt>
-
-<dd>
-<p>The Freedom of Information Act says:</p>
-
-<blockquote><p>A public authority must comply with section 1(1) <strong>promptly</strong> and
-in any event not later than the twentieth working day following the date of
-receipt.</p></blockquote>
-
-<p>The nerdy detail of exactly how weekends are counted, and what happens if
-the request arrives out of office hours, is just that - detail. What matters
-here is that the law says authorities must respond <strong>promptly</strong>.</p>
-
-<p>If you've got a good reason why the request is going to take a while to
-process, requesters find it really helpful if you can send a quick email with a
-sentence or two saying what is happening. </p>
-
-<p>FOI officers often have to do a lot of <strong>hard work</strong> to answer
-requests, and this is hidden from the public. We think it would help everyone
-to have more of that complexity visible.</p>
-
-</dd>
-
-<dt id="days2">But really, how do you calculate the deadline?<a href="#days2">#</a> </dt>
-
-<dd>
-
-<p>Please read the answer to the previous question first. Legally, authorities
-must respond <strong>promptly</strong> to FOI requests. If they fail to do that,
-it is best if they show the hard work they are doing by explaining what is
-taking the extra time to do.
-</p>
-
-<p>That said, <%= site_name %> does show the maximum legal deadline
-for response on each request. Here's how we calculate it.</p>
-
-<ul>
-
-<li>If the day we deliver the request by email is a working day, we count that
-as "day zero", even if it was delivered late in the evening. Days end at
-midnight. We then count the next working day as "day one", and so on up to
-<strong>20 working days</strong>.</li>
-
-<li>If the day the request email was delivered was a non-working day, we count
-the next working day as "day one". Delivery is delivery, even if it happened on
-the weekend. Some authorities
-<a href="http://www.whatdotheyknow.com/request/policy_regarding_body_scans#incoming-1100">disagree with this</a>,
-our lawyer disagrees with them. </li>
-
-<li>Requesters are encouraged to mark when they have <strong>clarified</strong>
-their request so the clock resets, but sometimes they get this wrong. If you
-see a problem with a particular request, let us know and we'll fix it.</li>
-</ul>
-
-<p>The date thus calculated is shown on requests with the text "By law,
-Liverpool City Council should normally have responded by...". There is only
-one case which is not normal, see the next question about
-<a href="#public_interest_test">public interest test time extensions</a>.
-</p>
-
-<p>Schools are also a special case, which <%= site_name %> displays differently.
-</p>
-
-<ul>
-<li>Since June 2009, <strong>schools</strong> have "20 working days
-disregarding any working day which is not a school day, or 60 working days,
-whichever is first" (<a href="http://www.opsi.gov.uk/si/si2009/draft/ukdsi_9780111477632_en_1">FOI (Time for Compliance with Request) Regulations 2009</a>). <%= site_name %> indicates on requests to schools that the 20 day deadline is only
-during term time, and shows them as definitely overdue after 60 working days
-</li>
-</ul>
-
-<p>If you're getting really nerdy about all this, read the <a href="http://www.ico.gov.uk/upload/documents/library/freedom_of_information/detailed_specialist_guides/timeforcompliance.pdf">detailed ICO guidance</a>.
-Meanwhile, remember that the law says authorities must respond
-<strong>promptly</strong>. That's really what matters.</p>
-
-</dd>
-
-<dt id="public_interest_test">How do you reflect time extensions for public interest tests?<a href="#public_interest_test">#</a> </dt>
-
-<dd>
-
-<p>The Freedom of Information Act lets authorities claim an indefinite time
-extension when applying a <strong>public interest test</strong>. Information
-Commissioner guidance says that it should only be used in "exceptionally
-complex" cases
-(<a href="http://www.ico.gov.uk/upload/documents/library/freedom_of_information/detailed_specialist_guides/foi_good_practice_guidance_4.pdf">FOI Good Practice Guidance No. 4</a>).
-<%= site_name %> doesn't specifically handle this case, which is why we use the
-phrase "should normally have responded by" when the 20 working day time is
-exceeded.
-</p>
-
-<p>The same guidance says that, even in exceptionally complex cases, no
-Freedom of Information request should take more than <strong>40 working days</strong>
-to answer. <%= site_name %> displays requests which are overdue by that much
-with stronger wording to indicate they are definitely late.
-</p>
+<div id="left_column_flip">
+ <h1 id="officers"><%= @title %> <a href="#officers">#</a> </h1>
+
+ <dl>
+
+ <dt id="top">I just got here from bottom of an FOI request, what is going on? <a href="#top">#</a> </dt>
+
+ <dd><p>WhatDoTheyKnow is a service run by a charity. It helps ordinary members
+ of the public make FOI requests, and easily track and share the responses.</p>
+
+ <p>The FOI request you received was made by someone using WhatDoTheyKnow. You can
+ simply reply to the request as you would any other request from an individual.
+ The only difference is that your response will be automatically published on
+ the Internet.
+ </p>
+ <p>If you have privacy or other concerns, please read the answers below.
+ You might also like to read the <a
+ href="/help/about">introduction to WhatDoTheyKnow</a> to find out more about what
+ the site does from the point of view of a user. You can also search the
+ site to find the authority that you work for, and view the status of
+ any requests made using the site.
+
+ <p>Finally, we welcome comments and
+ thoughts from FOI officers, please <a href="/help/contact">get in touch</a>.
+ </p>
+ </dd>
+
+ <dt id="responses">Why are you publishing responses to FOI requests? <a href="#responses">#</a> </dt>
+
+ <dd>We think there are lots of benefits. Most importantly it will encourage the
+ public to be more interested and involved in the work of government. We
+ also hope that it will reduce the number of duplicate requests on any
+ subject that a public body will receive. Given that Freedom of Information
+ responses contain public information, which anybody could easily request
+ again from the public authority, we think there should be no reason not to
+ publish it widely.
+ </dd>
+
+ <dt id="realpeople">Are the people making requests real people? <a href="#realpeople">#</a> </dt>
+
+ <dd>Yes. For the purposes of keeping track of responses we use
+ computer-generated email addresses for each request. However, before
+ they can send a request, each user must register on the site with a
+ unique email address that we then verify. You can search this site and
+ find a page listing all requests that each person has made.
+ </dd>
+
+ <dt id="email_only">An email isn't a sufficient address for an FOI request! <a href="#email_only">#</a> </dt>
+
+ <dd>Yes it is. This
+ <a href="http://www.whatdotheyknow.com/request/1142/response/2894/attach/5/20080806100741260.pdf">letter from the ICO to Rother District Council</a> gives guidance on the matter, specifically
+ in the context of requests made via WhatDoTheyKnow.
+ </dd>
+
+ <dt id="vexatious">Aren't you making lots of vexatious requests? <a href="#vexatious">#</a> </dt>
+
+ <dd><p>WhatDoTheyKnow is not making any requests. We are sending requests on
+ behalf of our users, who are real people making the requests. </p>
+ <p>Look at it like this - if lots of different people made requests from
+ different Hotmail email addresses, then you would not think that Microsoft were
+ making vexatious requests. It is exactly the same if lots of requests are made
+ via WhatDoTheyKnow. Moreover, since all requests are public it is much easier
+ for you to see if one of our users is making vexatious requests. </p>
+ <p>If that isn't enough for you, the
+ <a href="http://www.whatdotheyknow.com/request/1142/response/2894/attach/5/20080806100741260.pdf">letter from the ICO to Rother District Council</a> gives some guidance on the matter.</p>
+ </dd>
+
+ <dt id="spam_problems">I can see a request on WhatDoTheyKnow, but we never got it by email!<a href="#spam_problems">#</a> </dt>
+
+ <dd><p>If a request appears on the site, then we have attempted to send it to
+ the authority by email. Any delivery failure messages will automatically
+ appear on the site. You can check the address we're using with the "View FOI
+ email address" link which appears on the page for the authority. <a
+ href="/help/contact">Contact us</a> if there is a better address we can
+ use.</p>
+ <p>Requests are sometimes not delivered because they are quietly removed by
+ "spam filters" in the IT department of the authority. Authorities can make
+ sure this doesn't happen by asking their IT departments to "whitelist"
+ any email from <strong>@whatdotheyknow.com</strong>.
+ If you <a href="/help/contact">ask us</a> we will resend any request,
+ and/or give technical details of delivery so an IT department can chase
+ up what happened to the message.
+ </p>
+ <p>Finally, you can respond to any request from your web browser, without
+ needing any email, using the "respond to request" link at the bottom of
+ each request page.
+ </dd>
+
+ <dt id="days">How do you calculate the deadline shown on request pages?<a href="#days">#</a> </dt>
+
+ <dd>
+ <p>The Freedom of Information Act says:</p>
+
+ <blockquote><p>A public authority must comply with section 1(1) <strong>promptly</strong> and
+ in any event not later than the twentieth working day following the date of
+ receipt.</p></blockquote>
+
+ <p>The nerdy detail of exactly how weekends are counted, and what happens if
+ the request arrives out of office hours, is just that - detail. What matters
+ here is that the law says authorities must respond <strong>promptly</strong>.</p>
+
+ <p>If you've got a good reason why the request is going to take a while to
+ process, requesters find it really helpful if you can send a quick email with a
+ sentence or two saying what is happening. </p>
+
+ <p>FOI officers often have to do a lot of <strong>hard work</strong> to answer
+ requests, and this is hidden from the public. We think it would help everyone
+ to have more of that complexity visible.</p>
+
+ </dd>
+
+ <dt id="days2">But really, how do you calculate the deadline?<a href="#days2">#</a> </dt>
+
+ <dd>
+
+ <p>Please read the answer to the previous question first. Legally, authorities
+ must respond <strong>promptly</strong> to FOI requests. If they fail to do that,
+ it is best if they show the hard work they are doing by explaining what is
+ taking the extra time to do.
+ </p>
+
+ <p>That said, WhatDoTheyKnow does show the maximum legal deadline
+ for response on each request. Here's how we calculate it.</p>
+
+ <ul>
+
+ <li>If the day we deliver the request by email is a working day, we count that
+ as "day zero", even if it was delivered late in the evening. Days end at
+ midnight. We then count the next working day as "day one", and so on up to
+ <strong>20 working days</strong>.</li>
+
+ <li>If the day the request email was delivered was a non-working day, we count
+ the next working day as "day one". Delivery is delivery, even if it happened on
+ the weekend. Some authorities <a href="http://www.whatdotheyknow.com/request/policy_regarding_body_scans#incoming-1100">disagree with this</a>, our lawyer disagrees with them. </li>
+
+ <li>Requesters are encouraged to mark when they have <strong>clarified</strong>
+ their request so the clock resets, but sometimes they get this wrong. If you
+ see a problem with a particular request, let us know and we'll fix it.</li>
+ </ul>
+
+ <p>The date thus calculated is shown on requests with the text "By law,
+ Liverpool City Council should normally have responded by...". There is only
+ one case which is not normal, see the next question about
+ <a href="#public_interest_test">public interest test time extensions</a>.
+ </p>
+
+ <p>Schools are also a special case, which WhatDoTheyKnow displays differently.
+ </p>
+
+ <ul>
+ <li>Since June 2009, <strong>schools</strong> have "20 working days
+ disregarding any working day which is not a school day, or 60 working days,
+ whichever is first" (<a href="http://www.opsi.gov.uk/si/si2009/draft/ukdsi_9780111477632_en_1">FOI (Time for Compliance with Request) Regulations 2009</a>). WhatDoTheyKnow indicates on requests to schools that the 20 day deadline is only
+ during term time, and shows them as definitely overdue after 60 working days
+ </li>
+ </ul>
+
+ <p>If you're getting really nerdy about all this, read the <a href="http://www.ico.gov.uk/upload/documents/library/freedom_of_information/detailed_specialist_guides/timeforcompliance.pdf">detailed ICO guidance</a>.
+ Meanwhile, remember that the law says authorities must respond
+ <strong>promptly</strong>. That's really what matters.</p>
+
+ </dd>
+
+ <dt id="public_interest_test">How do you reflect time extensions for public interest tests?<a href="#public_interest_test">#</a> </dt>
+
+ <dd>
+
+ <p>The Freedom of Information Act lets authorities claim an indefinite time
+ extension when applying a <strong>public interest test</strong>. Information
+ Commissioner guidance says that it should only be used in "exceptionally
+ complex" cases
+ (<a href="http://www.ico.gov.uk/upload/documents/library/freedom_of_information/detailed_specialist_guides/foi_good_practice_guidance_4.pdf">FOI Good Practice Guidance No. 4</a>).
+ WhatDoTheyKnow doesn't specifically handle this case, which is why we use the
+ phrase "should normally have responded by" when the 20 working day time is
+ exceeded.
+ </p>
+
+ <p>The same guidance says that, even in exceptionally complex cases, no
+ Freedom of Information request should take more than <strong>40 working days</strong>
+ to answer. WhatDoTheyKnow displays requests which are overdue by that much
+ with stronger wording to indicate they are definitely late.
+ </p>
-<p>The Freedom of Information (Scotland) Act does not allow such a public
-interest extension. <%= site_name %> would like to see the law changed to either
-remove the extension from the UK Act, or to reintroduce an absolute time limit
-of 40 working days even with the extension (the House of Lords <a
-href="http://www.publicwhip.org.uk/division.php?date=2000-10-17&amp;number=1&amp;house=lords">voted
-to remove</a> provision for such a time limit during the initial passage
-of the UK Act through Parliament).
-</p>
-</dd>
-
-<dt id="large_file">How can I send a large file, which won't go by email?<a href="#large_file">#</a> </dt>
+ <p>The Freedom of Information (Scotland) Act does not allow such a public
+ interest extension. WhatDoTheyKnow would like to see the law changed to either
+ remove the extension from the UK Act, or to reintroduce an absolute time limit
+ of 40 working days even with the extension (the House of Lords <a
+ href="http://www.publicwhip.org.uk/division.php?date=2000-10-17&amp;number=1&amp;house=lords">voted
+ to remove</a> provision for such a time limit during the initial passage
+ of the UK Act through Parliament).
+ </p>
+ </dd>
-<dd>Instead of email, you can respond to a request directly from your web
-browser, including uploading a file. To do this, choose "respond to request" at
-the bottom of the request's page. <a href="/help/contact">Contact us</a> if it
-is too big for even that (more than, say, 50Mb).
-</dd>
-
-<dt id="names">Why do you publish the names of civil servants and the text of emails? <a href="#names">#</a> </dt>
+ <dt id="large_file">How can I send a large file, which won't go by email?<a href="#large_file">#</a> </dt>
-<dd>We consider what officers or servants do in the course of their employment
-to be public information. We will only remove content in exceptional
-circumstances, see our <a href="/help/privacy#takedown">take down policy</a>.
-</dd>
-
-<dt id="mobiles">Do you publish email addresses or mobile phone numbers? <a href="#mobiles">#</a> </dt>
-
-<dd><p>To prevent spam, we automatically remove most emails and some mobile numbers from
-responses to requests. Please <a href="/help/contact">contact us</a> if we've
-missed one.
-For technical reasons we don't always remove them from attachments, such as certain PDFs.</p>
-<p>If you need to know what an address was that we've removed, please <a
- href="/help/contact">get in touch with us</a>. Occasionally, an email address
-forms an important part of a response and we will post it up in an obscured
-form in an annotation.
-</dd>
-
-<dt id="copyright"><a name="commercial"></a>What is your policy on copyright of documents?<a href="#copyright">#</a> </dt>
-
-<dd>Our Freedom of Information law is "applicant blind", so anyone in the
-world can request the same document and get a copy of it.
-
-If you think our making a document available on the internet infringes your
-copyright, you may <a href="/help/contact">contact us</a> and ask us
-to take it down. However, to save tax payers' money by preventing duplicate
-requests, and for good public relations, we'd advise you not to do that.
-</dd>
-
-</dl>
-
-
-</dl>
-
-<p><strong>If you haven't already</strong>, read <a href="/help/about">the introduction</a> --&gt;
-<br><strong>Otherwise</strong>, the <a href="/help/credits">credits</a> or the <a href="/help/api">programmers API</a> --&gt;
-
-<div id="hash_link_padding"></div>
+ <dd>Instead of email, you can respond to a request directly from your web
+ browser, including uploading a file. To do this, choose "respond to request" at
+ the bottom of the request's page. <a href="/help/contact">Contact us</a> if it
+ is too big for even that (more than, say, 50Mb).
+ </dd>
+
+ <dt id="names">Why do you publish the names of civil servants and the text of emails? <a href="#names">#</a> </dt>
+
+ <dd>We consider what officers or servants do in the course of their employment
+ to be public information. We will only remove content in exceptional
+ circumstances, see our <a href="/help/privacy#takedown">take down policy</a>.
+ </dd>
+
+ <dt id="mobiles">Do you publish email addresses or mobile phone numbers? <a href="#mobiles">#</a> </dt>
+
+ <dd><p>To prevent spam, we automatically remove most emails and some mobile numbers from
+ responses to requests. Please <a href="/help/contact">contact us</a> if we've
+ missed one.
+ For technical reasons we don't always remove them from attachments, such as certain PDFs.</p>
+ <p>If you need to know what an address was that we've removed, please <a
+ href="/help/contact">get in touch with us</a>. Occasionally, an email address
+ forms an important part of a response and we will post it up in an obscured
+ form in an annotation.
+ </dd>
+
+ <dt id="copyright"><a name="commercial"></a>What is your policy on copyright of documents?<a href="#copyright">#</a> </dt>
+
+ <dd>Our Freedom of Information law is "applicant blind", so anyone in the
+ world can request the same document and get a copy of it.
+
+ If you think our making a document available on the internet infringes your
+ copyright, you may <a href="/help/contact">contact us</a> and ask us
+ to take it down. However, to save tax payers' money by preventing duplicate
+ requests, and for good public relations, we'd advise you not to do that.
+ </dd>
+
+ </dl>
+
+
+ </dl>
+
+ <p><strong>If you haven't already</strong>, read <a href="/help/about">the introduction</a> --&gt;
+ <br><strong>Otherwise</strong>, the <a href="/help/credits">credits</a> or the <a href="/help/api">programmers API</a> --&gt;
+
+ <div id="hash_link_padding"></div>
+</div>
diff --git a/app/views/help/privacy.rhtml b/app/views/help/privacy.rhtml
index fc8c54885..bec0c8c23 100644
--- a/app/views/help/privacy.rhtml
+++ b/app/views/help/privacy.rhtml
@@ -2,54 +2,54 @@
<%= render :partial => 'sidebar' %>
-<h1 id="privacy"><%= @title %> <a href="#privacy">#</a> </h1>
-
-<dl>
-
-<dt id="email_address">Who gets to see my email address? <a href="#email_address">#</a> </dt>
-
-<dd><p>We will not disclose your email address to anyone unless we are obliged to by law,
-or you ask us to. This includes the public authority that you are sending a
-request to. They only get to see an email address
-@whatdotheyknow.com which is specific to that request. </p>
-<p>If you send a message to another user on the site, then it will reveal your
-email address to them. You will be told that this is going to happen.</p>
-</dd>
-
-<dt id="nasty_spam">Will you send nasty, brutish spam to my email address? <a href="#nasty_spam">#</a> </dt>
-<dd>Nope. After you sign up to <%= site_name %> we will only send you emails
-relating to a request you made, an email alert that you have signed up for,
-or for other reasons that you specifically authorise. We will never give or
-sell your email addresses to anyone else, unless we are obliged to by law, or
-you ask us to.
-</dd>
-
-<dt id="public_request">Why will my name and my request appear publicly on the site? <a href="#public_request">#</a> </dt>
-
-<dd>
-<p>We publish your request on the Internet so that anybody can read it and
-make use of the information that you have found. We do not normally delete
-requests (<a href="#delete_requests">more details</a>).
-</p>
-<p>
-Your name is tangled up with your request, so has to be published as well.
-It is only fair, as we're going to publish the name of the civil servant who
-writes the response to your request. Using your real name also helps people
-get in touch with you to assist you with your research or to campaign with you.
-</p>
-<p>By law, you must use your real name for the request to be a valid Freedom of
-Information request. See the next question for alternatives if you do not want
-to publish your full name.
-</p>
-</dd>
-
-<dt id="real_name">Can I make an FOI request using a pseudonym? <a href="#real_name">#</a> </dt>
-
-
-<dd>
-<p>Technically, you must use your real name for your request to be a valid Freedom of Information request in law. See this
-<a href="http://www.ico.gov.uk/upload/documents/library/freedom_of_information/detailed_specialist_guides/name_of_applicant_fop083_v1.pdf">guidance from the Information Commissioner</a> (January 2009).
-</p>
+<div id="left_column_flip">
+ <h1 id="privacy"><%= @title %></h1>
+ <dl>
+
+ <dt id="email_address">Who gets to see my email address? <a href="#email_address">#</a> </dt>
+
+ <dd><p>We will not disclose your email address to anyone unless we are obliged to by law,
+ or you ask us to. This includes the public authority that you are sending a
+ request to. They only get to see an email address
+ @whatdotheyknow.com which is specific to that request. </p>
+ <p>If you send a message to another user on the site, then it will reveal your
+ email address to them. You will be told that this is going to happen.</p>
+ </dd>
+
+ <dt id="nasty_spam">Will you send nasty, brutish spam to my email address? <a href="#nasty_spam">#</a> </dt>
+ <dd>Nope. After you sign up to WhatDoTheyKnow we will only send you emails
+ relating to a request you made, an email alert that you have signed up for,
+ or for other reasons that you specifically authorise. We will never give or
+ sell your email addresses to anyone else, unless we are obliged to by law, or
+ you ask us to.
+ </dd>
+
+ <dt id="public_request">Why will my name and my request appear publicly on the site? <a href="#public_request">#</a> </dt>
+
+ <dd>
+ <p>We publish your request on the Internet so that anybody can read it and
+ make use of the information that you have found. We do not normally delete
+ requests (<a href="#delete_requests">more details</a>).
+ </p>
+ <p>
+ Your name is tangled up with your request, so has to be published as well.
+ It is only fair, as we're going to publish the name of the civil servant who
+ writes the response to your request. Using your real name also helps people
+ get in touch with you to assist you with your research or to campaign with you.
+ </p>
+ <p>By law, you must use your real name for the request to be a valid Freedom of
+ Information request. See the next question for alternatives if you do not want
+ to publish your full name.
+ </p>
+ </dd>
+
+ <dt id="real_name">Can I make an FOI request using a pseudonym? <a href="#real_name">#</a> </dt>
+
+
+ <dd>
+ <p>Technically, you must use your real name for your request to be a valid Freedom of Information request in law. See this
+ <a href="http://www.ico.gov.uk/upload/documents/library/freedom_of_information/detailed_specialist_guides/name_of_applicant_fop083_v1.pdf">guidance from the Information Commissioner</a> (January 2009).
+ </p>
<p>However, the same guidance also says it is good practice for the public
authority to still consider a request made using an obvious pseudonym.
@@ -179,6 +179,6 @@ that authorities resend these with the personal information removed.</p>
<p><strong>Learn more</strong> from the help for <a href="/help/officers">FOI officers</a> --&gt;
-<div id="hash_link_padding"></div>
-
+ <div id="hash_link_padding"></div>
+</div>
diff --git a/app/views/help/requesting.rhtml b/app/views/help/requesting.rhtml
index eec887950..af8f2e45d 100644
--- a/app/views/help/requesting.rhtml
+++ b/app/views/help/requesting.rhtml
@@ -1,293 +1,293 @@
<% @title = "Making requests" %>
<%= render :partial => 'sidebar' %>
-
-<h1 id="making_requests"><%= @title %> <a href="#making_requests">#</a> </h1>
-<dl>
-
-<dt id="which_authority">I'm not sure which authority to make my request to, how can I find out? <a href="#which_authority">#</a> </dt>
-
-<dd>
-<p>It can be hard to untangle government's complicated structured, and work out
-who knows the information that you want. Here are a few tips:
-<ul>
-<li>Browse or search <%= site_name %> looking for similar requests to yours.</li>
-<li>When you've found an authority you think might have the information, use
-the "home page" link on the right hand side of their page to check what they do
-on their website.</li>
-<li>Contact the authority by phone or email to ask if they hold the kind of
-information you're after.</li>
-<li>Don't worry excessively about getting the right authority. If you get it
-wrong, they ought to advise you who to make the request to instead.
-</li>
-<li>If you've got a thorny case, please <a href="/help/contact">contact us</a> for help.</li>
-</ul>
-
-</dd>
-
-
-
-<dt id="missing_body">You're missing the public authority that I want to request from! <a href="#missing_body">#</a> </dt>
-
-<dd>
-<p>Please <a href="/help/contact">contact us</a> with the name of the public authority and,
-if you can find it, their contact email address for Freedom of Information requests.
-</p>
-<p>If you'd like to help add a whole category of public authority to the site, we'd love
-to hear from you too.
-</p>
-
-</dd>
-
-<dt id="authorities">Why do you include some authorities that aren't formally subject to FOI?<a href="#authorities">#</a> </dt>
-
-<dd>
-<p><%= site_name %> lets you make requests for information to a range of
-organisations:</p>
-
-<ul>
- <li> Those formally subject to the FOI Act</li>
- <li> Those formally subject to the Environmental Regulations (a less well
- defined group)</li>
- <li> Those which voluntarily comply with the FOI Act</li>
- <li> Those which aren't subject to the Act but we think should be, on grounds
- such as them having significant public responsibilities.
+<div id="left_column_flip">
+ <h1 id="making_requests"><%= @title %></h1>
+ <dl>
+
+ <dt id="which_authority">I'm not sure which authority to make my request to, how can I find out? <a href="#which_authority">#</a> </dt>
+
+ <dd>
+ <p>It can be hard to untangle government's complicated structured, and work out
+ who knows the information that you want. Here are a few tips:
+ <ul>
+ <li>Browse or search WhatDoTheyKnow looking for similar requests to yours.</li>
+ <li>When you've found an authority you think might have the information, use
+ the "home page" link on the right hand side of their page to check what they do
+ on their website.</li>
+ <li>Contact the authority by phone or email to ask if they hold the kind of
+ information you're after.</li>
+ <li>Don't worry excessively about getting the right authority. If you get it
+ wrong, they ought to advise you who to make the request to instead.
</li>
-</ul>
-
-<p>In the last case, we're using the site to lobby for expansion of the
-scope of the FOI Act. Even if an organisation is not legally obliged to respond
-to an FOI request, they can still do so voluntarily.
-</p>
-
-</dd>
-
-<dt id="focused">Why must I keep my request focused?<a href="#focused">#</a> </dt>
-
-<dd>
+ <li>If you've got a thorny case, please <a href="/help/contact">contact us</a> for help.</li>
+ </ul>
-<p>
-Please put in your request only what is needed so that someone can
-easily identify what information you are asking for. Please do
-<i>not</i> include any of the following:
-</p>
+ </dd>
-<ul>
-<li>arguments about your cause</li>
-<li>statements that could defame or insult others</li>
-</ul>
-<p>
-If you do, we may have to remove your request to avoid problems with
-libel law, which is a pain for both you and us. Short, succinct messages
-make it easier for authorities to be clear what information you are
-requesting, which means you will get a reply more quickly.
-</p>
-<p>
-If you want information to support an argument or campaign, Freedom of
-Information is a powerful tool. Although you may not use this site to
-run your campaign, we encourage you to use it to get the information you
-need. We also encourage to run your campaign elsewhere - one effective
-and very easy way is to <%= link_to 'start your own blog',
-"http://wordpress.com/"%>. You are welcome to link to your campaign
-from this site in an annotation to your request (you can make
-annotations after submitting the request).
-</p>
+ <dt id="missing_body">You're missing the public authority that I want to request from! <a href="#missing_body">#</a> </dt>
-</dd>
+ <dd>
+ <p>Please <a href="/help/contact">contact us</a> with the name of the public authority and,
+ if you can find it, their contact email address for Freedom of Information requests.
+ </p>
+ <p>If you'd like to help add a whole category of public authority to the site, we'd love
+ to hear from you too.
+ </p>
-<dt id="fees">Does it cost me anything to make a request?<a href="#fees">#</a> </dt>
+ </dd>
-<dd>
+ <dt id="authorities">Why do you include some authorities that aren't formally subject to FOI?<a href="#authorities">#</a> </dt>
-<p>Making an FOI request is nearly always free.</p>
+ <dd>
+ <p>WhatDoTheyKnow lets you make requests for information to a range of
+ organisations:</p>
-<p>Authorities often include unnecessary, scary, boilerplate in
-acknowledgement messages saying they "may" charge a fee. Ignore such notices.
-They hardly ever will actually charge a fee. If they do, they can only charge you if
-you have specifically agreed in advance to pay. <a
- href="http://www.ico.gov.uk/upload/documents/library/freedom_of_information/practical_application/chargingafee.pdf">More
- details</a> from the Information Commissioner.
-</p>
-
-<p>Sometimes an authority will refuse your request, saying that the cost
-of handling it exceeds £600 (for central government) or £450 (for all other
-public authorities). At this point you can refine your
-request. e.g. it would be much cheaper for an authority to tell you the amount
-spent on marshmallows in the past year than in the past ten years.
-</p>
-
-</dd>
-
-
-
-<dt id="quickly_response">How quickly will I get a response? <a href="#quickly_response">#</a> </dt>
-
-<dd>
-<p>By law, public authorities must respond <strong>promptly</strong> to
-requests.
-</p>
-
-<p>Even if they are not prompt, in nearly all cases they must respond within
-20 working days. If you had to clarify your request, or they are a school,
-or one or two other cases, then they may have more time
-(<a href="/help/officers#days">full details</a>).
-
-<p><%= site_name %> will email you if you don't get a timely response. You can
-then send the public authority a message to remind them, and tell them if they
-are breaking the law.</p>
-
-</dd>
-
-<dt id="deadline_extended">Deadline extended <a href="#deadline_extended">#</a> </dt>
-
-<dd>
-<p>By law, public authorities must needs <strong>more time</strong> for request ... (TO DO)
-</p>
-
-
-</dd>
-<dt id="no_response">What if I never get a response?<a href="#no_response">#</a> </dt>
-
-<dd>
-<p>There are several things you can do if you never get a response.</p>
-<ul>
- <li>Sometimes there has been a genuine problem and the authority never
- received the request. It is worth telephoning the authority and politely
- checking that they received the request. It was sent to them by email.
- </li>
- <li>If they have not received it, the problem is most likely due to
- "spam filters". Refer the authority to the measures in the answer
- '<a href="/help/officers#spam_problems">I can see a request on <%= site_name %>, but we never got it by email!</a>'
- in the FOI officers section of this help.
+ <ul>
+ <li> Those formally subject to the FOI Act</li>
+ <li> Those formally subject to the Environmental Regulations (a less well
+ defined group)</li>
+ <li> Those which voluntarily comply with the FOI Act</li>
+ <li> Those which aren't subject to the Act but we think should be, on grounds
+ such as them having significant public responsibilities.
</li>
- <li>If you're still having no luck, then you can ask for an internal review,
- and then complain to the Information Commissioner about the authority.
- Read our page '<a href="/help/unhappy">Unhappy about the response you got?</a>'.
-</ul>
-</dd>
-
-<dt id="not_satifised">What if I'm not satisfied with the response? <a href="#not_satifised">#</a> </dt>
-<dd>If you didn't get the information you asked for, or you didn't get it in time,
-then read our page '<a href="/help/unhappy">Unhappy about the response you got?</a>'.
-</dd>
-
-<dt id="reuse">It says I can't re-use the information I got!<a href="#reuse">#</a> </dt>
-<dd>
-<p>Authorities often add legal boilerplate about the
-"<a href="http://www.opsi.gov.uk/si/si2005/20051515">Re-Use of Public Sector
-Information Regulations 2005</a>", which at first glance implies you may not
-be able do anything with the information.
-</p>
-
-<p>You can, of course, write articles about the information or summarise it, or
-quote parts of it. We also think you should feel free to republish the
-information in full, just as we do, even though in theory you might not be
-allowed to do so. See <a href="/help/officers#copyright">our policy on copyright</a>.</p>
-
-</dd>
-
-<dt id="ico_help">Can you tell me more of the nitty gritty about the process of making requests? <a href="#ico_help">#</a> </dt>
-
-<dd>
-<p>Have a look at the
-<a href="http://www.ico.gov.uk/for_the_public/access_to_official_information.aspx">access to official information</a>
-pages on the Information Commissioner's website.</p>
-
-<p>If you're requesting information from a Scottish public authority,
-the process is very similar. There are differences around time
-limits for compliance.
-See the <a href="http://www.itspublicknowledge.info/nmsruntime/saveasdialog.asp?lID=1858&amp;sID=321">Scottish
-Information Commissioner's guidance</a> for details.</p>
-</dd>
-
-<dt id="data_protection">Can I request information about myself? <a href="#data_protection">#</a> </dt>
-
-<dd>
-<p>No. Requests made using <%= site_name %> are public, made under the Freedom of
-Information Act, and cannot help you find information about a private
-individual.</p>
-
-<p>If you would like to know what information a public
-authority holds about yourself, you should make a "Subject Access Request" in
-private using Data Protection law. The leaflet "<a
-href="http://www.ico.gov.uk/upload/documents/library/data_protection/introductory/subject_access_rights.pdf">How to access your information</a>" (on the Information Commissioner's
-website) explains how to do this.</p>
-
-<p>If you see that somebody has included personal information, perhaps
-unwittingly, in a request, please <a href="/help/contact">contact us</a>
-immediately so we can remove it.</p>
-</dd>
-
-
-<dt id="private_requests">I'd like to keep my request secret! (At least until I publish my story) <a href="#private_requests">#</a> </dt>
-
-<dd><p><%= site_name %> is currently only designed for public requests. All
-responses that we receive are automatically published on the website for anyone
-to read. </p>
-<p>You should contact the public authority directly if you would like to
-make a request in private. If you're interested in buying a system which helps
-you manage FOI requests in secret, then <a href="/help/contact">contact us</a>.
-</p>
-</dd>
-
-<dt id="eir">Why can I only request information about the environment from some authorities? <a href="#eir">#</a> </dt>
-
-<dd>
-<p>Some public authorities, such as <a href="http://www.whatdotheyknow.com/body/south_east_water">South East Water</a>,
-don't come under the Freedom of Information Act, but do come under another law called
-the Environmental Information Regulations (EIR).
-</p>
-
-<p>It's a very similar law, so you make a request
-to them using <%= site_name %> in just the same way as an FOI request. The only
-difference is that on the page where your write you request, it reminds you
-that you can only request "environmental information" and tells you what that
-means. It is quite broad.
-</p>
-
-<p>You can, of course, request environmental information from other
-authorities. Just make a Freedom of Information (FOI) request as normal. The
-authority has a duty to work out if the Environmental Information Regulations
-(EIR) is the more appropriate legislation to reply under.
-</p>
-</dd>
-
-<dt id="multiple">Can I make the same to request to lots of authorities, e.g. all councils? <a href="#multiple">#</a> </dt>
-
-<dd>We ask you to first send a test version of your request to a few
-authorities. Their responses will help you improve the wording of your request,
-so that you get the best information when you send the request to all of
-the authorities. There is currently no automated system for sending the request
-to the other authorities, you must copy and paste it by hand.
-
-</dd>
-
-<dt id="offsite">I made a request off the site, how do I upload it to the archive?<a href="#offsite">#</a> </dt>
-
-<dd><%= site_name %> is an archive of requests made through the site,
-and does not try to be an archive of all FOI requests. We'll never support uploading
-other requests. For one thing, we wouldn't be able to verify that other
-responses actually came from the authority. If this really matters to you,
-you can always make the same request again via <%= site_name %>.
-</dd>
-
-<dt id="moderation">How do you moderate request annotations? <a href="#moderation">#</a> </dt>
-
-<dd>
-<p>Annotations on <%= site_name %> are to help
-people get the information they want, or to give them pointers to places they
-can go to help them act on it. We reserve the right to remove anything else.
-</p>
-<p>Endless, political discussions are not allowed.
-Post a link to a suitable forum or campaign site elsewhere.</p>
-<dd>
+ </ul>
-</dl>
+ <p>In the last case, we're using the site to lobby for expansion of the
+ scope of the FOI Act. Even if an organisation is not legally obliged to respond
+ to an FOI request, they can still do so voluntarily.
+ </p>
-<p><strong>Next</strong>, read about <a href="/help/privacy">your privacy</a> --&gt;
+ </dd>
-<div id="hash_link_padding"></div>
+ <dt id="focused">Why must I keep my request focused?<a href="#focused">#</a> </dt>
+ <dd>
+
+ <p>
+ Please put in your request only what is needed so that someone can
+ easily identify what information you are asking for. Please do
+ <i>not</i> include any of the following:
+ </p>
+
+ <ul>
+ <li>arguments about your cause</li>
+ <li>statements that could defame or insult others</li>
+ </ul>
+
+ <p>
+ If you do, we may have to remove your request to avoid problems with
+ libel law, which is a pain for both you and us. Short, succinct messages
+ make it easier for authorities to be clear what information you are
+ requesting, which means you will get a reply more quickly.
+ </p>
+
+ <p>
+ If you want information to support an argument or campaign, Freedom of
+ Information is a powerful tool. Although you may not use this site to
+ run your campaign, we encourage you to use it to get the information you
+ need. We also encourage to run your campaign elsewhere - one effective
+ and very easy way is to <%= link_to 'start your own blog',
+ "http://wordpress.com/"%>. You are welcome to link to your campaign
+ from this site in an annotation to your request (you can make
+ annotations after submitting the request).
+ </p>
+
+ </dd>
+
+ <dt id="fees">Does it cost me anything to make a request?<a href="#fees">#</a> </dt>
+
+ <dd>
+
+ <p>Making an FOI request is nearly always free.</p>
+
+ <p>Authorities often include unnecessary, scary, boilerplate in
+ acknowledgement messages saying they "may" charge a fee. Ignore such notices.
+ They hardly ever will actually charge a fee. If they do, they can only charge you if
+ you have specifically agreed in advance to pay. <a
+ href="http://www.ico.gov.uk/upload/documents/library/freedom_of_information/practical_application/chargingafee.pdf">More
+ details</a> from the Information Commissioner.
+ </p>
+
+ <p>Sometimes an authority will refuse your request, saying that the cost
+ of handling it exceeds £600 (for central government) or £450 (for all other
+ public authorities). At this point you can refine your
+ request. e.g. it would be much cheaper for an authority to tell you the amount
+ spent on marshmallows in the past year than in the past ten years.
+ </p>
+
+ </dd>
+
+
+
+ <dt id="quickly_response">How quickly will I get a response? <a href="#quickly_response">#</a> </dt>
+
+ <dd>
+ <p>By law, public authorities must respond <strong>promptly</strong> to
+ requests.
+ </p>
+
+ <p>Even if they are not prompt, in nearly all cases they must respond within
+ 20 working days. If you had to clarify your request, or they are a school,
+ or one or two other cases, then they may have more time
+ (<a href="/help/officers#days">full details</a>).
+
+ <p>WhatDoTheyKnow will email you if you don't get a timely response. You can
+ then send the public authority a message to remind them, and tell them if they
+ are breaking the law.</p>
+
+ </dd>
+
+ <dt id="deadline_extended">Deadline extended <a href="#deadline_extended">#</a> </dt>
+
+ <dd>
+ <p>By law, public authorities must needs <strong>more time</strong> for request ... (TO DO)
+ </p>
+
+
+ </dd>
+ <dt id="no_response">What if I never get a response?<a href="#no_response">#</a> </dt>
+
+ <dd>
+ <p>There are several things you can do if you never get a response.</p>
+ <ul>
+ <li>Sometimes there has been a genuine problem and the authority never
+ received the request. It is worth telephoning the authority and politely
+ checking that they received the request. It was sent to them by email.
+ </li>
+ <li>If they have not received it, the problem is most likely due to
+ "spam filters". Refer the authority to the measures in the answer
+ '<a href="/help/officers#spam_problems">I can see a request on WhatDoTheyKnow, but we never got it by email!</a>'
+ in the FOI officers section of this help.
+ </li>
+ <li>If you're still having no luck, then you can ask for an internal review,
+ and then complain to the Information Commissioner about the authority.
+ Read our page '<a href="/help/unhappy">Unhappy about the response you got?</a>'.
+ </ul>
+ </dd>
+
+ <dt id="not_satifised">What if I'm not satisfied with the response? <a href="#not_satifised">#</a> </dt>
+ <dd>If you didn't get the information you asked for, or you didn't get it in time,
+ then read our page '<a href="/help/unhappy">Unhappy about the response you got?</a>'.
+ </dd>
+
+ <dt id="reuse">It says I can't re-use the information I got!<a href="#reuse">#</a> </dt>
+ <dd>
+ <p>Authorities often add legal boilerplate about the
+ "<a href="http://www.opsi.gov.uk/si/si2005/20051515">Re-Use of Public Sector
+ Information Regulations 2005</a>", which at first glance implies you may not
+ be able do anything with the information.
+ </p>
+
+ <p>You can, of course, write articles about the information or summarise it, or
+ quote parts of it. We also think you should feel free to republish the
+ information in full, just as we do, even though in theory you might not be
+ allowed to do so. See <a href="/help/officers#copyright">our policy on copyright</a>.</p>
+
+ </dd>
+
+ <dt id="ico_help">Can you tell me more of the nitty gritty about the process of making requests? <a href="#ico_help">#</a> </dt>
+
+ <dd>
+ <p>Have a look at the
+ <a href="http://www.ico.gov.uk/for_the_public/access_to_official_information.aspx">access to official information</a>
+ pages on the Information Commissioner's website.</p>
+
+ <p>If you're requesting information from a Scottish public authority,
+ the process is very similar. There are differences around time
+ limits for compliance.
+ See the <a href="http://www.itspublicknowledge.info/nmsruntime/saveasdialog.asp?lID=1858&amp;sID=321">Scottish
+ Information Commissioner's guidance</a> for details.</p>
+ </dd>
+
+ <dt id="data_protection">Can I request information about myself? <a href="#data_protection">#</a> </dt>
+
+ <dd>
+ <p>No. Requests made using WhatDoTheyKnow are public, made under the Freedom of
+ Information Act, and cannot help you find information about a private
+ individual.</p>
+
+ <p>If you would like to know what information a public
+ authority holds about yourself, you should make a "Subject Access Request" in
+ private using Data Protection law. The leaflet "<a
+ href="http://www.ico.gov.uk/upload/documents/library/data_protection/introductory/subject_access_rights.pdf">How to access your information</a>" (on the Information Commissioner's
+ website) explains how to do this.</p>
+
+ <p>If you see that somebody has included personal information, perhaps
+ unwittingly, in a request, please <a href="/help/contact">contact us</a>
+ immediately so we can remove it.</p>
+ </dd>
+
+
+ <dt id="private_requests">I'd like to keep my request secret! (At least until I publish my story) <a href="#private_requests">#</a> </dt>
+
+ <dd><p>WhatDoTheyKnow is currently only designed for public requests. All
+ responses that we receive are automatically published on the website for anyone
+ to read. </p>
+ <p>You should contact the public authority directly if you would like to
+ make a request in private. If you're interested in buying a system which helps
+ you manage FOI requests in secret, then <a href="/help/contact">contact us</a>.
+ </p>
+ </dd>
+
+ <dt id="eir">Why can I only request information about the environment from some authorities? <a href="#eir">#</a> </dt>
+
+ <dd>
+ <p>Some public authorities, such as <a href="http://www.whatdotheyknow.com/body/south_east_water">South East Water</a>,
+ don't come under the Freedom of Information Act, but do come under another law called
+ the Environmental Information Regulations (EIR).
+ </p>
+
+ <p>It's a very similar law, so you make a request
+ to them using WhatDoTheyKnow in just the same way as an FOI request. The only
+ difference is that on the page where your write you request, it reminds you
+ that you can only request "environmental information" and tells you what that
+ means. It is quite broad.
+ </p>
+
+ <p>You can, of course, request environmental information from other
+ authorities. Just make a Freedom of Information (FOI) request as normal. The
+ authority has a duty to work out if the Environmental Information Regulations
+ (EIR) is the more appropriate legislation to reply under.
+ </p>
+ </dd>
+
+ <dt id="multiple">Can I make the same to request to lots of authorities, e.g. all councils? <a href="#multiple">#</a> </dt>
+
+ <dd>We ask you to first send a test version of your request to a few
+ authorities. Their responses will help you improve the wording of your request,
+ so that you get the best information when you send the request to all of
+ the authorities. There is currently no automated system for sending the request
+ to the other authorities, you must copy and paste it by hand.
+
+ </dd>
+
+ <dt id="offsite">I made a request off the site, how do I upload it to the archive?<a href="#offsite">#</a> </dt>
+
+ <dd>WhatDoTheyKnow is an archive of requests made through the site,
+ and does not try to be an archive of all FOI requests. We'll never support uploading
+ other requests. For one thing, we wouldn't be able to verify that other
+ responses actually came from the authority. If this really matters to you,
+ you can always make the same request again via WhatDoTheyKnow.
+ </dd>
+
+ <dt id="moderation">How do you moderate request annotations? <a href="#moderation">#</a> </dt>
+
+ <dd>
+ <p>Annotations on WhatDoTheyKnow are to help
+ people get the information they want, or to give them pointers to places they
+ can go to help them act on it. We reserve the right to remove anything else.
+ </p>
+ <p>Endless, political discussions are not allowed.
+ Post a link to a suitable forum or campaign site elsewhere.</p>
+ <dd>
+
+ </dl>
+
+ <p><strong>Next</strong>, read about <a href="/help/privacy">your privacy</a> --&gt;
+
+ <div id="hash_link_padding"></div>
+</div>
diff --git a/app/views/help/unhappy.rhtml b/app/views/help/unhappy.rhtml
index 86ded2e59..4f3c67b9e 100644
--- a/app/views/help/unhappy.rhtml
+++ b/app/views/help/unhappy.rhtml
@@ -29,7 +29,7 @@ to your request '<%=request_link(@info_request) %>'?
<p>
<% if !@info_request.nil? %>
- Choose <%= link_to "request an internal review", show_response_no_followup_url(:id => @info_request.id, :incoming_message_id => nil) + "?internal_review=1#followup" %> and then write a message asking the authority to review your request.
+ <%= link_to "Request an internal review", show_response_no_followup_url(:id => @info_request.id, :incoming_message_id => nil) + "?internal_review=1#followup", :class => 'link_button_green' %> and then write a message asking the authority to review your request.
<% else %>
At the bottom of the relevant request page on <%= site_name %> choose
"request an internal review". Then write a message asking for an internal
diff --git a/app/views/layouts/admin.rhtml b/app/views/layouts/admin.rhtml
index f0e9a7019..42ca5dbbb 100644
--- a/app/views/layouts/admin.rhtml
+++ b/app/views/layouts/admin.rhtml
@@ -3,6 +3,10 @@
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" >
<title><%= site_name %> admin<%= @title ? ":" : "" %> <%=@title%></title>
+
+ <%= javascript_include_tag 'jquery.js', 'jquery-ui.min' %>
+
+ <%= stylesheet_link_tag 'admin-theme/jquery-ui-1.8.15.custom.css', :rel => 'stylesheet'%>
<%= stylesheet_link_tag 'admin', :title => "Main", :rel => "stylesheet" %>
</head>
<body>
@@ -30,6 +34,6 @@
<% end %>
<%= yield %>
-
+
</body>
</html>
diff --git a/app/views/layouts/default.rhtml b/app/views/layouts/default.rhtml
index 94ec5a956..2af13f342 100644
--- a/app/views/layouts/default.rhtml
+++ b/app/views/layouts/default.rhtml
@@ -1,13 +1,6 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="<%= I18n.locale %>">
<head>
- <% if @profile_photo_javascript %>
- <script type="text/javascript" src="/javascripts/jquery.js"></script>
- <script type="text/javascript" src="/javascripts/jquery.Jcrop.js"></script>
- <script type="text/javascript" src="/javascripts/profile_photo.js"></script>
- <link rel="stylesheet" href="/stylesheets/jquery.Jcrop.css" type="text/css" >
- <% end %>
-
<title>
<% if @title %>
<%=@title%> - <%= site_name %>
@@ -17,16 +10,36 @@
</title>
<link rel="shortcut icon" href="/favicon.ico">
+ <%= stylesheet_link_tag 'main', :title => "Main", :rel => "stylesheet", :media => "all" %>
+ <%= stylesheet_link_tag 'fonts', :rel => "stylesheet", :media => "all" %>
+ <%= stylesheet_link_tag 'theme', :rel => "stylesheet", :media => "all" %>
+ <%= stylesheet_link_tag 'print', :rel => "stylesheet", :media => "print" %>
+ <% if !params[:print_stylesheet].nil? %>
+ <%= stylesheet_link_tag 'print', :rel => "stylesheet", :media => "all" %>
+ <% end %>
+ <%= javascript_include_tag 'jquery.js', 'jquery-ui.min','jquery.cookie.js', 'general.js' %>
- <%= stylesheet_link_tag 'main', :title => "Main", :rel => "stylesheet" %>
+ <% if @profile_photo_javascript %>
+ <script type="text/javascript" src="/javascripts/jquery.Jcrop.js"></script>
+ <script type="text/javascript" src="/javascripts/profile_photo.js"></script>
+ <link rel="stylesheet" href="/stylesheets/jquery.Jcrop.css" type="text/css" >
+ <% end %>
+
+ <%= stylesheet_link_tag 'admin-theme/jquery-ui-1.8.15.custom.css', :rel => 'stylesheet'%>
<!--[if LT IE 7]>
<style type="text/css">@import url("/stylesheets/ie6.css");</style>
<![endif]-->
<!--[if LT IE 7]>
<style type="text/css">@import url("/stylesheets/ie6-custom.css");</style>
<![endif]-->
+ <!--[if LT IE 8]>
+ <style type="text/css">@import url("/stylesheets/ie7.css");</style>
+ <![endif]-->
<%= stylesheet_link_tag 'custom', :title => "Main", :rel => "stylesheet" %>
-
+ <% if force_registration_on_new_request %>
+ <%= stylesheet_link_tag 'jquery.fancybox-1.3.4', :rel => "stylesheet" %>
+ <% end %>
+
<% if @feed_autodetect %>
<% for feed in @feed_autodetect %>
<link rel="alternate" type="application/atom+xml" title="<%=h feed[:title] %>" href="<%=h feed[:url]%>">
@@ -45,8 +58,30 @@
<%= render :partial => 'general/before_head_end' %>
</head>
- <body>
+ <body <%= "class='front'" if params[:action] == 'frontpage' %>>
+ <!-- XXX: move to a separate file -->
+ <% if force_registration_on_new_request && !@user %>
+ <%= javascript_include_tag 'jquery.fancybox-1.3.4.pack' %>
+ <script type="text/javascript">
+ $(document).ready(function() {
+ $("#make-request-link").fancybox({
+ 'modal': false,
+ 'width': 920,
+ 'height': 400,
+ 'type': 'iframe',
+ 'href': '/<%= I18n.locale %>/profile/sign_in?modal=1',
+ 'onClosed': function() {
+ // modal_signin_successful variable set by modal dialog box
+ if (typeof modal_signin_successful != 'undefined' ) {
+ window.location.href = '<%= select_authority_url %>';
+ }
+ }
+ });
+ });
+ </script>
+ <% end %>
+
<% # code for popup advert for a campaign etc.
=begin
<div id="everypage" class="jshide">
@@ -57,59 +92,43 @@
=end
%>
<div class="entirebody">
- <div id="banner"></div>
- <div id="header">
- <h1>
- <%= link_to site_name, frontpage_url %>
- </h1>
+ <div id="banner">
+ <div id="banner_inner">
+ <div class="lang"><%= render :partial => 'general/locale_switcher' %></div>
+
+ <% if not (controller.action_name == 'signin' or controller.action_name == 'signup') %>
+ <div id="logged_in_bar">
+ <% if @user %>
+ <%= _('Hello, {{username}}!', :username => h(@user.name))%>
- <div id="tagline">
- <%= _('Make and explore Freedom of Information requests') %>
- </div>
+ <% if @user %>
+ <%=link_to _("My profile"), user_url(@user) %>
+ <% end %>
- </div>
- <div id="orglogo">
- <%= render :partial => 'general/orglink' %>
- </div>
- <div class="lang"><%= render :partial => 'general/locale_switcher' %></div>
-
- <div id="navigation_search">
- <% form_tag({:controller => "general", :action => "search_redirect"}, {:id => "navigation_search_form"}) do %>
- <p>
- <%= text_field_tag 'query', params[:query], { :size => 40, :id => "navigation_search_query" } %>
- <%= submit_tag _("Search") %>
- </p>
- <% end %>
- </div>
- <div id="topnav">
- <ul id="navigation">
- <li><%= link_to _("Make request"), frontpage_url %></li>
- <li><%= link_to _("View requests"), request_list_successful_url %></li>
- <li><%= link_to _("View authorities"), list_public_bodies_default %></li>
- <% if @user %>
- <li><%=link_to _("My requests"), user_url(@user) %></li>
- <% end %>
- <li><%= link_to _("Read blog"), blog_url %></li>
- <li><%= link_to _("Help"), help_about_url %></li>
- </ul>
- <% if not (controller.action_name == 'signin' or controller.action_name == 'signup') %>
- <div id="logged_in_bar">
- <% if @user %>
- <%= _('Hello, {{username}}!', :username => h(@user.name))%>
- (<%= link_to _("Sign out"), signout_url(:r => request.request_uri) %>)
- <% else %>
- <%= _('Hello!') %>
- (<%= link_to _("Sign in or sign up"), signin_url(:r => request.request_uri) %>)
+ <%= link_to _("Sign out"), signout_url(:r => request.request_uri) %>
+ <% else %>
+ <%= link_to _("Sign in or sign up"), signin_url(:r => request.request_uri) %>
+ <% end %>
+ </div>
+ <% end %>
+
+ <div id="navigation_search">
+ <% form_tag({:controller => "general", :action => "search_redirect"}, {:id => "navigation_search_form"}) do %>
+ <p>
+ <%= text_field_tag 'query', params[:query], { :size => 40, :id => "navigation_search_query" } %>
+ <%= image_submit_tag('search-button.png') %>
+ </p>
<% end %>
- </div>
- <% end %>
+ </div>
+
+ <%= render :partial => 'general/orglink' %>
+
+ <%= render :partial => 'general/topnav' %>
+ </div>
</div>
-
<div id="wrapper">
-
<div id="content">
-
<% if flash[:notice] %>
<div id="notice"><%= flash[:notice] %></div>
<% end %>
@@ -120,16 +139,20 @@
<div id="<%= controller.controller_name + "_" + controller.action_name %>" class="controller_<%= controller.controller_name %>">
<%= yield :layout %>
</div>
+ <div style="clear:both"></div>
</div>
</div>
- <div id="footer">
- <%= link_to _("Contact {{site_name}}", :site_name => site_name), help_contact_url %>
- <%= render :partial => 'general/credits' %>
- </div>
- <div class="after-footer">&nbsp;</div>
+ <%= render :partial => 'general/footer' %>
<%= render :partial => 'general/before_body_end' %>
</div>
+<div id="other-country-notice"></div>
+<div id="link_box"><span class="close-button">X</span>
+<%= _("Paste this link into emails, tweets, and anywhere else:") %>
+<br />
+<input type="text">
+</div>
</body>
</html>
+
diff --git a/app/views/layouts/no_chrome.rhtml b/app/views/layouts/no_chrome.rhtml
new file mode 100644
index 000000000..74c79b701
--- /dev/null
+++ b/app/views/layouts/no_chrome.rhtml
@@ -0,0 +1,41 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="<%= I18n.locale %>">
+ <head>
+ <title>
+ <% if @title %>
+ <%=@title%> - <%= site_name %>
+ <% else %>
+ <%= site_name %> - <%= _('Make and browse Freedom of Information (FOI) requests') %>
+ <% end %>
+ </title>
+
+ <script type="text/javascript" src="/javascripts/jquery.js"></script>
+
+ <%= stylesheet_link_tag 'main', :title => "Main", :rel => "stylesheet" %>
+ <%= stylesheet_link_tag 'fonts', :rel => "stylesheet" %>
+ <%= stylesheet_link_tag 'theme', :rel => "stylesheet" %>
+ <!--[if LT IE 7]>
+ <style type="text/css">@import url("/stylesheets/ie6.css");</style>
+ <![endif]-->
+ <!--[if LT IE 7]>
+ <style type="text/css">@import url("/stylesheets/ie6-custom.css");</style>
+ <![endif]-->
+ <%= stylesheet_link_tag 'custom', :title => "Main", :rel => "stylesheet" %>
+ </head>
+ <body>
+ <div class="entirebody">
+ <div id="content">
+ <% if flash[:notice] %>
+ <div id="notice"><%= flash[:notice] %></div>
+ <% end %>
+ <% if flash[:error] %>
+ <div id="error"><%= flash[:error] %></div>
+ <% end %>
+
+ <div id="<%= controller.controller_name + "_" + controller.action_name %>" class="controller_<%= controller.controller_name %>">
+ <%= yield :layout %>
+ </div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/app/views/outgoing_mailer/initial_request.rhtml b/app/views/outgoing_mailer/initial_request.rhtml
index 83e5b794b..d537a20bc 100644
--- a/app/views/outgoing_mailer/initial_request.rhtml
+++ b/app/views/outgoing_mailer/initial_request.rhtml
@@ -6,6 +6,7 @@
<%= @info_request.incoming_email %>
<%= _('Is {{email_address}} the wrong address for {{type_of_request}} requests to {{public_body_name}}? If so, please contact us using this form:', :email_address => @info_request.public_body.request_email, :type_of_request => @info_request.law_used_full, :public_body_name => @info_request.public_body.name)%>
+<%= help_contact_url %>
<%= render :partial => 'followup_footer' %>
diff --git a/app/views/public_body/_body_listing.rhtml b/app/views/public_body/_body_listing.rhtml
index 48b6e8245..864ab8c9b 100644
--- a/app/views/public_body/_body_listing.rhtml
+++ b/app/views/public_body/_body_listing.rhtml
@@ -1,5 +1,7 @@
<% if public_bodies.empty? %>
+ <p>
<%= _("None found.")%>
+ </p>
<% else %>
<% for public_body in public_bodies %>
<%= render :partial => 'public_body/body_listing_single', :locals => { :public_body => public_body } %>
diff --git a/app/views/public_body/_body_listing_single.rhtml b/app/views/public_body/_body_listing_single.rhtml
index 7637a1077..b01d2ebb2 100644
--- a/app/views/public_body/_body_listing_single.rhtml
+++ b/app/views/public_body/_body_listing_single.rhtml
@@ -23,7 +23,9 @@
<%= link_to _("Make your own request"), public_body_url(public_body) %>.
<% end %>
<br>
- <%= _("Added on {{date}}", :date => simple_date(public_body.created_at)) %>.
+ <span class="date_added">
+ <%= _("Added on {{date}}", :date => simple_date(public_body.created_at)) %>.
+ </span>
</span>
</div>
diff --git a/app/views/public_body/_search_ahead.rhtml b/app/views/public_body/_search_ahead.rhtml
new file mode 100644
index 000000000..19c7eb4e8
--- /dev/null
+++ b/app/views/public_body/_search_ahead.rhtml
@@ -0,0 +1,18 @@
+<p>
+ <% if @xapian_requests.results.size > 0 %>
+ <h3><%= _('Top search results:') %></h3>
+ <p>
+ <%= _('Select one to see more information about the authority.')%>
+ </p>
+ <% else %>
+ <h3><%= _('No results found.') %></h3>
+ <% end %>
+ <div id="authority_search_ahead_results">
+ <% for result in @xapian_requests.results %>
+ <%= render :partial => 'body_listing_single', :locals => { :public_body => result[:model] } %>
+ <% end %>
+ </div>
+</p>
+
+
+
diff --git a/app/views/public_body/list.rhtml b/app/views/public_body/list.rhtml
index 5d88b1501..af91d8ed2 100644
--- a/app/views/public_body/list.rhtml
+++ b/app/views/public_body/list.rhtml
@@ -1,14 +1,13 @@
-<div id="body_sidebar">
+<div id="right_column_flip">
+ <h2><%=_('Show only...')%></h2>
- <h1><%=_('Show only...')%></h1>
-
- <h2><%=_('Alphabet') %></h2>
+ <h3><%=_('Beginning with') %></h3>
<ul><li>
<%= render :partial => 'alphabet' %>
- </li></ul>
-
+ </li>
+ </ul>
<% first_row = true %>
- <% for row in PublicBodyCategories::CATEGORIES_WITH_HEADINGS %>
+ <% for row in PublicBodyCategories::get().with_headings() %>
<% if row.instance_of?(Array) %>
<li>
<%= link_to_unless (@tag == row[0]), row[1], list_public_bodies_url(:tag => row[0]) %>
@@ -19,36 +18,35 @@
<% else %>
<% first_row = false %>
<% end %>
- <h2><%=h row%></h2>
+ <h3><%=h row%></h3>
<ul>
<% end %>
<% end %>
- </ul>
-
+ <% if not first_row %>
+ </ul>
+ <% end %>
<p>
<%= _('<a href="%s">Are we missing a public authority?</a>.') % [help_requesting_path + '#missing_body'] %>
</p>
<p>
<%= link_to _('List of all authorities (CSV)'), all_public_bodies_csv_url() %>
</p>
-
</div>
<% @title = _("Public authorities - {{description}}", :description => @description) %>
-
-<h1><%=@title%></h1>
-
-<p class="subtitle">
- <%= @public_bodies.size %> <%= _('in total') %>
- (<%= _('<a href="%s">can\'t find the one you want?</a>') % [help_requesting_path + '#missing_body'] %>)
-</p>
-
-<% if @tag.size == 1 %>
- <p><%= render :partial => 'alphabet' %></p>
+<div id="left_column_flip">
+<h1><%= _('Public authorities') %></h1>
+
+<% form_tag(list_public_bodies_default_url, :method => "get", :id=>"search_form") do %>
+ <div>
+ <%= text_field_tag(:public_body_query, params[:public_body_query]) %>
+ <%= submit_tag(_("Search")) %>
+ </div>
<% end %>
+
+<h2 class="publicbody_results"><%= _('Found {{count}} public bodies {{description}}', :count=>@public_bodies.size, :description=>@description) %></h2>
<%= render :partial => 'body_listing', :locals => { :public_bodies => @public_bodies } %>
-<% if @tag.size == 1 && @public_bodies.size > 0 %>
- <p><%= render :partial => 'alphabet' %></p>
-<% end %>
-<%= will_paginate(@public_bodies) %>
+ <%= will_paginate(@public_bodies) %><br/>
+ <%= _('<a href="%s">Can\'t find the one you want?</a>') % [help_requesting_path + '#missing_body'] %>
+</div>
diff --git a/app/views/public_body/show.rhtml b/app/views/public_body/show.rhtml
index 36bba8851..7d37a35a7 100644
--- a/app/views/public_body/show.rhtml
+++ b/app/views/public_body/show.rhtml
@@ -1,70 +1,74 @@
-<% @title = h(@public_body.name) + " - view and make Freedom of Information requests" %>
-<div id="request_sidebar">
- <h2><%= _('Track this authority')%></h2>
- <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'sidebar' } %>
- <h2><%= _('More about this authority')%></h2>
- <% if !@public_body.calculated_home_page.nil? %>
- <%= link_to _('Home page of authority'), @public_body.calculated_home_page %><br>
- <% end %>
- <% if !@public_body.publication_scheme.empty? %>
- <%= link_to _('Publication scheme'), @public_body.publication_scheme %><br>
- <% end %>
- <% if @public_body.has_tag?("charity") %>
- <% for tag_value in @public_body.get_tag_values("charity") %>
- <% if tag_value.match(/^SC/) %>
- <%= link_to _('Charity registration'), "http://www.oscr.org.uk/CharityIndexDetails.aspx?id=" + tag_value %><br>
- <% else %>
- <%= link_to _('Charity registration'), "http://www.charity-commission.gov.uk/SHOWCHARITY/RegisterOfCharities/CharityFramework.aspx?RegisteredCharityNumber=" + tag_value %><br>
- <% end %>
- <% end %>
- <% end %>
- <%= link_to _('View FOI email address'), view_public_body_email_url(@public_body.url_name) %><br>
-</div>
+<% @title = h(@public_body.name) + _(" - view and make Freedom of Information requests") %>
+<div id="main_content">
+ <div id="header_right">
+ <h2><%= _('Follow this authority')%></h2>
-<h1><%=h(@public_body.name)%></h1>
+ <% follower_count = TrackThing.count(:all, :conditions => ["public_body_id = ?", @public_body.id]) %>
+ <p><%= n_("There is %d person following this authority", "There are %d people following this authority", follower_count) % follower_count %></p>
-<p class="subtitle">
-<%=@public_body.type_of_authority(true)%>
-<% if not @public_body.short_name.empty? %>,
-<%= _('also called {{public_body_short_name}}', :public_body_short_name => h(@public_body.short_name))%><% end %>
-<% if !@user.nil? && @user.admin_page_links? %>
-(<%= link_to _("admin"), public_body_admin_url(@public_body) %>)
-<% end %>
-</p>
+ <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'sidebar' } %>
+ <h2><%= _('More about this authority')%></h2>
+ <% if !@public_body.calculated_home_page.nil? %>
+ <%= link_to _('Home page of authority'), @public_body.calculated_home_page %><br>
+ <% end %>
+ <% if !@public_body.publication_scheme.empty? %>
+ <%= link_to _('Publication scheme'), @public_body.publication_scheme %><br>
+ <% end %>
+ <% if @public_body.has_tag?("charity") %>
+ <% for tag_value in @public_body.get_tag_values("charity") %>
+ <% if tag_value.match(/^SC/) %>
+ <%= link_to _('Charity registration'), "http://www.oscr.org.uk/CharityIndexDetails.aspx?id=" + tag_value %><br>
+ <% else %>
+ <%= link_to _('Charity registration'), "http://www.charity-commission.gov.uk/SHOWCHARITY/RegisterOfCharities/CharityFramework.aspx?RegisteredCharityNumber=" + tag_value %><br>
+ <% end %>
+ <% end %>
+ <% end %>
+ <%= link_to _('View FOI email address'), view_public_body_email_url(@public_body.url_name) %><br>
+ </div>
-<% if @public_body.has_notes? && (@public_body.is_requestable? || @public_body.not_requestable_reason == 'bad_contact') %>
- <p><%= @public_body.notes_as_html %></p>
-<% end %>
+ <div id="header_left">
+ <p class="public-body-name-prefix"><%= _("Freedom of information requests to") %></p>
+ <h1><%=h(@public_body.name)%></h1>
-<% if @public_body.eir_only? %>
- <p><%= _('You can only request information about the environment from this authority.')%></p>
-<% end %>
+ <p class="subtitle">
+ <%=@public_body.type_of_authority(true)%><% if not @public_body.short_name.empty? %>,
+ <%= _('also called {{public_body_short_name}}', :public_body_short_name => h(@public_body.short_name))%><% end %>
+ <% if !@user.nil? && @user.admin_page_links? %>
+ (<%= link_to _("admin"), public_body_admin_url(@public_body) %>)
+ <% end %>
+ </p>
-<div id="stepwise_make_request">
- <strong>
- <% if @public_body.is_requestable? || @public_body.not_requestable_reason == 'bad_contact' %>
- <% if @public_body.eir_only? %>
- <%= link_to _("Make a new Environmental Information request"), new_request_to_body_url(:url_name => @public_body.url_name)%> to <%= h(@public_body.name) %>
+ <% if @public_body.has_notes? && (@public_body.is_requestable? || @public_body.not_requestable_reason == 'bad_contact') %>
+ <p><%= @public_body.notes_as_html %></p>
+ <% end %>
+
+ <% if @public_body.eir_only? %>
+ <p><%= _('You can only request information about the environment from this authority.')%></p>
+ <% end %>
+ <div id="stepwise_make_request">
+ <% if @public_body.is_requestable? || @public_body.not_requestable_reason == 'bad_contact' %>
+ <% if @public_body.eir_only? %>
+ <%= _('Make a new <strong>Environmental Information</strong> request')%>
+ <% else %>
+ <%= _('Make a new <strong>Freedom of Information</strong> request to {{public_body}}', :public_body => h(@public_body.name))%>
+ <% end %>
+ &nbsp;<%= _('<a class="link_button_green" href="{{url}}">{{text}}</a>', :url=>new_request_to_body_url(:url_name => @public_body.url_name), :text=>_("Start"))%>
+ <% elsif @public_body.has_notes? %>
+ <%= @public_body.notes_as_html %>
+ <% elsif @public_body.not_requestable_reason == 'not_apply' %>
+ <%= _('Freedom of Information law does not apply to this authority, so you cannot make
+ a request to it.')%>
+ <% elsif @public_body.not_requestable_reason == 'defunct' %>
+ <%= _('This authority no longer exists, so you cannot make a request to it.')%>
<% else %>
- <%= _('<a href="{{url}}">Make a new Freedom of Information request</a> to {{public_body_name}}',
- :public_body_name => h(@public_body.name), :url=>new_request_to_body_url(:url_name => @public_body.url_name))%>
+ <%= _('For an unknown reason, it is not possible to make a request to this authority.')%>
<% end %>
- <% elsif @public_body.has_notes? %>
- <%= @public_body.notes_as_html %>
- <% elsif @public_body.not_requestable_reason == 'not_apply' %>
- <%= _('Freedom of Information law does not apply to this authority, so you cannot make
- a request to it.')%>
- <% elsif @public_body.not_requestable_reason == 'defunct' %>
- <%= _('This authority no longer exists, so you cannot make a request to it.')%>
- <% else %>
- <%= _('For an unknown reason, it is not possible to make a request to this authority.')%>
- <% end %>
- </strong>
-</div>
+ </div>
+ </div>
-<% if !@xapian_requests.nil? %>
- <% if @xapian_requests.results.empty? %>
+ <div id="foi_results_section">
+ <% if @public_body.info_requests.size == 0 %>
<% if @public_body.eir_only? %>
<h2><%= _('Environmental Information Regulations requests made using this site') %></h2>
<p>Nobody has made any Environmental Information Regulations requests to <%=h(@public_body.name)%> using this site yet.</p>
@@ -73,30 +77,47 @@
<p><%= _('Nobody has made any Freedom of Information requests to {{public_body_name}} using this site yet.', :public_body_name => h(@public_body.name))%></p>
<% end %>
<% else %>
- <h2>
+ <h2 class="foi_results">
<% if @public_body.eir_only? %>
<%= pluralize(@public_body.info_requests.size, "Environmental Information Regulations request made using this site") %>
<% else %>
- <%= n_('%d Freedom of Information request made using this site', '%d Freedom of Information requests made using this site', @public_body.info_requests.size) % @public_body.info_requests.size %>
+ <% if @public_body.info_requests.size > 4 %>
+ <%= n_('Search within the %d Freedom of Information requests to %s', 'Search within the %d Freedom of Information requests made to %s', @public_body.info_requests.size) % [@public_body.info_requests.size, @public_body.name] %>
+ <% else %>
+ <%= n_('%d Freedom of Information request to %s', '%d Freedom of Information requests to %s', @public_body.info_requests.size) % [@public_body.info_requests.size, @public_body.name] %>
+ <% end %>
<% end %>
<%= @page_desc %>
</h2>
+ <a name="results"></a>
+
+ <% if @public_body.info_requests.size > 4 %>
+ <%= render :partial => 'request/request_filter_form' %>
+ <% end %>
+ <% end %>
- <% for result in @xapian_requests.results %>
- <%= render :partial => 'request/request_listing_via_event', :locals => { :event => result[:model], :info_request => result[:model].info_request } %>
- <% end %>
+ <div style="clear:both">&nbsp;</div>
+ <% if !@xapian_requests.nil? %>
- <%= will_paginate WillPaginate::Collection.new(@page, @per_page, @public_body.info_requests.size) %>
+ <% for result in @xapian_requests.results %>
+ <%= render :partial => 'request/request_listing_via_event', :locals => { :event => result[:model], :info_request => result[:model].info_request } %>
+ <% end %>
- <p> <%= _('Only requests made using {{site_name}} are shown.', :site_name => site_name) %></p>
+ <%= will_paginate WillPaginate::Collection.new(@page, @per_page, @public_body.info_requests.size) %>
- <% end %>
-<% else %>
- <% if @public_body.eir_only? %>
- <h2><%= _('Environmental Information Regulations requests made') %></h2>
- <% else %>
- <h2> <%= _('Freedom of Information requests made')%></h2>
- <% end %>
- <p> <%= _('The search index is currently offline, so we can\'t show the Freedom of Information requests that have been made to this authority.')%></p>
-<% end %>
+ <% if @xapian_requests.results.empty? %>
+ <p><% _('There were no requests matching your query.') %></p>
+ <% else %>
+ <p> <%= _('Only requests made using {{site_name}} are shown.', :site_name => site_name) %></p>
+ <% end %>
+ <% else %>
+ <% if @public_body.eir_only? %>
+ <h2><%= _('Environmental Information Regulations requests made') %></h2>
+ <% else %>
+ <h2> <%= _('Freedom of Information requests made')%></h2>
+ <% end %>
+ <p> <%= _('The search index is currently offline, so we can\'t show the Freedom of Information requests that have been made to this authority.')%></p>
+ <% end %>
+ </div>
+</div>
diff --git a/app/views/request/_after_actions.rhtml b/app/views/request/_after_actions.rhtml
index 797ecaea5..205b738de 100644
--- a/app/views/request/_after_actions.rhtml
+++ b/app/views/request/_after_actions.rhtml
@@ -13,19 +13,21 @@
<%= link_to _('Update the status of this request'), '#describe_state_form_1' %>
</li>
<% end %>
+ <li>
+ <%= link_to _("Download a zip file of all correspondence"), download_entire_request_url(:url_title => @info_request.url_title) %>
+ </li>
</ul>
</div>
<div id="owner_actions">
<strong><%= _('{{info_request_user_name}} only:',:info_request_user_name=>h(@info_request.user.name)) %></strong>
<ul>
+
<li>
<% if @last_response.nil? %>
- <%= link_to "Send follow up to " + OutgoingMailer.name_for_followup(@info_request, @last_response), show_response_no_followup_url(:id => @info_request.id, :incoming_message_id => nil) + "#followup" %>
+ <%= link_to _("Send a followup"), show_response_no_followup_url(:id => @info_request.id, :incoming_message_id => nil) + "#followup" %>
<% else %>
- <% foi_cache(:controller => "request", :action => "show_response", :id => @info_request.id, :incoming_message_id => @last_response.id, :only_path => true, :template => "_after_actions", :section => "reply_to_link") do %>
- <%= link_to "Reply to " + OutgoingMailer.name_for_followup(@info_request, @last_response), show_response_url(:id => @info_request.id, :incoming_message_id => @last_response.id) + "#followup" %>
- <% end %>
+ <%= link_to _("Write a reply"), show_response_url(:id => @info_request.id, :incoming_message_id => @last_response.id) + "#followup" %>
<% end %>
</li>
<% if !@old_unclassified %>
diff --git a/app/views/request/_correspondence.rhtml b/app/views/request/_correspondence.rhtml
index 4e46347b8..9a198ad7d 100644
--- a/app/views/request/_correspondence.rhtml
+++ b/app/views/request/_correspondence.rhtml
@@ -1,3 +1,4 @@
+<div class="ff-print-fix"></div>
<%
if !info_request_event.nil? && info_request_event.event_type == 'response'
incoming_message = info_request_event.incoming_message
@@ -5,11 +6,10 @@ end
if not incoming_message.nil?
%>
- <div class="correspondence" id="incoming-<%=incoming_message.id.to_s%>">
- <% foi_cache(:controller => "request", :action => "show_response", :id => @info_request.id, :incoming_message_id => incoming_message.id, :only_path => true, :template => "_correspondence", :section => "incoming_message_bubble", :collapse => @collapse_quotes ? nil : 'no' ) do %>
+ <div class="incoming correspondence" id="incoming-<%=incoming_message.id.to_s%>">
<h2>
<% if !incoming_message.safe_mail_from.nil? && incoming_message.safe_mail_from.strip != @info_request.public_body.name.strip %>
- <%=h incoming_message.safe_mail_from %><br>
+ <%= _("From:") %> <%=h incoming_message.safe_mail_from %><br>
<% end %>
<% if incoming_message.safe_mail_from.nil? || (incoming_message.mail_from_domain == @info_request.public_body.request_email_domain) %>
<%=h @info_request.public_body.name %><br>
@@ -18,25 +18,22 @@ if not incoming_message.nil?
</h2>
<%= render :partial => 'bubble', :locals => { :incoming_message => incoming_message, :body => incoming_message.get_body_for_html_display(@collapse_quotes), :attachments => incoming_message.get_attachments_for_display } %>
- <% end %>
<p class="event_actions">
<% if !@user.nil? && @user.admin_page_links? %>
<%= link_to "Admin", admin_url("request/show_raw_email/" + incoming_message.raw_email_id.to_s) %> |
<% end %>
- <%= link_to _("Link to this"), incoming_message_url(incoming_message) %> |
- <%= link_to _("Reply to this message"), show_response_url(:id => incoming_message.info_request.id, :incoming_message_id => incoming_message.id) + "#followup" %>
-
+ <%= link_to _("Link to this"), incoming_message_url(incoming_message), :class => "link_to_this" %>
</p>
</div>
<%
elsif [ 'sent', 'followup_sent' ].include?(info_request_event.event_type)
outgoing_message = info_request_event.outgoing_message
%>
- <div class="correspondence" id="outgoing-<%=outgoing_message.id.to_s%>">
+ <div class="outgoing correspondence" id="outgoing-<%=outgoing_message.id.to_s%>">
<h2>
- <%=h @info_request.user.name %><br>
+ <%= _("From:") %> <%=h @info_request.user.name %><br>
<br><%= simple_date(info_request_event.created_at) %>
</h2>
@@ -54,12 +51,11 @@ elsif [ 'sent', 'followup_sent' ].include?(info_request_event.event_type)
<% end %>
-->
- <%= link_to _("Link to this"), outgoing_message_url(outgoing_message) %> |
- <%= link_to _("Send follow up"), show_response_no_followup_url(:id => outgoing_message.info_request.id, :incoming_message_id => nil) + "#followup" %>
+ <%= link_to _("Link to this"), outgoing_message_url(outgoing_message), :class => "link_to_this" %>
</p>
</div>
<% elsif [ 'resent', 'followup_resent' ].include?(info_request_event.event_type) %>
- <div class="correspondence" id="outgoing-<%=outgoing_message.id.to_s%>">
+ <div class="outgoing correspondence" id="outgoing-<%=outgoing_message.id.to_s%>">
<h2>
<%= simple_date(info_request_event.created_at) %>
</h2>
diff --git a/app/views/request/_followup.rhtml b/app/views/request/_followup.rhtml
index a15f2912d..be57ac9ef 100644
--- a/app/views/request/_followup.rhtml
+++ b/app/views/request/_followup.rhtml
@@ -1,17 +1,44 @@
<div id="followup">
-
+ <% if (incoming_message.nil? || !incoming_message.valid_to_reply_to?)
+ name_for_followup = _("the main FOI contact at {{public_body}}", :public_body => h(OutgoingMailer.name_for_followup(@info_request, nil)))
+ else
+ name_for_followup = h(OutgoingMailer.name_for_followup(@info_request, incoming_message))
+ end %>
<% if @internal_review %>
- <h1><%= _('Request an internal review from') %> <%=h OutgoingMailer.name_for_followup(@info_request, nil) %>
+ <h1><%= _('Request an internal review from {{person_or_body}}', :person_or_body => name_for_followup) %>
</h1>
<% elsif incoming_message.nil? || !incoming_message.valid_to_reply_to? %>
- <h2><%= _('Send a public follow up message to') %> <%=h OutgoingMailer.name_for_followup(@info_request, nil) %>
+ <h2><%= _('Send a public follow up message to {{person_or_body}}', :person_or_body => name_for_followup) %>
</h2>
<% else %>
- <h2><%= _('Send a public reply to') %>
- <%=h OutgoingMailer.name_for_followup(@info_request, incoming_message) %>
+ <h2><%= _('Send a public reply to {{person_or_body}}', :person_or_body => name_for_followup) %>
</h2>
<% end %>
+<% if @info_request.who_can_followup_to(incoming_message).count > 0 %>
+<div id="other_recipients">
+ <%= _("Don't want to address your message to {{person_or_body}}? You can also write to:", :person_or_body => name_for_followup) %>
+ <ul>
+<% @info_request.who_can_followup_to(incoming_message).each do |name, email, id| %>
+ <% if id.nil? && !incoming_message.nil? && incoming_message.valid_to_reply_to? %>
+ <li><%= link_to(_("the main FOI contact address for {{public_body}}", :public_body => name), show_response_no_followup_url(:id => @info_request.id, :incoming_message_id => nil)) %></li>
+ <% else %>
+ <% if !id.nil? %>
+ <% if @info_request.public_body.request_email == email %>
+ <% if !incoming_message.nil? %>
+ <li><%= link_to(_("the main FOI contact address for {{public_body}}", :public_body => name), show_response_no_followup_url(:id => @info_request.id, :incoming_message_id => nil)) %></li>
+ <% end %>
+ <% else %>
+ <li><%= link_to name, show_response_url(:id => @info_request.id, :incoming_message_id => id)%></li>
+ <% end %>
+ <% else %>
+ <li><%= link_to(_("the main FOI contact address for {{public_body}}", :public_body => name), show_response_no_followup_url(:id => @info_request.id, :incoming_message_id => nil)) %></li>
+ <% end %>
+ <% end %>
+<% end %>
+</ul>
+</div>
+<% end %>
<% if @info_request.allow_new_responses_from == 'nobody' %>
<p><%= _('Follow ups and new responses to this request have been stopped to prevent spam. Please <a href="{{url}}">contact us</a> if you are {{user_link}} and need to send a follow up.',:user_link=>user_link(@info_request.user), :url=>help_contact_path) %></p>
<% else %>
diff --git a/app/views/request/_next_actions.rhtml b/app/views/request/_next_actions.rhtml
new file mode 100644
index 000000000..f318df6e4
--- /dev/null
+++ b/app/views/request/_next_actions.rhtml
@@ -0,0 +1 @@
+<!-- Consider listing websites that users might find useful here (in your theme) -->
diff --git a/app/views/request/_request_filter_form.rhtml b/app/views/request/_request_filter_form.rhtml
new file mode 100644
index 000000000..fa760bf74
--- /dev/null
+++ b/app/views/request/_request_filter_form.rhtml
@@ -0,0 +1,52 @@
+<%= render :partial => 'general/localised_datepicker' %>
+
+<div id="list-filter">
+ <% form_tag(request.path, :method => "get", :id=>"filter_requests_form") do %>
+ <div class="list-filter-item">
+ <%= label_tag(:query, _("Keywords"), :class=>"form_label title") %>
+ <%= text_field_tag(:query, params[:query]) %>
+ </div>
+<% if false # don't think we want this, but leaving as an example %>
+ <div class="list-filter-item">
+ <%= _("Search for words in:") %> <br/>
+ <% [["sent", _("messages from users")],
+ ["response", _("messages from authorities")],
+ ["comment", _("comments")]].each_with_index do |item, index|
+ variety, title = item %>
+
+ <%= check_box_tag "request_variety[]", variety, params[:request_variety].nil? ? true : params[:request_variety].include?(variety), :id => "request_variety_#{index}" %>
+ <%= label_tag("request_variety_#{index}", title) %> <br/>
+ <% end %>
+ </div>
+<% end %>
+ <div class="list-filter-item">
+ <%= label_tag(:query, _("Made between"), :class=>"form_label title") %>
+ <%= text_field_tag(:request_date_after, params[:request_date_after], {:class => "use-datepicker", :size => 10}) %>&nbsp;&nbsp;
+ <%= label_tag(:query, _("and"), :class=>"form_label") %>
+ <%= text_field_tag(:request_date_before, params[:request_date_before], {:class => "use-datepicker", :size => 10}) %>
+ </div>
+ <div class="list-filter-item">
+ <h3 class="title"><%= _("Showing") %></h3>
+ <% statuses = [["all", _("all requests")],
+ ["successful", _("successful requests")],
+ ["unsuccessful", _("unsuccessful requests")],
+ ["awaiting", _("unresolved requests")]] %>
+ <% for status, label in statuses %>
+ <% if params[:view] != status %>
+ <% if params[:controller] == "public_body" %>
+ <%= link_to label, url_for(:controller => "public_body", :action => "show", :view => status, :url_name => @public_body.url_name) + "?" + request.query_string + '#results' %>
+ <% else %>
+ <%= link_to label, url_for(:controller => "request", :action => "list", :view => status) + "?" + request.query_string + '#results' %>
+ <% end %>
+ <% else %>
+ <%= label %>
+ <% end %>
+ <%= "|" unless statuses.last[0] == status %>
+ <% end %>
+ </div>
+
+ <div class="list-filter-item">
+ <%= submit_tag(_("Search")) %>
+ </div>
+<% end %>
+</div>
diff --git a/app/views/request/_request_listing_via_event.rhtml b/app/views/request/_request_listing_via_event.rhtml
index afacabea5..e7c378cec 100644
--- a/app/views/request/_request_listing_via_event.rhtml
+++ b/app/views/request/_request_listing_via_event.rhtml
@@ -3,7 +3,8 @@
end %>
<div class="request_listing">
- <span class="head">
+ <div class="request_left">
+ <span class="head">
<% if event.is_incoming_message? %>
<%= link_to highlight_words(info_request.title, @highlight_words), incoming_message_url(event.incoming_message) %>
<% elsif event.is_outgoing_message? and event.event_type == 'followup_sent' %>
@@ -13,18 +14,9 @@ end %>
<% else %>
<%= link_to highlight_words(info_request.title, @highlight_words), request_url(info_request) %>
<% end %>
- </span>
- <span class="desc">
- <%= highlight_and_excerpt(event.search_text_main(true), @highlight_words, 150) %>
- </span>
-
- <span class="bottomline icon_<%= info_request.calculate_status %>">
-
- <strong>
- <%= info_request.display_status %>
- </strong><br>
-
- <% if event.event_type == 'sent' %>
+ </span>
+ <div class="requester">
+ <% if event.event_type == 'sent' %>
<%= _('Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}.',:public_body_name=>public_body_link_absolute(info_request.public_body),:info_request_user=>user_link_absolute(info_request.user),:date=>simple_date(event.created_at )) %>
<% elsif event.event_type == 'followup_sent' %>
<%=event.display_status %>
@@ -37,6 +29,17 @@ end %>
<% else %>
<% raise _("unknown event type indexed ") + event.event_type %>
<% end %>
+ </div>
+ <span class="bottomline icon_<%= info_request.calculate_status %>">
+ <strong>
+ <%= info_request.display_status %>
+ </strong><br>
</span>
+ </div>
+ <div class="request_right">
+ <span class="desc">
+ <%= highlight_and_excerpt(event.search_text_main(true), @highlight_words, 150) %>
+ </span>
+ </div>
</div>
diff --git a/app/views/request/_search_ahead.rhtml b/app/views/request/_search_ahead.rhtml
new file mode 100644
index 000000000..9c49680c3
--- /dev/null
+++ b/app/views/request/_search_ahead.rhtml
@@ -0,0 +1,12 @@
+<div id="request_search_ahead_results">
+ <% if @xapian_requests.results.size > 0 %>
+ <h3><%= _("Possibly related requests:") %></h3>
+ <% end %>
+ <% for result in @xapian_requests.results %>
+ <%= render :partial => 'request/request_listing_short_via_event', :locals => { :event => result[:model], :info_request => result[:model].info_request } %>
+ <% end %>
+
+ <p>
+ <a id="body-site-search-link" target="_blank"><%= _("Or search in their website for this information.") %></a>
+ </p>
+</div>
diff --git a/app/views/request/_sidebar.rhtml b/app/views/request/_sidebar.rhtml
index 2b9652d9c..758387b09 100644
--- a/app/views/request/_sidebar.rhtml
+++ b/app/views/request/_sidebar.rhtml
@@ -1,38 +1,32 @@
-<div id="request_sidebar">
- <h2><%= _('Track this request') %></h2>
+<div id="right_column">
+ <h2><%= _('Follow this request') %></h2>
+
+ <% follower_count = TrackThing.count(:all, :conditions => ["info_request_id = ?", @info_request.id]) + 1 %>
+ <p><%= n_("There is %d person following this request", "There are %d people following this request", follower_count) % follower_count %></p>
<%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => @info_request.user == @user, :location => 'sidebar' } %>
<h2><%= _("Act on what you've learnt") %></h2>
+
<div class="act_link">
- <%= link_to '<img src="/images/helpmeinvestigate.png" alt="" class="rss">', "http://helpmeinvestigate.com/"%>
- <%= link_to 'Get help investigating', "http://helpmeinvestigate.com/"%>
- </div>
- <div class="act_link">
- <%= link_to '<img src="/images/writetothem.png" alt="" class="rss">', "http://www.writetothem.com"%>
- <%= link_to 'Write to your politician', "http://www.writetothem.com"%>
- </div>
- <div class="act_link">
- <%= link_to '<img src="/images/pledgebank.png" alt="" class="rss">', "http://www.pledgebank.com"%>
- <%= link_to 'Pledge with others', "http://www.pledgebank.com"%>
+ <% tweet_link = "http://twitter.com/share?url=#{h(request.url)}&via=#{h(MySociety::Config.get('TWITTER_USERNAME', ''))}&text='#{h(@info_request.title)}'&related=#{_('alaveteli_foi:The software that runs {{site_name}}', :site_name => h(site_name))}" %>
+ <%= link_to '<img src="/images/twitter-16.png" alt="twitter icon">', tweet_link %>
+ <%= link_to _("Tweet this request"), tweet_link %>
</div>
- <!-- <div class="act_link">
- <%= link_to '<img src="/images/petitions.png" alt="" class="rss">', "http://petitions.number10.gov.uk"%>
- <%= link_to 'Petition the PM', "http://petitions.number10.gov.uk"%>
- </div> -->
<div class="act_link">
<%= link_to '<img src="/images/wordpress.png" alt="" class="rss">', "http://wordpress.com/"%>
- <%= link_to 'Start your own blog', "http://wordpress.com/"%>
+ <%= link_to _("Start your own blog"), "http://wordpress.com/"%>
</div>
+ <%= render :partial => 'request/next_actions' %>
- <% view_cache :ttl => 1.day, :tag => ['similar', @info_request.id, I18n.locale] do %>
+ <% view_cache :ttl => 1.day.to_i, :tag => ['similar', @info_request.id, I18n.locale] do %>
<% if !@xapian_similar.nil? && @xapian_similar.results.size > 0 %>
- <h2><% _('Similar requests')%></h2>
+ <h2><%= _('Similar requests')%></h2>
<% for result in @xapian_similar.results %>
<%= render :partial => 'request/request_listing_short_via_event', :locals => { :event => result[:model], :info_request => result[:model].info_request } %>
<% end %>
<% if @xapian_similar_more %>
- <p><%= link_to "More similar requests", request_similar_url(@info_request) %></p>
+ <p><%= link_to _("More similar requests"), request_similar_url(@info_request) %></p>
<% end %>
<!-- Important terms: <%= @xapian_similar.important_terms.join(" ") %> -->
<% end %>
diff --git a/app/views/request/list.rhtml b/app/views/request/list.rhtml
index 04dc0d010..3890fa28b 100644
--- a/app/views/request/list.rhtml
+++ b/app/views/request/list.rhtml
@@ -1,40 +1,35 @@
-<div id="list_sidebar">
-<h1><%= _('Show only...')%></h1>
-<ul>
-<% for view, description, target in [
- ['successful', _('Successful responses'), request_list_successful_url(:view => 'successful')],
- ['recent', _('Recently sent requests'), request_list_recent_url(:view => 'recent')]
-] %>
-<li>
- <%= link_to_unless (@view == view), description, target %>
-</li>
-<% end %>
-</ul>
+
+<div id="header_left">
+ <h1><%=@title%></h1>
+ <%= render :partial => 'request/request_filter_form' %>
</div>
-<h1><%=@title%></h1>
+<div id="header_right">
+ <h2><%= _("Follow these requests") %></h2>
+ <% if @track_thing %>
+ <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'main' } %>
+ <% end %>
+</div>
-<% if @track_thing %>
- <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'main' } %>
-<% end %>
+<div style="clear:both"></div>
-<% view_cache :ttl => 5.minutes, :tag => [@view, @page, I18n.locale] do %>
- <% if @list_results.empty? %>
- <p> <%= _('No requests of this sort yet.')%></p>
- <% else %>
- <% for result in @list_results%>
- <% if result.class.to_s == 'InfoRequestEvent' %>
- <%= render :partial => 'request/request_listing_via_event', :locals => { :event => result, :info_request => result.info_request } %>
- <% else %>
- <p><strong><%= _('Unexpected search result type') %> <%=result.class.to_s%></strong></p>
+<div class="results_section">
+ <% view_cache :ttl => 5.minutes.to_i, :tag => [@view, @page, I18n.locale] do %>
+ <% if @list_results.empty? %>
+ <p> <%= _('No requests of this sort yet.')%></p>
+ <% else %>
+ <h2 class="foi_results"><%= _('{{count}} FOI requests found', :count => @list_results.size) %></h2>
+ <div class="results_block">
+ <% for result in @list_results%>
+ <% if result.class.to_s == 'InfoRequestEvent' %>
+ <%= render :partial => 'request/request_listing_via_event', :locals => { :event => result, :info_request => result.info_request } %>
+ <% else %>
+ <p><strong><%= _('Unexpected search result type') %> <%=result.class.to_s%></strong></p>
+ <% end %>
<% end %>
- <% end %>
- <% end %>
+ </div>
+ <% end %>
- <%= will_paginate WillPaginate::Collection.new(@page, @per_page, @matches_estimated) %>
-<% end %>
-
-<% if @track_thing %>
- <p></p>
- <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'main' } %>
-<% end %>
+ <%= will_paginate WillPaginate::Collection.new(@page, @per_page, @matches_estimated) %>
+ <% end %>
+</div>
diff --git a/app/views/request/new.rhtml b/app/views/request/new.rhtml
index b8625a8e6..2e554a20b 100644
--- a/app/views/request/new.rhtml
+++ b/app/views/request/new.rhtml
@@ -1,116 +1,120 @@
+<script type="text/javascript" src="/javascripts/ba-throttle-debounce.js"></script>
+<script type="text/javascript">
+ $(document).ready(function(){
+ // Avoid triggering too often (on each keystroke) by using the debounce jQuery plugin:
+ // http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ $("#typeahead_search").keypress($.debounce( 300, function() {
+ $("#typeahead_response").load("<%=search_ahead_url%>?q="+encodeURI(this.value), function() {
+ // When following links in typeahead results, open new tab/window
+ $("#typeahead_response a").attr("target","_blank");
+
+ // Update the public body site search link
+ $("#body-site-search-link").attr("href", "http://www.google.com/#q="+encodeURI($("#typeahead_search").val())+
+ "+site:<%= @info_request.public_body.calculated_home_page %>");
+ });
+ }));
+
+ });
+</script>
+
<% @title = _("Make an {{law_used_short}} request to '{{public_body_name}}'",:law_used_short=>h(@info_request.law_used_short),:public_body_name=>h(@info_request.public_body.name)) %>
-<% if @existing_request %>
- <div class="errorExplanation" id="errorExplanation"><ul>
- <li>
- <%= _('{{existing_request_user}} already
- created the same request on {{date}}. You can either view the <a href="{{existing_request}}">existing request</a>,
- or edit the details below to make a new but similar request.',:existing_request_user=>user_or_you_capital_link(@existing_request.user), :date=>simple_date(@existing_request.created_at), :existing_request=>request_url(@existing_request)) %>
- </li>
- </ul></div>
-<% end %>
+ <h1><%= _('2. Ask for Information') %></h1>
+
+ <% if @existing_request %>
+ <div class="errorExplanation" id="errorExplanation"><ul>
+ <li>
+ <%= _('{{existing_request_user}} already
+ created the same request on {{date}}. You can either view the <a href="{{existing_request}}">existing request</a>,
+ or edit the details below to make a new but similar request.',:existing_request_user=>user_or_you_capital_link(@existing_request.user), :date=>simple_date(@existing_request.created_at), :existing_request=>request_url(@existing_request)) %>
+ </li>
+ </ul></div>
+ <% end %>
-<%= foi_error_messages_for :info_request, :outgoing_message %>
+ <%= foi_error_messages_for :info_request, :outgoing_message %>
-<div id="request_advice">
- <h1><%= _('Read this before writing your {{info_request_law_used_full}} request', :info_request_law_used_full=>h(@info_request.law_used_full)) %></h1>
- <ul>
- <li>
- <% form_tag("http://www.google.co.uk/search", {:id => "search_body_website_form", :method => "get"} ) do %>
- <p>
- <%= _('First,') %>
- <% if !@info_request.public_body.publication_scheme.empty? %>
- <%= _('<strong>browse</strong> the authority\'s <a href="%s">publication scheme</a> or <strong>search</strong> their web site ...') % [@info_request.public_body.publication_scheme] %>
+ <% form_for(:info_request, @info_request, :html => { :id => 'write_form' } ) do |f| %>
+
+ <div id="request_header">
+ <div id="request_header_body">
+ <label class="form_label" for="info_request_public_body_id"><%= _('To:') %></label>
+ <span id="to_public_body"><%=h(@info_request.public_body.name)%></span>
+ <div class="form_item_note">
+ <% if @info_request.public_body.info_requests.size > 0 %>
+ <%= _("Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for examples of how to word your request.", :public_body_name=>h(@info_request.public_body.name), :url=>public_body_url(@info_request.public_body)) %>
<% else %>
- <%= _('<strong>search</strong> the authority\'s web site ...') %>
+ <%= _("Browse <a href='{{url}}'>other requests</a> for examples of how to word your request.", :url=>request_list_url) %>
<% end %>
- <% if !@info_request.public_body.calculated_home_page.nil? %>
- <br>
- &nbsp; &nbsp; &nbsp; &nbsp; <%= text_field_tag 'q', params[:q], { :size => 20 } %>
- <%= hidden_field_tag 'as_sitesearch', @info_request.public_body.calculated_home_page %>
- <%= submit_tag _("Search") %>
- <% end %>
- <br>
- ... <%= _('to check that the info isn\'t already published.') %>
- </p>
- <% end %>
- </li>
+ </div>
- <li>
- <% if @info_request.public_body.info_requests.size > 0 %>
- <%= _("Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for examples of how to word your request.", :public_body_name=>h(@info_request.public_body.name), :url=>public_body_url(@info_request.public_body)) %>
- <% else %>
- <%= _('Browse <a href="%s">other requests</a> for examples of how to word your request.') % [request_list_url] %>
+ <div id="request_header_text">
+ <% if @info_request.public_body.has_notes? %>
+ <h3><%= _('Special note for this authority!') %></h3>
+ <p><%= @info_request.public_body.notes_as_html %></p>
+ <% end %>
+ </div>
+
+ <% if @info_request.public_body.eir_only? %>
+ <h3><%= _('Please ask for environmental information only') %></h3>
+
+ <p><%= _('The Freedom of Information Act <strong>does not apply</strong> to') %> <%=h(@info_request.public_body.name)%>.
+ <%= _('However, you have the right to request environmental
+ information under a different law') %> (<a href="/help/requesting#eir">explanation</a>).
+ <%= _('This covers a very wide spectrum of information about the state of
+ the <strong>natural and built environment</strong>, such as:') %>
+
+ <ul>
+ <li><%= _('Air, water, soil, land, flora and fauna (including how these effect
+ human beings)') %></li>
+ <li><%= _('Information on emissions and discharges (e.g. noise, energy,
+ radiation, waste materials)') %></li>
+ <li><%= _('Human health and safety') %></li>
+ <li><%= _('Cultural sites and built structures (as they may be affected by the
+ environmental factors listed above)') %></li>
+ <li><%= _('Plans and administrative measures that affect these matters') %></li>
+ </ul>
+
+ <p><%= _('Please only request information that comes under those categories, <strong>do not waste your
+ time</strong> or the time of the public authority by requesting unrelated information.') %></p>
<% end %>
- </li>
- <li><%= _('Write your request in <strong>simple, precise language</strong>.') %></li>
- <li><%= _('Ask for <strong>specific</strong> documents or information, this site is not suitable for general enquiries.') %></li>
- <li><%= _('Keep it <strong>focused</strong>, you\'ll be more likely to get what you want (<a href="%s">why?</a>).') % [help_requesting_path + '#focused'] %></li>
- <li><%= _('This site is <strong>public</strong>. Everything you type and any response will be published.') %></li>
- </ul>
-
- <% if @info_request.public_body.has_notes? %>
- <h1><%= _('Special note for this authority!') %></h1>
- <ul>
- <li><p><%= @info_request.public_body.notes_as_html %></p></li>
- </ul>
- <% end %>
+ </div>
- <% if @info_request.public_body.eir_only? %>
- <h1><%= _('Please ask for environmental information only') %></h1>
+ <div id="request_header_subject">
+ <p>
+ <label class="form_label" for="typeahead_search"><%= _('Summary:') %></label>
+ <%= f.text_field :title, :size => 50, :id =>"typeahead_search" %>
+ </p>
+ <div class="form_item_note">
+ (<%= _("a one line summary of the information you are requesting, \n\t\t\te.g.") %>
+ <% if @info_request.law_used == 'eir' %>
+ <%= _("'Pollution levels over time for the River Tyne'") %>
+ <% else %>
+ <%= _("'Crime statistics by ward level for Wales'") %>
+ <% end %>
+ )
+ </div>
+ </div>
- <p><%= _('The Freedom of Information Act <strong>does not apply</strong> to') %> <%=h(@info_request.public_body.name)%>.
- <%= _('However, you have the right to request environmental
- information under a different law') %> (<a href="/help/requesting#eir">explanation</a>).
- <%= _('This covers a very wide spectrum of information about the state of
- the <strong>natural and built environment</strong>, such as:') %>
-
+ <div id="typeahead_response">
+ </div>
+ </div>
+
+ <div id="request_advice">
<ul>
- <li><%= _('Air, water, soil, land, flora and fauna (including how these effect
- human beings)') %></li>
- <li><%= _('Information on emissions and discharges (e.g. noise, energy,
- radiation, waste materials)') %></li>
- <li><%= _('Human health and safety') %></li>
- <li><%= _('Cultural sites and built structures (as they may be affected by the
- environmental factors listed above)') %></li>
- <li><%= _('Plans and administrative measures that affect these matters') %></li>
+ <li><%= _('Write your request in <strong>simple, precise language</strong>.') %></li>
+ <li><%= _('Ask for <strong>specific</strong> documents or information, this site is not suitable for general enquiries.') %></li>
+ <li><%= _('Keep it <strong>focused</strong>, you\'ll be more likely to get what you want (<a href="%s">why?</a>).') % [help_requesting_path + '#focused'] %></li>
</ul>
+ </div>
- <p><%= _('Please only request information that comes under those categories, <strong>do not waste your
- time</strong> or the time of the public authority by requesting unrelated information.') %></p>
- <% end %>
-</div>
-
-<% form_for(:info_request, @info_request, :html => { :id => 'write_form' } ) do |f| %>
-
- <div id="request_form">
- <h1>
- <label class="form_label" for="info_request_public_body_id"><%= _('To:') %></label>
- <span id="to_public_body"><%=h(@info_request.public_body.name)%></span>
- </h1>
-
- <p>
- <label class="form_label" for="info_request_title"><%= _('Summary:') %></label>
- <%= f.text_field :title, :size => 50 %>
- </p>
- <div class="form_item_note">
- (<%= _('a one line summary of the information you are requesting,
- e.g.') %>
- <% if @info_request.law_used == 'eir' %>
- <%= _("'Pollution levels over time for the River Tyne'") %>
- <% else %>
- <%= _("'Crime statistics by ward level for Wales'") %>
- <% end %>
- )
- </div>
-
- <% fields_for :outgoing_message do |o| %>
- <p>
- <label class="form_label" for="outgoing_message_body"><%= _('Your request:') %></label>
- <%= o.text_area :body, :rows => 20, :cols => 60 %>
- </p>
- <% end %>
-
+ <div id="request_form">
+ <% fields_for :outgoing_message do |o| %>
+ <p>
+ <label class="form_label" for="outgoing_message_body"><%= _('Your request:') %></label>
+ <%= o.text_area :body, :rows => 20, :cols => 60 %>
+ </p>
+ <% end %>
+
<% if !@user %>
<p class="form_note">
<%= _('Everything that you enter on this page, including <strong>your name</strong>,
@@ -126,18 +130,18 @@
this website forever (<a href="%s">why?</a>).') % [help_privacy_path+"#public_request"] %>
</p>
<% end %>
-
- <p class="form_note">
- <%= _('<strong> Can I request information about myself?</strong>
- <a href="%s">No! (Click here for details)</a>') % [help_requesting_path+"#data_protection"] %>
- </p>
-
- <div class="form_button">
- <%= f.hidden_field(:public_body_id, { :value => @info_request.public_body_id } ) %>
- <%= hidden_field_tag(:submitted_new_request, 1 ) %>
- <%= hidden_field_tag(:preview, 1 ) %>
- <%= submit_tag _("Preview your public request") %>
- </div>
+
+ <p class="form_note">
+ <%= _("<strong> Can I request information about myself?</strong>\n" +
+ "\t\t\t<a href=\"%s\">No! (Click here for details)</a>") % [help_requesting_path+"#data_protection"] %>
+ </p>
+
+ <div class="form_button">
+ <%= f.hidden_field(:public_body_id, { :value => @info_request.public_body_id } ) %>
+ <%= hidden_field_tag(:submitted_new_request, 1 ) %>
+ <%= hidden_field_tag(:preview, 1 ) %>
+ <%= submit_tag _("Preview your public request") %>
+ </div>
<% if !@info_request.tag_string.empty? %>
<p class="form_note">
@@ -148,8 +152,8 @@
<strong>Tags:</strong> <%=h @info_request.tag_string %>
</p>
<% end %>
-
- </div>
+
+ </div>
<% end %>
diff --git a/app/views/request/preview.rhtml b/app/views/request/preview.rhtml
index 6f6ecb2f9..45b6a3dc1 100644
--- a/app/views/request/preview.rhtml
+++ b/app/views/request/preview.rhtml
@@ -2,7 +2,7 @@
<% form_for(:info_request, @info_request, :html => { :id => 'preview_form' } ) do |f| %>
- <h1><%= _('Now preview your request') %></h1>
+ <h1><%= _('3. Now check your request') %></h1>
<ul>
<li><%= _('Check you haven\'t included any <strong>personal information</strong>.') %></li>
<li><%= _('Your name, request and any responses will appear in <strong>search engines</strong>
@@ -37,14 +37,12 @@
<%= f.hidden_field(:tag_string) %>
<%= hidden_field_tag(:submitted_new_request, 1) %>
<%= hidden_field_tag(:preview, 0 ) %>
- <%= submit_tag _("Re-edit this request"), :name => 'reedit' %>
- <%= submit_tag _("Send public ") + h(@info_request.law_used_full) + " request", :name => 'submit' %>
+ <%= submit_tag _("Edit this request"), :name => 'reedit', :id => 'reedit_button' %>
+ <%= submit_tag _("Send request"), :name => 'submit', :id => 'submit_button' %>
</p>
<% if !@info_request.tag_string.empty? %>
<p><strong><%= _('Tags:') %></strong> <%=h @info_request.tag_string %></p>
<% end %>
-<% end %>
-
-
+<% end %> \ No newline at end of file
diff --git a/app/views/request/select_authority.rhtml b/app/views/request/select_authority.rhtml
new file mode 100644
index 000000000..55ebc40c4
--- /dev/null
+++ b/app/views/request/select_authority.rhtml
@@ -0,0 +1,68 @@
+<script type="text/javascript" src="/javascripts/ba-throttle-debounce.js"></script>
+<script type="text/javascript">
+ $(document).ready(function(){
+ $("#authority_preview").hide();
+
+ // Avoid triggering too often (on each keystroke) by using the debounce jQuery plugin:
+ // http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ $("#query").keypress($.debounce( 300, function() {
+ // Do a type ahead search and display results
+ $("#typeahead_response").load("<%=search_ahead_bodies_url%>?q="+encodeURI(this.value), function() {
+ $("#authority_preview").hide(); // Hide the preview, since results have changed
+
+ });
+ }));
+ // We're using the existing body list: we intercept the clicks on the titles to
+ // display a preview on the right hand side of the screen
+ $("#typeahead_response a").live('click', function() {
+ $("#authority_preview").load(this.href+" #public_body_show", function() {
+ $("#authority_preview").show();
+ $("#authority_preview #header_right").hide();
+ });
+ return false;
+ });
+ });
+</script>
+
+<% @title = _("Select the authority to write to") %>
+
+ <h1 style="clear: left"><%= _('1. Select an authority') %></h1>
+
+ <div id="authority_selection">
+ <% form_tag({:controller => "request", :action => "select_authority"}, {:id => "search_form", :method => "get"}) do %>
+ <p>
+ <p>
+ <%= _('First, type in the <strong>name of the UK public authority</strong> you\'d
+ <br>like information from. <strong>By law, they have to respond</strong>
+ (<a href="%s">why?</a>).') % help_about_url %>
+ </p>
+ <%= text_field_tag 'query', params[:query], { :size => 30 } %>
+ <%= hidden_field_tag 'bodies', 1 %>
+ <%= submit_tag _('Search') %>
+ </p>
+ <% end %>
+ <div id="typeahead_response">
+ <% if !@xapian_requests.nil? %>
+ <% if @xapian_requests.results.size > 0 %>
+ <h3><%= _('Top search results:') %></h3>
+ <p>
+ <%= _('Select one to see more information about the authority.')%>
+ </p>
+ <% else %>
+ <h3><%= _('No results found.') %></h3>
+ <% end %>
+ <div id="authority_search_ahead_results">
+ <% for result in @xapian_requests.results %>
+ <%= render :partial => 'public_body/body_listing_single', :locals => { :public_body => result[:model] } %>
+ <% end %>
+ </div>
+ <% end %>
+
+
+
+ </div>
+ </div>
+
+ <div id="authority_preview">
+ </div>
+
diff --git a/app/views/request/show.rhtml b/app/views/request/show.rhtml
index 2897a3564..c5d040fb7 100644
--- a/app/views/request/show.rhtml
+++ b/app/views/request/show.rhtml
@@ -22,7 +22,7 @@
<%= render :partial => 'sidebar' %>
-<div id="request_main">
+<div id="left_column">
<h1><%=h(@info_request.title)%></h1>
<% if @info_request.user.profile_photo %>
diff --git a/app/views/request/simple_correspondence.rhtml b/app/views/request/simple_correspondence.rhtml
new file mode 100644
index 000000000..45b90b84b
--- /dev/null
+++ b/app/views/request/simple_correspondence.rhtml
@@ -0,0 +1,45 @@
+<%= _('This is a plain-text version of the Freedom of Information request "{{request_title}}". The latest, full version is available online at {{full_url}}', :request_title => @info_request.title, :full_url => "http://#{MySociety::Config.get('DOMAIN')}#{show_request_path(:url_title=>@info_request.url_title)}") %>.
+
+<% for info_request_event in @info_request_events %>
+<%
+ incoming_message = nil
+ if info_request_event.visible
+ if !info_request_event.nil? && info_request_event.event_type == 'response'
+ incoming_message = info_request_event.incoming_message
+ end
+
+
+ if not incoming_message.nil?
+ if !incoming_message.safe_mail_from.nil? && incoming_message.safe_mail_from.strip != @info_request.public_body.name.strip %>
+<%= _('From:') %> <%= incoming_message.safe_mail_from %><% end
+ if incoming_message.safe_mail_from.nil? || (incoming_message.mail_from_domain == @info_request.public_body.request_email_domain) %>, <%= @info_request.public_body.name %><% end %>
+<%= _('To:') %> <%= @info_request.user.name %>
+<%= _('Date:') %> <%= simple_date(incoming_message.sent_at) %>
+
+<%= incoming_message.get_body_for_quoting %>
+<% incoming_message.get_attachments_for_display.each do |a| %>
+ <%= _('Attachment:') %> <%= a.display_filename %> (<%= a.display_size %>)
+ <% end %>
+<%
+elsif [ 'sent', 'followup_sent' ].include?(info_request_event.event_type)
+ outgoing_message = info_request_event.outgoing_message
+ %>
+<%= _('From:') %> <%= @info_request.user.name %>
+<%= _('To:') %> <%= @info_request.public_body.name %>
+<%= _('Date:') %> <%= simple_date(info_request_event.created_at) %>
+<%
+ text = outgoing_message.body.strip
+ outgoing_message.remove_privacy_sensitive_things!(text) %>
+
+<%= text %>
+<% elsif [ 'resent', 'followup_resent' ].include?(info_request_event.event_type) %>
+<%= _('Date:') %> <%= simple_date(info_request_event.created_at) %>
+Sent <% if info_request_event.outgoing_message.message_type == 'initial_request' %> request <% elsif info_request_event.outgoing_message.message_type == 'followup' %> a follow up <% else %> <% raise "unknown message_type" %><% end %> to <%= public_body_link(@info_request.public_body) %> again<% if not info_request_event.same_email_as_previous_send? %>, using a new contact address<% end %>.
+
+<% elsif info_request_event.event_type == 'comment'
+ comment = info_request_event.comment
+%>
+<%= _("{{username}} left an annotation:", :username =>comment.user.name) %> (<%= simple_date(comment.created_at || Time.now) %>)
+<%= comment.body.strip %>
+<% end %>
+-------------------------------<% end %><% end %>
diff --git a/app/views/track/_tracking_links.rhtml b/app/views/track/_tracking_links.rhtml
index a08f97c08..f50a8bbbf 100644
--- a/app/views/track/_tracking_links.rhtml
+++ b/app/views/track/_tracking_links.rhtml
@@ -4,11 +4,10 @@
end
%>
-
<% if own_request %>
<p><%= _('This is your own request, so you will be automatically emailed when new responses arrive.')%></p>
<% elsif existing_track %>
- <% form_tag({:controller => 'track', :action => 'update', :track_id => existing_track.id}, :class => "feed_form_" + location) do %>
+ <% form_tag({:controller => 'track', :action => 'update', :track_id => existing_track.id}, :class => "feed_form feed_form_" + location) do %>
<p>
<%= track_thing.params[:verb_on_page_already] %>
<%= hidden_field_tag 'track_medium', "delete" %>
@@ -16,15 +15,17 @@
<%= submit_tag "unsubscribe" %>
</p>
<% end %>
-<% else %>
+<% elsif track_thing %>
<div class="feed_link feed_link_<%=location%>">
<%= link_to '<img src="/images/email-16.png" alt="">', do_track_url(track_thing) %>
- <%= link_to track_thing.params[:verb_on_page], do_track_url(track_thing) %>
+ <%= link_to _("Follow by email"), do_track_url(track_thing) %>
+ </div>
+
+ <div class="feed_link feed_link_<%=location%>">
+ <%= link_to '<img src="/images/feed-16.png" alt="">', do_track_url(track_thing, 'feed') %>
+ <%= link_to (location == 'sidebar' ? _('RSS feed of updates') : _('RSS feed')), do_track_url(track_thing, 'feed') %>
</div>
<% end %>
-<div class="feed_link feed_link_<%=location%>">
- <%= link_to '<img src="/images/feed-16.png" alt="">', do_track_url(track_thing, 'feed') %>
- <%= link_to (location == 'sidebar' ? 'RSS feed of updates' : 'RSS feed'), do_track_url(track_thing, 'feed') %>
-</div>
+
diff --git a/app/views/track_mailer/event_digest.rhtml b/app/views/track_mailer/event_digest.rhtml
index 46f230da1..089b778f8 100644
--- a/app/views/track_mailer/event_digest.rhtml
+++ b/app/views/track_mailer/event_digest.rhtml
@@ -18,17 +18,17 @@
# e.g. Julian Burgess sent a request to Royal Mail Group (15 May 2008)
if event.event_type == 'response'
url = main_url(incoming_message_url(event.incoming_message))
- main_text += event.info_request.public_body.name + " sent a response to " + event.info_request.user.name
+ main_text += _("{{public_body}} sent a response to {{user_name}}", :public_body => event.info_request.public_body.name, :user_name => event.info_request.user.name)
elsif event.event_type == 'followup_sent'
url = main_url(outgoing_message_url(event.outgoing_message))
- main_text += event.info_request.user.name + " sent a follow up message to " + event.info_request.public_body.name
+ main_text += _("{{user_name}} sent a follow up message to {{public_body}}", :user_name => event.info_request.user.name, :public_body => event.info_request.public_body.name)
elsif event.event_type == 'sent'
# this is unlikely to happen in real life, but happens in the test code
url = main_url(outgoing_message_url(event.outgoing_message))
- main_text += event.info_request.user.name + " sent a request to " + event.info_request.public_body.name
+ main_text += _("{{user_name}} sent a request to {{public_body}}", :user_name => event.info_request.user.name, :public_body => event.info_request.public_body.name)
elsif event.event_type == 'comment'
url = main_url(comment_url(event.comment))
- main_text += event.comment.user.name + " added an annotation"
+ main_text += _("{{user_name}} added an annotation", :user_name => event.comment.user.name)
else
raise "unknown type in event_digest " + event.event_type
end
@@ -57,10 +57,10 @@
main_text += "\n"
end
-%><%=main_text%>Alter your subscription
+%><%=main_text%><%= _("Alter your subscription")%>
=======================
-Please click on the link below to cancel or alter these emails.
+<% _("Please click on the link below to cancel or alter these emails.") %>
<%=@unsubscribe_url%>
-- <%= _('the {{site_name}} team', :site_name=>site_name) %>
diff --git a/app/views/user/_signin.rhtml b/app/views/user/_signin.rhtml
index 79628b3a9..4fe98ee41 100644
--- a/app/views/user/_signin.rhtml
+++ b/app/views/user/_signin.rhtml
@@ -3,9 +3,9 @@
<% form_tag({:action => "signin"}, {:id => "signin_form"}) do %>
<%= foi_error_messages_for :user_signin %>
- <% if not sign_in_as_existing_user %>
+ <!--<% if not sign_in_as_existing_user %>
<h2><%= _('If you\'ve used {{site_name}} before', :site_name=>site_name)%></h2>
- <% end %>
+ <% end %>-->
<p>
<label class="form_label" for="user_signin_email"><%= _('Your e-mail:')%></label>
@@ -27,7 +27,8 @@
do not use on a public computer) ')%></p>
<div class="form_button">
- <%= hidden_field_tag 'token', params[:token], { :id => 'signin_token' } %>
+ <%= hidden_field_tag 'token', params[:token], {:id => 'signin_token' } %>
+ <%= hidden_field_tag :modal, params[:modal], {:id => 'signin_modal' } %>
<%= submit_tag _('Sign in') %>
</div>
<% end %>
diff --git a/app/views/user/_signup.rhtml b/app/views/user/_signup.rhtml
index 6b0a1f8c7..9c0132f26 100644
--- a/app/views/user/_signup.rhtml
+++ b/app/views/user/_signup.rhtml
@@ -3,15 +3,15 @@
<% form_tag({:action => "signup"}, {:id => "signup_form"}) do %>
<%= foi_error_messages_for :user_signup %>
- <h2><%= _('If you\'re new to {{site_name}}', :site_name=>site_name)%></h2>
+ <!--<h2><%= _('If you\'re new to {{site_name}}', :site_name=>site_name)%></h2>-->
<p>
<label class="form_label" for="user_signup_email"><%= _('Your e-mail:')%></label>
<%= text_field 'user_signup', 'email', { :size => 20 } %>
</p>
<div class="form_item_note">
- <%= ('We will not reveal your email address to anybody unless you or
- the law tell us to (<a href="%s">_details</a>). ') %[help_privacy_path] %>
+ <%= _('We will not reveal your email address to anybody unless you or
+ the law tell us to (<a href="%s">details</a>). ') %[help_privacy_path] %>
</div>
<p>
@@ -36,8 +36,13 @@
<%= password_field 'user_signup', 'password_confirmation', { :size => 15 } %>
</p>
+ <% if @request_from_foreign_country %>
+ <%= recaptcha_tags %>
+ <% end %>
+
<div class="form_button">
- <%= hidden_field_tag 'token', params[:token], { :id => 'signup_token' } %>
+ <%= hidden_field_tag 'token', params[:token], {:id => 'signup_token' } %>
+ <%= hidden_field_tag :modal, params[:modal], {:id => 'signup_modal' } %>
<%= submit_tag _('Sign up') %>
</div>
diff --git a/app/views/user/set_draft_profile_photo.rhtml b/app/views/user/set_draft_profile_photo.rhtml
index 70d27074b..90be49600 100644
--- a/app/views/user/set_draft_profile_photo.rhtml
+++ b/app/views/user/set_draft_profile_photo.rhtml
@@ -2,7 +2,7 @@
<% raise "internal error" if not @user %>
-<h2>Choose your profile photo</h2>
+<h2><%= _("Choose your profile photo") %></h2>
<%= foi_error_messages_for :draft_profile_photo %>
@@ -52,7 +52,7 @@
<% end %>
<p>
- <%= link_to h("Cancel, return to your profile page"), user_url(@user) %>
+ <%= link_to _("Cancel, return to your profile page"), user_url(@user) %>
</p>
</div>
diff --git a/app/views/user/show.rhtml b/app/views/user/show.rhtml
index 8fd6c52ad..baf6621df 100644
--- a/app/views/user/show.rhtml
+++ b/app/views/user/show.rhtml
@@ -24,20 +24,20 @@
</div>
<% end %>
-
-<div id="request_sidebar">
- <h2><%= _('Track this person')%></h2>
- <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'sidebar' } %>
-
- <h2><%= _('On this page')%></h2>
- <a href="#foi_requests"><%= _('FOI requests')%></a>
- <br><a href="#annotations"><%= _('Annotations')%></a>
- <% if @is_you %>
- <br><a href="#email_subscriptions"><%= _('Email subscriptions')%></a>
- <% end %>
-</div>
-
-<div class="single_user">
+<div id="user_profile_header">
+ <div id="header_right">
+ <h2><%= _('Track this person')%></h2>
+ <%= render :partial => 'track/tracking_links', :locals => { :track_thing => @track_thing, :own_request => false, :location => 'sidebar' } %>
+
+ <h2><%= _('On this page')%></h2>
+ <a href="#foi_requests"><%= _('FOI requests')%></a>
+ <br><a href="#annotations"><%= _('Annotations')%></a>
+ <% if @is_you %>
+ <br><a href="#email_subscriptions"><%= _('Email subscriptions')%></a>
+ <% end %>
+ </div>
+
+ <div class="header_left">
<p id="user_photo_on_profile">
<% if @display_user.profile_photo %>
<% if @is_you %>
@@ -113,19 +113,39 @@
<%= _('<a href="%s">Sign in</a> to change password, subscriptions and more ({{user_name}} only)',:user_name=>h(@display_user.name)) % [signin_url(:r => request.request_uri)]%>
</p>
<% end %>
+ </div>
+</div>
+<div style="clear:both"></div>
+
+<div id="user_profile_search">
+ <% form_tag(show_user_url, :method => "get", :id=>"search_form") do %>
+ <div>
+ <%= text_field_tag(:user_query, params[:user_query]) %>
+ <% if @is_you %>
+ <%= submit_tag(_("Search your contributions")) %>
+ <% else %>
+ <%= submit_tag(_("Search contributions by this person")) %>
+ <% end %>
+ </div>
+ <% end %>
+
<% if !@xapian_requests.nil? %>
<% if @xapian_requests.results.empty? %>
<% if @page == 1 %>
- <h2 id="foi_requests"><%= @is_you ? 'Freedom of Information requests made by you' : 'Freedom of Information requests made by this person' %> </h2>
+ <h2 class="foi_results" id="foi_requests"><%= @is_you ? 'Freedom of Information requests made by you' : 'Freedom of Information requests made by this person' %> <%= @match_phrase %>
+</h2>
<p><%= @is_you ? _('You have made no Freedom of Information requests using this site.') : _('This person has made no Freedom of Information requests using this site.') %>
+ <%= @page_desc %>
<% end %>
<% else %>
- <h2 id="foi_requests">
- <%= @is_you ? n_('Your %d Freedom of Information request', 'Your %d Freedom of Information requests', @display_user.info_requests.size) % @display_user.info_requests.size : n_('This person\'s %d Freedom of Information request', 'This person\'s %d Freedom of Information requests', @display_user.info_requests.size) % @display_user.info_requests.size %>
+ <h2 class="foi_results" id="foi_requests">
+ <%= @is_you ? n_('Your %d Freedom of Information request', 'Your %d Freedom of Information requests', @xapian_requests.results.size) % @xapian_requests.results.size : n_('This person\'s %d Freedom of Information request', 'This person\'s %d Freedom of Information requests', @xapian_requests.results.size) % @xapian_requests.results.size %>
<!-- matches_estimated <%=@xapian_requests.matches_estimated%> -->
- <%= @page_desc %>
+ <%= @match_phrase %>
+ <%= @page_desc %>
</h2>
+
<% for result in @xapian_requests.results %>
<%= render :partial => 'request/request_listing_via_event', :locals => { :event => result[:model], :info_request => result[:model].info_request } %>
@@ -134,14 +154,16 @@
<%= will_paginate WillPaginate::Collection.new(@page, @per_page, @display_user.info_requests.size) %>
<% end %>
<% else %>
- <h2 id="foi_requests"><%= @is_you ? _('Freedom of Information requests made by you') : _('Freedom of Information requests made by this person') %> </h2>
+ <h2 class="foi_results" id="foi_requests"><%= @is_you ? _('Freedom of Information requests made by you') : _('Freedom of Information requests made by this person') %> </h2>
<p><%= _('The search index is currently offline, so we can\'t show the Freedom of Information requests this person has made.')%></p>
<% end %>
<% if !@xapian_comments.nil? %>
<% if @xapian_comments.results.empty? %>
<% if @page == 1 %>
- <h2><%= @is_you ? _('Your annotations') : _('This person\'s annotations') %></h2>
+ <h2><%= @is_you ? _('Your annotations') : _('This person\'s annotations') %>
+ <%= @match_phrase %>
+ </h2>
<p><%= _('None made.')%></p>
<% end %>
<% else %>
@@ -166,7 +188,7 @@
<% else %>
<h2 id="email_subscriptions"> Your <%=pluralize(@track_things.size, _('email subscription')) %> </h2>
<% if @track_things_grouped.size == 1 %>
- <% form_tag :controller => 'track', :action => 'delete_all_type' do %>
+ <% form_tag({:controller => 'track', :action => 'delete_all_type'}, :class => "feed_form") do %>
<h3>
<%=TrackThing.track_type_description(@track_things[0].track_type)%>
<%= hidden_field_tag 'track_type', @track_things[0].track_type %>
@@ -180,7 +202,7 @@
<% end %>
<% for track_type, track_things in @track_things_grouped %>
<% if @track_things_grouped.size > 1 %>
- <% form_tag :controller => 'track', :action => 'delete_all_type' do %>
+ <% form_tag({:controller => 'track', :action => 'delete_all_type'}, :class => "feed_form") do %>
<h3>
<%=TrackThing.track_type_description(track_type)%>
<%= hidden_field_tag 'track_type', track_type %>
@@ -196,7 +218,7 @@
<ul>
<% for track_thing in track_things %>
<li>
- <% form_tag :controller => 'track', :action => 'update', :track_id => track_thing.id do %>
+ <% form_tag({:controller => 'track', :action => 'update', :track_id => track_thing.id}, :class => "feed_form") do %>
<div>
<%= track_thing.params[:list_description] %>
<%= hidden_field_tag 'track_medium', "delete", { :id => 'track_medium_' + track_thing.id.to_s } %>
@@ -210,6 +232,4 @@
<% end %>
<% end %>
<% end %>
-
-</div>
-
+</div> \ No newline at end of file
diff --git a/app/views/user/sign.rhtml b/app/views/user/sign.rhtml
index b76edbc64..afdb90162 100644
--- a/app/views/user/sign.rhtml
+++ b/app/views/user/sign.rhtml
@@ -1,5 +1,5 @@
<% if @post_redirect.reason_params[:user_name] %>
- <% @title = "Sign in" %>
+ <% @title = _("Sign in") %>
<div id="sign_alone">
@@ -21,17 +21,26 @@
<div id="sign_together">
- <p id="sign_in_reason">
+ <!--<p id="sign_in_reason">
<% if @post_redirect.reason_params[:web].empty? %>
<%= _(' Please sign in or make a new account.') %>
<% else %>
<%= @post_redirect.reason_params[:web] %>, <%= _('please sign in or make a new account.') %>
<% end %>
- </p>
-
- <%= render :partial => 'signin', :locals => { :sign_in_as_existing_user => false } %>
- <%= render :partial => 'signup' %>
-
+ </p>-->
+
+ <div id="left_half">
+ <h1><%= _('Sign in') %></h1>
+ <%= render :partial => 'signin', :locals => { :sign_in_as_existing_user => false } %>
+ </div>
+ <div id="middle_strip">
+ <%= _('- or -') %>
+ </div>
+ <div id="right_half">
+ <h1><%= _('Sign up') %></h1>
+ <%= render :partial => 'signup' %>
+ </div>
+ <div style="clear:both"></div>
</div>
<% end %>
diff --git a/app/views/user/signin_successful.rhtml b/app/views/user/signin_successful.rhtml
new file mode 100644
index 000000000..675701d74
--- /dev/null
+++ b/app/views/user/signin_successful.rhtml
@@ -0,0 +1,11 @@
+<div id="signin-successful">
+ <%= _("You're in. <a href=\"#\" id=\"send-request\">Continue sending your request</a>") %>
+</div>
+
+<script type="text/javascript">
+ parent.modal_signin_successful = true;
+
+ $("#send-request").click(function() {
+ parent.$.fancybox.close(); return false;
+ });
+</script>
diff --git a/app/views/user/wrong_user.rhtml b/app/views/user/wrong_user.rhtml
index 9878d08ae..30256a639 100644
--- a/app/views/user/wrong_user.rhtml
+++ b/app/views/user/wrong_user.rhtml
@@ -1,8 +1,4 @@
-
<p id="sign_in_reason">
-<%= @reason_params[:web] %>, please
-<%= link_to _('sign out'), signout_url(:r => request.request_uri) %>,
-<%= _('and sign in as ')%><%= h(@reason_params[:user_name]) %>.
+<%= _('Sorry, but only {{user_name}} is allowed to do that.', :user_name => h(@reason_params[:user_name])) %>
</p>
-
diff --git a/commonlib b/commonlib
-Subproject a87ebeae21166b3b4a8a66b32399861fcd6d0c4
+Subproject 16e32f0575107068ae1f16c26e31c598e4fef41
diff --git a/config/alert-tracks-debian.ugly b/config/alert-tracks-debian.ugly
index 730a125b4..5bd146061 100644
--- a/config/alert-tracks-debian.ugly
+++ b/config/alert-tracks-debian.ugly
@@ -32,7 +32,7 @@ start_daemon() {
}
stop_daemon() {
- /sbin/start-stop-daemon --stop --pidfile "$PIDFILE"
+ /sbin/start-stop-daemon --stop --oknodo --pidfile "$PIDFILE"
}
restart() { stop; start; }
diff --git a/config/crontab.ugly b/config/crontab.ugly
index ecd3151ff..5f2fbdb3b 100644
--- a/config/crontab.ugly
+++ b/config/crontab.ugly
@@ -28,7 +28,7 @@ MAILTO=cron-!!(*= $site *)!!@mysociety.org
2 4 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/check-recent-requests-sent.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/check-recent-requests-sent || echo "stalled?"
45 3 * * * !!(*= $user *)!! run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/stop-new-responses-on-old-requests.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/stop-new-responses-on-old-requests || echo "stalled?"
# Only root can restart apache
-31 1 * * * root run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/compact-xapian-database.lock /data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/compact-xapian-database production || echo "stalled?"
+31 1 * * * root run-with-lockfile -n /data/vhost/!!(*= $vhost *)!!/compact-xapian-database.lock "/data/vhost/!!(*= $vhost *)!!/!!(*= $vcspath *)!!/script/compact-xapian-database production" || echo "stalled?"
# Once a day on all servers
diff --git a/config/custom-routes.rb b/config/custom-routes.rb
new file mode 100644
index 000000000..16b3c6b0c
--- /dev/null
+++ b/config/custom-routes.rb
@@ -0,0 +1 @@
+# Placeholder to be overriden by themes if necessary \ No newline at end of file
diff --git a/config/environment.rb b/config/environment.rb
index 73cab9201..0af465049 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -61,6 +61,7 @@ Rails::Initializer.run do |config|
config.gem "gettext", :version => '>=1.9.3'
config.gem "fast_gettext", :version => '>=0.4.8'
config.gem "rack", :version => '1.1.0'
+ config.gem "rdoc", :version => '>=2.4.3'
config.gem "recaptcha", :lib => "recaptcha/rails"
config.gem 'rspec', :lib => false, :version => '1.3.1'
config.gem 'rspec-rails', :lib => false, :version => '1.3.3'
@@ -109,7 +110,7 @@ ActionMailer::Base.default_url_options[:host] = MySociety::Config.get("DOMAIN",
# So that javascript assets use full URL, so proxied admin URLs read javascript OK
if (MySociety::Config.get("DOMAIN", "") != "")
ActionController::Base.asset_host = Proc.new { |source, request|
- if request.fullpath.match(/^\/admin\//)
+ if ENV["RAILS_ENV"] != "test" && request.fullpath.match(/^\/admin\//)
MySociety::Config.get("ADMIN_PUBLIC_URL", "")
else
MySociety::Config.get("DOMAIN", 'localhost:3000')
@@ -129,7 +130,7 @@ end
FastGettext.default_available_locales = available_locales
I18n.locale = default_locale
-I18n.available_locales = available_locales
+I18n.available_locales = available_locales.map {|locale_name| locale_name.to_sym}
I18n.default_locale = default_locale
# Load monkey patches and other things from lib/
@@ -144,3 +145,5 @@ require 'sendmail_return_path.rb'
require 'tnef.rb'
require 'i18n_fixes.rb'
require 'rack_quote_monkeypatch.rb'
+require 'world_foi_websites.rb'
+require 'alaveteli_external_command.rb'
diff --git a/config/general.yml-example b/config/general.yml-example
index 3537cd792..8c59b1b0e 100644
--- a/config/general.yml-example
+++ b/config/general.yml-example
@@ -12,6 +12,10 @@ SITE_NAME: 'Alaveteli'
# Domain used in URLs generated by scripts (e.g. for going in some emails)
DOMAIN: '127.0.0.1:3000'
+# ISO country code of country currrently deployed in
+# (http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)
+ISO_COUNTRY_CODE: GB
+
# These feeds are displayed accordingly on the Alaveteli "blog" page:
BLOG_FEED: 'http://www.mysociety.org/category/projects/whatdotheyknow/feed/'
TWITTER_USERNAME: 'whatdotheyknow'
@@ -27,15 +31,15 @@ REPLY_VERY_LATE_AFTER_DAYS: 40
# We give some types of authority like schools a bit longer than everyone else
SPECIAL_REPLY_VERY_LATE_AFTER_DAYS: 60
-# example searches for the home page, semicolon delimited.
-FRONTPAGE_SEARCH_EXAMPLES: 'Geraldine Quango; Department for Humpadinking'
-
# example public bodies for the home page, semicolon delimited - short_names
FRONTPAGE_PUBLICBODY_EXAMPLES: 'tgq'
# URL of theme to install (when running rails-post-deploy script)
THEME_URL: 'git://github.com/mysociety/whatdotheyknow-theme.git'
+# Whether a user needs to sign in to start the New Request process
+FORCE_REGISTRATION_ON_NEW_REQUEST: false
+
## Incoming email
# Your email domain, e.g. 'foifa.com'
@@ -60,6 +64,10 @@ ADMIN_PASSWORD: 'passwordx'
CONTACT_EMAIL: 'postmaster@localhost'
CONTACT_NAME: 'Alaveteli Webmaster'
+# Email "from" details for track messages
+TRACK_SENDER_EMAIL: 'postmaster@localhost'
+TRACK_SENDER_NAME: 'Alaveteli Webmaster'
+
# Where the raw incoming email data gets stored; make sure you back
# this up!
RAW_EMAILS_LOCATION: 'files/raw_emails'
@@ -91,6 +99,9 @@ STAGING_SITE: 1
RECAPTCHA_PUBLIC_KEY: 'x'
RECAPTCHA_PRIVATE_KEY: 'x'
+# Number of days after which to send a 'new response reminder'
+NEW_RESPONSE_REMINDER_AFTER_DAYS: [3, 10, 24]
+
# For debugging memory problems. If true, the app logs
# the memory use increase of the Ruby process due to the
# request (Linux only). Since Ruby never returns memory to the OS, if the
@@ -106,3 +117,16 @@ DEBUG_RECORD_MEMORY: false
# be another reason to try this setting.
USE_GHOSTSCRIPT_COMPRESSION: true
+# mySociety's gazeteer service. Shouldn't change.
+GAZE_URL: http://gaze.mysociety.org
+
+# The email address to which non-bounce responses should be forwarded
+FORWARD_NONBOUNCE_RESPONSES_TO: user-support@localhost
+
+# Path to a program that converts a page at a URL to HTML. It should
+# take two arguments: the URL, and a path to an output file. A static
+# binary of wkhtmltopdf is recommended:
+# http://code.google.com/p/wkhtmltopdf/downloads/list
+# If the command is not present, a text-only version will be rendered
+# instead.
+HTML_TO_PDF_COMMAND: /usr/local/bin/wkhtmltopdf-amd64 \ No newline at end of file
diff --git a/config/httpd.conf b/config/httpd.conf
index d5e86478a..47e7f9c72 100644
--- a/config/httpd.conf
+++ b/config/httpd.conf
@@ -35,4 +35,19 @@ RewriteRule /files/(.+) http://files.whatdotheyknow.com/$1
<IfModule mod_passenger.c>
# Set this to something like 100 if you have memory leak issues
PassengerMaxRequests 0
-</IfModule> \ No newline at end of file
+ PassengerResolveSymlinksInDocumentRoot on
+ # Recommend setting this to 3 or less on servers with 512MB RAM
+ PassengerMaxPoolSize 6
+</IfModule>
+
+# Gzip font resources
+<IfModule mod_deflate.c>
+ <IfModule mod_mime.c>
+ Addtype font/opentype .otf
+ Addtype font/opentype .woff
+ Addtype font/eot .eot
+ Addtype font/truetype .ttf
+ </IfModule>
+ AddOutputFilterByType DEFLATE font/opentype font/truetype font/eot
+ AddOutputFilterByType DEFLATE image/svg+xml
+</IFModule>
diff --git a/config/routes.rb b/config/routes.rb
index c16c10eb9..48bf92e75 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -7,12 +7,15 @@
# $Id: routes.rb,v 1.92 2009-10-14 22:01:27 francis Exp $
ActionController::Routing::Routes.draw do |map|
-
+
# The priority is based upon order of creation: first created -> highest priority.
# Sample of regular route:
# map.connect 'products/:id', :controller => 'catalog', :action => 'view'
# Keep in mind you can assign values other than :controller and :action
+
+ # Allow easy extension from themes. Note these will have the highest priority.
+ require 'config/custom-routes'
map.with_options :controller => 'general' do |general|
general.frontpage '/', :action => 'frontpage'
@@ -23,7 +26,9 @@ ActionController::Routing::Routes.draw do |map|
# Couldn't find a way to do this in routes which also picked up multiple other slashes
# and dots and other characters that can appear in search query. So we sort it all
# out in the controller.
- general.search_general '/search/*combined', :action => 'search'
+ general.search_general '/search/*combined/requests', :action => 'search', :view => 'requests'
+ general.search_general '/search/*combined', :action => 'search'
+ general.advanced_search '/advancedsearch', :action => 'search_redirect', :advanced => true
general.random_request '/random', :action => 'random_request'
@@ -32,12 +37,19 @@ ActionController::Routing::Routes.draw do |map|
map.with_options :controller => 'request' do |request|
request.request_list_recent '/list/recent', :action => 'list', :view => 'recent'
+ request.request_list_all '/list/all', :action => 'list', :view => 'all'
request.request_list_successful '/list/successful', :action => 'list', :view => 'successful'
+ request.request_list_unsuccessful '/list/unsuccessful', :action => 'list', :view => 'unsuccessful'
+ request.request_list_awaiting '/list/awaiting', :action => 'list', :view => 'awaiting'
request.request_list '/list', :action => 'list'
+ request.select_authority '/select_authority', :action => 'select_authority'
+
request.new_request '/new', :action => 'new'
request.new_request_to_body '/new/:url_name', :action => 'new'
+ request.search_ahead '/request/search_ahead', :action => 'search_typeahead'
+
request.show_request '/request/:url_title.:format', :action => 'show'
request.show_new_request '/request/:url_title/new', :action => 'show'
request.details_request '/details/request/:url_title', :action => 'details'
@@ -52,6 +64,7 @@ ActionController::Routing::Routes.draw do |map|
request.info_request_event '/request_event/:info_request_event_id', :action => 'show_request_event'
request.upload_response "/upload/request/:url_title", :action => 'upload_response'
+ request.download_entire_request '/request/:url_title/download', :action => 'download_entire_request'
end
@@ -80,18 +93,30 @@ ActionController::Routing::Routes.draw do |map|
end
map.with_options :controller => 'public_body' do |body|
+ body.search_ahead_bodies '/body/search_ahead', :action => 'search_typeahead'
body.list_public_bodies "/body", :action => 'list'
+ body.list_public_bodies_default "/body/list/all", :action => 'list'
body.list_public_bodies "/body/list/:tag", :action => 'list'
body.list_public_bodies_redirect "/local/:tag", :action => 'list_redirect'
body.all_public_bodies_csv "/body/all-authorities.csv", :action => 'list_all_csv'
- body.show_public_body "/body/:url_name.:format", :action => 'show'
+ body.show_public_body "/body/:url_name.:format", :action => 'show', :view => 'all'
+ body.show_public_body_all "/body/:url_name/all", :action => 'show', :view => 'all'
+ body.show_public_body_successful "/body/:url_name/successful", :action => 'show', :view => "successful"
+ body.show_public_body_unsuccessful "/body/:url_name/unsuccessful", :action => 'show', :view => "unsuccessful"
+ body.show_public_body_awaiting "/body/:url_name/awaiting", :action => 'show', :view => "awaiting"
body.view_public_body_email "/body/:url_name/view_email", :action => 'view_email'
+ body.show_public_body_tag "/body/:url_name/:tag", :action => 'show'
+ body.show_public_body_tag_view "/body/:url_name/:tag/:view", :action => 'show'
end
map.with_options :controller => 'comment' do |comment|
comment.new_comment "/annotate/request/:url_title", :action => 'new', :type => 'request'
end
+ map.with_options :controller => 'services' do |service|
+ service.other_country_message "/country_message", :action => 'other_country_message'
+ end
+
map.with_options :controller => 'track' do |track|
# /track/ is for setting up an email alert for the item
# /feed/ is a direct RSS feed of the item
@@ -111,6 +136,7 @@ ActionController::Routing::Routes.draw do |map|
map.with_options :controller => 'help' do |help|
help.help_unhappy '/help/unhappy/:url_title', :action => 'unhappy'
help.help_about '/help/about', :action => 'about'
+ help.help_alaveteli '/help/alaveteli', :action => 'alaveteli'
help.help_contact '/help/contact', :action => 'contact'
help.help_officers '/help/officers', :action => 'officers'
help.help_requesting '/help/requesting', :action => 'requesting'
@@ -179,7 +205,9 @@ ActionController::Routing::Routes.draw do |map|
user.admin_user_list_banned '/admin/user/banned', :action => 'list_banned'
user.admin_user_show '/admin/user/show/:id', :action => 'show'
user.admin_user_edit '/admin/user/edit/:id', :action => 'edit'
+ user.admin_user_show '/admin/user/show_bounce_message/:id', :action => 'show_bounce_message'
user.admin_user_update '/admin/user/update/:id', :action => 'update'
+ user.admin_user_clear_bounce '/admin/user/clear_bounce/:id', :action => 'clear_bounce'
user.admin_user_destroy_track '/admin/user/destroy_track', :action => 'destroy_track'
user.admin_user_login_as '/admin/user/login_as/:id', :action => 'login_as'
user.admin_clear_profile_photo '/admin/user/clear_profile_photo/:id', :action => 'clear_profile_photo'
diff --git a/db/migrate/102_add_locale_to_users.rb b/db/migrate/102_add_locale_to_users.rb
new file mode 100644
index 000000000..a299a8561
--- /dev/null
+++ b/db/migrate/102_add_locale_to_users.rb
@@ -0,0 +1,11 @@
+class AddLocaleToUsers < ActiveRecord::Migration
+ def self.up
+ add_column :users, :locale, :string
+ end
+ def self.down
+ remove_column :users, :locale
+ end
+end
+
+
+
diff --git a/db/migrate/103_add_user_bounce_columns.rb b/db/migrate/103_add_user_bounce_columns.rb
new file mode 100644
index 000000000..a16ecde75
--- /dev/null
+++ b/db/migrate/103_add_user_bounce_columns.rb
@@ -0,0 +1,15 @@
+require 'digest/sha1'
+
+class AddUserBounceColumns < ActiveRecord::Migration
+ def self.up
+ add_column :users, :email_bounced_at, :datetime
+ add_column :users, :email_bounce_message, :text, :default => "", :null => false
+ end
+ def self.down
+ remove_column :users, :email_bounced_at
+ remove_column :users, :email_bounce_message
+ end
+end
+
+
+
diff --git a/doc/CHANGES.md b/doc/CHANGES.md
new file mode 100644
index 000000000..d4b8ca379
--- /dev/null
+++ b/doc/CHANGES.md
@@ -0,0 +1,35 @@
+# Version 0.4
+
+## Highlighted features
+* Complete overhaul of design, including improved search, modern look and feel, more twitter links, etc
+* A banner alerts visitors from other countries to existing sites in their country, or exhorts them to make their own
+* Bounce emails that result from user alerts are automatically processed and hard bouncing accounts do not continue to receive alerts.
+ See the new instructions in INSTALL-exim4.md for details of how to set this up.
+* Logged in users now have the ability to download a zipfile of the entire correspondence for a request
+* Improved UI for responding to requests. The user now has a single option to "reply" at the bottom of a request, and can adjust who they are replying to on the next page
+* [Full list of changes on github](https://github.com/sebbacon/alaveteli/issues?sort=created&direction=desc&state=closed&milestone=7)
+
+## Upgrade notes
+* Remember to `rake db:migrate` and `git submodule update`
+* Ensure you have values for new config variables (see `config/general.yml-example`):
+ * FORWARD_NONBOUNCE_RESPONSES_TO
+ * TRACK_SENDER_EMAIL
+ * TRACK_SENDER_NAME
+ * HTML_TO_PDF_COMMAND
+* Execute `script/rebuild-xapian-index` to create new xapian index
+ terms used in latest version of search (can take a long time)
+* Install wkhtmltopdf to enable PDFs in downloadable zipfiles. A
+ static binary is recommended on Linux in order to run the command
+ headless: http://code.google.com/p/wkhtmltopdf/downloads/list
+* Ensure your webserver can serve up generated files by symlinking `cache/zips/download` to `public/download` (this is also done by the `rails-post-deploy` script). If you're using Passenger + Apache, you'll need to add a `PassengerResolveSymlinksInDocumentRoot on` directive to the configuration.
+ * Note that the zipfile download functionality will currently hang if you're running Alaveteli single-threaded, as it creates a new request to the server to get the print stylesheet version!
+* Configure your MTA to handle bounce emails from alerts (see INSTALL-exim4.md)
+
+# Version 0.3
+
+## Highlighted features
+* New search filters / UI on request page, authorities page, and search page. Upgrades require a rebuild of the Xapian index (`./script/xapian-index-rebuild`). Design isn't beautiful; to be fixed in next release.
+* Introduce reCaptcha for people apparently coming from foreign countries (to combat spam) (requires values for new config variables `ISO_COUNTRY_CODE` and `GAZE_URL`, and existing config variables `RECAPTCHA_PUBLIC_KEY` and `RECAPTCHA_PRIVATE_KEY`)
+* Better admin interface for editing multiple translations of a public body at once
+## Other
+* [Full list of changes on github](https://github.com/sebbacon/alaveteli/issues?milestone=5&state=closed)
diff --git a/doc/INSTALL-exim4.md b/doc/INSTALL-exim4.md
index 6a0e1247e..d7a0be40f 100644
--- a/doc/INSTALL-exim4.md
+++ b/doc/INSTALL-exim4.md
@@ -5,6 +5,16 @@ In `/etc/exim4/conf.d/main/04_alaveteli_options`:
ALAVETELI_HOME=/path/to/alaveteli/software
ALAVETELI_USER=www-data
+ log_file_path=/var/log/exim4/exim-%slog-%D
+ log_selector=+all -retry_defer
+
+(The user ALAVETELI_USER should have write permissions on ALAVETELI_HOME).
+
+Note that the name and location of the log files created by Exim must match
+what the `load-exim-logs` script expects, hence the need for the extra
+`log_file_path` setting. And the `check-recent-requests-sent` scripts expects
+the logs to contain the `from=<...>` envelope information, so we make the
+logs more verbose with `log_selector`.
In `/etc/exim4/conf.d/router/04_alaveteli`:
@@ -17,7 +27,7 @@ In `/etc/exim4/conf.d/router/04_alaveteli`:
In `/etc/exim4/conf.d/transport/04_alaveteli`:
alaveteli_mailin_transport:
- driver = pipe
+ driver = pipe
command = $address_pipe ${lc:$local_part}
current_directory = ALAVETELI_HOME
home_directory = ALAVETELI_HOME
@@ -30,6 +40,23 @@ content:
^foi\\+.*: |/path/to/alaveteli/software/script/mailin
+You should also configure exim to discard any messages sent to the `BLACKHOLE_PREFIX`
+address, whose default value is 'do-not-reply-to-this-address'. For example, add the
+following to config/aliases:
+
+ # We use this for envelope from for some messages where we don't care about delivery
+ do-not-reply-to-this-address: :blackhole:
+
+If you want to make use of the automatic bounce-message handling, then set the `TRACK_SENDER_EMAIL`
+address to be filtered through `script/handle-mail-replies`. Messages that are not bounces or
+out-of-office autoreplies will be forwarded to `FORWARD_NONBOUNCE_RESPONSES_TO`. For example,
+in WhatDoTheyKnow the configuration looks like this:
+
+ raw_team: [a list of people on the team]
+ team: |/path/to/alaveteli/software/script/handle-mail-replies
+
+with `FORWARD_NONBOUNCE_RESPONSES_TO: 'raw_team@whatdotheyknow.com'`
+
Finally, make sure you have `dc_use_split_config='true'` in
`/etc/exim4/update-exim4.conf.conf`, and execute the command
`update-exim4.conf`
@@ -51,3 +78,7 @@ see something like:
R: alaveteli pipe for snafflerequest-234@localhost
snafflerequest-234@localhost -> |/home/alaveteli/alaveteli/script/mailin
transport = alaveteli_mailin_transport
+
+There is a great
+[Exim Cheatsheet](http://bradthemad.org/tech/notes/exim_cheatsheet.php)
+online that you may find useful.
diff --git a/doc/INSTALL.md b/doc/INSTALL.md
index eb0a77dd9..656b96467 100644
--- a/doc/INSTALL.md
+++ b/doc/INSTALL.md
@@ -36,7 +36,16 @@ code. Run:
git submodule update --init
-to fetch the contents of the submodules.
+to fetch the contents of the submodules.
+
+Optionally, you may want to install
+[wkhtmltopdf](http://code.google.com/p/wkhtmltopdf/downloads/list).
+We recommend downloading the latest, statically compiled version from
+the project website, as this allows running headless (i.e. without a
+graphical interface running) on Linux. If you do install
+`wkhtmltopdf`, you need to edit a setting in the config file to point
+to it (see below).
+
# Configure Database
@@ -228,7 +237,12 @@ It is not recommended to run the website using the default Rails web
server. There are various recommendations here:
http://rubyonrails.org/deploy
-We usually use Passenger / mod_rails.
+We usually use Passenger / mod_rails. The file at `conf/httpd.conf`
+contains the WhatDoTheyKnow settings. At a minimum, you should
+include the following in an Apache configuration file:
+
+ PassengerResolveSymlinksInDocumentRoot on
+ PassengerMaxPoolSize 6 # Recommend setting this to 3 or less on servers with 512MB RAM
Under all but light loads, it is strongly recommended to run the
server behind an http accelerator like Varnish. A sample varnish VCL
diff --git a/lib/alaveteli_external_command.rb b/lib/alaveteli_external_command.rb
new file mode 100644
index 000000000..b967c89b5
--- /dev/null
+++ b/lib/alaveteli_external_command.rb
@@ -0,0 +1,33 @@
+require 'external_command'
+
+module AlaveteliExternalCommand
+ class << self
+ def run(program_name, *args)
+ # Run an external program, and return its output.
+ # Standard error is suppressed unless the program
+ # fails (i.e. returns a non-zero exit status).
+ opts = {}
+ if !args.empty? && args[-1].is_a?(Hash)
+ opts = args.pop
+ end
+
+ xc = ExternalCommand.new(program_name, *args)
+ if opts.has_key? :append_to
+ xc.out = opts[:append_to]
+ end
+ xc.run()
+ if xc.status != 0
+ # Error
+ $stderr.puts("Error from #{program_name} #{args.join(' ')}:")
+ $stderr.print(xc.err)
+ return nil
+ else
+ if opts.has_key? :append_to
+ opts[:append_to] << "\n\n"
+ else
+ return xc.out
+ end
+ end
+ end
+ end
+end
diff --git a/lib/external_command.rb b/lib/external_command.rb
deleted file mode 100644
index 96292854f..000000000
--- a/lib/external_command.rb
+++ /dev/null
@@ -1,135 +0,0 @@
-# Run an external command, capturing its stdout and stderr
-# streams into variables.
-#
-# So it’s rather like the `backtick` built-in, except that:
-# - The command is run as-is, rather than being parsed by the shell;
-# - Standard error is also captured.
-#
-# After the run() method has been called, the instance variables
-# out, err and status contain the contents of the process’s stdout,
-# the contents of its stderr, and the exit status.
-#
-# Example usage:
-# require 'external_command'
-# xc = ExternalCommand("ls", "-l").run()
-# puts "Ran ls -l with exit status #{xc.status}"
-# puts "===STDOUT===\n#{xc.out}"
-# puts "===STDERR===\n#{xc.err}"
-#
-# The out and err attributes are writeable. If you assign
-# a string, after calling the constructor and before calling
-# run(), then the subprocess output/error will be appended
-# to this string.
-
-# <rant author="robin">
-# In any sane language, this would be implemented with a
-# single child process. The parent process would block on
-# select(), and when the child process terminated, the
-# select call would be interrupted by a CHLD signal
-# and return EINTR. Unfortunately Ruby goes out of its
-# way to prevent this from working, automatically restarting
-# the select call if EINTR is returned. Therefore we
-# use a parent-child-grandchild arrangement, where the
-# parent blocks on select() and the child blocks on
-# waitpid(). When the child detects that the grandchild
-# has finished, it writes to a pipe that’s included in
-# the parent’s select() for this purpose.
-# </rant>
-
-class ExternalCommand
- attr_accessor :out, :err
- attr_reader :status
-
- def initialize(cmd, *args)
- @cmd = cmd
- @args = args
-
- # Strings to collect stdout and stderr from the child process
- # These may be replaced by the caller, to append to existing strings.
- @out = ""
- @err = ""
- @fin = ""
- end
-
- def run()
- # Pipes for parent-child communication
- @out_read, @out_write = IO::pipe
- @err_read, @err_write = IO::pipe
- @fin_read, @fin_write = IO::pipe
-
- @pid = fork do
- # Here we’re in the child process.
- child_process
- end
-
- # Here we’re in the parent process.
- parent_process
-
- return self
- end
-
- private
-
- def child_process()
- # Reopen stdout and stderr to point at the pipes
- STDOUT.reopen(@out_write)
- STDERR.reopen(@err_write)
-
- # Close all the filehandles other than the ones we intend to use.
- ObjectSpace.each_object(IO) do |fh|
- fh.close unless (
- [STDOUT, STDERR, @fin_write].include?(fh) || fh.closed?)
- end
-
- Process::waitpid(fork { grandchild_process })
- @fin_write.puts($?.exitstatus.to_s)
-
- exit! 0
- end
-
- def grandchild_process()
- exec(@cmd, *@args)
-
- # This is only reached if the exec fails
- @err_write.print("Failed to exec: #{[@cmd, *@args].join(' ')}")
- exit! 99
- end
-
- def parent_process()
- # Close the writing ends of the pipes
- @out_write.close
- @err_write.close
- @fin_write.close
-
- @fhs = {@out_read => @out, @err_read => @err, @fin_read => @fin}
-
- while @fin.empty?
- ok = read_data
- if !ok
- raise "select() timed out even with a nil (infinite) timeout"
- end
- end
-
- while read_data(0)
- # Pull out any data that’s left in the pipes
- end
-
- Process::waitpid(@pid)
- @status = @fin.to_i
- @out_read.close
- @err_read.close
- end
-
- def read_data(timeout=nil)
- ready_array = IO.select(@fhs.keys, [], [], timeout)
- return false if ready_array.nil?
- ready_array[0].each do |fh|
- begin
- @fhs[fh] << fh.readpartial(8192)
- rescue EOFError
- @fhs.delete fh
- end
- end
- return true
- end
-end
diff --git a/lib/public_body_categories.rb b/lib/public_body_categories.rb
index 844e14e67..21a021d39 100644
--- a/lib/public_body_categories.rb
+++ b/lib/public_body_categories.rb
@@ -6,14 +6,39 @@
#
# $Id: public_body_categories.rb,v 1.1 2009-09-14 14:45:48 francis Exp $
-module PublicBodyCategories
+class PublicBodyCategories
+
+ attr_reader :with_description, :with_headings, :tags, :by_tag, :singular_by_tag
+
+ def initialize(categories)
+ @with_headings = categories
+ # Arranged in different ways for different sorts of displaying
+ @with_description = @with_headings.select() { |a| a.instance_of?(Array) }
+ @tags = @with_description.map() { |a| a[0] }
+ @by_tag = Hash[*@with_description.map() { |a| a[0..1] }.flatten]
+ @singular_by_tag = Hash[*@with_description.map() { |a| [a[0],a[2]] }.flatten]
+ end
- CATEGORIES_WITH_HEADINGS = []
-
- # Arranged in different ways for different sorts of displaying
- CATEGORIES_WITH_DESCRIPTION = CATEGORIES_WITH_HEADINGS.select() { |a| a.instance_of?(Array) }
- CATEGORIES = CATEGORIES_WITH_DESCRIPTION.map() { |a| a[0] }
- CATEGORIES_BY_TAG = Hash[*CATEGORIES_WITH_DESCRIPTION.map() { |a| a[0..1] }.flatten]
- CATEGORY_SINGULAR_BY_TAG = Hash[*CATEGORIES_WITH_DESCRIPTION.map() { |a| [a[0],a[2]] }.flatten]
-end
+ def PublicBodyCategories.get
+ load_categories() if @@CATEGORIES.nil?
+ @@CATEGORIES[I18n.locale.to_s] || @@CATEGORIES[I18n.default_locale.to_s] || PublicBodyCategories.new([])
+ end
+ # Called from the data files themselves
+ def PublicBodyCategories.add(locale, categories)
+ @@CATEGORIES[locale.to_s] = PublicBodyCategories.new(categories)
+ end
+
+ private
+ @@CATEGORIES = nil
+
+ def PublicBodyCategories.load_categories()
+ @@CATEGORIES = {} if @@CATEGORIES.nil?
+ I18n.available_locales.each do |locale|
+ begin
+ load "public_body_categories_#{locale}.rb"
+ rescue MissingSourceFile
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/lib/public_body_categories_en.rb b/lib/public_body_categories_en.rb
index 93183d397..5fe762357 100644
--- a/lib/public_body_categories_en.rb
+++ b/lib/public_body_categories_en.rb
@@ -6,88 +6,78 @@
#
# $Id: public_body_categories.rb,v 1.1 2009-09-14 14:45:48 francis Exp $
-module PublicBodyCategories
-
- CATEGORIES_WITH_HEADINGS = [
- "Miscellaneous",
- [ "other", "Miscellaneous", "miscellaneous" ],
- _("Central government"),
- [ "department", "Ministerial departments", "a ministerial department" ],
- [ "non_ministerial_department", "Non-ministerial departments", "a non-ministerial department" ],
- [ "executive_agency", "Executive agencies", "an executive agency" ],
- [ "government_office", "Government offices for the regions", "a government office for the regions" ],
- [ "advisory_committee", "Advisory committees", "an advisory committee" ],
- [ "awc", "Agricultural wages committees", "an agriculatural wages committee" ],
- [ "adhac", "Agricultural dwelling house advisory committees", "an agriculatural dwelling house advisory committee" ],
- [ "newdeal", "New Deal for Communities partnership", "a New Deal for Communities partnership" ],
- _("Local and regional"),
- [ "local_council", "Local councils", "a local council" ],
- [ "parish_council", "Town and Parish councils", "a town or parish council"],
- [ "housing_association", "Housing associations", "a housing association"],
- [ "almo", "Housing ALMOs", "a housing ALMO"],
- [ "municipal_bank", "Municipal bank", "a municipal bank"],
- [ "nsbody", "North/south bodies", "a north/south body"],
- [ "pbo", "Professional buying organisations", "a professional buying organisation"],
- [ "regional_assembly", "Regional assemblies", "a regional assembly"],
- [ "rda", "Regional development agencies", "a regional development agency" ],
- "Education",
- [ "university", "Universities", "a university" ],
- [ "university_college", "University colleges", "a university college" ],
- [ "cambridge_college", "Cambridge colleges", "a Cambridge college" ],
- [ "durham_college", "Durham colleges", "a Durham college" ],
- [ "oxford_college", "Oxford colleges", "an Oxford college or permanent private hall" ],
- [ "york_college", "York colleges", "a college of the University of York" ],
- [ "university_owned_company", "University owned companies", "a university owned company" ],
- [ "hei", "Higher education institutions", "a higher educational institution" ],
- [ "fei", "Further education institutions", "a further educational institution" ],
- [ "school", "Schools", "a school" ],
- [ "research_council", "Research councils", "a research council" ],
- [ "lib_board", "Education and library boards", "an education and library board" ],
- [ "rbc", "Regional Broadband Consortia", "a Regional Broadband Consortium" ],
- "Environment",
- [ "npa", "National park authorities", "a national park authority" ],
- [ "rpa", "Regional park authorities", "a regional park authority" ],
- [ "sea_fishery_committee", "Sea fisheries committees", "a sea fisheries committee" ],
- [ "watercompanies", "Water companies", "a water company" ],
- [ "idb", "Internal drainage boards", "an internal drainage board" ],
- [ "rfdc", "Regional flood defence committees", "a regional flood defence committee" ],
- [ "wda", "Waste disposal authorities", "a waste disposal authority" ],
- [ "zoo", "Zoos", "a zoo" ],
- "Health",
- [ "nhstrust", "NHS trusts", "an NHS trust" ],
- [ "pct", "Primary care trusts", "a primary care trust" ],
- [ "nhswales", "NHS in Wales", "part of the NHS in Wales" ],
- [ "nhsni", "NHS in Northern Ireland", "part of the NHS in Northern Ireland" ],
- [ "hscr", "Health / social care", "Relating to health / social care" ],
- [ "pha", "Port health authorities", "a port health authority"],
- [ "sha", "Strategic health authorities", "a strategic health authority" ],
- [ "specialha", "Special health authorities", "a special health authority" ],
- "Media and culture",
- [ "media", "Media", "a media organisation" ],
- [ "rcc", "Cultural consortia", "a cultural consortium"],
- [ "museum", "Museums and galleries", "a museum or gallery" ],
- "Military and security services",
- [ "military_college", "Military colleges", "a military college" ],
- [ "security_services", "Security services", "a security services body" ],
- "Emergency services and the courts",
- [ "police", "Police forces", "a police force" ],
- [ "police_authority", "Police authorities", "a police authority" ],
- [ "dpp", "District policing partnerships", "a district policing partnership" ],
- [ "fire_service", "Fire and rescue services", "a fire and rescue service" ],
- [ "prob_board", "Probation boards", "a probation board" ],
- [ "rules_committee", "Rules commitees", "a rules committee" ],
- [ "tribunal", "Tribunals", "a tribunal"],
- "Transport",
- [ "npte", "Passenger transport executives", "a passenger transport executive" ],
- [ "port_authority", "Port authorities", "a port authority" ],
- [ "scp", "Safety Camera Partnerships", "a safety camera partnership" ],
- [ "srp", "Safer Roads Partnership", "a safer roads partnership" ]
- ]
-
- # Arranged in different ways for different sorts of displaying
- CATEGORIES_WITH_DESCRIPTION = CATEGORIES_WITH_HEADINGS.select() { |a| a.instance_of?(Array) }
- CATEGORIES = CATEGORIES_WITH_DESCRIPTION.map() { |a| a[0] }
- CATEGORIES_BY_TAG = Hash[*CATEGORIES_WITH_DESCRIPTION.map() { |a| a[0..1] }.flatten]
- CATEGORY_SINGULAR_BY_TAG = Hash[*CATEGORIES_WITH_DESCRIPTION.map() { |a| [a[0],a[2]] }.flatten]
-end
-
+PublicBodyCategories.add(:en, [
+ "Miscellaneous",
+ [ "other", "Miscellaneous", "miscellaneous" ],
+ "Central government",
+ [ "department", "Ministerial departments", "a ministerial department" ],
+ [ "non_ministerial_department", "Non-ministerial departments", "a non-ministerial department" ],
+ [ "executive_agency", "Executive agencies", "an executive agency" ],
+ [ "government_office", "Government offices for the regions", "a government office for the regions" ],
+ [ "advisory_committee", "Advisory committees", "an advisory committee" ],
+ [ "awc", "Agricultural wages committees", "an agriculatural wages committee" ],
+ [ "adhac", "Agricultural dwelling house advisory committees", "an agriculatural dwelling house advisory committee" ],
+ [ "newdeal", "New Deal for Communities partnership", "a New Deal for Communities partnership" ],
+ "Local and regional",
+ [ "local_council", "Local councils", "a local council" ],
+ [ "parish_council", "Town and Parish councils", "a town or parish council"],
+ [ "housing_association", "Housing associations", "a housing association"],
+ [ "almo", "Housing ALMOs", "a housing ALMO"],
+ [ "municipal_bank", "Municipal bank", "a municipal bank"],
+ [ "nsbody", "North/south bodies", "a north/south body"],
+ [ "pbo", "Professional buying organisations", "a professional buying organisation"],
+ [ "regional_assembly", "Regional assemblies", "a regional assembly"],
+ [ "rda", "Regional development agencies", "a regional development agency" ],
+ "Education",
+ [ "university", "Universities", "a university" ],
+ [ "university_college", "University colleges", "a university college" ],
+ [ "cambridge_college", "Cambridge colleges", "a Cambridge college" ],
+ [ "durham_college", "Durham colleges", "a Durham college" ],
+ [ "oxford_college", "Oxford colleges", "an Oxford college or permanent private hall" ],
+ [ "york_college", "York colleges", "a college of the University of York" ],
+ [ "university_owned_company", "University owned companies", "a university owned company" ],
+ [ "hei", "Higher education institutions", "a higher educational institution" ],
+ [ "fei", "Further education institutions", "a further educational institution" ],
+ [ "school", "Schools", "a school" ],
+ [ "research_council", "Research councils", "a research council" ],
+ [ "lib_board", "Education and library boards", "an education and library board" ],
+ [ "rbc", "Regional Broadband Consortia", "a Regional Broadband Consortium" ],
+ "Environment",
+ [ "npa", "National park authorities", "a national park authority" ],
+ [ "rpa", "Regional park authorities", "a regional park authority" ],
+ [ "sea_fishery_committee", "Sea fisheries committees", "a sea fisheries committee" ],
+ [ "watercompanies", "Water companies", "a water company" ],
+ [ "idb", "Internal drainage boards", "an internal drainage board" ],
+ [ "rfdc", "Regional flood defence committees", "a regional flood defence committee" ],
+ [ "wda", "Waste disposal authorities", "a waste disposal authority" ],
+ [ "zoo", "Zoos", "a zoo" ],
+ "Health",
+ [ "nhstrust", "NHS trusts", "an NHS trust" ],
+ [ "pct", "Primary care trusts", "a primary care trust" ],
+ [ "nhswales", "NHS in Wales", "part of the NHS in Wales" ],
+ [ "nhsni", "NHS in Northern Ireland", "part of the NHS in Northern Ireland" ],
+ [ "hscr", "Health / social care", "Relating to health / social care" ],
+ [ "pha", "Port health authorities", "a port health authority"],
+ [ "sha", "Strategic health authorities", "a strategic health authority" ],
+ [ "specialha", "Special health authorities", "a special health authority" ],
+ "Media and culture",
+ [ "media", "Media", "a media organisation" ],
+ [ "rcc", "Cultural consortia", "a cultural consortium"],
+ [ "museum", "Museums and galleries", "a museum or gallery" ],
+ "Military and security services",
+ [ "military_college", "Military colleges", "a military college" ],
+ [ "security_services", "Security services", "a security services body" ],
+ "Emergency services and the courts",
+ [ "police", "Police forces", "a police force" ],
+ [ "police_authority", "Police authorities", "a police authority" ],
+ [ "dpp", "District policing partnerships", "a district policing partnership" ],
+ [ "fire_service", "Fire and rescue services", "a fire and rescue service" ],
+ [ "prob_board", "Probation boards", "a probation board" ],
+ [ "rules_committee", "Rules commitees", "a rules committee" ],
+ [ "tribunal", "Tribunals", "a tribunal"],
+ "Transport",
+ [ "npte", "Passenger transport executives", "a passenger transport executive" ],
+ [ "port_authority", "Port authorities", "a port authority" ],
+ [ "scp", "Safety Camera Partnerships", "a safety camera partnership" ],
+ [ "srp", "Safer Roads Partnership", "a safer roads partnership" ]
+])
diff --git a/lib/tasks/stats.rake b/lib/tasks/stats.rake
index e206ce951..e1b58905d 100644
--- a/lib/tasks/stats.rake
+++ b/lib/tasks/stats.rake
@@ -2,7 +2,7 @@ namespace :stats do
desc 'Produce transaction stats'
task :show => :environment do
- month_starts = (Date.new(2009, 1)..Date.new(2011, 5)).select { |d| d.day == 1 }
+ month_starts = (Date.new(2009, 1)..Date.new(2011, 8)).select { |d| d.day == 1 }
headers = ['Period',
'Requests sent',
'Annotations added',
@@ -45,4 +45,4 @@ namespace :stats do
end
end
-end \ No newline at end of file
+end
diff --git a/lib/world_foi_websites.rb b/lib/world_foi_websites.rb
new file mode 100644
index 000000000..24845437a
--- /dev/null
+++ b/lib/world_foi_websites.rb
@@ -0,0 +1,40 @@
+class WorldFOIWebsites
+ def self.world_foi_websites
+ world_foi_websites = [
+ {:name => "WhatDoTheyKnow?",
+ :country_name => _("United Kingdom"),
+ :country_iso_code => "GB",
+ :url => "http://www.whatdotheyknow.com"},
+ {:name => "Informata Zyrtare",
+ :country_name => _("Kosovo"),
+ :country_iso_code => "XK",
+ :url => "http://informatazyrtare.org"},
+ {:name => "Ask The EU",
+ :country_name => _("European Union"),
+ :country_iso_code => "",
+ :url => "http://asktheu.org"},
+ {:name => "MuckRock.com",
+ :country_name => _("United States of America"),
+ :country_iso_code => "US",
+ :url => "http://www.muckrock.com"},
+ {:name => "FYI",
+ :country_name => _("New Zealand"),
+ :country_iso_code => "NZ",
+ :url => "http://fyi.org.nz"},
+ {:name => "Frag den Staat",
+ :country_name => _("Germany"),
+ :country_iso_code => "DE",
+ :url => "http://fragdenstaat.de"},
+ {:name => "Acceso Intelligente",
+ :country_name => _("Chile"),
+ :country_iso_code => "CL",
+ :url => "accesointeligente.org"}]
+ return world_foi_websites
+ end
+
+ def self.by_code(code)
+ result = self.world_foi_websites.find{|x| x[:country_iso_code].downcase == code.downcase}
+ return result
+ end
+end
+
diff --git a/locale/app.pot b/locale/app.pot
index 6a85ddbea..2b14b8b9d 100644
--- a/locale/app.pot
+++ b/locale/app.pot
@@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: version 0.0.1\n"
-"POT-Creation-Date: 2011-08-22 11:15+0100\n"
-"PO-Revision-Date: 2011-08-22 11:15+0100\n"
+"POT-Creation-Date: 2011-10-09 01:10+0200\n"
+"PO-Revision-Date: 2011-10-09 01:10+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -16,1443 +16,1849 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: app/controllers/request_controller.rb:60
+#: app/controllers/application_controller.rb:298
+msgid "<p>{{site_name}} is currently in maintenance. You can only view existing requests. You cannot make new ones, add followups or annotations, or otherwise change the database.</p> <p>{{read_only}}</p>"
+msgstr ""
+
+#: app/controllers/comment_controller.rb:55
+msgid "To post your annotation"
+msgstr ""
+
+#: app/controllers/comment_controller.rb:56
+msgid "Then your annotation to {{info_request_title}} will be posted."
+msgstr ""
+
+#: app/controllers/comment_controller.rb:57
+msgid "Confirm your annotation to {{info_request_title}}"
+msgstr ""
+
+#: app/controllers/comment_controller.rb:62
+msgid "Thank you for making an annotation!"
+msgstr ""
+
+#: app/controllers/comment_controller.rb:73
+msgid " You will also be emailed updates about the request."
+msgstr ""
+
+#: app/controllers/comment_controller.rb:75
+msgid " You are already being emailed updates about the request."
+msgstr ""
+
+#: app/controllers/help_controller.rb:63
+msgid "Your message has been sent. Thank you for getting in touch! We'll get back to you soon."
+msgstr ""
+
+#: app/controllers/public_body_controller.rb:82 app/controllers/user_controller.rb:140
+msgid "There was an error with the words you entered, please try again."
+msgstr ""
+
+#: app/controllers/public_body_controller.rb:123
+msgid "beginning with"
+msgstr ""
+
+#: app/controllers/request_controller.rb:31 app/controllers/request_controller.rb:303
+msgid "To send your FOI request"
+msgstr ""
+
+#: app/controllers/request_controller.rb:32
+msgid "Then you'll be allowed to send FOI requests."
+msgstr ""
+
+#: app/controllers/request_controller.rb:33
+msgid "Confirm your email address"
+msgstr ""
+
+#: app/controllers/request_controller.rb:81
msgid "To update the status of this FOI request"
msgstr ""
-#: app/controllers/request_controller.rb:61
+#: app/controllers/request_controller.rb:82
msgid "Then you can update the status of your request to "
msgstr ""
-#: app/controllers/request_controller.rb:62
+#: app/controllers/request_controller.rb:83
msgid "Update the status of your request to "
msgstr ""
-#: app/controllers/request_controller.rb:139
-msgid "Recently sent Freedom of Information requests"
-msgstr ""
-
-#: app/controllers/request_controller.rb:144
-msgid "Recently successful responses"
+#: app/controllers/request_controller.rb:155
+msgid "View and search requests"
msgstr ""
-#: app/controllers/request_controller.rb:280
+#: app/controllers/request_controller.rb:285
msgid "<p>You do not need to include your email in the request in order to get a reply, as we will ask for it on the next screen (<a href=\"%s\">details</a>).</p>"
msgstr ""
-#: app/controllers/request_controller.rb:282
+#: app/controllers/request_controller.rb:287
msgid "<p>You do not need to include your email in the request in order to get a reply (<a href=\"%s\">details</a>).</p>"
msgstr ""
-#: app/controllers/request_controller.rb:284
+#: app/controllers/request_controller.rb:289
msgid "<p>We recommend that you edit your request and remove the email address.\n If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:288
+#: app/controllers/request_controller.rb:293
msgid "<p>Your request contains a <strong>postcode</strong>. Unless it directly relates to the subject of your request, please remove any address as it will <strong>appear publicly on the Internet</strong>.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:298
-msgid "To send your FOI request"
-msgstr ""
-
-#: app/controllers/request_controller.rb:299
+#: app/controllers/request_controller.rb:304
msgid "Then your FOI request to {{public_body_name}} will be sent."
msgstr ""
-#: app/controllers/request_controller.rb:300
+#: app/controllers/request_controller.rb:305
msgid "Confirm your FOI request to "
msgstr ""
-#: app/controllers/request_controller.rb:311
-msgid "<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\n <p><strong>We will email you</strong> when there is a response, or after 20 working days if the authority still hasn't\n replied by then.</p>\n <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an \n annotation below telling people about your writing.</p>"
+#: app/controllers/request_controller.rb:316
+msgid "<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\n <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\n replied by then.</p>\n <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an \n annotation below telling people about your writing.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:337
+#: app/controllers/request_controller.rb:343
msgid "To classify the response to this FOI request"
msgstr ""
-#: app/controllers/request_controller.rb:338
+#: app/controllers/request_controller.rb:344
msgid "Then you can classify the FOI response you have got from "
msgstr ""
-#: app/controllers/request_controller.rb:339
+#: app/controllers/request_controller.rb:345
msgid "Classify an FOI response from "
msgstr ""
-#: app/controllers/request_controller.rb:346
+#: app/controllers/request_controller.rb:352
msgid "Please choose whether or not you got some of the information that you wanted."
msgstr ""
-#: app/controllers/request_controller.rb:352
+#: app/controllers/request_controller.rb:358
msgid "The request has been updated since you originally loaded this page. Please check for any new incoming messages below, and try again."
msgstr ""
-#: app/controllers/request_controller.rb:378
+#: app/controllers/request_controller.rb:384
msgid "Thank you for updating the status of the request '<a href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests below for you to classify."
msgstr ""
-#: app/controllers/request_controller.rb:381
+#: app/controllers/request_controller.rb:387
msgid "Thank you for updating this request!"
msgstr ""
-#: app/controllers/request_controller.rb:389
+#: app/controllers/request_controller.rb:395
msgid "<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\n{{date_response_required_by}}</strong>.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:393
+#: app/controllers/request_controller.rb:399
msgid "<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you should have got a response promptly, and normally before the end of <strong>{{date_response_required_by}}</strong>.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:396
+#: app/controllers/request_controller.rb:402
msgid "<p>Thank you! Your request is long overdue, by more than {{very_late_number_of_days}} working days. Most requests should be answered within {{late_number_of_days}} working days. You might like to complain about this, see below.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:399
+#: app/controllers/request_controller.rb:405
msgid "<p>Thank you! Here are some ideas on what to do next:</p>\n <ul>\n <li>To send your request to another authority, first copy the text of your request below, then <a href=\"{{find_authority_url}}\">find the other authority</a>.</li>\n <li>If you would like to contest the authority's claim that they do not hold the information, here is \n <a href=\"{{complain_url}}\">how to complain</a>.\n </li>\n <li>We have <a href=\"{{other_means_url}}\">suggestions</a>\n on other means to answer your question.\n </li>\n </ul>"
msgstr ""
-#: app/controllers/request_controller.rb:414
+#: app/controllers/request_controller.rb:420
msgid "Oh no! Sorry to hear that your request was refused. Here is what to do now."
msgstr ""
-#: app/controllers/request_controller.rb:417
+#: app/controllers/request_controller.rb:423
msgid "<p>We're glad you got all the information that you wanted. If you write about or make use of the information, please come back and add an annotation below saying what you did.</p><p>If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:420
+#: app/controllers/request_controller.rb:426
msgid "<p>We're glad you got some of the information that you wanted. If you found {{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to the charity which runs it.</p><p>If you want to try and get the rest of the information, here's what to do now.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:423
+#: app/controllers/request_controller.rb:429
msgid "Please write your follow up message containing the necessary clarifications below."
msgstr ""
-#: app/controllers/request_controller.rb:428
+#: app/controllers/request_controller.rb:434
msgid "<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a response within {{late_number_of_days}} days, or be told if it will take longer (<a href=\"{{review_url}}\">details</a>).</p>"
msgstr ""
-#: app/controllers/request_controller.rb:431
+#: app/controllers/request_controller.rb:437
msgid "<p>Thank you! We'll look into what happened and try and fix it up.</p><p>If the error was a delivery failure, and you can find an up to date FOI email address for the authority, please tell us using the form below.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:434
+#: app/controllers/request_controller.rb:440
msgid "Please use the form below to tell us more."
msgstr ""
-#: app/controllers/request_controller.rb:437
+#: app/controllers/request_controller.rb:443
msgid "If you have not done so already, please write a message below telling the authority that you have withdrawn your request. Otherwise they will not know it has been withdrawn."
msgstr ""
-#: app/controllers/request_controller.rb:542
+#: app/controllers/request_controller.rb:548
msgid "To send a follow up message to "
msgstr ""
-#: app/controllers/request_controller.rb:543
+#: app/controllers/request_controller.rb:549
msgid "To reply to "
msgstr ""
-#: app/controllers/request_controller.rb:545
+#: app/controllers/request_controller.rb:551
msgid "Then you can write follow up message to "
msgstr ""
-#: app/controllers/request_controller.rb:546
+#: app/controllers/request_controller.rb:552
msgid "Then you can write your reply to "
msgstr ""
-#: app/controllers/request_controller.rb:548
+#: app/controllers/request_controller.rb:554
msgid "Write your FOI follow up message to "
msgstr ""
-#: app/controllers/request_controller.rb:549
+#: app/controllers/request_controller.rb:555
msgid "Write a reply to "
msgstr ""
-#: app/controllers/request_controller.rb:556
+#: app/controllers/request_controller.rb:562
msgid "Your follow up has not been sent because this request has been stopped to prevent spam. Please <a href=\"%s\">contact us</a> if you really want to send a follow up message."
msgstr ""
-#: app/controllers/request_controller.rb:559
+#: app/controllers/request_controller.rb:565
msgid "You previously submitted that exact follow up message for this request."
msgstr ""
-#: app/controllers/request_controller.rb:582
+#: app/controllers/request_controller.rb:588
msgid "Your internal review request has been sent on its way."
msgstr ""
-#: app/controllers/request_controller.rb:584
+#: app/controllers/request_controller.rb:590
msgid "Your follow up message has been sent on its way."
msgstr ""
-#: app/controllers/request_controller.rb:706
+#: app/controllers/request_controller.rb:712
msgid "To upload a response, you must be logged in using an email address from "
msgstr ""
-#: app/controllers/request_controller.rb:707
+#: app/controllers/request_controller.rb:713
msgid "Then you can upload an FOI response. "
msgstr ""
-#: app/controllers/request_controller.rb:708 app/controllers/user_controller.rb:515
+#: app/controllers/request_controller.rb:714 app/controllers/user_controller.rb:542
msgid "Confirm your account on {{site_name}}"
msgstr ""
-#: app/controllers/request_controller.rb:735
+#: app/controllers/request_controller.rb:741
msgid "Please type a message and/or choose a file containing your response."
msgstr ""
-#: app/controllers/request_controller.rb:741
+#: app/controllers/request_controller.rb:747
msgid "Thank you for responding to this FOI request! Your response has been published below, and a link to your response has been emailed to "
msgstr ""
-#: app/controllers/public_body_controller.rb:77
-msgid "There was an error with the words you entered, please try again."
+#: app/controllers/request_controller.rb:773
+msgid "To download the zip file"
msgstr ""
-#: app/controllers/public_body_controller.rb:111
-msgid "beginning with"
+#: app/controllers/request_controller.rb:774
+msgid "Then you can download a zip file of {{info_request_title}}."
+msgstr ""
+
+#: app/controllers/request_controller.rb:775
+msgid "Log in to download a zip file of {{info_request_title}}"
+msgstr ""
+
+#: app/controllers/request_game_controller.rb:23
+msgid "<p>All done! Thank you very much for your help.</p><p>There are <a href=\"{{helpus_url}}\">more things you can do</a> to help {{site_name}}.</p>"
+msgstr ""
+
+#: app/controllers/request_game_controller.rb:40
+msgid "To play the request categorisation game"
+msgstr ""
+
+#: app/controllers/request_game_controller.rb:41
+msgid "Then you can play the request categorisation game."
+msgstr ""
+
+#: app/controllers/request_game_controller.rb:42
+msgid "Play the request categorisation game"
+msgstr ""
+
+#: app/controllers/request_game_controller.rb:52
+msgid "Thank you for helping us keep the site tidy!"
+msgstr ""
+
+#: app/controllers/services_controller.rb:21
+msgid "Hello! You can make Freedom of Information requests within {{country_name}} at {{link_to_website}}"
+msgstr ""
+
+#: app/controllers/track_controller.rb:98
+msgid "You are already being emailed updates about "
+msgstr ""
+
+#: app/controllers/track_controller.rb:111
+msgid "You will now be emailed updates about "
+msgstr ""
+
+#: app/controllers/track_controller.rb:143
+msgid "To cancel this alert"
+msgstr ""
+
+#: app/controllers/track_controller.rb:144
+msgid "Then you can cancel the alert."
+msgstr ""
+
+#: app/controllers/track_controller.rb:145
+msgid "Cancel a {{site_name}} alert"
+msgstr ""
+
+#: app/controllers/track_controller.rb:154
+msgid "You will no longer be emailed updates about "
+msgstr ""
+
+#: app/controllers/track_controller.rb:173
+msgid "To cancel these alerts"
msgstr ""
-#: app/controllers/user_controller.rb:189
+#: app/controllers/track_controller.rb:174
+msgid "Then you can cancel the alerts."
+msgstr ""
+
+#: app/controllers/track_controller.rb:175
+msgid "Cancel some {{site_name}} alerts"
+msgstr ""
+
+#: app/controllers/track_controller.rb:183
+msgid "You will no longer be emailed updates for those alerts"
+msgstr ""
+
+#: app/controllers/user_controller.rb:43
+msgid "{{search_results}} matching '{{query}}'"
+msgstr ""
+
+#: app/controllers/user_controller.rb:207
msgid "That doesn't look like a valid email address. Please check you have typed it correctly."
msgstr ""
-#: app/controllers/user_controller.rb:203
+#: app/controllers/user_controller.rb:221
msgid "Then you can change your password on {{site_name}}"
msgstr ""
-#: app/controllers/user_controller.rb:204
+#: app/controllers/user_controller.rb:222
msgid "Change your password {{site_name}}"
msgstr ""
-#: app/controllers/user_controller.rb:231
+#: app/controllers/user_controller.rb:249
msgid "Your password has been changed."
msgstr ""
-#: app/controllers/user_controller.rb:248
+#: app/controllers/user_controller.rb:266
msgid "To change your email address used on {{site_name}}"
msgstr ""
-#: app/controllers/user_controller.rb:249
+#: app/controllers/user_controller.rb:267
msgid "Then you can change your email address used on {{site_name}}"
msgstr ""
-#: app/controllers/user_controller.rb:250 app/views/user/signchangeemail.rhtml:1
+#: app/controllers/user_controller.rb:268 app/views/user/signchangeemail.rhtml:1
#: app/views/user/signchangeemail.rhtml:11
msgid "Change your email address used on {{site_name}}"
msgstr ""
-#: app/controllers/user_controller.rb:310
+#: app/controllers/user_controller.rb:328
msgid "You have now changed your email address used on {{site_name}}"
msgstr ""
-#: app/controllers/user_controller.rb:329
+#: app/controllers/user_controller.rb:347
msgid "To send a message to "
msgstr ""
-#: app/controllers/user_controller.rb:330
+#: app/controllers/user_controller.rb:348
msgid "Then you can send a message to "
msgstr ""
-#: app/controllers/user_controller.rb:331
+#: app/controllers/user_controller.rb:349
msgid "Send a message to "
msgstr ""
-#: app/controllers/user_controller.rb:349
+#: app/controllers/user_controller.rb:367
msgid "Your message to {{recipient_user_name}} has been sent!"
msgstr ""
-#: app/controllers/user_controller.rb:355
+#: app/controllers/user_controller.rb:373
msgid ",\n\n\n\nYours,\n\n{{user_name}}"
msgstr ""
-#: app/controllers/user_controller.rb:371
+#: app/controllers/user_controller.rb:389
msgid "You need to be logged in to change your profile photo."
msgstr ""
-#: app/controllers/user_controller.rb:398 app/controllers/user_controller.rb:414
+#: app/controllers/user_controller.rb:416 app/controllers/user_controller.rb:432
msgid "Thank you for updating your profile photo"
msgstr ""
-#: app/controllers/user_controller.rb:417
+#: app/controllers/user_controller.rb:435
msgid "<p>Thanks for updating your profile photo.</p>\n <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
msgstr ""
-#: app/controllers/user_controller.rb:433
+#: app/controllers/user_controller.rb:451
msgid "You need to be logged in to clear your profile photo."
msgstr ""
-#: app/controllers/user_controller.rb:442
+#: app/controllers/user_controller.rb:460
msgid "You've now cleared your profile photo"
msgstr ""
-#: app/controllers/user_controller.rb:470
+#: app/controllers/user_controller.rb:488
msgid "You need to be logged in to change the text about you on your profile."
msgstr ""
-#: app/controllers/user_controller.rb:492
+#: app/controllers/user_controller.rb:510
msgid "You have now changed the text about you on your profile."
msgstr ""
-#: app/controllers/user_controller.rb:495
+#: app/controllers/user_controller.rb:513
msgid "<p>Thanks for changing the text about you on your profile.</p>\n <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
msgstr ""
-#: app/controllers/user_controller.rb:514
+#: app/controllers/user_controller.rb:541
msgid "Then you can sign in to {{site_name}}"
msgstr ""
-#: app/controllers/help_controller.rb:63
-msgid "Your message has been sent. Thank you for getting in touch! We'll get back to you soon."
+#: app/models/about_me_validator.rb:24
+msgid "Please keep it shorter than 500 characters"
msgstr ""
-#: app/controllers/track_controller.rb:98
-msgid "You are already being emailed updates about "
+#: app/models/change_email_validator.rb:29
+msgid "Please enter your old email address"
msgstr ""
-#: app/controllers/track_controller.rb:111
-msgid "You will now be emailed updates about "
+#: app/models/change_email_validator.rb:30
+msgid "Please enter your new email address"
msgstr ""
-#: app/controllers/track_controller.rb:143
-msgid "To cancel this alert"
+#: app/models/change_email_validator.rb:31
+msgid "Please enter your password"
msgstr ""
-#: app/controllers/track_controller.rb:144
-msgid "Then you can cancel the alert."
+#: app/models/change_email_validator.rb:39
+msgid "Old email doesn't look like a valid address"
msgstr ""
-#: app/controllers/track_controller.rb:145
-msgid "Cancel a {{site_name}} alert"
+#: app/models/change_email_validator.rb:44
+msgid "Old email address isn't the same as the address of the account you are logged in with"
msgstr ""
-#: app/controllers/track_controller.rb:154
-msgid "You will no longer be emailed updates about "
+#: app/models/change_email_validator.rb:47
+msgid "Password is not correct"
msgstr ""
-#: app/controllers/track_controller.rb:173
-msgid "To cancel these alerts"
+#: app/models/change_email_validator.rb:53
+msgid "New email doesn't look like a valid address"
msgstr ""
-#: app/controllers/track_controller.rb:174
-msgid "Then you can cancel the alerts."
+#: app/models/comment.rb:59
+msgid "Please enter your annotation"
msgstr ""
-#: app/controllers/track_controller.rb:175
-msgid "Cancel some {{site_name}} alerts"
+#: app/models/comment.rb:62
+msgid "Please write your annotation using a mixture of capital and lower case letters. This makes it easier for others to read."
msgstr ""
-#: app/controllers/track_controller.rb:183
-msgid "You will no longer be emailed updates for those alerts"
+#: app/models/contact_validator.rb:28 app/models/user.rb:38
+msgid "Please enter your name"
msgstr ""
-#: app/controllers/request_game_controller.rb:23
-msgid "<p>All done! Thank you very much for your help.</p><p>There are <a href=\"{{helpus_url}}\">more things you can do</a> to help {{site_name}}.</p>"
+#: app/models/contact_validator.rb:29 app/models/user.rb:36
+msgid "Please enter your email address"
msgstr ""
-#: app/controllers/request_game_controller.rb:40
-msgid "To play the request categorisation game"
+#: app/models/contact_validator.rb:30
+msgid "Please enter a subject"
msgstr ""
-#: app/controllers/request_game_controller.rb:41
-msgid "Then you can play the request categorisation game."
+#: app/models/contact_validator.rb:31
+msgid "Please enter the message you want to send"
msgstr ""
-#: app/controllers/request_game_controller.rb:42
-msgid "Play the request categorisation game"
+#: app/models/contact_validator.rb:34
+msgid "Email doesn't look like a valid address"
msgstr ""
-#: app/controllers/request_game_controller.rb:52
-msgid "Thank you for helping us keep the site tidy!"
+#: app/models/incoming_message.rb:867
+msgid "\n\n[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
msgstr ""
-#: app/controllers/application_controller.rb:279
-msgid "<p>{{site_name}} is currently in maintenance. You can only view existing requests. You cannot make new ones, add followups or annotations, or otherwise change the database.</p> <p>{{read_only}}</p>"
+#: app/models/info_request.rb:34
+msgid "Please enter a summary of your request"
msgstr ""
-#: app/controllers/comment_controller.rb:55
-msgid "To post your annotation"
+#: app/models/info_request.rb:35
+msgid "Please write a summary with some text in it"
msgstr ""
-#: app/controllers/comment_controller.rb:56
-msgid "Then your annotation to {{info_request_title}} will be posted."
+#: app/models/info_request.rb:120
+msgid "Please write the summary using a mixture of capital and lower case letters. This makes it easier for others to read."
msgstr ""
-#: app/controllers/comment_controller.rb:57
-msgid "Confirm your annotation to {{info_request_title}}"
+#: app/models/info_request.rb:123
+msgid "Please keep the summary short, like in the subject of an email. You can use a phrase, rather than a full sentence."
msgstr ""
-#: app/controllers/comment_controller.rb:62
-msgid "Thank you for making an annotation!"
+#: app/models/info_request.rb:126
+msgid "Please describe more what the request is about in the subject. There is no need to say it is an FOI request, we add that on anyway."
msgstr ""
-#: app/controllers/comment_controller.rb:73
-msgid " You will also be emailed updates about the request."
+#: app/models/info_request.rb:395
+msgid "This request has been set by an administrator to \"allow new responses from nobody\""
msgstr ""
-#: app/controllers/comment_controller.rb:75
-msgid " You are already being emailed updates about the request."
+#: app/models/info_request.rb:401
+msgid "Only the authority can reply to this request, but there is no \"From\" address to check against"
msgstr ""
-#: app/models/user_mailer.rb:34
-msgid "Confirm your new email address on {{site_name}}"
+#: app/models/info_request.rb:405
+msgid "Only the authority can reply to this request, and I don't recognise the address this reply was sent from"
msgstr ""
-#: app/models/user_mailer.rb:45
-msgid "Unable to change email address on {{site_name}}"
+#: app/models/info_request.rb:785
+msgid "Awaiting classification."
+msgstr ""
+
+#: app/models/info_request.rb:787
+msgid "Awaiting response."
+msgstr ""
+
+#: app/models/info_request.rb:789
+msgid "Delayed."
+msgstr ""
+
+#: app/models/info_request.rb:791
+msgid "Long overdue."
+msgstr ""
+
+#: app/models/info_request.rb:793
+msgid "Information not held."
+msgstr ""
+
+#: app/models/info_request.rb:795
+msgid "Refused."
+msgstr ""
+
+#: app/models/info_request.rb:797
+msgid "Partially successful."
+msgstr ""
+
+#: app/models/info_request.rb:799
+msgid "Successful."
+msgstr ""
+
+#: app/models/info_request.rb:801
+msgid "Waiting clarification."
+msgstr ""
+
+#: app/models/info_request.rb:803
+msgid "Handled by post."
msgstr ""
-#: app/models/track_thing.rb:123
+#: app/models/info_request.rb:805
+msgid "Awaiting internal review."
+msgstr ""
+
+#: app/models/info_request.rb:807
+msgid "Delivery error"
+msgstr ""
+
+#: app/models/info_request.rb:809
+msgid "Unusual response."
+msgstr ""
+
+#: app/models/info_request.rb:811
+msgid "Withdrawn by the requester."
+msgstr ""
+
+#: app/models/info_request.rb:816 app/models/info_request_event.rb:318
+msgid "unknown status "
+msgstr ""
+
+#: app/models/info_request_event.rb:306
+msgid "Response"
+msgstr ""
+
+#: app/models/info_request_event.rb:313
+msgid "Internal review request"
+msgstr ""
+
+#: app/models/info_request_event.rb:316
+msgid "Clarification"
+msgstr ""
+
+#: app/models/info_request_event.rb:320
+msgid "Follow up"
+msgstr ""
+
+#: app/models/info_request_event.rb:323
+msgid "display_status only works for incoming and outgoing messages right now"
+msgstr ""
+
+#: app/models/outgoing_message.rb:63
+msgid "Dear {{public_body_name}},"
+msgstr ""
+
+#: app/models/outgoing_message.rb:68
+msgid "Yours sincerely,"
+msgstr ""
+
+#: app/models/outgoing_message.rb:70
+msgid "Yours faithfully,"
+msgstr ""
+
+#: app/models/outgoing_message.rb:74
+msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
+msgstr ""
+
+#: app/models/outgoing_message.rb:146
+msgid "Please give details explaining why you want a review"
+msgstr ""
+
+#: app/models/outgoing_message.rb:148
+msgid "Please enter your follow up message"
+msgstr ""
+
+#: app/models/outgoing_message.rb:151
+msgid "Please enter your letter requesting information"
+msgstr ""
+
+#: app/models/outgoing_message.rb:157
+msgid "Please sign at the bottom with your name, or alter the \"%{signoff}\" signature"
+msgstr ""
+
+#: app/models/outgoing_message.rb:160
+msgid "Please write your message using a mixture of capital and lower case letters. This makes it easier for others to read."
+msgstr ""
+
+#: app/models/outgoing_message.rb:163
+msgid "Please choose what sort of reply you are making."
+msgstr ""
+
+#: app/models/profile_photo.rb:91
+msgid "Please choose a file containing your photo."
+msgstr ""
+
+#: app/models/profile_photo.rb:96
+msgid "Couldn't understand the image file that you uploaded. PNG, JPEG, GIF and many other common image file formats are supported."
+msgstr ""
+
+#: app/models/profile_photo.rb:101
+msgid "Failed to convert image to a PNG"
+msgstr ""
+
+#: app/models/profile_photo.rb:105
+msgid "Failed to convert image to the correct size: at %{cols}x%{rows}, need %{width}x%{height}"
+msgstr ""
+
+#: app/models/public_body.rb:36
+msgid "Name can't be blank"
+msgstr ""
+
+#: app/models/public_body.rb:37
+msgid "URL name can't be blank"
+msgstr ""
+
+#: app/models/public_body.rb:39
+msgid "Short name is already taken"
+msgstr ""
+
+#: app/models/public_body.rb:40
+msgid "Name is already taken"
+msgstr ""
+
+#: app/models/request_mailer.rb:50
+msgid "FOI response requires admin - "
+msgstr ""
+
+#: app/models/request_mailer.rb:67
+msgid "New response to your FOI request - "
+msgstr ""
+
+#: app/models/request_mailer.rb:86
+msgid "Delayed response to your FOI request - "
+msgstr ""
+
+#: app/models/request_mailer.rb:105
+msgid "You're long overdue a response to your FOI request - "
+msgstr ""
+
+#: app/models/request_mailer.rb:125
+msgid "Was the response you got to your FOI request any good?"
+msgstr ""
+
+#: app/models/request_mailer.rb:168
+msgid "Somebody added a note to your FOI request - "
+msgstr ""
+
+#: app/models/request_mailer.rb:177
+msgid "Some notes have been added to your FOI request - "
+msgstr ""
+
+#: app/models/request_mailer.rb:218
+msgid "Could not identify the request from the email address"
+msgstr ""
+
+#: app/models/track_mailer.rb:25
+msgid "Your {{site_name}} email alert"
+msgstr ""
+
+#: app/models/track_thing.rb:83 app/views/general/search.rhtml:54
+msgid "users"
+msgstr ""
+
+#: app/models/track_thing.rb:86 app/views/general/search.rhtml:103
+#: app/views/request/_request_filter_form.rhtml:14
+msgid "comments"
+msgstr ""
+
+#: app/models/track_thing.rb:89 app/views/general/search.rhtml:55
+msgid "authorities"
+msgstr ""
+
+#: app/models/track_thing.rb:92 app/models/track_thing.rb:111 app/models/track_thing.rb:113
+#: app/views/general/search.rhtml:53
+msgid "requests"
+msgstr ""
+
+#: app/models/track_thing.rb:95
+msgid "between two dates"
+msgstr ""
+
+#: app/models/track_thing.rb:98
+msgid "unsuccessful"
+msgstr ""
+
+#: app/models/track_thing.rb:101
+msgid "successful"
+msgstr ""
+
+#: app/models/track_thing.rb:104
+msgid "awaiting a response"
+msgstr ""
+
+#: app/models/track_thing.rb:112
+msgid "requests which are {{list_of_statuses}}"
+msgstr ""
+
+#: app/models/track_thing.rb:112 app/models/track_thing.rb:120
+msgid " or "
+msgstr ""
+
+#: app/models/track_thing.rb:116
+msgid "anything"
+msgstr ""
+
+#: app/models/track_thing.rb:122
+msgid "{{list_of_things}} matching text '{{search_query}}'"
+msgstr ""
+
+#: app/models/track_thing.rb:195
+msgid "'{{link_to_request}}', a request"
+msgstr ""
+
+#: app/models/track_thing.rb:196
msgid "Track this request by email"
msgstr ""
-#: app/models/track_thing.rb:124
+#: app/models/track_thing.rb:197
msgid "You are already tracking this request by email"
msgstr ""
-#: app/models/track_thing.rb:138
+#: app/models/track_thing.rb:199 app/models/track_thing.rb:200
+msgid "New updates for the request '{{request_title}}'"
+msgstr ""
+
+#: app/models/track_thing.rb:202
+msgid "To follow updates to the request '{{request_title}}'"
+msgstr ""
+
+#: app/models/track_thing.rb:203
+msgid "Then you will be emailed whenever the request '{{request_title}}' is updated."
+msgstr ""
+
+#: app/models/track_thing.rb:204
+msgid "Confirm you want to follow updates to the request '{{request_title}}'"
+msgstr ""
+
+#: app/models/track_thing.rb:211
msgid "any <a href=\"/list\">new requests</a>"
msgstr ""
-#: app/models/track_thing.rb:139
+#: app/models/track_thing.rb:212
msgid "Email me when there are new requests"
msgstr ""
-#: app/models/track_thing.rb:140
+#: app/models/track_thing.rb:213
msgid "You are being emailed when there are new requests"
msgstr ""
-#: app/models/track_thing.rb:142 app/models/track_thing.rb:143
+#: app/models/track_thing.rb:215 app/models/track_thing.rb:216
msgid "New Freedom of Information requests"
msgstr ""
-#: app/models/track_thing.rb:145
+#: app/models/track_thing.rb:218
msgid "To be emailed about any new requests"
msgstr ""
-#: app/models/track_thing.rb:146
+#: app/models/track_thing.rb:219
msgid "Then you will be emailed whenever anyone makes a new FOI request."
msgstr ""
-#: app/models/track_thing.rb:147
+#: app/models/track_thing.rb:220
msgid "Confirm you want to be emailed about new requests"
msgstr ""
-#: app/models/track_thing.rb:154
+#: app/models/track_thing.rb:227
msgid "any <a href=\"/list/successful\">successful requests</a>"
msgstr ""
-#: app/models/track_thing.rb:155
+#: app/models/track_thing.rb:228
msgid "Email me new successful responses "
msgstr ""
-#: app/models/track_thing.rb:156
+#: app/models/track_thing.rb:229
msgid "You are being emailed about any new successful responses"
msgstr ""
-#: app/models/track_thing.rb:158 app/models/track_thing.rb:159
+#: app/models/track_thing.rb:231 app/models/track_thing.rb:232
msgid "Successful Freedom of Information requests"
msgstr ""
-#: app/models/track_thing.rb:161
+#: app/models/track_thing.rb:234
msgid "To be emailed about any successful requests"
msgstr ""
-#: app/models/track_thing.rb:162
+#: app/models/track_thing.rb:235
msgid "Then you will be emailed whenever an FOI request succeeds."
msgstr ""
-#: app/models/track_thing.rb:163
+#: app/models/track_thing.rb:236
msgid "Confirm you want to be emailed when an FOI request succeeds"
msgstr ""
-#: app/models/track_thing.rb:174
+#: app/models/track_thing.rb:246
+msgid "'{{link_to_authority}}', a public authority"
+msgstr ""
+
+#: app/models/track_thing.rb:247
msgid "Track requests to {{public_body_name}} by email"
msgstr ""
-#: app/models/track_thing.rb:175
+#: app/models/track_thing.rb:248
msgid "You are already tracking requests to {{public_body_name}} by email"
msgstr ""
-#: app/models/track_thing.rb:180
+#: app/models/track_thing.rb:253
msgid "To be emailed about requests made using {{site_name}} to the public authority '{{public_body_name}}'"
msgstr ""
-#: app/models/track_thing.rb:181
+#: app/models/track_thing.rb:254
msgid "Then you will be emailed whenever someone requests something or gets a response from '{{public_body_name}}'."
msgstr ""
-#: app/models/track_thing.rb:182
+#: app/models/track_thing.rb:255
msgid "Confirm you want to be emailed about requests to '{{public_body_name}}'"
msgstr ""
-#: app/models/track_thing.rb:190
+#: app/models/track_thing.rb:262
+msgid "'{{link_to_user}}', a person"
+msgstr ""
+
+#: app/models/track_thing.rb:263
msgid "Track this person by email"
msgstr ""
-#: app/models/track_thing.rb:191
+#: app/models/track_thing.rb:264
msgid "You are already tracking this person by email"
msgstr ""
-#: app/models/track_thing.rb:193 app/models/track_thing.rb:194
+#: app/models/track_thing.rb:266 app/models/track_thing.rb:267
msgid "FOI requests by '{{user_name}}'"
msgstr ""
-#: app/models/track_thing.rb:196
+#: app/models/track_thing.rb:269
msgid "To be emailed about requests by '{{user_name}}'"
msgstr ""
-#: app/models/track_thing.rb:197
+#: app/models/track_thing.rb:270
msgid "Then you will be emailed whenever '{{user_name}}' requests something or gets a response."
msgstr ""
-#: app/models/track_thing.rb:198
+#: app/models/track_thing.rb:271
msgid "Confirm you want to be emailed about requests by '{{user_name}}'"
msgstr ""
-#: app/models/track_thing.rb:206
-msgid "Track things matching '{{query}}' by email"
+#: app/models/track_thing.rb:279
+msgid "Track things matching this search by email"
msgstr ""
-#: app/models/track_thing.rb:207
-msgid "You are already tracking things matching '{{query}}' by email"
+#: app/models/track_thing.rb:280
+msgid "You are already tracking things matching this search by email"
msgstr ""
-#: app/models/track_thing.rb:209 app/models/track_thing.rb:210
-msgid "Requests or responses matching '{{query}}'"
+#: app/models/track_thing.rb:282 app/models/track_thing.rb:283
+msgid "Requests or responses matching your saved search"
msgstr ""
-#: app/models/track_thing.rb:212
-msgid "To follow requests and responses matching '{{query}}'"
+#: app/models/track_thing.rb:285
+msgid "To follow requests and responses matching your search"
msgstr ""
-#: app/models/track_thing.rb:213
-msgid "Then you will be emailed whenever a new request or response matches '{{query}}'."
+#: app/models/track_thing.rb:286
+msgid "Then you will be emailed whenever a new request or response matches your search."
msgstr ""
-#: app/models/track_thing.rb:214
-msgid "Confirm you want to be emailed about new requests or responses matching '{{query}}'"
+#: app/models/track_thing.rb:287
+msgid "Confirm you want to be emailed about new requests or responses matching your search"
msgstr ""
-#: app/models/contact_validator.rb:28 app/models/user.rb:36
-msgid "Please enter your name"
+#: app/models/user.rb:40
+msgid "Please enter a password"
msgstr ""
-#: app/models/contact_validator.rb:29 app/models/user.rb:34
-msgid "Please enter your email address"
+#: app/models/user.rb:51
+msgid "Please enter the same password twice"
msgstr ""
-#: app/models/contact_validator.rb:30
-msgid "Please enter a subject"
+#: app/models/user.rb:56
+msgid "Admin level is not included in list"
msgstr ""
-#: app/models/contact_validator.rb:31
-msgid "Please enter the message you want to send"
+#: app/models/user.rb:117
+msgid "Please enter a valid email address"
msgstr ""
-#: app/models/contact_validator.rb:34
-msgid "Email doesn't look like a valid address"
+#: app/models/user.rb:120
+msgid "Please enter your name, not your email address, in the name field."
msgstr ""
-#: app/models/info_request.rb:34
-msgid "Please enter a summary of your request"
+#: app/models/user.rb:133
+msgid "{{user_name}} (Banned)"
msgstr ""
-#: app/models/info_request.rb:35
-msgid "Please write a summary with some text in it"
+#: app/models/user.rb:146
+msgid "Either the email or password was not recognised, please try again."
msgstr ""
-#: app/models/info_request.rb:120
-msgid "Please write the summary using a mixture of capital and lower case letters. This makes it easier for others to read."
+#: app/models/user.rb:148
+msgid "Either the email or password was not recognised, please try again. Or create a new account using the form on the right."
msgstr ""
-#: app/models/info_request.rb:123
-msgid "Please keep the summary short, like in the subject of an email. You can use a phrase, rather than a full sentence."
+#: app/models/user_mailer.rb:34
+msgid "Confirm your new email address on {{site_name}}"
msgstr ""
-#: app/models/info_request.rb:126
-msgid "Please describe more what the request is about in the subject. There is no need to say it is an FOI request, we add that on anyway."
+#: app/models/user_mailer.rb:45
+msgid "Unable to change email address on {{site_name}}"
msgstr ""
-#: app/models/info_request.rb:395
-msgid "This request has been set by an administrator to \"allow new responses from nobody\""
+#: app/views/admin_public_body/_locale_selector.rhtml:2
+msgid "Edit language version:"
msgstr ""
-#: app/models/info_request.rb:401
-msgid "Only the authority can reply to this request, but there is no \"From\" address to check against"
+#: app/views/comment/_comment_form.rhtml:8
+msgid "Email me future updates to this request"
msgstr ""
-#: app/models/info_request.rb:405
-msgid "Only the authority can reply to this request, and I don't recognise the address this reply was sent from"
+#: app/views/comment/_comment_form.rhtml:15
+msgid "Preview your annotation"
msgstr ""
-#: app/models/info_request.rb:785
-msgid "Awaiting classification."
+#: app/views/comment/_comment_form.rhtml:16
+msgid " (<strong>no ranty</strong> politics, read our <a href=\"%s\">moderation policy</a>)"
msgstr ""
-#: app/models/info_request.rb:787
-msgid "Awaiting response."
+#: app/views/comment/_single_comment.rhtml:10
+msgid "You"
msgstr ""
-#: app/models/info_request.rb:789
-msgid "Delayed."
+#: app/views/comment/_single_comment.rhtml:10
+msgid "left an annotation"
msgstr ""
-#: app/models/info_request.rb:791
-msgid "Long overdue."
+#: app/views/comment/_single_comment.rhtml:24
+msgid "Report abuse"
msgstr ""
-#: app/models/info_request.rb:793
-msgid "Information not held."
+#: app/views/comment/new.rhtml:14
+msgid "Add an annotation"
msgstr ""
-#: app/models/info_request.rb:795
-msgid "Refused."
+#: app/views/comment/new.rhtml:18
+msgid "Annotations are so anyone, including you, can help the requester with their request. For example:"
msgstr ""
-#: app/models/info_request.rb:797
-msgid "Partially successful."
+#: app/views/comment/new.rhtml:24
+msgid " Advise on how to <strong>best clarify</strong> the request."
msgstr ""
-#: app/models/info_request.rb:799
-msgid "Successful."
+#: app/views/comment/new.rhtml:28
+msgid " Link to the information requested, if it is <strong>already available</strong> on the Internet. "
msgstr ""
-#: app/models/info_request.rb:801
-msgid "Waiting clarification."
+#: app/views/comment/new.rhtml:29
+msgid " Suggest <strong>where else</strong> the requester might find the information. "
msgstr ""
-#: app/models/info_request.rb:803
-msgid "Handled by post."
+#: app/views/comment/new.rhtml:30
+msgid " Offer better ways of <strong>wording the request</strong> to get the information. "
msgstr ""
-#: app/models/info_request.rb:805
-msgid "Awaiting internal review."
+#: app/views/comment/new.rhtml:34
+msgid " <strong>Summarise</strong> the content of any information returned. "
msgstr ""
-#: app/models/info_request.rb:807 app/models/info_request_event.rb:315
-msgid "Delivery error"
+#: app/views/comment/new.rhtml:35
+msgid " Say how you've <strong>used the information</strong>, with links if possible."
msgstr ""
-#: app/models/info_request.rb:809
-msgid "Unusual response."
+#: app/views/comment/new.rhtml:36
+msgid "<strong>Thank</strong> the public authority or "
msgstr ""
-#: app/models/info_request.rb:811
-msgid "Withdrawn by the requester."
+#: app/views/comment/new.rhtml:39
+msgid "Suggest how the requester can find the <strong>rest of the information</strong>."
msgstr ""
-#: app/models/info_request.rb:816 app/models/info_request_event.rb:333
-msgid "unknown status "
+#: app/views/comment/new.rhtml:42
+msgid "Point to <strong>related information</strong>, campaigns or forums which may be useful."
msgstr ""
-#: app/models/user.rb:38
-msgid "Please enter a password"
+#: app/views/comment/new.rhtml:46
+msgid "A <strong>summary</strong> of the response if you have received it by post. "
msgstr ""
-#: app/models/user.rb:49
-msgid "Please enter the same password twice"
+#: app/views/comment/new.rhtml:50
+msgid " Ideas on what <strong>other documents to request</strong> which the authority may hold. "
msgstr ""
-#: app/models/user.rb:54
-msgid "Admin level is not included in list"
+#: app/views/comment/new.rhtml:53
+msgid "Advise on whether the <strong>refusal is legal</strong>, and how to complain about it if not."
msgstr ""
-#: app/models/user.rb:106
-msgid "Please enter a valid email address"
+#: app/views/comment/new.rhtml:57
+msgid "<strong>Advice</strong> on how to get a response that will satisfy the requester. </li>"
msgstr ""
-#: app/models/user.rb:109
-msgid "Please enter your name, not your email address, in the name field."
+#: app/views/comment/new.rhtml:60
+msgid "You know what caused the error, and can <strong>suggest a solution</strong>, such as a working email address."
msgstr ""
-#: app/models/user.rb:122
-msgid "{{user_name}} (Banned)"
+#: app/views/comment/new.rhtml:63
+msgid "Your thoughts on what the {{site_name}} <strong>administrators</strong> should do about the request."
msgstr ""
-#: app/models/user.rb:135
-msgid "Either the email or password was not recognised, please try again."
+#: app/views/comment/new.rhtml:70
+msgid "Annotations will be posted publicly here, and are \n <strong>not</strong> sent to {{public_body_name}}."
msgstr ""
-#: app/models/user.rb:137
-msgid "Either the email or password was not recognised, please try again. Or create a new account using the form on the right."
+#: app/views/comment/preview.rhtml:1
+msgid "Preview new annotation on '{{info_request_title}}'"
msgstr ""
-#: app/models/profile_photo.rb:91
-msgid "Please choose a file containing your photo."
+#: app/views/comment/preview.rhtml:5
+msgid "Now preview your annotation"
msgstr ""
-#: app/models/profile_photo.rb:96
-msgid "Couldn't understand the image file that you uploaded. PNG, JPEG, GIF and many other common image file formats are supported."
+#: app/views/comment/preview.rhtml:10
+msgid "Your name and annotation will appear in <strong>search engines</strong>."
msgstr ""
-#: app/models/profile_photo.rb:101
-msgid "Failed to convert image to a PNG"
+#: app/views/comment/preview.rhtml:20
+msgid "Re-edit this annotation"
msgstr ""
-#: app/models/profile_photo.rb:105
-msgid "Failed to convert image to the correct size: at %{cols}x%{rows}, need %{width}x%{height}"
+#: app/views/comment/preview.rhtml:21
+msgid "Post annotation"
msgstr ""
-#: app/models/track_mailer.rb:25
-msgid "Your {{site_name}} email alert"
+#: app/views/contact_mailer/message.rhtml:4
+msgid "Message sent using {{site_name}} contact form, "
msgstr ""
-#: app/models/info_request_event.rb:293
-msgid "Acknowledgement"
+#: app/views/contact_mailer/message.rhtml:7
+msgid "Last request viewed: "
msgstr ""
-#: app/models/info_request_event.rb:295
-msgid "Clarification required"
+#: app/views/contact_mailer/message.rhtml:10
+msgid "Last authority viewed: "
msgstr ""
-#: app/models/info_request_event.rb:297
-msgid "Handled by post"
+#: app/views/contact_mailer/user_message.rhtml:2
+msgid "{{user_name}} has used {{site_name}} to send you the message below."
msgstr ""
-#: app/models/info_request_event.rb:299
-msgid "Deadline Extended"
+#: app/views/contact_mailer/user_message.rhtml:3
+msgid "Your details have not been given to anyone, unless you choose to reply to this\nmessage, which will then go directly to the person who wrote the message."
msgstr ""
-#: app/models/info_request_event.rb:301
-msgid "Wrong Response"
+#: app/views/contact_mailer/user_message.rhtml:10
+msgid "View Freedom of Information requests made by {{user_name}}:"
msgstr ""
-#: app/models/info_request_event.rb:303
-msgid "Information not held"
+#: app/views/general/_advanced_search_tips.rhtml:3
+msgid "Advanced search tips"
msgstr ""
-#: app/models/info_request_event.rb:305
-msgid "Refused"
+#: app/views/general/_advanced_search_tips.rhtml:5
+msgid "Enter words that you want to find separated by spaces, e.g. <strong>climbing lane</strong>"
msgstr ""
-#: app/models/info_request_event.rb:307
-msgid "Some information sent"
+#: app/views/general/_advanced_search_tips.rhtml:6
+msgid "Use OR (in capital letters) where you don't mind which word, e.g. <strong><code>commons OR lords</code></strong>"
msgstr ""
-#: app/models/info_request_event.rb:309
-msgid "All information sent"
+#: app/views/general/_advanced_search_tips.rhtml:7
+msgid "Use quotes when you want to find an exact phrase, e.g. <strong><code>\"Liverpool City Council\"</code></strong>"
msgstr ""
-#: app/models/info_request_event.rb:311
-msgid "Internal review acknowledgement"
+#: app/views/general/_advanced_search_tips.rhtml:8
+msgid "<strong><code>status:</code></strong> to select based on the status or historical status of the request, see the <a href=\"{{statuses_url}}\">table of statuses</a> below."
msgstr ""
-#: app/models/info_request_event.rb:313
-msgid "Withdrawn by requester"
+#: app/views/general/_advanced_search_tips.rhtml:9
+msgid "<strong><code>variety:</code></strong> to select type of thing to search for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
msgstr ""
-#: app/models/info_request_event.rb:317
-msgid "Unusual response"
+#: app/views/general/_advanced_search_tips.rhtml:10
+msgid "<strong><code>requested_from:home_office</code></strong> to search requests from the Home Office, typing the name as in the URL."
msgstr ""
-#: app/models/info_request_event.rb:328
-msgid "Internal review request"
+#: app/views/general/_advanced_search_tips.rhtml:11
+msgid "<strong><code>requested_by:julian_todd</code></strong> to search requests made by Julian Todd, typing the name as in the URL."
msgstr ""
-#: app/models/info_request_event.rb:331
-msgid "Clarification"
+#: app/views/general/_advanced_search_tips.rhtml:12
+msgid "<strong><code>commented_by:tony_bowden</code></strong> to search annotations made by Tony Bowden, typing the name as in the URL."
msgstr ""
-#: app/models/info_request_event.rb:335
-msgid "Follow up"
+#: app/views/general/_advanced_search_tips.rhtml:13
+msgid "<strong><code>request:</code></strong> to restrict to a specific request, typing the title as in the URL."
msgstr ""
-#: app/models/info_request_event.rb:338
-msgid "display_status only works for incoming and outgoing messages right now"
+#: app/views/general/_advanced_search_tips.rhtml:14
+msgid "<strong><code>filetype:pdf</code></strong> to find all responses with PDF attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
msgstr ""
-#: app/models/change_email_validator.rb:29
-msgid "Please enter your old email address"
+#: app/views/general/_advanced_search_tips.rhtml:15
+msgid "Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show things that happened in the first two weeks of January."
msgstr ""
-#: app/models/change_email_validator.rb:30
-msgid "Please enter your new email address"
+#: app/views/general/_advanced_search_tips.rhtml:16
+msgid "<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
msgstr ""
-#: app/models/change_email_validator.rb:31
-msgid "Please enter your password"
+#: app/views/general/_advanced_search_tips.rhtml:19
+msgid "Read about <a href=\"{{advanced_search_url}}\">advanced search operators</a>, such as proximity and wildcards."
msgstr ""
-#: app/models/change_email_validator.rb:39
-msgid "Old email doesn't look like a valid address"
+#: app/views/general/_advanced_search_tips.rhtml:22
+msgid "Table of statuses"
msgstr ""
-#: app/models/change_email_validator.rb:44
-msgid "Old email address isn't the same as the address of the account you are logged in with"
+#: app/views/general/_advanced_search_tips.rhtml:23
+msgid "All the options below can use <strong>status</strong> or <strong>latest_status</strong> before the colon. For example, <strong>status:not_held</strong> will match requests which have <em>ever</em> been marked as not held; <strong>latest_status:not_held</strong> will match only requests that are <em>currently</em> marked as not held."
msgstr ""
-#: app/models/change_email_validator.rb:47
-msgid "Password is not correct"
+#: app/views/general/_advanced_search_tips.rhtml:26
+msgid "Waiting for the public authority to reply"
msgstr ""
-#: app/models/change_email_validator.rb:53
-msgid "New email doesn't look like a valid address"
+#: app/views/general/_advanced_search_tips.rhtml:27
+msgid "The public authority does not have the information requested"
msgstr ""
-#: app/models/outgoing_message.rb:63
-msgid "Dear {{public_body_name}},"
+#: app/views/general/_advanced_search_tips.rhtml:28
+msgid "The request was refused by the public authority"
msgstr ""
-#: app/models/outgoing_message.rb:68
-msgid "Yours sincerely,"
+#: app/views/general/_advanced_search_tips.rhtml:29
+msgid "Some of the information requested has been received"
msgstr ""
-#: app/models/outgoing_message.rb:70
-msgid "Yours faithfully,"
+#: app/views/general/_advanced_search_tips.rhtml:30
+msgid "All of the information requested has been received"
msgstr ""
-#: app/models/outgoing_message.rb:74
-msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
+#: app/views/general/_advanced_search_tips.rhtml:31
+msgid "The public authority would like part of the request explained"
msgstr ""
-#: app/models/outgoing_message.rb:146
-msgid "Please give details explaining why you want a review"
+#: app/views/general/_advanced_search_tips.rhtml:32
+msgid "The public authority would like to / has responded by post"
msgstr ""
-#: app/models/outgoing_message.rb:148
-msgid "Please enter your follow up message"
+#: app/views/general/_advanced_search_tips.rhtml:33
+msgid "Waiting for the public authority to complete an internal review of their handling of the request"
msgstr ""
-#: app/models/outgoing_message.rb:151
-msgid "Please enter your letter requesting information"
+#: app/views/general/_advanced_search_tips.rhtml:34
+msgid "Received an error message, such as delivery failure."
msgstr ""
-#: app/models/outgoing_message.rb:157
-msgid "Please sign at the bottom with your name, or alter the \"%{signoff}\" signature"
+#: app/views/general/_advanced_search_tips.rhtml:35
+msgid "A strange reponse, required attention by the {{site_name}} team"
msgstr ""
-#: app/models/outgoing_message.rb:160
-msgid "Please write your message using a mixture of capital and lower case letters. This makes it easier for others to read."
+#: app/views/general/_advanced_search_tips.rhtml:36
+msgid "The requester has abandoned this request for some reason"
msgstr ""
-#: app/models/outgoing_message.rb:163
-msgid "Please choose what sort of reply you are making."
+#: app/views/general/_advanced_search_tips.rhtml:39
+msgid "Table of varieties"
msgstr ""
-#: app/models/about_me_validator.rb:24
-msgid "Please keep it shorter than 500 characters"
+#: app/views/general/_advanced_search_tips.rhtml:40
+msgid "All the options below can use <strong>variety</strong> or <strong>latest_variety</strong> before the colon. For example, <strong>variety:sent</strong> will match requests which have <em>ever</em> been sent; <strong>latest_variety:sent</strong> will match only requests that are <em>currently</em> marked as sent."
msgstr ""
-#: app/models/public_body.rb:36
-msgid "Name can't be blank"
+#: app/views/general/_advanced_search_tips.rhtml:42
+msgid "Original request sent"
msgstr ""
-#: app/models/public_body.rb:37
-msgid "URL name can't be blank"
+#: app/views/general/_advanced_search_tips.rhtml:43
+msgid "Follow up message sent by requester"
msgstr ""
-#: app/models/public_body.rb:39
-msgid "Short name is already taken"
+#: app/views/general/_advanced_search_tips.rhtml:44
+msgid "Response from a public authority"
msgstr ""
-#: app/models/public_body.rb:40
-msgid "Name is already taken"
+#: app/views/general/_advanced_search_tips.rhtml:45
+msgid "Annotation added to request"
msgstr ""
-#: app/models/request_mailer.rb:210
-msgid "Could not identify the request from the email address"
+#: app/views/general/_advanced_search_tips.rhtml:46
+msgid "A public authority"
msgstr ""
-#: app/models/comment.rb:59
-msgid "Please enter your annotation"
+#: app/views/general/_advanced_search_tips.rhtml:47
+msgid "A {{site_name}} user"
msgstr ""
-#: app/models/comment.rb:62
-msgid "Please write your annotation using a mixture of capital and lower case letters. This makes it easier for others to read."
+#: app/views/general/_credits.rhtml:1
+msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
msgstr ""
-#: app/models/incoming_message.rb:868
-msgid "\n\n[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
+#: app/views/general/_footer.rhtml:2
+msgid "Contact {{site_name}}"
msgstr ""
-#: app/views/request/_correspondence.rhtml:27 app/views/request/_correspondence.rhtml:57
-msgid "Link to this"
+#: app/views/general/_footer.rhtml:3 app/views/general/blog.rhtml:7
+msgid "Follow us on twitter"
msgstr ""
-#: app/views/request/_correspondence.rhtml:28
-msgid "Reply to this message"
+#: app/views/general/_localised_datepicker.rhtml:4
+msgid "Done"
msgstr ""
-#: app/views/request/_correspondence.rhtml:58
-msgid "Send follow up"
+#: app/views/general/_localised_datepicker.rhtml:5
+msgid "Prev"
msgstr ""
-#: app/views/request/list.rhtml:2 app/views/public_body/list.rhtml:3
-msgid "Show only..."
+#: app/views/general/_localised_datepicker.rhtml:6
+msgid "Next"
msgstr ""
-#: app/views/request/list.rhtml:5
-msgid "Successful responses"
+#: app/views/general/_localised_datepicker.rhtml:7
+msgid "Today"
msgstr ""
-#: app/views/request/list.rhtml:6
-msgid "Recently sent requests"
+#: app/views/general/_localised_datepicker.rhtml:13
+msgid "Wk"
msgstr ""
-#: app/views/request/list.rhtml:23
-msgid "No requests of this sort yet."
+#: app/views/general/_topnav.rhtml:3
+msgid "Home"
msgstr ""
-#: app/views/request/list.rhtml:29
-msgid "Unexpected search result type"
+#: app/views/general/_topnav.rhtml:4
+msgid "Make a request"
msgstr ""
-#: app/views/request/_request_listing_single.rhtml:12
-msgid "Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
+#: app/views/general/_topnav.rhtml:5
+msgid "View requests"
msgstr ""
-#: app/views/request/show_response.rhtml:13
-msgid "Which of these is happening?"
+#: app/views/general/_topnav.rhtml:6
+msgid "View authorities"
msgstr ""
-#: app/views/request/show_response.rhtml:18
-msgid "The authority say that they <strong>need a postal\n address</strong>, not just an email, for it to be a valid FOI request"
+#: app/views/general/_topnav.rhtml:7
+msgid "Read blog"
msgstr ""
-#: app/views/request/show_response.rhtml:26
-msgid "The authority only has a <strong>paper copy</strong> of the information."
+#: app/views/general/_topnav.rhtml:8
+msgid "Help"
msgstr ""
-#: app/views/request/show_response.rhtml:29
-msgid "At the bottom of this page, write a reply to them trying to persuade them to scan it in\n (<a href=\"%s\">more details</a>)."
+#: app/views/general/blog.rhtml:1
+msgid "{{site_name}} blog and tweets"
msgstr ""
-#: app/views/request/show_response.rhtml:34
-msgid "You want to <strong>give your postal address</strong> to the authority in private."
+#: app/views/general/blog.rhtml:6
+msgid "Stay up to date"
msgstr ""
-#: app/views/request/show_response.rhtml:37
-msgid "To do that please send a private email to "
+#: app/views/general/blog.rhtml:8
+msgid "Subscribe to blog"
msgstr ""
-#: app/views/request/show_response.rhtml:39
-msgid "containing your postal address, and asking them to reply to this request.\n Or you could phone them."
+#: app/views/general/blog.rhtml:53
+msgid "Posted on {{date}} by {{author}}"
msgstr ""
-#: app/views/request/show_response.rhtml:42
-msgid "When you receive the paper response, please help\n others find out what it says:"
+#: app/views/general/blog.rhtml:56
+msgid "{{number_of_comments}} comments"
msgstr ""
-#: app/views/request/show_response.rhtml:45
-msgid "Add an annotation to your request with choice quotes, or\n a <strong>summary of the response</strong>."
+#: app/views/general/exception_caught.rhtml:3
+msgid "Sorry, we couldn't find that page"
msgstr ""
-#: app/views/request/show_response.rhtml:47
-msgid "If you can, scan in or photograph the response, and <strong>send us\n a copy to upload</strong>."
+#: app/views/general/exception_caught.rhtml:5
+msgid "The page doesn't exist. Things you can try now:"
msgstr ""
-#: app/views/request/show_response.rhtml:60
-msgid "New response to your request"
+#: app/views/general/exception_caught.rhtml:8
+msgid "Check for mistakes if you typed or copied the address."
msgstr ""
-#: app/views/request/show_response.rhtml:62
-msgid "Response to your request"
+#: app/views/general/exception_caught.rhtml:9
+msgid "Search the site to find what you were looking for."
msgstr ""
-#: app/views/request/show_response.rhtml:66
-msgid "New response to {{law_used_short}} request"
+#: app/views/general/exception_caught.rhtml:12 app/views/general/frontpage.rhtml:23
+#: app/views/general/search.rhtml:17 app/views/general/search.rhtml:32 app/views/general/search.rhtml:45
+#: app/views/public_body/list.rhtml:43 app/views/request/_request_filter_form.rhtml:49
+#: app/views/request/select_authority.rhtml:41
+msgid "Search"
msgstr ""
-#: app/views/request/_followup.rhtml:4
-msgid "Request an internal review from"
+#: app/views/general/exception_caught.rhtml:17
+msgid "Sorry, there was a problem processing this page"
msgstr ""
-#: app/views/request/_followup.rhtml:7
-msgid "Send a public follow up message to"
+#: app/views/general/exception_caught.rhtml:18
+msgid "You have found a bug. Please <a href=\"{{contact_url}}\">contact us</a> to tell us about the problem"
msgstr ""
-#: app/views/request/_followup.rhtml:10
-msgid "Send a public reply to"
+#: app/views/general/exception_caught.rhtml:21
+msgid "Technical details"
msgstr ""
-#: app/views/request/_followup.rhtml:16
-msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
+#: app/views/general/exception_caught.rhtml:22
+msgid "Unknown"
msgstr ""
-#: app/views/request/_followup.rhtml:20
-msgid "If you are dissatisfied by the response you got from\n the public authority, you have the right to\n complain (<a href=\"%s\">details</a>)."
+#: app/views/general/frontpage.rhtml:5
+msgid "Make a new<br/>\n <strong>Freedom <span>of</span><br/>\n Information<br/>\n request</strong>"
msgstr ""
-#: app/views/request/_followup.rhtml:27
-msgid "Please <strong>only</strong> write messages directly relating to your request {{request_link}}. If you would like to ask for information that was not in your original request, then <a href=\"{{new_request_link}}\">file a new request</a>."
+#: app/views/general/frontpage.rhtml:10
+msgid "Start now &raquo;"
msgstr ""
-#: app/views/request/_followup.rhtml:32
-msgid "The response to your request has been <strong>delayed</strong>. You can say that, \n by law, the authority should normally have responded\n <strong>promptly</strong> and"
+#: app/views/general/frontpage.rhtml:15
+msgid "Search over<br/>\n <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\n <strong>{{number_of_authorities}} authorities</strong>"
msgstr ""
-#: app/views/request/_followup.rhtml:36 app/views/request/show.rhtml:70 app/views/request/show.rhtml:80
-msgid "in term time"
+#: app/views/general/frontpage.rhtml:37
+msgid "Who can I request information from?"
msgstr ""
-#: app/views/request/_followup.rhtml:38
-msgid "by <strong>{{date}}</strong>"
+#: app/views/general/frontpage.rhtml:38
+msgid "{{site_name}} covers requests to {{number_of_authorities}} authorities, including:"
msgstr ""
-#: app/views/request/_followup.rhtml:39 app/views/request/_followup.rhtml:46
-#: app/views/request/show.rhtml:83 app/views/request/show.rhtml:87
-msgid "<a href=\"%s\">details</a>"
-msgstr ""
+#: app/views/general/frontpage.rhtml:43
+msgid "%d request"
+msgid_plural "%d requests"
+msgstr[0] ""
+msgstr[1] ""
-#: app/views/request/_followup.rhtml:44
-msgid "The response to your request is <strong>long overdue</strong>. You can say that, by \n law, under all circumstances, the authority should have responded\n by now"
+#: app/views/general/frontpage.rhtml:48
+msgid "Browse all authorities..."
msgstr ""
-#: app/views/request/_followup.rhtml:58
-msgid "What are you doing?"
+#: app/views/general/frontpage.rhtml:54
+msgid "What information has been released?"
msgstr ""
-#: app/views/request/_followup.rhtml:68
-msgid "I am asking for <strong>new information</strong>"
+#: app/views/general/frontpage.rhtml:55
+msgid "{{site_name}} users have made {{number_of_requests}} requests, including:"
msgstr ""
-#: app/views/request/_followup.rhtml:73
-msgid "I am requesting an <strong>internal review</strong>"
+#: app/views/general/frontpage.rhtml:60
+msgid "answered a request about"
msgstr ""
-#: app/views/request/_followup.rhtml:74
-msgid "<a href=\"%s\">what's that?</a>"
+#: app/views/general/frontpage.rhtml:62
+msgid "{{length_of_time}} ago"
msgstr ""
-#: app/views/request/_followup.rhtml:79
-msgid "<strong>Anything else</strong>, such as clarifying, prompting, thanking"
+#: app/views/general/frontpage.rhtml:67
+msgid "More successful requests..."
msgstr ""
-#: app/views/request/_followup.rhtml:85
-msgid "Edit and add <strong>more details</strong> to the message above,\n explaining why you are dissatisfied with their response."
+#: app/views/general/search.rhtml:8
+msgid "Search Freedom of Information requests, public authorities and users"
msgstr ""
-#: app/views/request/_followup.rhtml:96
-msgid "Preview your message"
+#: app/views/general/search.rhtml:10 app/views/public_body/show.rhtml:109
+msgid "There were no requests matching your query."
msgstr ""
-#: app/views/request/_sidebar.rhtml:2
-msgid "Track this request"
+#: app/views/general/search.rhtml:12
+msgid "Results page {{page_number}}"
msgstr ""
-#: app/views/request/_sidebar.rhtml:5
-msgid "Act on what you've learnt"
+#: app/views/general/search.rhtml:19
+msgid "Search results"
msgstr ""
-#: app/views/request/_sidebar.rhtml:30
-msgid "Similar requests"
+#: app/views/general/search.rhtml:24
+msgid "To use the advanced search, combine phrases and labels as described in the search tips below."
msgstr ""
-#: app/views/request/_sidebar.rhtml:41
-msgid "Event history details"
+#: app/views/general/search.rhtml:33
+msgid "Simple search"
msgstr ""
-#: app/views/request/_sidebar.rhtml:45
-msgid "<a href=\"%s\">Are you the owner of\n any commercial copyright on this page?</a>"
+#: app/views/general/search.rhtml:46
+msgid "Advanced search"
msgstr ""
-#: app/views/request/followup_bad.rhtml:2
-msgid "Unable to send follow up message to {{username}}"
+#: app/views/general/search.rhtml:51 app/views/request/_request_filter_form.rhtml:29
+msgid "Showing"
msgstr ""
-#: app/views/request/followup_bad.rhtml:4
-msgid "Unable to send a reply to {{username}}"
+#: app/views/general/search.rhtml:56
+msgid "everything"
msgstr ""
-#: app/views/request/followup_bad.rhtml:11
-msgid "Freedom of Information law no longer applies to"
+#: app/views/general/search.rhtml:75
+msgid "Tags (separated by a space):"
msgstr ""
-#: app/views/request/followup_bad.rhtml:12
-msgid "From the request page, try replying to a particular message, rather than sending\n a general followup. If you need to make a general followup, and know\n an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
+#: app/views/general/search.rhtml:87
+msgid "Restrict to"
msgstr ""
-#: app/views/request/followup_bad.rhtml:18
-msgid "no longer exists. If you are trying to make\n From the request page, try replying to a particular message, rather than sending\n a general followup. If you need to make a general followup, and know\n an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
+#: app/views/general/search.rhtml:88 app/views/request/_request_filter_form.rhtml:31
+msgid "successful requests"
msgstr ""
-#: app/views/request/followup_bad.rhtml:24
-msgid "We do not have a working {{law_used_full}} address for {{public_body_name}}."
+#: app/views/general/search.rhtml:89 app/views/request/_request_filter_form.rhtml:32
+msgid "unsuccessful requests"
msgstr ""
-#: app/views/request/followup_bad.rhtml:24
-msgid "You may be able to find\n one on their website, or by phoning them up and asking. If you manage\n to find one, then please <a href=\"%s\">send it to us</a>."
+#: app/views/general/search.rhtml:90 app/views/request/_request_filter_form.rhtml:33
+msgid "unresolved requests"
msgstr ""
-#: app/views/request/followup_bad.rhtml:29
-msgid "unknown reason "
+#: app/views/general/search.rhtml:91
+msgid "internal reviews"
msgstr ""
-#: app/views/request/preview.rhtml:5
-msgid "Now preview your request"
+#: app/views/general/search.rhtml:100
+msgid "Search in"
msgstr ""
-#: app/views/request/preview.rhtml:7 app/views/request/followup_preview.rhtml:14
-msgid "Check you haven't included any <strong>personal information</strong>."
+#: app/views/general/search.rhtml:101 app/views/request/_request_filter_form.rhtml:12
+msgid "messages from users"
msgstr ""
-#: app/views/request/preview.rhtml:8
-msgid "Your name, request and any responses will appear in <strong>search engines</strong>\n (<a href=\"%s\">details</a>)."
+#: app/views/general/search.rhtml:102 app/views/request/_request_filter_form.rhtml:13
+msgid "messages from authorities"
msgstr ""
-#: app/views/request/preview.rhtml:17 app/views/request/followup_preview.rhtml:22
-#: app/views/request/new.rhtml:88
-msgid "To:"
+#: app/views/general/search.rhtml:112 app/views/request/_request_filter_form.rhtml:23
+msgid "Made between"
msgstr ""
-#: app/views/request/preview.rhtml:18 app/views/request/followup_preview.rhtml:23
-msgid "Subject:"
+#: app/views/general/search.rhtml:114 app/views/request/_request_filter_form.rhtml:25
+msgid "and"
msgstr ""
-#: app/views/request/preview.rhtml:31
-msgid "<strong>Privacy note:</strong> If you want to request private information about\n yourself then <a href=\"%s\">click here</a>."
+#: app/views/general/search.rhtml:121
+msgid "Filter"
msgstr ""
-#: app/views/request/preview.rhtml:40
-msgid "Re-edit this request"
+#: app/views/general/search.rhtml:129
+msgid "Show most relevant results first"
msgstr ""
-#: app/views/request/preview.rhtml:41
-msgid "Send public "
+#: app/views/general/search.rhtml:131
+msgid "Newest results first"
msgstr ""
-#: app/views/request/preview.rhtml:45
-msgid "Tags:"
+#: app/views/general/search.rhtml:133
+msgid "Recently described results first"
msgstr ""
-#: app/views/request/new_bad_contact.rhtml:1
-msgid "Missing contact details for '"
+#: app/views/general/search.rhtml:141
+msgid "Track this search"
msgstr ""
-#: app/views/request/new_bad_contact.rhtml:5
-msgid "Unfortunately, we do not have a working {{info_request_law_used_full}}\naddress for"
+#: app/views/general/search.rhtml:156
+msgid "One public authority found"
msgstr ""
-#: app/views/request/new_bad_contact.rhtml:6
-msgid "You may be able to find\none on their website, or by phoning them up and asking. If you manage\nto find one, then please <a href=\"{{help_url}}\">send it to us</a>."
+#: app/views/general/search.rhtml:158
+msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}}"
msgstr ""
-#: app/views/request/show.rhtml:5
-msgid "This request has prominence 'hidden'. You can only see it because you are logged\n in as a super user."
+#: app/views/general/search.rhtml:169
+msgid "No public authorities found"
msgstr ""
-#: app/views/request/show.rhtml:11
-msgid "This request is hidden, so that only you the requester can see it. Please\n <a href=\"%s\">contact us</a> if you are not sure why."
+#: app/views/general/search.rhtml:171
+msgid "Did you mean: {{correction}}"
msgstr ""
-#: app/views/request/show.rhtml:36
-msgid "{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) made this {{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to {{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
+#: app/views/general/search.rhtml:173
+msgid "<a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add one</a>."
msgstr ""
-#: app/views/request/show.rhtml:44
-msgid "{{user}} made this {{law_used_full}} request"
+#: app/views/general/search.rhtml:180
+msgid "One person found"
msgstr ""
-#: app/views/request/show.rhtml:45
-msgid "to {{public_body}}"
+#: app/views/general/search.rhtml:182
+msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
msgstr ""
-#: app/views/request/show.rhtml:52
-msgid "Please <strong>answer the question above</strong> so we know whether the "
+#: app/views/general/search.rhtml:196
+msgid "One FOI request found"
msgstr ""
-#: app/views/request/show.rhtml:53
-msgid "useful information."
+#: app/views/general/search.rhtml:198
+msgid "FOI requests {{start_count}} to {{end_count}} of {{total_count}}"
msgstr ""
-#: app/views/request/show.rhtml:55
-msgid "This request has an <strong>unknown status</strong>."
+#: app/views/help/alaveteli.rhtml:6
+msgid "Would you like to see a website like this in your country?"
msgstr ""
-#: app/views/request/show.rhtml:57
-msgid "We're waiting for someone to read"
+#: app/views/layouts/default.rhtml:8 app/views/layouts/no_chrome.rhtml:8
+msgid "Make and browse Freedom of Information (FOI) requests"
msgstr ""
-#: app/views/request/show.rhtml:59
-msgid "and update the status accordingly. Perhaps <strong>you</strong> might like to help out by doing that?"
+#: app/views/layouts/default.rhtml:102
+msgid "Hello, {{username}}!"
msgstr ""
-#: app/views/request/show.rhtml:61
-msgid "We're waiting for"
+#: app/views/layouts/default.rhtml:105
+msgid "My profile"
msgstr ""
-#: app/views/request/show.rhtml:62
-msgid "to read"
+#: app/views/layouts/default.rhtml:109
+msgid "Sign out"
msgstr ""
-#: app/views/request/show.rhtml:64
-msgid "and update the status."
+#: app/views/layouts/default.rhtml:111
+msgid "Sign in or sign up"
msgstr ""
-#: app/views/request/show.rhtml:68
-msgid "Currently <strong>waiting for a response</strong> from {{public_body_link}}, they must respond promptly and"
+#: app/views/layouts/default.rhtml:152
+msgid "Paste this link into emails, tweets, and anywhere else:"
msgstr ""
-#: app/views/request/show.rhtml:72
-msgid "normally"
+#: app/views/outgoing_mailer/_followup_footer.rhtml:1
+msgid "Disclaimer: This message and any reply that you make will be published on the internet. Our privacy and copyright policies:"
msgstr ""
-#: app/views/request/show.rhtml:74
-msgid "no later than"
+#: app/views/outgoing_mailer/_followup_footer.rhtml:4
+msgid "If you find this service useful as an FOI officer, please ask your web manager to link to us from your organisation's FOI page."
msgstr ""
-#: app/views/request/show.rhtml:77
-msgid "Response to this request is <strong>delayed</strong>."
+#: app/views/outgoing_mailer/followup.rhtml:6 app/views/outgoing_mailer/initial_request.rhtml:5
+msgid "Please use this email address for all replies to this request:"
msgstr ""
-#: app/views/request/show.rhtml:78
-msgid "By law, {{public_body_link}} should normally have responded <strong>promptly</strong> and"
+#: app/views/outgoing_mailer/initial_request.rhtml:8
+msgid "Is {{email_address}} the wrong address for {{type_of_request}} requests to {{public_body_name}}? If so, please contact us using this form:"
msgstr ""
-#: app/views/request/show.rhtml:82
-msgid "by"
+#: app/views/public_body/_body_listing.rhtml:3 app/views/request/_request_listing.rhtml:2
+msgid "None found."
msgstr ""
-#: app/views/request/show.rhtml:85
-msgid "Response to this request is <strong>long overdue</strong>."
+#: app/views/public_body/_body_listing_single.rhtml:12
+msgid "Also called {{other_name}}."
msgstr ""
-#: app/views/request/show.rhtml:86
-msgid "By law, under all circumstances, {{public_body_link}} should have responded by now"
+#: app/views/public_body/_body_listing_single.rhtml:21
+msgid "%d request made."
+msgid_plural "%d requests made."
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/public_body/_body_listing_single.rhtml:23
+msgid "Make your own request"
msgstr ""
-#: app/views/request/show.rhtml:88
-msgid "You can <strong>complain</strong> by"
+#: app/views/public_body/_body_listing_single.rhtml:27
+msgid "Added on {{date}}"
msgstr ""
-#: app/views/request/show.rhtml:89
-msgid "requesting an internal review"
+#: app/views/public_body/_search_ahead.rhtml:3 app/views/request/select_authority.rhtml:47
+msgid "Top search results:"
msgstr ""
-#: app/views/request/show.rhtml:91
-msgid "<strong>did not have</strong> the information requested."
+#: app/views/public_body/_search_ahead.rhtml:5 app/views/request/select_authority.rhtml:49
+msgid "Select one to see more information about the authority."
msgstr ""
-#: app/views/request/show.rhtml:93
-msgid "The request was <strong>refused</strong> by"
+#: app/views/public_body/_search_ahead.rhtml:8 app/views/request/select_authority.rhtml:52
+msgid "No results found."
msgstr ""
-#: app/views/request/show.rhtml:95
-msgid "The request was <strong>successful</strong>."
+#: app/views/public_body/list.rhtml:2
+msgid "Show only..."
msgstr ""
-#: app/views/request/show.rhtml:97
-msgid "The request was <strong>partially successful</strong>."
+#: app/views/public_body/list.rhtml:4
+msgid "Beginning with"
msgstr ""
-#: app/views/request/show.rhtml:100
-msgid "is <strong>waiting for your clarification</strong>."
+#: app/views/public_body/list.rhtml:29
+msgid "<a href=\"%s\">Are we missing a public authority?</a>."
msgstr ""
-#: app/views/request/show.rhtml:101
-msgid "Please"
+#: app/views/public_body/list.rhtml:32
+msgid "List of all authorities (CSV)"
msgstr ""
-#: app/views/request/show.rhtml:102
-msgid "send a follow up message"
+#: app/views/public_body/list.rhtml:36
+msgid "Public authorities - {{description}}"
msgstr ""
-#: app/views/request/show.rhtml:104
-msgid "The request is <strong>waiting for clarification</strong>."
+#: app/views/public_body/list.rhtml:38
+msgid "Public authorities"
msgstr ""
-#: app/views/request/show.rhtml:105
-msgid "If you are {{user_link}}, please"
+#: app/views/public_body/list.rhtml:47
+msgid "Found {{count}} public bodies {{description}}"
msgstr ""
-#: app/views/request/show.rhtml:106
-msgid "sign in"
+#: app/views/public_body/list.rhtml:51
+msgid "<a href=\"%s\">Can't find the one you want?</a>"
msgstr ""
-#: app/views/request/show.rhtml:106
-msgid "to send a follow up message."
+#: app/views/public_body/show.rhtml:1
+msgid " - view and make Freedom of Information requests"
msgstr ""
-#: app/views/request/show.rhtml:109
-msgid "The authority would like to / has <strong>responded by post</strong> to this request."
+#: app/views/public_body/show.rhtml:4
+msgid "Follow this authority"
msgstr ""
-#: app/views/request/show.rhtml:111
-msgid "Waiting for an <strong>internal review</strong> by {{public_body_link}} of their handling of this request."
+#: app/views/public_body/show.rhtml:7
+msgid "There is %d person following this authority"
+msgid_plural "There are %d people following this authority"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/public_body/show.rhtml:10
+msgid "More about this authority"
msgstr ""
-#: app/views/request/show.rhtml:113
-msgid "There was a <strong>delivery error</strong> or similar, which needs fixing by the {{site_name}} team."
+#: app/views/public_body/show.rhtml:12
+msgid "Home page of authority"
msgstr ""
-#: app/views/request/show.rhtml:115
-msgid "This request has had an unusual response, and <strong>requires attention</strong> from the {{site_name}} team."
+#: app/views/public_body/show.rhtml:15
+msgid "Publication scheme"
msgstr ""
-#: app/views/request/show.rhtml:117
-msgid "This request has been <strong>withdrawn</strong> by the person who made it. \n There may be an explanation in the correspondence below."
+#: app/views/public_body/show.rhtml:20 app/views/public_body/show.rhtml:22
+msgid "Charity registration"
msgstr ""
-#: app/views/request/similar.rhtml:7
-msgid "No similar requests found."
+#: app/views/public_body/show.rhtml:26
+msgid "View FOI email address"
msgstr ""
-#: app/views/request/similar.rhtml:18
-msgid "Unexpected search result type "
+#: app/views/public_body/show.rhtml:30
+msgid "Freedom of information requests to"
msgstr ""
-#: app/views/request/_request_listing.rhtml:2 app/views/public_body/_body_listing.rhtml:2
-msgid "None found."
+#: app/views/public_body/show.rhtml:35
+msgid "also called {{public_body_short_name}}"
msgstr ""
-#: app/views/request/_hidden_correspondence.rhtml:10
-msgid "This response has been hidden. See annotations to find out why.\n If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+#: app/views/public_body/show.rhtml:37
+msgid "admin"
msgstr ""
-#: app/views/request/_hidden_correspondence.rhtml:17
-msgid "This outgoing message has been hidden. See annotations to\n find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+#: app/views/public_body/show.rhtml:46
+msgid "You can only request information about the environment from this authority."
msgstr ""
-#: app/views/request/_hidden_correspondence.rhtml:23
-msgid "This comment has been hidden. See annotations to\n find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+#: app/views/public_body/show.rhtml:52
+msgid "Make a new <strong>Environmental Information</strong> request"
msgstr ""
-#: app/views/request/_hidden_correspondence.rhtml:32
-msgid "unexpected prominence on request event"
+#: app/views/public_body/show.rhtml:54
+msgid "Make a new <strong>Freedom of Information</strong> request to {{public_body}}"
msgstr ""
-#: app/views/request/new_please_describe.rhtml:5
-msgid "Please select each of these requests in turn, and <strong>let everyone know</strong>\nif they are successful yet or not."
+#: app/views/public_body/show.rhtml:56
+msgid "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>"
msgstr ""
-#: app/views/request/new_please_describe.rhtml:16
-msgid "When you're done, <strong>come back here</strong>, <a href=\"%s\">reload this page</a> and file your new request."
+#: app/views/public_body/show.rhtml:56
+msgid "Start"
msgstr ""
-#: app/views/request/new_please_describe.rhtml:20
-msgid "Thanks very much for helping keep everything <strong>neat and organised</strong>.\n We'll also, if you need it, give you advice on what to do next about each of your\n requests."
+#: app/views/public_body/show.rhtml:60
+msgid "Freedom of Information law does not apply to this authority, so you cannot make\n a request to it."
msgstr ""
-#: app/views/request/followup_preview.rhtml:1
-msgid "Preview follow up to '"
+#: app/views/public_body/show.rhtml:63
+msgid "This authority no longer exists, so you cannot make a request to it."
msgstr ""
-#: app/views/request/followup_preview.rhtml:8
-msgid "Now preview your message asking for an internal review"
+#: app/views/public_body/show.rhtml:65
+msgid "For an unknown reason, it is not possible to make a request to this authority."
msgstr ""
-#: app/views/request/followup_preview.rhtml:10
-msgid "Now preview your follow up"
+#: app/views/public_body/show.rhtml:73
+msgid "Environmental Information Regulations requests made using this site"
msgstr ""
-#: app/views/request/followup_preview.rhtml:15
-msgid "Your message will appear in <strong>search engines</strong>"
+#: app/views/public_body/show.rhtml:76
+msgid "Freedom of Information requests made using this site"
msgstr ""
-#: app/views/request/followup_preview.rhtml:37
-msgid "<strong>Privacy warning:</strong> Your message, and any response\n to it, will be displayed publicly on this website."
+#: app/views/public_body/show.rhtml:77
+msgid "Nobody has made any Freedom of Information requests to {{public_body_name}} using this site yet."
msgstr ""
-#: app/views/request/followup_preview.rhtml:49
-msgid "Re-edit this message"
+#: app/views/public_body/show.rhtml:85
+msgid "Search within the %d Freedom of Information requests to %s"
+msgid_plural "Search within the %d Freedom of Information requests made to %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/public_body/show.rhtml:87
+msgid "%d Freedom of Information request to %s"
+msgid_plural "%d Freedom of Information requests to %s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/public_body/show.rhtml:111
+msgid "Only requests made using {{site_name}} are shown."
msgstr ""
-#: app/views/request/followup_preview.rhtml:50
-msgid "Send message"
+#: app/views/public_body/show.rhtml:116
+msgid "Environmental Information Regulations requests made"
msgstr ""
-#: app/views/request/_after_actions.rhtml:3
-msgid "Things to do with this request"
+#: app/views/public_body/show.rhtml:118
+msgid "Freedom of Information requests made"
msgstr ""
-#: app/views/request/_after_actions.rhtml:6
-msgid "Anyone:"
+#: app/views/public_body/show.rhtml:120
+msgid "The search index is currently offline, so we can't show the Freedom of Information requests that have been made to this authority."
msgstr ""
-#: app/views/request/_after_actions.rhtml:9
-msgid "<a href=\"%s\">Add an annotation</a> (to help the requester or others)"
+#: app/views/public_body/view_email.rhtml:3
+msgid "FOI email address for {{public_body}}"
msgstr ""
-#: app/views/request/_after_actions.rhtml:13 app/views/request/_after_actions.rhtml:33
-msgid "Update the status of this request"
+#: app/views/public_body/view_email.rhtml:7
+msgid "{{site_name}} sends new requests to <strong>{{request_email}}</strong> for this authority."
msgstr ""
-#: app/views/request/_after_actions.rhtml:20
-msgid "{{info_request_user_name}} only:"
+#: app/views/public_body/view_email.rhtml:10
+msgid "Freedom of Information law no longer applies to this authority.Follow up messages to existing requests are sent to "
msgstr ""
-#: app/views/request/_after_actions.rhtml:37
-msgid "Request an internal review"
+#: app/views/public_body/view_email.rhtml:14
+msgid "Follow up messages to existing requests are sent to "
msgstr ""
-#: app/views/request/_after_actions.rhtml:43
-msgid "{{public_body_name}} only:"
+#: app/views/public_body/view_email.rhtml:17
+msgid "We do not have a working request email address for this authority."
msgstr ""
-#: app/views/request/_after_actions.rhtml:46
-msgid "Respond to request"
+#: app/views/public_body/view_email.rhtml:28
+msgid "If the address is wrong, or you know a better address, please <a href=\"%s\">contact us</a>."
msgstr ""
-#: app/views/request/_request_listing_via_event.rhtml:28
-msgid "Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+#: app/views/public_body/view_email.rhtml:30
+msgid " If you know the address to use, then please <a href=\"%s\">send it to us</a>.\n You may be able to find the address on their website, or by phoning them up and asking."
msgstr ""
-#: app/views/request/_request_listing_via_event.rhtml:31
-msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+#: app/views/public_body/view_email_captcha.rhtml:1
+msgid "View FOI email address for '{{public_body_name}}'"
msgstr ""
-#: app/views/request/_request_listing_via_event.rhtml:34
-msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
+#: app/views/public_body/view_email_captcha.rhtml:3
+msgid "View FOI email address for {{public_body_name}}"
msgstr ""
-#: app/views/request/_request_listing_via_event.rhtml:36
-msgid "Request to {{public_body_name}} by {{info_request_user}}. Annotated by {{event_comment_user}} on {{date}}."
+#: app/views/public_body/view_email_captcha.rhtml:5
+msgid "To view the email address that we use to send FOI requests to {{public_body_name}}, please enter these words."
msgstr ""
-#: app/views/request/_request_listing_via_event.rhtml:38
-msgid "unknown event type indexed "
+#: app/views/public_body/view_email_captcha.rhtml:12
+msgid "View email"
msgstr ""
-#: app/views/request/upload_response.rhtml:5
-msgid "Respond to the FOI request"
+#: app/views/request/_after_actions.rhtml:3
+msgid "Things to do with this request"
msgstr ""
-#: app/views/request/upload_response.rhtml:5
-msgid " made by "
+#: app/views/request/_after_actions.rhtml:6
+msgid "Anyone:"
msgstr ""
-#: app/views/request/upload_response.rhtml:8
-msgid "Your response will <strong>appear on the Internet</strong>, <a href=\"%s\">read why</a> and answers to other questions."
+#: app/views/request/_after_actions.rhtml:9
+msgid "<a href=\"%s\">Add an annotation</a> (to help the requester or others)"
msgstr ""
-#: app/views/request/upload_response.rhtml:11
-msgid "Respond by email"
+#: app/views/request/_after_actions.rhtml:13 app/views/request/_after_actions.rhtml:35
+msgid "Update the status of this request"
msgstr ""
-#: app/views/request/upload_response.rhtml:13
-msgid "You should have received a copy of the request by email, and you can respond\nby <strong>simply replying</strong> to that email. For your convenience, here is the address:"
+#: app/views/request/_after_actions.rhtml:17
+msgid "Download a zip file of all correspondence"
msgstr ""
-#: app/views/request/upload_response.rhtml:16
-msgid "You may <strong>include attachments</strong>. If you would like to attach a\nfile too large for email, use the form below."
+#: app/views/request/_after_actions.rhtml:23
+msgid "{{info_request_user_name}} only:"
msgstr ""
-#: app/views/request/upload_response.rhtml:21
-msgid "Respond using the web"
+#: app/views/request/_after_actions.rhtml:28
+msgid "Send a followup"
msgstr ""
-#: app/views/request/upload_response.rhtml:23
-msgid "Enter your response below. You may attach one file (use email, or \n<a href=\"%s\">contact us</a> if you need more)."
+#: app/views/request/_after_actions.rhtml:30
+msgid "Write a reply"
msgstr ""
-#: app/views/request/upload_response.rhtml:28
-msgid "Response:"
+#: app/views/request/_after_actions.rhtml:39
+msgid "Request an internal review"
msgstr ""
-#: app/views/request/upload_response.rhtml:33
-msgid "Attachment (optional):"
+#: app/views/request/_after_actions.rhtml:45
+msgid "{{public_body_name}} only:"
msgstr ""
-#: app/views/request/upload_response.rhtml:40
-msgid " (<strong>patience</strong>, especially for large files, it may take a while!)"
+#: app/views/request/_after_actions.rhtml:48
+msgid "Respond to request"
msgstr ""
-#: app/views/request/_request_listing_short_via_event.rhtml:9
-msgid "To {{public_body_link_absolute}}"
+#: app/views/request/_correspondence.rhtml:12 app/views/request/_correspondence.rhtml:36
+#: app/views/request/simple_correspondence.rhtml:14 app/views/request/simple_correspondence.rhtml:27
+msgid "From:"
msgstr ""
-#: app/views/request/_request_listing_short_via_event.rhtml:10
-msgid "by {{user_link_absolute}}"
+#: app/views/request/_correspondence.rhtml:26 app/views/request/_correspondence.rhtml:54
+msgid "Link to this"
msgstr ""
#: app/views/request/_describe_state.rhtml:4
@@ -1535,146 +1941,106 @@ msgstr ""
msgid "We don't know whether the most recent response to this request contains\n information or not\n &ndash;\n if you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
msgstr ""
-#: app/views/request/new.rhtml:1
-msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
-msgstr ""
-
-#: app/views/request/new.rhtml:6
-msgid "{{existing_request_user}} already\n created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n or edit the details below to make a new but similar request."
-msgstr ""
-
-#: app/views/request/new.rhtml:16
-msgid "Read this before writing your {{info_request_law_used_full}} request"
+#: app/views/request/_followup.rhtml:3
+msgid "the main FOI contact at {{public_body}}"
msgstr ""
-#: app/views/request/new.rhtml:21
-msgid "First,"
+#: app/views/request/_followup.rhtml:8
+msgid "Request an internal review from {{person_or_body}}"
msgstr ""
-#: app/views/request/new.rhtml:23
-msgid "<strong>browse</strong> the authority's <a href=\"%s\">publication scheme</a> or <strong>search</strong> their web site ..."
+#: app/views/request/_followup.rhtml:11
+msgid "Send a public follow up message to {{person_or_body}}"
msgstr ""
-#: app/views/request/new.rhtml:25
-msgid "<strong>search</strong> the authority's web site ..."
+#: app/views/request/_followup.rhtml:14
+msgid "Send a public reply to {{person_or_body}}"
msgstr ""
-#: app/views/request/new.rhtml:31 app/views/layouts/default.rhtml:80
-#: app/views/general/exception_caught.rhtml:10 app/views/general/frontpage.rhtml:14
-#: app/views/general/search.rhtml:29
-msgid "Search"
+#: app/views/request/_followup.rhtml:19
+msgid "Don't want to address your message to {{person_or_body}}? You can also write to:"
msgstr ""
-#: app/views/request/new.rhtml:34
-msgid "to check that the info isn't already published."
+#: app/views/request/_followup.rhtml:23 app/views/request/_followup.rhtml:28
+#: app/views/request/_followup.rhtml:34
+msgid "the main FOI contact address for {{public_body}}"
msgstr ""
-#: app/views/request/new.rhtml:41
-msgid "Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for examples of how to word your request."
-msgstr ""
-
-#: app/views/request/new.rhtml:43
-msgid "Browse <a href=\"%s\">other requests</a> for examples of how to word your request."
-msgstr ""
-
-#: app/views/request/new.rhtml:46
-msgid "Write your request in <strong>simple, precise language</strong>."
-msgstr ""
-
-#: app/views/request/new.rhtml:47
-msgid "Ask for <strong>specific</strong> documents or information, this site is not suitable for general enquiries."
-msgstr ""
-
-#: app/views/request/new.rhtml:48
-msgid "Keep it <strong>focused</strong>, you'll be more likely to get what you want (<a href=\"%s\">why?</a>)."
-msgstr ""
-
-#: app/views/request/new.rhtml:49
-msgid "This site is <strong>public</strong>. Everything you type and any response will be published."
-msgstr ""
-
-#: app/views/request/new.rhtml:53
-msgid "Special note for this authority!"
-msgstr ""
-
-#: app/views/request/new.rhtml:60
-msgid "Please ask for environmental information only"
-msgstr ""
-
-#: app/views/request/new.rhtml:62
-msgid "The Freedom of Information Act <strong>does not apply</strong> to"
+#: app/views/request/_followup.rhtml:43
+msgid "Follow ups and new responses to this request have been stopped to prevent spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and need to send a follow up."
msgstr ""
-#: app/views/request/new.rhtml:63
-msgid "However, you have the right to request environmental\n information under a different law"
+#: app/views/request/_followup.rhtml:47
+msgid "If you are dissatisfied by the response you got from\n the public authority, you have the right to\n complain (<a href=\"%s\">details</a>)."
msgstr ""
-#: app/views/request/new.rhtml:65
-msgid "This covers a very wide spectrum of information about the state of\n the <strong>natural and built environment</strong>, such as:"
+#: app/views/request/_followup.rhtml:54
+msgid "Please <strong>only</strong> write messages directly relating to your request {{request_link}}. If you would like to ask for information that was not in your original request, then <a href=\"{{new_request_link}}\">file a new request</a>."
msgstr ""
-#: app/views/request/new.rhtml:69
-msgid "Air, water, soil, land, flora and fauna (including how these effect\n human beings)"
+#: app/views/request/_followup.rhtml:59
+msgid "The response to your request has been <strong>delayed</strong>. You can say that, \n by law, the authority should normally have responded\n <strong>promptly</strong> and"
msgstr ""
-#: app/views/request/new.rhtml:71
-msgid "Information on emissions and discharges (e.g. noise, energy,\n radiation, waste materials)"
+#: app/views/request/_followup.rhtml:63 app/views/request/show.rhtml:70 app/views/request/show.rhtml:80
+msgid "in term time"
msgstr ""
-#: app/views/request/new.rhtml:73
-msgid "Human health and safety"
+#: app/views/request/_followup.rhtml:65
+msgid "by <strong>{{date}}</strong>"
msgstr ""
-#: app/views/request/new.rhtml:74
-msgid "Cultural sites and built structures (as they may be affected by the\n environmental factors listed above)"
+#: app/views/request/_followup.rhtml:66 app/views/request/_followup.rhtml:73
+#: app/views/request/show.rhtml:83 app/views/request/show.rhtml:87
+msgid "<a href=\"%s\">details</a>"
msgstr ""
-#: app/views/request/new.rhtml:76
-msgid "Plans and administrative measures that affect these matters"
+#: app/views/request/_followup.rhtml:71
+msgid "The response to your request is <strong>long overdue</strong>. You can say that, by \n law, under all circumstances, the authority should have responded\n by now"
msgstr ""
-#: app/views/request/new.rhtml:79
-msgid "Please only request information that comes under those categories, <strong>do not waste your\n time</strong> or the time of the public authority by requesting unrelated information."
+#: app/views/request/_followup.rhtml:85
+msgid "What are you doing?"
msgstr ""
-#: app/views/request/new.rhtml:93
-msgid "Summary:"
+#: app/views/request/_followup.rhtml:95
+msgid "I am asking for <strong>new information</strong>"
msgstr ""
-#: app/views/request/new.rhtml:97
-msgid "a one line summary of the information you are requesting, \n e.g."
+#: app/views/request/_followup.rhtml:100
+msgid "I am requesting an <strong>internal review</strong>"
msgstr ""
-#: app/views/request/new.rhtml:100
-msgid "'Pollution levels over time for the River Tyne'"
+#: app/views/request/_followup.rhtml:101
+msgid "<a href=\"%s\">what's that?</a>"
msgstr ""
-#: app/views/request/new.rhtml:102
-msgid "'Crime statistics by ward level for Wales'"
+#: app/views/request/_followup.rhtml:106
+msgid "<strong>Anything else</strong>, such as clarifying, prompting, thanking"
msgstr ""
-#: app/views/request/new.rhtml:109
-msgid "Your request:"
+#: app/views/request/_followup.rhtml:112
+msgid "Edit and add <strong>more details</strong> to the message above,\n explaining why you are dissatisfied with their response."
msgstr ""
-#: app/views/request/new.rhtml:116
-msgid "Everything that you enter on this page, including <strong>your name</strong>, \n will be <strong>displayed publicly</strong> on\n this website forever (<a href=\"%s\">why?</a>)."
+#: app/views/request/_followup.rhtml:123
+msgid "Preview your message"
msgstr ""
-#: app/views/request/new.rhtml:119
-msgid "If you are thinking of using a pseudonym,\n please <a href=\"%s\">read this first</a>."
+#: app/views/request/_hidden_correspondence.rhtml:10
+msgid "This response has been hidden. See annotations to find out why.\n If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
msgstr ""
-#: app/views/request/new.rhtml:124
-msgid "Everything that you enter on this page \n will be <strong>displayed publicly</strong> on\n this website forever (<a href=\"%s\">why?</a>)."
+#: app/views/request/_hidden_correspondence.rhtml:17
+msgid "This outgoing message has been hidden. See annotations to\n find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
msgstr ""
-#: app/views/request/new.rhtml:131
-msgid "<strong> Can I request information about myself?</strong>\n <a href=\"%s\">No! (Click here for details)</a>"
+#: app/views/request/_hidden_correspondence.rhtml:23
+msgid "This comment has been hidden. See annotations to\n find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
msgstr ""
-#: app/views/request/new.rhtml:139
-msgid "Preview your public request"
+#: app/views/request/_hidden_correspondence.rhtml:32
+msgid "unexpected prominence on request event"
msgstr ""
#: app/views/request/_other_describe_state.rhtml:4
@@ -1717,40 +2083,94 @@ msgstr ""
msgid "An <strong>error message</strong> has been received"
msgstr ""
-#: app/views/request/details.rhtml:1 app/views/request/details.rhtml:2
-msgid "Details of request '"
+#: app/views/request/_request_filter_form.rhtml:6
+msgid "Keywords"
msgstr ""
-#: app/views/request/details.rhtml:4
-msgid "Event history"
+#: app/views/request/_request_filter_form.rhtml:11
+msgid "Search for words in:"
msgstr ""
-#: app/views/request/details.rhtml:6
-msgid "This table shows the technical details of the internal events that happened\nto this request on {{site_name}}. This could be used to generate information about\nthe speed with which authorities respond to requests, the number of requests\nwhich require a postal response and much more."
+#: app/views/request/_request_filter_form.rhtml:30
+msgid "all requests"
msgstr ""
-#: app/views/request/details.rhtml:12
-msgid "<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \na good internal knowledge of user behaviour on {{site_name}}. How, \nwhy and by whom requests are categorised is not straightforward, and there will\nbe user error and ambiguity. You will also need to understand FOI law, and the\nway authorities use it. Plus you'll need to be an elite statistician. Please\n<a href=\"{{contact_path}}\">contact us</a> with questions."
+#: app/views/request/_request_listing_short_via_event.rhtml:9
+msgid "To {{public_body_link_absolute}}"
msgstr ""
-#: app/views/request/details.rhtml:50
-msgid "Here <strong>described</strong> means when a user selected a status for the request, and\nthe most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\n{{site_name}} for intermediate events, which weren't given an explicit\ndescription by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
+#: app/views/request/_request_listing_short_via_event.rhtml:10
+msgid "by {{user_link_absolute}}"
msgstr ""
-#: app/views/request/details.rhtml:58
-msgid "You can get this page in computer-readable format as part of the main JSON\npage for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
+#: app/views/request/_request_listing_single.rhtml:12
+msgid "Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
msgstr ""
-#: app/views/request/hidden.rhtml:1
-msgid "Request has been removed"
+#: app/views/request/_request_listing_via_event.rhtml:20
+msgid "Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
msgstr ""
-#: app/views/request/hidden.rhtml:9
-msgid "The request you have tried to view has been removed. There are\nvarious reasons why we might have done this, sorry we can't be more specific here. Please <a\n href=\"%s\">contact us</a> if you have any questions."
+#: app/views/request/_request_listing_via_event.rhtml:23
+msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
msgstr ""
-#: app/views/request/hidden.rhtml:15
-msgid "If you are the requester, then you may <a href=\"%s\">sign in</a> to view the request."
+#: app/views/request/_request_listing_via_event.rhtml:26
+msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
+msgstr ""
+
+#: app/views/request/_request_listing_via_event.rhtml:28
+msgid "Request to {{public_body_name}} by {{info_request_user}}. Annotated by {{event_comment_user}} on {{date}}."
+msgstr ""
+
+#: app/views/request/_request_listing_via_event.rhtml:30
+msgid "unknown event type indexed "
+msgstr ""
+
+#: app/views/request/_search_ahead.rhtml:3
+msgid "Possibly related requests:"
+msgstr ""
+
+#: app/views/request/_search_ahead.rhtml:10
+msgid "Or search in their website for this information."
+msgstr ""
+
+#: app/views/request/_sidebar.rhtml:2
+msgid "Follow this request"
+msgstr ""
+
+#: app/views/request/_sidebar.rhtml:5
+msgid "There is %d person following this request"
+msgid_plural "There are %d people following this request"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/request/_sidebar.rhtml:8
+msgid "Act on what you've learnt"
+msgstr ""
+
+#: app/views/request/_sidebar.rhtml:13
+msgid "Tweet this request"
+msgstr ""
+
+#: app/views/request/_sidebar.rhtml:17
+msgid "Start your own blog"
+msgstr ""
+
+#: app/views/request/_sidebar.rhtml:24
+msgid "Similar requests"
+msgstr ""
+
+#: app/views/request/_sidebar.rhtml:29
+msgid "More similar requests"
+msgstr ""
+
+#: app/views/request/_sidebar.rhtml:35
+msgid "Event history details"
+msgstr ""
+
+#: app/views/request/_sidebar.rhtml:39
+msgid "<a href=\"%s\">Are you the owner of\n any commercial copyright on this page?</a>"
msgstr ""
#: app/views/request/_sidebar_request_listing.rhtml:13
@@ -1765,617 +2185,620 @@ msgstr ""
msgid "This is an HTML version of an attachment to the Freedom of Information request"
msgstr ""
-#: app/views/contact_mailer/message.rhtml:4
-msgid "Message sent using {{site_name}} contact form, "
+#: app/views/request/details.rhtml:1 app/views/request/details.rhtml:2
+msgid "Details of request '"
msgstr ""
-#: app/views/contact_mailer/message.rhtml:7
-msgid "Last request viewed: "
+#: app/views/request/details.rhtml:4
+msgid "Event history"
msgstr ""
-#: app/views/contact_mailer/message.rhtml:10
-msgid "Last authority viewed: "
+#: app/views/request/details.rhtml:6
+msgid "This table shows the technical details of the internal events that happened\nto this request on {{site_name}}. This could be used to generate information about\nthe speed with which authorities respond to requests, the number of requests\nwhich require a postal response and much more."
msgstr ""
-#: app/views/contact_mailer/user_message.rhtml:2
-msgid "{{user_name}} has used {{site_name}} to send you the message below."
+#: app/views/request/details.rhtml:12
+msgid "<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \na good internal knowledge of user behaviour on {{site_name}}. How, \nwhy and by whom requests are categorised is not straightforward, and there will\nbe user error and ambiguity. You will also need to understand FOI law, and the\nway authorities use it. Plus you'll need to be an elite statistician. Please\n<a href=\"{{contact_path}}\">contact us</a> with questions."
msgstr ""
-#: app/views/contact_mailer/user_message.rhtml:3
-msgid "Your details have not been given to anyone, unless you choose to reply to this\nmessage, which will then go directly to the person who wrote the message."
+#: app/views/request/details.rhtml:50
+msgid "Here <strong>described</strong> means when a user selected a status for the request, and\nthe most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\n{{site_name}} for intermediate events, which weren't given an explicit\ndescription by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
msgstr ""
-#: app/views/contact_mailer/user_message.rhtml:10
-msgid "View Freedom of Information requests made by {{user_name}}:"
+#: app/views/request/details.rhtml:58
+msgid "You can get this page in computer-readable format as part of the main JSON\npage for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
msgstr ""
-#: app/views/admin_public_body/_locale_selector.rhtml:2
-msgid "Edit language version:"
+#: app/views/request/followup_bad.rhtml:2
+msgid "Unable to send follow up message to {{username}}"
msgstr ""
-#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104
-msgid "Change profile photo"
+#: app/views/request/followup_bad.rhtml:4
+msgid "Unable to send a reply to {{username}}"
msgstr ""
-#: app/views/user/set_crop_profile_photo.rhtml:6
-msgid "Crop your profile photo"
+#: app/views/request/followup_bad.rhtml:11
+msgid "Freedom of Information law no longer applies to"
msgstr ""
-#: app/views/user/set_crop_profile_photo.rhtml:35
-msgid "<strong>Privacy note:</strong> Your photo will be shown in public on the Internet, \n wherever you do something on {{site_name}}."
+#: app/views/request/followup_bad.rhtml:12
+msgid "From the request page, try replying to a particular message, rather than sending\n a general followup. If you need to make a general followup, and know\n an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
msgstr ""
-#: app/views/user/_user_listing_single.rhtml:19 app/views/user/_user_listing_single.rhtml:20
-msgid "made."
+#: app/views/request/followup_bad.rhtml:18
+msgid "no longer exists. If you are trying to make\n From the request page, try replying to a particular message, rather than sending\n a general followup. If you need to make a general followup, and know\n an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
msgstr ""
-#: app/views/user/_user_listing_single.rhtml:21
-msgid "Joined in"
+#: app/views/request/followup_bad.rhtml:24
+msgid "We do not have a working {{law_used_full}} address for {{public_body_name}}."
msgstr ""
-#: app/views/user/signchangepassword_confirm.rhtml:1 app/views/user/signchangepassword_confirm.rhtml:3
-#: app/views/user/signchangeemail_confirm.rhtml:3
-msgid "Now check your email!"
+#: app/views/request/followup_bad.rhtml:24
+msgid "You may be able to find\n one on their website, or by phoning them up and asking. If you manage\n to find one, then please <a href=\"%s\">send it to us</a>."
msgstr ""
-#: app/views/user/signchangepassword_confirm.rhtml:6
-msgid "We've sent you an email, click the link in it, then you can change your password."
+#: app/views/request/followup_bad.rhtml:29
+msgid "unknown reason "
msgstr ""
-#: app/views/user/signchangepassword_confirm.rhtml:10 app/views/user/signchangeemail_confirm.rhtml:11
-msgid "If you use web-based email or have \"junk mail\" filters, also check your\nbulk/spam mail folders. Sometimes, our messages are marked that way."
+#: app/views/request/followup_preview.rhtml:1
+msgid "Preview follow up to '"
msgstr ""
-#: app/views/user/signchangepassword.rhtml:1 app/views/user/signchangepassword.rhtml:11
-#: app/views/user/signchangepassword_send_confirm.rhtml:1 app/views/user/signchangepassword_send_confirm.rhtml:9
-msgid "Change your password on {{site_name}}"
+#: app/views/request/followup_preview.rhtml:8
+msgid "Now preview your message asking for an internal review"
msgstr ""
-#: app/views/user/signchangepassword.rhtml:15
-msgid "New password:"
+#: app/views/request/followup_preview.rhtml:10
+msgid "Now preview your follow up"
msgstr ""
-#: app/views/user/signchangepassword.rhtml:20
-msgid "New password: (again)"
+#: app/views/request/followup_preview.rhtml:14 app/views/request/preview.rhtml:7
+msgid "Check you haven't included any <strong>personal information</strong>."
msgstr ""
-#: app/views/user/signchangepassword.rhtml:27
-msgid "Change password on {{site_name}}"
+#: app/views/request/followup_preview.rhtml:15
+msgid "Your message will appear in <strong>search engines</strong>"
msgstr ""
-#: app/views/user/_signin.rhtml:7
-msgid "If you've used {{site_name}} before"
+#: app/views/request/followup_preview.rhtml:22 app/views/request/new.rhtml:40 app/views/request/preview.rhtml:17
+#: app/views/request/simple_correspondence.rhtml:16 app/views/request/simple_correspondence.rhtml:28
+msgid "To:"
msgstr ""
-#: app/views/user/_signin.rhtml:11 app/views/user/signchangepassword_send_confirm.rhtml:13
-#: app/views/user/_signup.rhtml:9
-msgid "Your e-mail:"
+#: app/views/request/followup_preview.rhtml:23 app/views/request/preview.rhtml:18
+msgid "Subject:"
msgstr ""
-#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30
-msgid "Password:"
+#: app/views/request/followup_preview.rhtml:37
+msgid "<strong>Privacy warning:</strong> Your message, and any response\n to it, will be displayed publicly on this website."
msgstr ""
-#: app/views/user/_signin.rhtml:21
-msgid "Forgotten your password?"
+#: app/views/request/followup_preview.rhtml:49
+msgid "Re-edit this message"
msgstr ""
-#: app/views/user/_signin.rhtml:26
-msgid "Remember me</label> (keeps you signed in longer;\n do not use on a public computer) "
+#: app/views/request/followup_preview.rhtml:50
+msgid "Send message"
msgstr ""
-#: app/views/user/_signin.rhtml:31
-msgid "Sign in"
+#: app/views/request/hidden.rhtml:1
+msgid "Request has been removed"
msgstr ""
-#: app/views/user/sign.rhtml:8
-msgid "Please sign in as "
+#: app/views/request/hidden.rhtml:9
+msgid "The request you have tried to view has been removed. There are\nvarious reasons why we might have done this, sorry we can't be more specific here. Please <a\n href=\"%s\">contact us</a> if you have any questions."
msgstr ""
-#: app/views/user/sign.rhtml:11
-msgid "please sign in as "
+#: app/views/request/hidden.rhtml:15
+msgid "If you are the requester, then you may <a href=\"%s\">sign in</a> to view the request."
msgstr ""
-#: app/views/user/sign.rhtml:20
-msgid "Sign in or make a new account"
+#: app/views/request/list.rhtml:8
+msgid "Follow these requests"
msgstr ""
-#: app/views/user/sign.rhtml:26
-msgid " Please sign in or make a new account."
+#: app/views/request/list.rhtml:19
+msgid "No requests of this sort yet."
msgstr ""
-#: app/views/user/sign.rhtml:28
-msgid "please sign in or make a new account."
+#: app/views/request/list.rhtml:21
+msgid "{{count}} FOI requests found"
msgstr ""
-#: app/views/user/contact.rhtml:32
-msgid "<strong>Note:</strong> You're sending a message to yourself, presumably\n to try out how it works."
+#: app/views/request/list.rhtml:27
+msgid "Unexpected search result type"
msgstr ""
-#: app/views/user/contact.rhtml:35
-msgid " <strong>Privacy note:</strong> Your email address will be given to"
+#: app/views/request/new.rhtml:20
+msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
msgstr ""
-#: app/views/user/contact.rhtml:36
-msgid " when you send this message."
+#: app/views/request/new.rhtml:22
+msgid "2. Ask for Information"
msgstr ""
-#: app/views/user/confirm.rhtml:6
-msgid "We've sent you an email, and you'll need to click the link in it before you can\ncontinue."
+#: app/views/request/new.rhtml:27
+msgid "{{existing_request_user}} already\n created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n or edit the details below to make a new but similar request."
msgstr ""
-#: app/views/user/confirm.rhtml:11
-msgid "<small>If you use web-based email or have \"junk mail\" filters, also check your\nbulk/spam mail folders. Sometimes, our messages are marked that way.</small>\n</p>"
+#: app/views/request/new.rhtml:44
+msgid "Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for examples of how to word your request."
msgstr ""
-#: app/views/user/bad_token.rhtml:2
-msgid "Please check the URL (i.e. the long code of letters and numbers) is copied\ncorrectly from your email."
+#: app/views/request/new.rhtml:46
+msgid "Browse <a href='{{url}}'>other requests</a> for examples of how to word your request."
msgstr ""
-#: app/views/user/bad_token.rhtml:7
-msgid "If you can't click on it in the email, you'll have to <strong>select and copy\nit</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\nyou would type the address of any other webpage."
+#: app/views/request/new.rhtml:52
+msgid "Special note for this authority!"
msgstr ""
-#: app/views/user/bad_token.rhtml:13
-msgid "If you got the email <strong>more than six months ago</strong>, then this login link won't work any\nmore. Please try doing what you were doing from the beginning."
+#: app/views/request/new.rhtml:58
+msgid "Please ask for environmental information only"
msgstr ""
-#: app/views/user/wrong_user_unknown_email.rhtml:3
-msgid "Unfortunately we don't know the FOI\nemail address for that authority, so we can't validate this.\nPlease <a href=\"%s\">contact us</a> to sort it out."
+#: app/views/request/new.rhtml:60
+msgid "The Freedom of Information Act <strong>does not apply</strong> to"
msgstr ""
-#: app/views/user/signchangepassword_send_confirm.rhtml:18
-msgid " <strong>Note:</strong>\n We will send you an email. Follow the instructions in it to change\n your password."
+#: app/views/request/new.rhtml:61
+msgid "However, you have the right to request environmental\n information under a different law"
msgstr ""
-#: app/views/user/signchangepassword_send_confirm.rhtml:26
-msgid "Submit"
+#: app/views/request/new.rhtml:63
+msgid "This covers a very wide spectrum of information about the state of\n the <strong>natural and built environment</strong>, such as:"
msgstr ""
-#: app/views/user/show.rhtml:4
-msgid "There is <strong>more than one person</strong> who uses this site and has this name. \n One of them is shown below, you may mean a different one:"
+#: app/views/request/new.rhtml:67
+msgid "Air, water, soil, land, flora and fauna (including how these effect\n human beings)"
msgstr ""
-#: app/views/user/show.rhtml:12
-msgid "Please <strong>go to the following requests</strong>, and let us\n know if there was information in the recent responses to them."
+#: app/views/request/new.rhtml:69
+msgid "Information on emissions and discharges (e.g. noise, energy,\n radiation, waste materials)"
msgstr ""
-#: app/views/user/show.rhtml:20
-msgid "Thanks very much - this will help others find useful stuff. We'll\n also, if you need it, give advice on what to do next about your\n requests."
+#: app/views/request/new.rhtml:71
+msgid "Human health and safety"
msgstr ""
-#: app/views/user/show.rhtml:29
-msgid "Track this person"
+#: app/views/request/new.rhtml:72
+msgid "Cultural sites and built structures (as they may be affected by the\n environmental factors listed above)"
msgstr ""
-#: app/views/user/show.rhtml:32
-msgid "On this page"
+#: app/views/request/new.rhtml:74
+msgid "Plans and administrative measures that affect these matters"
msgstr ""
-#: app/views/user/show.rhtml:33
-msgid "FOI requests"
+#: app/views/request/new.rhtml:77
+msgid "Please only request information that comes under those categories, <strong>do not waste your\n time</strong> or the time of the public authority by requesting unrelated information."
msgstr ""
-#: app/views/user/show.rhtml:34
-msgid "Annotations"
+#: app/views/request/new.rhtml:84
+msgid "Summary:"
msgstr ""
-#: app/views/user/show.rhtml:36
-msgid "Email subscriptions"
+#: app/views/request/new.rhtml:88
+msgid "a one line summary of the information you are requesting, \n e.g."
msgstr ""
-#: app/views/user/show.rhtml:53
-msgid "Set your profile photo"
+#: app/views/request/new.rhtml:90
+msgid "'Pollution levels over time for the River Tyne'"
msgstr ""
-#: app/views/user/show.rhtml:59
-msgid " (you)"
+#: app/views/request/new.rhtml:92
+msgid "'Crime statistics by ward level for Wales'"
msgstr ""
-#: app/views/user/show.rhtml:62
-msgid "Joined {{site_name}} in"
+#: app/views/request/new.rhtml:104
+msgid "Write your request in <strong>simple, precise language</strong>."
msgstr ""
-#: app/views/user/show.rhtml:69
-msgid "Send message to "
+#: app/views/request/new.rhtml:105
+msgid "Ask for <strong>specific</strong> documents or information, this site is not suitable for general enquiries."
msgstr ""
-#: app/views/user/show.rhtml:71
-msgid "just to see how it works"
+#: app/views/request/new.rhtml:106
+msgid "Keep it <strong>focused</strong>, you'll be more likely to get what you want (<a href=\"%s\">why?</a>)."
msgstr ""
-#: app/views/user/show.rhtml:79
-msgid "This user has been banned from {{site_name}} "
+#: app/views/request/new.rhtml:113
+msgid "Your request:"
msgstr ""
-#: app/views/user/show.rhtml:83
-msgid "They have been given the following explanation:"
+#: app/views/request/new.rhtml:120
+msgid "Everything that you enter on this page, including <strong>your name</strong>, \n will be <strong>displayed publicly</strong> on\n this website forever (<a href=\"%s\">why?</a>)."
msgstr ""
-#: app/views/user/show.rhtml:96
-msgid "edit text about you"
+#: app/views/request/new.rhtml:123
+msgid "If you are thinking of using a pseudonym,\n please <a href=\"%s\">read this first</a>."
msgstr ""
-#: app/views/user/show.rhtml:106
-msgid "Change your password"
+#: app/views/request/new.rhtml:128
+msgid "Everything that you enter on this page \n will be <strong>displayed publicly</strong> on\n this website forever (<a href=\"%s\">why?</a>)."
msgstr ""
-#: app/views/user/show.rhtml:107
-msgid "Change your email"
+#: app/views/request/new.rhtml:135
+msgid "<strong> Can I request information about myself?</strong>\n <a href=\"%s\">No! (Click here for details)</a>"
msgstr ""
-#: app/views/user/show.rhtml:113
-msgid "<a href=\"%s\">Sign in</a> to change password, subscriptions and more ({{user_name}} only)"
+#: app/views/request/new.rhtml:143
+msgid "Preview your public request"
msgstr ""
-#: app/views/user/show.rhtml:121
-msgid "You have made no Freedom of Information requests using this site."
+#: app/views/request/new_bad_contact.rhtml:1
+msgid "Missing contact details for '"
msgstr ""
-#: app/views/user/show.rhtml:121
-msgid "This person has made no Freedom of Information requests using this site."
+#: app/views/request/new_bad_contact.rhtml:5
+msgid "Unfortunately, we do not have a working {{info_request_law_used_full}}\naddress for"
msgstr ""
-#: app/views/user/show.rhtml:125
-msgid "Your %d Freedom of Information request"
-msgid_plural "Your %d Freedom of Information requests"
-msgstr[0] ""
-msgstr[1] ""
+#: app/views/request/new_bad_contact.rhtml:6
+msgid "You may be able to find\none on their website, or by phoning them up and asking. If you manage\nto find one, then please <a href=\"{{help_url}}\">send it to us</a>."
+msgstr ""
-#: app/views/user/show.rhtml:125
-msgid "This person's %d Freedom of Information request"
-msgid_plural "This person's %d Freedom of Information requests"
-msgstr[0] ""
-msgstr[1] ""
+#: app/views/request/new_please_describe.rhtml:5
+msgid "Please select each of these requests in turn, and <strong>let everyone know</strong>\nif they are successful yet or not."
+msgstr ""
-#: app/views/user/show.rhtml:137
-msgid "Freedom of Information requests made by you"
+#: app/views/request/new_please_describe.rhtml:16
+msgid "When you're done, <strong>come back here</strong>, <a href=\"%s\">reload this page</a> and file your new request."
msgstr ""
-#: app/views/user/show.rhtml:137
-msgid "Freedom of Information requests made by this person"
+#: app/views/request/new_please_describe.rhtml:20
+msgid "Thanks very much for helping keep everything <strong>neat and organised</strong>.\n We'll also, if you need it, give you advice on what to do next about each of your\n requests."
msgstr ""
-#: app/views/user/show.rhtml:138
-msgid "The search index is currently offline, so we can't show the Freedom of Information requests this person has made."
+#: app/views/request/preview.rhtml:5
+msgid "3. Now check your request"
msgstr ""
-#: app/views/user/show.rhtml:144
-msgid "Your annotations"
+#: app/views/request/preview.rhtml:8
+msgid "Your name, request and any responses will appear in <strong>search engines</strong>\n (<a href=\"%s\">details</a>)."
msgstr ""
-#: app/views/user/show.rhtml:144
-msgid "This person's annotations"
+#: app/views/request/preview.rhtml:31
+msgid "<strong>Privacy note:</strong> If you want to request private information about\n yourself then <a href=\"%s\">click here</a>."
msgstr ""
-#: app/views/user/show.rhtml:145 app/views/user/show.rhtml:165
-msgid "None made."
+#: app/views/request/preview.rhtml:40
+msgid "Edit this request"
msgstr ""
-#: app/views/user/show.rhtml:149
-msgid "Your %d annotation"
-msgid_plural "Your %d annotations"
-msgstr[0] ""
-msgstr[1] ""
+#: app/views/request/preview.rhtml:41
+msgid "Send request"
+msgstr ""
-#: app/views/user/show.rhtml:149
-msgid "This person's %d annotation"
-msgid_plural "This person's %d annotations"
-msgstr[0] ""
-msgstr[1] ""
+#: app/views/request/preview.rhtml:45
+msgid "Tags:"
+msgstr ""
-#: app/views/user/show.rhtml:164
-msgid "Your email subscriptions"
+#: app/views/request/select_authority.rhtml:27
+msgid "Select the authority to write to"
msgstr ""
-#: app/views/user/show.rhtml:167
-msgid "email subscription"
+#: app/views/request/select_authority.rhtml:29
+msgid "1. Select an authority"
msgstr ""
-#: app/views/user/show.rhtml:176 app/views/user/show.rhtml:190
-msgid "unsubscribe all"
+#: app/views/request/select_authority.rhtml:35
+msgid "First, type in the <strong>name of the UK public authority</strong> you'd \n <br>like information from. <strong>By law, they have to respond</strong>\n (<a href=\"%s\">why?</a>)."
msgstr ""
-#: app/views/user/show.rhtml:204
-msgid "unsubscribe"
+#: app/views/request/show.rhtml:5
+msgid "This request has prominence 'hidden'. You can only see it because you are logged\n in as a super user."
msgstr ""
-#: app/views/user/no_cookies.rhtml:3
-msgid "Please enable \"cookies\" to carry on"
+#: app/views/request/show.rhtml:11
+msgid "This request is hidden, so that only you the requester can see it. Please\n <a href=\"%s\">contact us</a> if you are not sure why."
msgstr ""
-#: app/views/user/no_cookies.rhtml:5
-msgid "To carry on, you need to sign in or make an account. Unfortunately, there\nwas a technical problem trying to do this."
+#: app/views/request/show.rhtml:36
+msgid "{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) made this {{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to {{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
msgstr ""
-#: app/views/user/no_cookies.rhtml:8
-msgid "It may be that your browser is not set to accept a thing called \"cookies\",\nor cannot do so. If you can, please enable cookies, or try using a different\nbrowser. Then press refresh to have another go."
+#: app/views/request/show.rhtml:44
+msgid "{{user}} made this {{law_used_full}} request"
msgstr ""
-#: app/views/user/no_cookies.rhtml:12
-msgid "If your browser is set to accept cookies and you are seeing this message,\nthen there is probably a fault with our server."
+#: app/views/request/show.rhtml:45
+msgid "to {{public_body}}"
msgstr ""
-#: app/views/user/no_cookies.rhtml:15
-msgid "Please <a href=\"%s\">get in touch</a> with us so we can fix it."
+#: app/views/request/show.rhtml:52
+msgid "Please <strong>answer the question above</strong> so we know whether the "
msgstr ""
-#: app/views/user/no_cookies.rhtml:17
-msgid "Let us know what you were doing when this message\nappeared and your browser and operating system type and version."
+#: app/views/request/show.rhtml:53
+msgid "useful information."
msgstr ""
-#: app/views/user/no_cookies.rhtml:20
-msgid "If you are still having trouble, please <a href=\"%s\">contact us</a>."
+#: app/views/request/show.rhtml:55
+msgid "This request has an <strong>unknown status</strong>."
msgstr ""
-#: app/views/user/wrong_user.rhtml:4
-msgid "sign out"
+#: app/views/request/show.rhtml:57
+msgid "We're waiting for someone to read"
msgstr ""
-#: app/views/user/wrong_user.rhtml:5
-msgid "and sign in as "
+#: app/views/request/show.rhtml:59
+msgid "and update the status accordingly. Perhaps <strong>you</strong> might like to help out by doing that?"
msgstr ""
-#: app/views/user/banned.rhtml:9
-msgid "You will be unable to make new requests, send follow ups, add annotations or\nsend messages to other users. You may continue to view other requests, and set\nup\nemail alerts."
+#: app/views/request/show.rhtml:61
+msgid "We're waiting for"
msgstr ""
-#: app/views/user/banned.rhtml:15
-msgid "If you would like us to lift this ban, then you may politely\n<a href=\"/help/contact\">contact us</a> giving reasons.\n"
+#: app/views/request/show.rhtml:62
+msgid "to read"
msgstr ""
-#: app/views/user/_signup.rhtml:6
-msgid "If you're new to {{site_name}}"
+#: app/views/request/show.rhtml:64
+msgid "and update the status."
msgstr ""
-#: app/views/user/_signup.rhtml:18
-msgid "Your name:"
+#: app/views/request/show.rhtml:68
+msgid "Currently <strong>waiting for a response</strong> from {{public_body_link}}, they must respond promptly and"
msgstr ""
-#: app/views/user/_signup.rhtml:22
-msgid "Your <strong>name will appear publicly</strong> \n (<a href=\"%s\">why?</a>)\n on this website and in search engines. If you\n are thinking of using a pseudonym, please \n <a href=\"%s\">read this first</a>."
+#: app/views/request/show.rhtml:72
+msgid "normally"
msgstr ""
-#: app/views/user/_signup.rhtml:35
-msgid "Password: (again)"
+#: app/views/request/show.rhtml:74
+msgid "no later than"
msgstr ""
-#: app/views/user/_signup.rhtml:41
-msgid "Sign up"
+#: app/views/request/show.rhtml:77
+msgid "Response to this request is <strong>delayed</strong>."
msgstr ""
-#: app/views/user/signchangeemail_confirm.rhtml:6
-msgid "We've sent an email to your new email address. You'll need to click the link in\nit before your email address will be changed."
+#: app/views/request/show.rhtml:78
+msgid "By law, {{public_body_link}} should normally have responded <strong>promptly</strong> and"
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:1
-msgid "Change the text about you on your profile at {{site_name}}"
+#: app/views/request/show.rhtml:82
+msgid "by"
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:3 app/views/user/signchangeemail.rhtml:3
-msgid "internal error"
+#: app/views/request/show.rhtml:85
+msgid "Response to this request is <strong>long overdue</strong>."
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:9
-msgid "Edit text about you"
+#: app/views/request/show.rhtml:86
+msgid "By law, under all circumstances, {{public_body_link}} should have responded by now"
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:11
-msgid " What are you investigating using Freedom of Information? "
+#: app/views/request/show.rhtml:88
+msgid "You can <strong>complain</strong> by"
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:14
-msgid " This will appear on your {{site_name}} profile, to make it\n easier for others to get involved with what you're doing."
+#: app/views/request/show.rhtml:89
+msgid "requesting an internal review"
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:20
-msgid "About you:"
+#: app/views/request/show.rhtml:91
+msgid "<strong>did not have</strong> the information requested."
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:26
-msgid " Include relevant links, such as to a campaign page, your blog or a\n twitter account. They will be made clickable. \n e.g."
+#: app/views/request/show.rhtml:93
+msgid "The request was <strong>refused</strong> by"
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:35
-msgid "Save"
+#: app/views/request/show.rhtml:95
+msgid "The request was <strong>successful</strong>."
msgstr ""
-#: app/views/user/set_draft_profile_photo.rhtml:13
-msgid "Photo of you:"
+#: app/views/request/show.rhtml:97
+msgid "The request was <strong>partially successful</strong>."
msgstr ""
-#: app/views/user/set_draft_profile_photo.rhtml:18
-msgid "Your photo will be shown in public <strong>on the Internet</strong>, \n wherever you do something on {{site_name}}."
+#: app/views/request/show.rhtml:100
+msgid "is <strong>waiting for your clarification</strong>."
msgstr ""
-#: app/views/user/set_draft_profile_photo.rhtml:22
-msgid "Please don't upload offensive pictures. We will take down images\n that we consider inappropriate."
+#: app/views/request/show.rhtml:101
+msgid "Please"
msgstr ""
-#: app/views/user/set_draft_profile_photo.rhtml:32
-msgid "Next, crop your photo &gt;&gt;"
+#: app/views/request/show.rhtml:102
+msgid "send a follow up message"
msgstr ""
-#: app/views/user/set_draft_profile_photo.rhtml:46
-msgid "OR remove the existing photo"
+#: app/views/request/show.rhtml:104
+msgid "The request is <strong>waiting for clarification</strong>."
msgstr ""
-#: app/views/user/signchangeemail.rhtml:15
-msgid "Old e-mail:"
+#: app/views/request/show.rhtml:105
+msgid "If you are {{user_link}}, please"
msgstr ""
-#: app/views/user/signchangeemail.rhtml:20
-msgid "New e-mail:"
+#: app/views/request/show.rhtml:106
+msgid "sign in"
msgstr ""
-#: app/views/user/signchangeemail.rhtml:25
-msgid "Your password:"
+#: app/views/request/show.rhtml:106
+msgid "to send a follow up message."
msgstr ""
-#: app/views/user/signchangeemail.rhtml:30
-msgid "<strong>Note:</strong>\n We will send an email to your new email address. Follow the\n instructions in it to confirm changing your email."
+#: app/views/request/show.rhtml:109
+msgid "The authority would like to / has <strong>responded by post</strong> to this request."
msgstr ""
-#: app/views/user/signchangeemail.rhtml:37
-msgid "Change email on {{site_name}}"
+#: app/views/request/show.rhtml:111
+msgid "Waiting for an <strong>internal review</strong> by {{public_body_link}} of their handling of this request."
msgstr ""
-#: app/views/track/_tracking_links.rhtml:9
-msgid "This is your own request, so you will be automatically emailed when new responses arrive."
+#: app/views/request/show.rhtml:113
+msgid "There was a <strong>delivery error</strong> or similar, which needs fixing by the {{site_name}} team."
msgstr ""
-#: app/views/user_mailer/already_registered.rhtml:3
-msgid "You just tried to sign up to {{site_name}}, when you\nalready have an account. Your name and password have been\nleft as they previously were.\n\nPlease click on the link below."
+#: app/views/request/show.rhtml:115
+msgid "This request has had an unusual response, and <strong>requires attention</strong> from the {{site_name}} team."
msgstr ""
-#: app/views/user_mailer/already_registered.rhtml:11 app/views/user_mailer/confirm_login.rhtml:11
-#: app/views/user_mailer/changeemail_already_used.rhtml:10 app/views/user_mailer/changeemail_confirm.rhtml:13
-#: app/views/request_mailer/stopped_responses.rhtml:16 app/views/request_mailer/not_clarified_alert.rhtml:9
-#: app/views/request_mailer/comment_on_alert.rhtml:6 app/views/request_mailer/old_unclassified_updated.rhtml:8
-#: app/views/request_mailer/very_overdue_alert.rhtml:11 app/views/request_mailer/overdue_alert.rhtml:9
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:8 app/views/request_mailer/new_response.rhtml:15
-#: app/views/request_mailer/comment_on_alert_plural.rhtml:5 app/views/track_mailer/event_digest.rhtml:66
-msgid "the {{site_name}} team"
+#: app/views/request/show.rhtml:117
+msgid "This request has been <strong>withdrawn</strong> by the person who made it. \n There may be an explanation in the correspondence below."
msgstr ""
-#: app/views/user_mailer/confirm_login.rhtml:3
-msgid "Please click on the link below to confirm your email address."
+#: app/views/request/show_response.rhtml:13
+msgid "Which of these is happening?"
msgstr ""
-#: app/views/user_mailer/confirm_login.rhtml:8
-msgid "We will not reveal your email address to anybody unless you\nor the law tell us to."
+#: app/views/request/show_response.rhtml:18
+msgid "The authority say that they <strong>need a postal\n address</strong>, not just an email, for it to be a valid FOI request"
msgstr ""
-#: app/views/user_mailer/changeemail_already_used.rhtml:1
-msgid "Someone, perhaps you, just tried to change their email address on\n{{site_name}} from {{old_email}} to {{new_email}}."
+#: app/views/request/show_response.rhtml:26
+msgid "The authority only has a <strong>paper copy</strong> of the information."
msgstr ""
-#: app/views/user_mailer/changeemail_already_used.rhtml:5
-msgid "This was not possible because there is already an account using \nthe email address {{email}}."
+#: app/views/request/show_response.rhtml:29
+msgid "At the bottom of this page, write a reply to them trying to persuade them to scan it in\n (<a href=\"%s\">more details</a>)."
msgstr ""
-#: app/views/user_mailer/changeemail_already_used.rhtml:8
-msgid "The accounts have been left as they previously were."
+#: app/views/request/show_response.rhtml:34
+msgid "You want to <strong>give your postal address</strong> to the authority in private."
msgstr ""
-#: app/views/user_mailer/changeemail_confirm.rhtml:3
-msgid "Please click on the link below to confirm that you want to \nchange the email address that you use for {{site_name}}\nfrom {{old_email}} to {{new_email}}"
+#: app/views/request/show_response.rhtml:37
+msgid "To do that please send a private email to "
msgstr ""
-#: app/views/user_mailer/changeemail_confirm.rhtml:10
-msgid "We will not reveal your email addresses to anybody unless you\nor the law tell us to."
+#: app/views/request/show_response.rhtml:39
+msgid "containing your postal address, and asking them to reply to this request.\n Or you could phone them."
msgstr ""
-#: app/views/request_game/play.rhtml:1 app/views/request_game/play.rhtml:30
-msgid "Play the request categorisation game!"
+#: app/views/request/show_response.rhtml:42
+msgid "When you receive the paper response, please help\n others find out what it says:"
msgstr ""
-#: app/views/request_game/play.rhtml:31
-msgid "Some people who've made requests haven't let us know whether they were\nsuccessful or not. We need <strong>your</strong> help &ndash;\nchoose one of these requests, read it, and let everyone know whether or not the\ninformation has been provided. Everyone'll be exceedingly grateful."
+#: app/views/request/show_response.rhtml:45
+msgid "Add an annotation to your request with choice quotes, or\n a <strong>summary of the response</strong>."
msgstr ""
-#: app/views/request_game/play.rhtml:39
-msgid "I don't like these ones &mdash; give me some more!"
+#: app/views/request/show_response.rhtml:47
+msgid "If you can, scan in or photograph the response, and <strong>send us\n a copy to upload</strong>."
msgstr ""
-#: app/views/request_game/play.rhtml:40
-msgid "I don't want to do any more tidying now!"
+#: app/views/request/show_response.rhtml:60
+msgid "New response to your request"
msgstr ""
-#: app/views/request_game/play.rhtml:42
-msgid "Thanks for helping - your work will make it easier for everyone to find successful\nresponses, and maybe even let us make league tables..."
+#: app/views/request/show_response.rhtml:62
+msgid "Response to your request"
msgstr ""
-#: app/views/request_mailer/stopped_responses.rhtml:1
-msgid "The email that you, on behalf of {{public_body}}, sent to\n{{user}} to reply to an {{law_used_short}}\nrequest has not been delivered."
+#: app/views/request/show_response.rhtml:66
+msgid "New response to {{law_used_short}} request"
msgstr ""
-#: app/views/request_mailer/stopped_responses.rhtml:5
-msgid "This is because {{title}} is an old request that has been\nmarked to no longer receive responses."
+#: app/views/request/similar.rhtml:7
+msgid "No similar requests found."
msgstr ""
-#: app/views/request_mailer/stopped_responses.rhtml:10
-msgid "If this is incorrect, or you would like to send a late response to the request\nor an email on another subject to {{user}}, then please\nemail {{contact_email}} for help."
+#: app/views/request/similar.rhtml:18
+msgid "Unexpected search result type "
msgstr ""
-#: app/views/request_mailer/stopped_responses.rhtml:14
-msgid "Your original message is attached."
+#: app/views/request/simple_correspondence.rhtml:1
+msgid "This is a plain-text version of the Freedom of Information request \"{{request_title}}\". The latest, full version is available online at {{full_url}}"
msgstr ""
-#: app/views/request_mailer/not_clarified_alert.rhtml:1
-msgid "request."
+#: app/views/request/simple_correspondence.rhtml:17 app/views/request/simple_correspondence.rhtml:29
+#: app/views/request/simple_correspondence.rhtml:36
+msgid "Date:"
msgstr ""
-#: app/views/request_mailer/not_clarified_alert.rhtml:2
-msgid "To do this, first click on the link below."
+#: app/views/request/simple_correspondence.rhtml:21
+msgid "Attachment:"
msgstr ""
-#: app/views/request_mailer/not_clarified_alert.rhtml:6
-msgid "You will only get an answer to your request if you follow up\nwith the clarification."
+#: app/views/request/simple_correspondence.rhtml:42
+msgid "{{username}} left an annotation:"
msgstr ""
-#: app/views/request_mailer/comment_on_alert.rhtml:1
-msgid "{{user_name}} has annotated your {{law_used_short}} \nrequest. Follow this link to see what they wrote."
+#: app/views/request/upload_response.rhtml:5
+msgid "Respond to the FOI request"
msgstr ""
-#: app/views/request_mailer/old_unclassified_updated.rhtml:1
-msgid "To help us keep the site tidy, someone else has updated the status of the \n{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
+#: app/views/request/upload_response.rhtml:5
+msgid " made by "
msgstr ""
-#: app/views/request_mailer/old_unclassified_updated.rhtml:4
-msgid "Follow this link to see the request:"
+#: app/views/request/upload_response.rhtml:8
+msgid "Your response will <strong>appear on the Internet</strong>, <a href=\"%s\">read why</a> and answers to other questions."
msgstr ""
-#: app/views/request_mailer/very_overdue_alert.rhtml:1
-msgid "are long overdue."
+#: app/views/request/upload_response.rhtml:11
+msgid "Respond by email"
msgstr ""
-#: app/views/request_mailer/very_overdue_alert.rhtml:3
-msgid "They have not replied to your {{law_used_short}} request {{title}}, \nas required by law"
+#: app/views/request/upload_response.rhtml:13
+msgid "You should have received a copy of the request by email, and you can respond\nby <strong>simply replying</strong> to that email. For your convenience, here is the address:"
msgstr ""
-#: app/views/request_mailer/very_overdue_alert.rhtml:4
-msgid "even during holidays"
+#: app/views/request/upload_response.rhtml:16
+msgid "You may <strong>include attachments</strong>. If you would like to attach a\nfile too large for email, use the form below."
msgstr ""
-#: app/views/request_mailer/very_overdue_alert.rhtml:6
-msgid "Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\nreview, asking them to find out why response to the request has been so slow."
+#: app/views/request/upload_response.rhtml:21
+msgid "Respond using the web"
msgstr ""
-#: app/views/request_mailer/requires_admin.rhtml:2
-msgid "has reported an"
+#: app/views/request/upload_response.rhtml:23
+msgid "Enter your response below. You may attach one file (use email, or \n<a href=\"%s\">contact us</a> if you need more)."
msgstr ""
-#: app/views/request_mailer/requires_admin.rhtml:3
-msgid "response as needing administrator attention. Take a look, and reply to this\nemail to let them know what you are going to do about it."
+#: app/views/request/upload_response.rhtml:28
+msgid "Response:"
msgstr ""
-#: app/views/request_mailer/requires_admin.rhtml:9
-msgid "Administration URL:"
+#: app/views/request/upload_response.rhtml:33
+msgid "Attachment (optional):"
msgstr ""
-#: app/views/request_mailer/overdue_alert.rhtml:1
-msgid "have delayed."
+#: app/views/request/upload_response.rhtml:40
+msgid " (<strong>patience</strong>, especially for large files, it may take a while!)"
msgstr ""
-#: app/views/request_mailer/overdue_alert.rhtml:3
-msgid "They have not replied to your {{law_used_short}} request {{title}} promptly, as normally required by law"
+#: app/views/request_game/play.rhtml:1 app/views/request_game/play.rhtml:30
+msgid "Play the request categorisation game!"
msgstr ""
-#: app/views/request_mailer/overdue_alert.rhtml:3
-msgid "during term time"
+#: app/views/request_game/play.rhtml:31
+msgid "Some people who've made requests haven't let us know whether they were\nsuccessful or not. We need <strong>your</strong> help &ndash;\nchoose one of these requests, read it, and let everyone know whether or not the\ninformation has been provided. Everyone'll be exceedingly grateful."
msgstr ""
-#: app/views/request_mailer/overdue_alert.rhtml:5
-msgid "Click on the link below to send a message to {{public_body}} reminding them to reply to your request."
+#: app/views/request_game/play.rhtml:39
+msgid "I don't like these ones &mdash; give me some more!"
msgstr ""
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:1
-msgid "To let us know, follow this link and then select the appropriate box."
+#: app/views/request_game/play.rhtml:40
+msgid "I don't want to do any more tidying now!"
msgstr ""
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:5
-msgid "Your request was called {{info_request}}. Letting everyone know whether you got the information will help us keep tabs on"
+#: app/views/request_game/play.rhtml:42
+msgid "Thanks for helping - your work will make it easier for everyone to find successful\nresponses, and maybe even let us make league tables..."
+msgstr ""
+
+#: app/views/request_mailer/comment_on_alert.rhtml:1
+msgid "{{user_name}} has annotated your {{law_used_short}} \nrequest. Follow this link to see what they wrote."
+msgstr ""
+
+#: app/views/request_mailer/comment_on_alert.rhtml:6 app/views/request_mailer/comment_on_alert_plural.rhtml:5
+#: app/views/request_mailer/new_response.rhtml:15 app/views/request_mailer/new_response_reminder_alert.rhtml:8
+#: app/views/request_mailer/not_clarified_alert.rhtml:9 app/views/request_mailer/old_unclassified_updated.rhtml:8
+#: app/views/request_mailer/overdue_alert.rhtml:9 app/views/request_mailer/stopped_responses.rhtml:16
+#: app/views/request_mailer/very_overdue_alert.rhtml:11 app/views/track_mailer/event_digest.rhtml:66
+#: app/views/user_mailer/already_registered.rhtml:11 app/views/user_mailer/changeemail_already_used.rhtml:10
+#: app/views/user_mailer/changeemail_confirm.rhtml:13 app/views/user_mailer/confirm_login.rhtml:11
+msgid "the {{site_name}} team"
+msgstr ""
+
+#: app/views/request_mailer/comment_on_alert_plural.rhtml:1
+msgid "There are {{count}} new annotations on your {{info_request}} request. Follow this link to see what they wrote."
msgstr ""
#: app/views/request_mailer/new_response.rhtml:1
@@ -2398,622 +2821,639 @@ msgstr ""
msgid "Although all responses are automatically published, we depend on\nyou, the original requester, to evaluate them."
msgstr ""
-#: app/views/request_mailer/comment_on_alert_plural.rhtml:1
-msgid "There are {{count}} new annotations on your {{info_request}} request. Follow this link to see what they wrote."
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:1
+msgid "To let us know, follow this link and then select the appropriate box."
msgstr ""
-#: app/views/layouts/default.rhtml:15
-msgid "Make and browse Freedom of Information (FOI) requests"
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:5
+msgid "Your request was called {{info_request}}. Letting everyone know whether you got the information will help us keep tabs on"
msgstr ""
-#: app/views/layouts/default.rhtml:67
-msgid "Make and explore Freedom of Information requests"
+#: app/views/request_mailer/not_clarified_alert.rhtml:1
+msgid "request."
msgstr ""
-#: app/views/layouts/default.rhtml:87
-msgid "Make request"
+#: app/views/request_mailer/not_clarified_alert.rhtml:2
+msgid "To do this, first click on the link below."
msgstr ""
-#: app/views/layouts/default.rhtml:88
-msgid "View requests"
+#: app/views/request_mailer/not_clarified_alert.rhtml:6
+msgid "You will only get an answer to your request if you follow up\nwith the clarification."
msgstr ""
-#: app/views/layouts/default.rhtml:89
-msgid "View authorities"
+#: app/views/request_mailer/old_unclassified_updated.rhtml:1
+msgid "To help us keep the site tidy, someone else has updated the status of the \n{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
msgstr ""
-#: app/views/layouts/default.rhtml:91
-msgid "My requests"
+#: app/views/request_mailer/old_unclassified_updated.rhtml:4
+msgid "Follow this link to see the request:"
msgstr ""
-#: app/views/layouts/default.rhtml:93
-msgid "Read blog"
+#: app/views/request_mailer/overdue_alert.rhtml:1
+msgid "have delayed."
msgstr ""
-#: app/views/layouts/default.rhtml:94
-msgid "Help"
+#: app/views/request_mailer/overdue_alert.rhtml:3
+msgid "They have not replied to your {{law_used_short}} request {{title}} promptly, as normally required by law"
msgstr ""
-#: app/views/layouts/default.rhtml:99
-msgid "Hello, {{username}}!"
+#: app/views/request_mailer/overdue_alert.rhtml:3
+msgid "during term time"
msgstr ""
-#: app/views/layouts/default.rhtml:100
-msgid "Sign out"
+#: app/views/request_mailer/overdue_alert.rhtml:5
+msgid "Click on the link below to send a message to {{public_body}} reminding them to reply to your request."
msgstr ""
-#: app/views/layouts/default.rhtml:102
-msgid "Hello!"
+#: app/views/request_mailer/requires_admin.rhtml:2
+msgid "has reported an"
msgstr ""
-#: app/views/layouts/default.rhtml:103
-msgid "Sign in or sign up"
+#: app/views/request_mailer/requires_admin.rhtml:3
+msgid "response as needing administrator attention. Take a look, and reply to this\nemail to let them know what you are going to do about it."
msgstr ""
-#: app/views/layouts/default.rhtml:127
-msgid "Contact {{site_name}}"
+#: app/views/request_mailer/requires_admin.rhtml:9
+msgid "Administration URL:"
msgstr ""
-#: app/views/general/exception_caught.rhtml:1
-msgid "Sorry, we couldn't find that page"
+#: app/views/request_mailer/stopped_responses.rhtml:1
+msgid "The email that you, on behalf of {{public_body}}, sent to\n{{user}} to reply to an {{law_used_short}}\nrequest has not been delivered."
msgstr ""
-#: app/views/general/exception_caught.rhtml:3
-msgid "The page either doesn't exist, or is broken. Things you can try now:"
+#: app/views/request_mailer/stopped_responses.rhtml:5
+msgid "This is because {{title}} is an old request that has been\nmarked to no longer receive responses."
msgstr ""
-#: app/views/general/exception_caught.rhtml:6
-msgid "Check for mistakes if you typed or copied the address."
+#: app/views/request_mailer/stopped_responses.rhtml:10
+msgid "If this is incorrect, or you would like to send a late response to the request\nor an email on another subject to {{user}}, then please\nemail {{contact_email}} for help."
msgstr ""
-#: app/views/general/exception_caught.rhtml:7
-msgid "Search the site to find what you were looking for."
+#: app/views/request_mailer/stopped_responses.rhtml:14
+msgid "Your original message is attached."
msgstr ""
-#: app/views/general/exception_caught.rhtml:13
-msgid "<a href=\"%s\">Contact us</a> to tell us about the problem</li>"
+#: app/views/request_mailer/very_overdue_alert.rhtml:1
+msgid "are long overdue."
msgstr ""
-#: app/views/general/exception_caught.rhtml:14
-msgid "Go to our <a href=\"%s\">front page</a></li>"
+#: app/views/request_mailer/very_overdue_alert.rhtml:3
+msgid "They have not replied to your {{law_used_short}} request {{title}}, \nas required by law"
msgstr ""
-#: app/views/general/exception_caught.rhtml:17
-msgid "<strong>Technical details:</strong>"
+#: app/views/request_mailer/very_overdue_alert.rhtml:4
+msgid "even during holidays"
msgstr ""
-#: app/views/general/exception_caught.rhtml:17
-msgid "Unknown"
+#: app/views/request_mailer/very_overdue_alert.rhtml:6
+msgid "Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\nreview, asking them to find out why response to the request has been so slow."
msgstr ""
-#: app/views/general/_credits.rhtml:1
-msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>."
+#: app/views/track/_tracking_links.rhtml:8
+msgid "This is your own request, so you will be automatically emailed when new responses arrive."
msgstr ""
-#: app/views/general/frontpage.rhtml:4
-msgid "Make or explore Freedom of Information requests"
+#: app/views/track/_tracking_links.rhtml:21
+msgid "Follow by email"
msgstr ""
-#: app/views/general/frontpage.rhtml:16
-msgid "e.g."
+#: app/views/track/_tracking_links.rhtml:26
+msgid "RSS feed of updates"
msgstr ""
-#: app/views/general/frontpage.rhtml:23
-msgid "OR, <strong>search</strong> for information others have requested using {{site_name}}"
+#: app/views/track/_tracking_links.rhtml:26
+msgid "RSS feed"
msgstr ""
-#: app/views/general/frontpage.rhtml:34
-msgid "%d request"
-msgid_plural "%d requests"
-msgstr[0] ""
-msgstr[1] ""
-
-#: app/views/general/frontpage.rhtml:39
-msgid "More authorities..."
+#: app/views/track_mailer/event_digest.rhtml:21
+msgid "{{public_body}} sent a response to {{user_name}}"
msgstr ""
-#: app/views/general/frontpage.rhtml:49
-msgid "{{length_of_time}} ago"
+#: app/views/track_mailer/event_digest.rhtml:24
+msgid "{{user_name}} sent a follow up message to {{public_body}}"
msgstr ""
-#: app/views/general/frontpage.rhtml:53
-msgid "More successful requests..."
+#: app/views/track_mailer/event_digest.rhtml:28
+msgid "{{user_name}} sent a request to {{public_body}}"
msgstr ""
-#: app/views/general/search.rhtml:4
-msgid "Search Freedom of Information requests, public authorities and users"
+#: app/views/track_mailer/event_digest.rhtml:31
+msgid "{{user_name}} added an annotation"
msgstr ""
-#: app/views/general/search.rhtml:9
-msgid "Results page {{page_number}}"
+#: app/views/track_mailer/event_digest.rhtml:60
+msgid "Alter your subscription"
msgstr ""
-#: app/views/general/search.rhtml:16
-msgid "Next, select the public authority you'd like to make the request from."
+#: app/views/track_mailer/event_digest.rhtml:63
+msgid "Please click on the link below to cancel or alter these emails."
msgstr ""
-#: app/views/general/search.rhtml:17
-msgid "Can't find it? <a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add it</a>."
+#: app/views/user/_signin.rhtml:7
+msgid "If you've used {{site_name}} before"
msgstr ""
-#: app/views/general/search.rhtml:31 app/views/general/search.rhtml:121
-msgid "Advanced search tips"
+#: app/views/user/_signin.rhtml:11 app/views/user/_signup.rhtml:9
+#: app/views/user/signchangepassword_send_confirm.rhtml:13
+msgid "Your e-mail:"
msgstr ""
-#: app/views/general/search.rhtml:38
-msgid "Show most relevant results first"
+#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30
+msgid "Password:"
msgstr ""
-#: app/views/general/search.rhtml:40
-msgid "Newest results first"
+#: app/views/user/_signin.rhtml:21
+msgid "Forgotten your password?"
msgstr ""
-#: app/views/general/search.rhtml:42
-msgid "Recently described results first"
+#: app/views/user/_signin.rhtml:26
+msgid "Remember me</label> (keeps you signed in longer;\n do not use on a public computer) "
msgstr ""
-#: app/views/general/search.rhtml:48
-msgid "No public authorities found"
+#: app/views/user/_signin.rhtml:32 app/views/user/sign.rhtml:2 app/views/user/sign.rhtml:33
+msgid "Sign in"
msgstr ""
-#: app/views/general/search.rhtml:50 app/views/general/search.rhtml:62
-msgid "Did you mean: {{correction}}"
+#: app/views/user/_signup.rhtml:6
+msgid "If you're new to {{site_name}}"
msgstr ""
-#: app/views/general/search.rhtml:53
-msgid "<a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add one</a>."
+#: app/views/user/_signup.rhtml:13
+msgid "We will not reveal your email address to anybody unless you or\n the law tell us to (<a href=\"%s\">details</a>). "
msgstr ""
-#: app/views/general/search.rhtml:71
-msgid "One public authority matching &#x2018;{{user_search_query}}&#x2019;"
+#: app/views/user/_signup.rhtml:18
+msgid "Your name:"
msgstr ""
-#: app/views/general/search.rhtml:73
-msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}} for {{user_search_query}}"
+#: app/views/user/_signup.rhtml:22
+msgid "Your <strong>name will appear publicly</strong> \n (<a href=\"%s\">why?</a>)\n on this website and in search engines. If you\n are thinking of using a pseudonym, please \n <a href=\"%s\">read this first</a>."
msgstr ""
-#: app/views/general/search.rhtml:123
-msgid "Enter words that you want to find separated by spaces, e.g. <strong>climbing lane</strong>"
+#: app/views/user/_signup.rhtml:35
+msgid "Password: (again)"
msgstr ""
-#: app/views/general/search.rhtml:124
-msgid "Use OR (in capital letters) where you don't mind which word, e.g. <strong><code>commons OR lords</code></strong>"
+#: app/views/user/_signup.rhtml:46 app/views/user/sign.rhtml:40
+msgid "Sign up"
msgstr ""
-#: app/views/general/search.rhtml:125
-msgid "Use quotes when you want to find an exact phrase, e.g. <strong><code>\"Liverpool City Council\"</code></strong>"
+#: app/views/user/_user_listing_single.rhtml:19 app/views/user/_user_listing_single.rhtml:20
+msgid "made."
msgstr ""
-#: app/views/general/search.rhtml:126
-msgid "<strong><code>status:</code></strong> to select based on the status or historical status of the request, see the <a href=\"{{statuses_url}}\">table of statuses</a> below."
+#: app/views/user/_user_listing_single.rhtml:21
+msgid "Joined in"
msgstr ""
-#: app/views/general/search.rhtml:127
-msgid "<strong><code>variety:</code></strong> to select type of thing to search for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
+#: app/views/user/bad_token.rhtml:2
+msgid "Please check the URL (i.e. the long code of letters and numbers) is copied\ncorrectly from your email."
msgstr ""
-#: app/views/general/search.rhtml:128
-msgid "<strong><code>requested_from:home_office</code></strong> to search requests from the Home Office, typing the name as in the URL."
+#: app/views/user/bad_token.rhtml:7
+msgid "If you can't click on it in the email, you'll have to <strong>select and copy\nit</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\nyou would type the address of any other webpage."
msgstr ""
-#: app/views/general/search.rhtml:129
-msgid "<strong><code>requested_by:julian_todd</code></strong> to search requests made by Julian Todd, typing the name as in the URL."
+#: app/views/user/bad_token.rhtml:13
+msgid "If you got the email <strong>more than six months ago</strong>, then this login link won't work any\nmore. Please try doing what you were doing from the beginning."
msgstr ""
-#: app/views/general/search.rhtml:130
-msgid "<strong><code>commented_by:tony_bowden</code></strong> to search annotations made by Tony Bowden, typing the name as in the URL."
+#: app/views/user/banned.rhtml:9
+msgid "You will be unable to make new requests, send follow ups, add annotations or\nsend messages to other users. You may continue to view other requests, and set\nup\nemail alerts."
msgstr ""
-#: app/views/general/search.rhtml:131
-msgid "<strong><code>request:</code></strong> to restrict to a specific request, typing the title as in the URL."
+#: app/views/user/banned.rhtml:15
+msgid "If you would like us to lift this ban, then you may politely\n<a href=\"/help/contact\">contact us</a> giving reasons.\n"
msgstr ""
-#: app/views/general/search.rhtml:132
-msgid "<strong><code>filetype:pdf</code></strong> to find all responses with PDF attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
+#: app/views/user/confirm.rhtml:6
+msgid "We've sent you an email, and you'll need to click the link in it before you can\ncontinue."
msgstr ""
-#: app/views/general/search.rhtml:133
-msgid "Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show things that happened in the first two weeks of January."
+#: app/views/user/confirm.rhtml:11
+msgid "<small>If you use web-based email or have \"junk mail\" filters, also check your\nbulk/spam mail folders. Sometimes, our messages are marked that way.</small>\n</p>"
msgstr ""
-#: app/views/general/search.rhtml:134
-msgid "<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
+#: app/views/user/contact.rhtml:32
+msgid "<strong>Note:</strong> You're sending a message to yourself, presumably\n to try out how it works."
msgstr ""
-#: app/views/general/search.rhtml:137
-msgid "Read about <a href=\"{{advanced_search_url}}\">advanced search operators</a>, such as proximity and wildcards."
+#: app/views/user/contact.rhtml:35
+msgid " <strong>Privacy note:</strong> Your email address will be given to"
msgstr ""
-#: app/views/general/search.rhtml:140
-msgid "Table of statuses"
+#: app/views/user/contact.rhtml:36
+msgid " when you send this message."
msgstr ""
-#: app/views/general/search.rhtml:142
-msgid "Waiting for the public authority to reply"
+#: app/views/user/no_cookies.rhtml:3
+msgid "Please enable \"cookies\" to carry on"
msgstr ""
-#: app/views/general/search.rhtml:143
-msgid "The public authority does not have the information requested"
+#: app/views/user/no_cookies.rhtml:5
+msgid "To carry on, you need to sign in or make an account. Unfortunately, there\nwas a technical problem trying to do this."
msgstr ""
-#: app/views/general/search.rhtml:144
-msgid "The request was refused by the public authority"
+#: app/views/user/no_cookies.rhtml:8
+msgid "It may be that your browser is not set to accept a thing called \"cookies\",\nor cannot do so. If you can, please enable cookies, or try using a different\nbrowser. Then press refresh to have another go."
msgstr ""
-#: app/views/general/search.rhtml:145
-msgid "Some of the information requested has been received"
+#: app/views/user/no_cookies.rhtml:12
+msgid "If your browser is set to accept cookies and you are seeing this message,\nthen there is probably a fault with our server."
msgstr ""
-#: app/views/general/search.rhtml:146
-msgid "All of the information requested has been received"
+#: app/views/user/no_cookies.rhtml:15
+msgid "Please <a href=\"%s\">get in touch</a> with us so we can fix it."
msgstr ""
-#: app/views/general/search.rhtml:147
-msgid "The public authority would like part of the request explained"
+#: app/views/user/no_cookies.rhtml:17
+msgid "Let us know what you were doing when this message\nappeared and your browser and operating system type and version."
msgstr ""
-#: app/views/general/search.rhtml:148
-msgid "The public authority would like to / has responded by post"
+#: app/views/user/no_cookies.rhtml:20
+msgid "If you are still having trouble, please <a href=\"%s\">contact us</a>."
msgstr ""
-#: app/views/general/search.rhtml:149
-msgid "Waiting for the public authority to complete an internal review of their handling of the request"
+#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104
+msgid "Change profile photo"
msgstr ""
-#: app/views/general/search.rhtml:150
-msgid "Received an error message, such as delivery failure."
+#: app/views/user/set_crop_profile_photo.rhtml:6
+msgid "Crop your profile photo"
msgstr ""
-#: app/views/general/search.rhtml:151
-msgid "A strange reponse, required attention by the {{site_name}} team"
+#: app/views/user/set_crop_profile_photo.rhtml:35
+msgid "<strong>Privacy note:</strong> Your photo will be shown in public on the Internet, \n wherever you do something on {{site_name}}."
msgstr ""
-#: app/views/general/search.rhtml:152
-msgid "The requester has abandoned this request for some reason"
+#: app/views/user/set_draft_profile_photo.rhtml:5
+msgid "Choose your profile photo"
msgstr ""
-#: app/views/general/search.rhtml:155
-msgid "Table of varieties"
+#: app/views/user/set_draft_profile_photo.rhtml:13
+msgid "Photo of you:"
msgstr ""
-#: app/views/general/search.rhtml:158
-msgid "Original request sent"
+#: app/views/user/set_draft_profile_photo.rhtml:18
+msgid "Your photo will be shown in public <strong>on the Internet</strong>, \n wherever you do something on {{site_name}}."
msgstr ""
-#: app/views/general/search.rhtml:159
-msgid "Follow up message sent by requester"
+#: app/views/user/set_draft_profile_photo.rhtml:22
+msgid "Please don't upload offensive pictures. We will take down images\n that we consider inappropriate."
msgstr ""
-#: app/views/general/search.rhtml:160
-msgid "Response from a public authority"
+#: app/views/user/set_draft_profile_photo.rhtml:32
+msgid "Next, crop your photo &gt;&gt;"
msgstr ""
-#: app/views/general/search.rhtml:161
-msgid "Annotation added to request"
+#: app/views/user/set_draft_profile_photo.rhtml:46
+msgid "OR remove the existing photo"
msgstr ""
-#: app/views/general/search.rhtml:162
-msgid "A public authority"
+#: app/views/user/set_draft_profile_photo.rhtml:55
+msgid "Cancel, return to your profile page"
msgstr ""
-#: app/views/general/search.rhtml:163
-msgid "A {{site_name}} user"
+#: app/views/user/set_profile_about_me.rhtml:1
+msgid "Change the text about you on your profile at {{site_name}}"
msgstr ""
-#: app/views/public_body/list.rhtml:5
-msgid "Alphabet"
+#: app/views/user/set_profile_about_me.rhtml:3 app/views/user/signchangeemail.rhtml:3
+msgid "internal error"
msgstr ""
-#: app/views/public_body/list.rhtml:29
-msgid "<a href=\"%s\">Are we missing a public authority?</a>."
+#: app/views/user/set_profile_about_me.rhtml:9
+msgid "Edit text about you"
msgstr ""
-#: app/views/public_body/list.rhtml:32
-msgid "List of all authorities (CSV)"
+#: app/views/user/set_profile_about_me.rhtml:11
+msgid " What are you investigating using Freedom of Information? "
msgstr ""
-#: app/views/public_body/list.rhtml:37
-msgid "Public authorities - {{description}}"
+#: app/views/user/set_profile_about_me.rhtml:14
+msgid " This will appear on your {{site_name}} profile, to make it\n easier for others to get involved with what you're doing."
msgstr ""
-#: app/views/public_body/list.rhtml:42
-msgid "in total"
+#: app/views/user/set_profile_about_me.rhtml:20
+msgid "About you:"
msgstr ""
-#: app/views/public_body/list.rhtml:43
-msgid "<a href=\"%s\">can't find the one you want?</a>"
+#: app/views/user/set_profile_about_me.rhtml:26
+msgid " Include relevant links, such as to a campaign page, your blog or a\n twitter account. They will be made clickable. \n e.g."
msgstr ""
-#: app/views/public_body/view_email.rhtml:3
-msgid "FOI email address for {{public_body}}"
+#: app/views/user/set_profile_about_me.rhtml:35
+msgid "Save"
msgstr ""
-#: app/views/public_body/view_email.rhtml:7
-msgid "{{site_name}} sends new requests to <strong>{{request_email}}</strong> for this authority."
+#: app/views/user/show.rhtml:4
+msgid "There is <strong>more than one person</strong> who uses this site and has this name. \n One of them is shown below, you may mean a different one:"
msgstr ""
-#: app/views/public_body/view_email.rhtml:10
-msgid "Freedom of Information law no longer applies to this authority.Follow up messages to existing requests are sent to "
+#: app/views/user/show.rhtml:12
+msgid "Please <strong>go to the following requests</strong>, and let us\n know if there was information in the recent responses to them."
msgstr ""
-#: app/views/public_body/view_email.rhtml:14
-msgid "Follow up messages to existing requests are sent to "
+#: app/views/user/show.rhtml:20
+msgid "Thanks very much - this will help others find useful stuff. We'll\n also, if you need it, give advice on what to do next about your\n requests."
msgstr ""
-#: app/views/public_body/view_email.rhtml:17
-msgid "We do not have a working request email address for this authority."
+#: app/views/user/show.rhtml:29
+msgid "Track this person"
msgstr ""
-#: app/views/public_body/view_email.rhtml:28
-msgid "If the address is wrong, or you know a better address, please <a href=\"%s\">contact us</a>."
+#: app/views/user/show.rhtml:32
+msgid "On this page"
msgstr ""
-#: app/views/public_body/view_email.rhtml:30
-msgid " If you know the address to use, then please <a href=\"%s\">send it to us</a>.\n You may be able to find the address on their website, or by phoning them up and asking."
+#: app/views/user/show.rhtml:33
+msgid "FOI requests"
msgstr ""
-#: app/views/public_body/show.rhtml:3
-msgid "Track this authority"
+#: app/views/user/show.rhtml:34
+msgid "Annotations"
msgstr ""
-#: app/views/public_body/show.rhtml:5
-msgid "More about this authority"
+#: app/views/user/show.rhtml:36
+msgid "Email subscriptions"
msgstr ""
-#: app/views/public_body/show.rhtml:7
-msgid "Home page of authority"
+#: app/views/user/show.rhtml:53
+msgid "Set your profile photo"
msgstr ""
-#: app/views/public_body/show.rhtml:10
-msgid "Publication scheme"
+#: app/views/user/show.rhtml:59
+msgid " (you)"
msgstr ""
-#: app/views/public_body/show.rhtml:15 app/views/public_body/show.rhtml:17
-msgid "Charity registration"
+#: app/views/user/show.rhtml:62
+msgid "Joined {{site_name}} in"
msgstr ""
-#: app/views/public_body/show.rhtml:21
-msgid "View FOI email address"
+#: app/views/user/show.rhtml:69
+msgid "Send message to "
msgstr ""
-#: app/views/public_body/show.rhtml:29
-msgid "also called {{public_body_short_name}}"
+#: app/views/user/show.rhtml:71
+msgid "just to see how it works"
msgstr ""
-#: app/views/public_body/show.rhtml:31
-msgid "admin"
+#: app/views/user/show.rhtml:79
+msgid "This user has been banned from {{site_name}} "
msgstr ""
-#: app/views/public_body/show.rhtml:40
-msgid "You can only request information about the environment from this authority."
+#: app/views/user/show.rhtml:83
+msgid "They have been given the following explanation:"
msgstr ""
-#: app/views/public_body/show.rhtml:47
-msgid "Make a new Environmental Information request"
+#: app/views/user/show.rhtml:96
+msgid "edit text about you"
msgstr ""
-#: app/views/public_body/show.rhtml:50
-msgid "<a href=\"{{url}}\">Make a new Freedom of Information request</a> to {{public_body_name}}"
+#: app/views/user/show.rhtml:106
+msgid "Change your password"
msgstr ""
-#: app/views/public_body/show.rhtml:56
-msgid "Freedom of Information law does not apply to this authority, so you cannot make\n a request to it."
+#: app/views/user/show.rhtml:107
+msgid "Change your email"
msgstr ""
-#: app/views/public_body/show.rhtml:59
-msgid "This authority no longer exists, so you cannot make a request to it."
+#: app/views/user/show.rhtml:113
+msgid "<a href=\"%s\">Sign in</a> to change password, subscriptions and more ({{user_name}} only)"
msgstr ""
-#: app/views/public_body/show.rhtml:61
-msgid "For an unknown reason, it is not possible to make a request to this authority."
+#: app/views/user/show.rhtml:123
+msgid "Search your contributions"
msgstr ""
-#: app/views/public_body/show.rhtml:69
-msgid "Environmental Information Regulations requests made using this site"
+#: app/views/user/show.rhtml:125
+msgid "Search contributions by this person"
msgstr ""
-#: app/views/public_body/show.rhtml:72
-msgid "Freedom of Information requests made using this site"
+#: app/views/user/show.rhtml:136
+msgid "You have made no Freedom of Information requests using this site."
msgstr ""
-#: app/views/public_body/show.rhtml:73
-msgid "Nobody has made any Freedom of Information requests to {{public_body_name}} using this site yet."
+#: app/views/user/show.rhtml:136
+msgid "This person has made no Freedom of Information requests using this site."
msgstr ""
-#: app/views/public_body/show.rhtml:80
-msgid "%d Freedom of Information request made using this site"
-msgid_plural "%d Freedom of Information requests made using this site"
+#: app/views/user/show.rhtml:141
+msgid "Your %d Freedom of Information request"
+msgid_plural "Your %d Freedom of Information requests"
msgstr[0] ""
msgstr[1] ""
-#: app/views/public_body/show.rhtml:91
-msgid "Only requests made using {{site_name}} are shown."
+#: app/views/user/show.rhtml:141
+msgid "This person's %d Freedom of Information request"
+msgid_plural "This person's %d Freedom of Information requests"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/user/show.rhtml:155
+msgid "Freedom of Information requests made by you"
msgstr ""
-#: app/views/public_body/show.rhtml:96
-msgid "Environmental Information Regulations requests made"
+#: app/views/user/show.rhtml:155
+msgid "Freedom of Information requests made by this person"
msgstr ""
-#: app/views/public_body/show.rhtml:98
-msgid "Freedom of Information requests made"
+#: app/views/user/show.rhtml:156
+msgid "The search index is currently offline, so we can't show the Freedom of Information requests this person has made."
msgstr ""
-#: app/views/public_body/show.rhtml:100
-msgid "The search index is currently offline, so we can't show the Freedom of Information requests that have been made to this authority."
+#: app/views/user/show.rhtml:162
+msgid "Your annotations"
msgstr ""
-#: app/views/public_body/view_email_captcha.rhtml:1
-msgid "View FOI email address for '{{public_body_name}}'"
+#: app/views/user/show.rhtml:162
+msgid "This person's annotations"
msgstr ""
-#: app/views/public_body/view_email_captcha.rhtml:3
-msgid "View FOI email address for {{public_body_name}}"
+#: app/views/user/show.rhtml:165 app/views/user/show.rhtml:185
+msgid "None made."
msgstr ""
-#: app/views/public_body/view_email_captcha.rhtml:5
-msgid "To view the email address that we use to send FOI requests to {{public_body_name}}, please enter these words."
+#: app/views/user/show.rhtml:169
+msgid "Your %d annotation"
+msgid_plural "Your %d annotations"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/user/show.rhtml:169
+msgid "This person's %d annotation"
+msgid_plural "This person's %d annotations"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/user/show.rhtml:184
+msgid "Your email subscriptions"
msgstr ""
-#: app/views/public_body/view_email_captcha.rhtml:12
-msgid "View email"
+#: app/views/user/show.rhtml:187
+msgid "email subscription"
msgstr ""
-#: app/views/public_body/_body_listing_single.rhtml:12
-msgid "Also called {{other_name}}."
+#: app/views/user/show.rhtml:196 app/views/user/show.rhtml:210
+msgid "unsubscribe all"
msgstr ""
-#: app/views/public_body/_body_listing_single.rhtml:21
-msgid "%d request made."
-msgid_plural "%d requests made."
-msgstr[0] ""
-msgstr[1] ""
+#: app/views/user/show.rhtml:224
+msgid "unsubscribe"
+msgstr ""
-#: app/views/public_body/_body_listing_single.rhtml:23
-msgid "Make your own request"
+#: app/views/user/sign.rhtml:8
+msgid "Please sign in as "
msgstr ""
-#: app/views/public_body/_body_listing_single.rhtml:26
-msgid "Added on {{date}}"
+#: app/views/user/sign.rhtml:11
+msgid "please sign in as "
msgstr ""
-#: app/views/outgoing_mailer/followup.rhtml:6 app/views/outgoing_mailer/initial_request.rhtml:5
-msgid "Please use this email address for all replies to this request:"
+#: app/views/user/sign.rhtml:20
+msgid "Sign in or make a new account"
msgstr ""
-#: app/views/outgoing_mailer/initial_request.rhtml:8
-msgid "Is {{email_address}} the wrong address for {{type_of_request}} requests to {{public_body_name}}? If so, please contact us using this form:"
+#: app/views/user/sign.rhtml:26
+msgid " Please sign in or make a new account."
msgstr ""
-#: app/views/outgoing_mailer/_followup_footer.rhtml:1
-msgid "Disclaimer: This message and any reply that you make will be published on the internet. Our privacy and copyright policies:"
+#: app/views/user/sign.rhtml:28
+msgid "please sign in or make a new account."
msgstr ""
-#: app/views/outgoing_mailer/_followup_footer.rhtml:4
-msgid "If you find this service useful as an FOI officer, please ask your web manager to link to us from your organisation's FOI page."
+#: app/views/user/sign.rhtml:37
+msgid "- or -"
msgstr ""
-#: app/views/comment/_comment_form.rhtml:8
-msgid "Email me future updates to this request"
+#: app/views/user/signchangeemail.rhtml:15
+msgid "Old e-mail:"
msgstr ""
-#: app/views/comment/_comment_form.rhtml:15
-msgid "Preview your annotation"
+#: app/views/user/signchangeemail.rhtml:20
+msgid "New e-mail:"
msgstr ""
-#: app/views/comment/_comment_form.rhtml:16
-msgid " (<strong>no ranty</strong> politics, read our <a href=\"%s\">moderation policy</a>)"
+#: app/views/user/signchangeemail.rhtml:25
+msgid "Your password:"
msgstr ""
-#: app/views/comment/preview.rhtml:1
-msgid "Preview new annotation on '{{info_request_title}}'"
+#: app/views/user/signchangeemail.rhtml:30
+msgid "<strong>Note:</strong>\n We will send an email to your new email address. Follow the\n instructions in it to confirm changing your email."
msgstr ""
-#: app/views/comment/preview.rhtml:5
-msgid "Now preview your annotation"
+#: app/views/user/signchangeemail.rhtml:37
+msgid "Change email on {{site_name}}"
msgstr ""
-#: app/views/comment/preview.rhtml:10
-msgid "Your name and annotation will appear in <strong>search engines</strong>."
+#: app/views/user/signchangeemail_confirm.rhtml:3 app/views/user/signchangepassword_confirm.rhtml:1
+#: app/views/user/signchangepassword_confirm.rhtml:3
+msgid "Now check your email!"
msgstr ""
-#: app/views/comment/preview.rhtml:20
-msgid "Re-edit this annotation"
+#: app/views/user/signchangeemail_confirm.rhtml:6
+msgid "We've sent an email to your new email address. You'll need to click the link in\nit before your email address will be changed."
msgstr ""
-#: app/views/comment/preview.rhtml:21
-msgid "Post annotation"
+#: app/views/user/signchangeemail_confirm.rhtml:11 app/views/user/signchangepassword_confirm.rhtml:10
+msgid "If you use web-based email or have \"junk mail\" filters, also check your\nbulk/spam mail folders. Sometimes, our messages are marked that way."
msgstr ""
-#: app/views/comment/_single_comment.rhtml:10
-msgid "You"
+#: app/views/user/signchangepassword.rhtml:1 app/views/user/signchangepassword.rhtml:11
+#: app/views/user/signchangepassword_send_confirm.rhtml:1 app/views/user/signchangepassword_send_confirm.rhtml:9
+msgid "Change your password on {{site_name}}"
msgstr ""
-#: app/views/comment/_single_comment.rhtml:10
-msgid "left an annotation"
+#: app/views/user/signchangepassword.rhtml:15
+msgid "New password:"
msgstr ""
-#: app/views/comment/_single_comment.rhtml:24
-msgid "Report abuse"
+#: app/views/user/signchangepassword.rhtml:20
+msgid "New password: (again)"
msgstr ""
-#: app/views/comment/new.rhtml:14
-msgid "Add an annotation to "
+#: app/views/user/signchangepassword.rhtml:27
+msgid "Change password on {{site_name}}"
msgstr ""
-#: app/views/comment/new.rhtml:17
-msgid "Annotations are so anyone, including you, can help the requester with their request. For example:"
+#: app/views/user/signchangepassword_confirm.rhtml:6
+msgid "We've sent you an email, click the link in it, then you can change your password."
msgstr ""
-#: app/views/comment/new.rhtml:23
-msgid " Advise on how to <strong>best clarify</strong> the request."
+#: app/views/user/signchangepassword_send_confirm.rhtml:18
+msgid " <strong>Note:</strong>\n We will send you an email. Follow the instructions in it to change\n your password."
msgstr ""
-#: app/views/comment/new.rhtml:27
-msgid " Link to the information requested, if it is <strong>already available</strong> on the Internet. "
+#: app/views/user/signchangepassword_send_confirm.rhtml:26
+msgid "Submit"
msgstr ""
-#: app/views/comment/new.rhtml:28
-msgid " Suggest <strong>where else</strong> the requester might find the information. "
+#: app/views/user/wrong_user.rhtml:2
+msgid "Sorry, but only {{user_name}} is allowed to do that."
msgstr ""
-#: app/views/comment/new.rhtml:29
-msgid " Offer better ways of <strong>wording the request</strong> to get the information. "
+#: app/views/user/wrong_user_unknown_email.rhtml:3
+msgid "Unfortunately we don't know the FOI\nemail address for that authority, so we can't validate this.\nPlease <a href=\"%s\">contact us</a> to sort it out."
msgstr ""
-#: app/views/comment/new.rhtml:33
-msgid " <strong>Summarise</strong> the content of any information returned. "
+#: app/views/user_mailer/already_registered.rhtml:3
+msgid "You just tried to sign up to {{site_name}}, when you\nalready have an account. Your name and password have been\nleft as they previously were.\n\nPlease click on the link below."
msgstr ""
-#: app/views/comment/new.rhtml:34
-msgid " Say how you've <strong>used the information</strong>, with links if possible."
+#: app/views/user_mailer/changeemail_already_used.rhtml:1
+msgid "Someone, perhaps you, just tried to change their email address on\n{{site_name}} from {{old_email}} to {{new_email}}."
msgstr ""
-#: app/views/comment/new.rhtml:35
-msgid "<strong>Thank</strong> the public authority or "
+#: app/views/user_mailer/changeemail_already_used.rhtml:5
+msgid "This was not possible because there is already an account using \nthe email address {{email}}."
msgstr ""
-#: app/views/comment/new.rhtml:38
-msgid "Suggest how the requester can find the <strong>rest of the information</strong>."
+#: app/views/user_mailer/changeemail_already_used.rhtml:8
+msgid "The accounts have been left as they previously were."
msgstr ""
-#: app/views/comment/new.rhtml:41
-msgid "Point to <strong>related information</strong>, campaigns or forums which may be useful."
+#: app/views/user_mailer/changeemail_confirm.rhtml:3
+msgid "Please click on the link below to confirm that you want to \nchange the email address that you use for {{site_name}}\nfrom {{old_email}} to {{new_email}}"
msgstr ""
-#: app/views/comment/new.rhtml:45
-msgid "A <strong>summary</strong> of the response if you have received it by post. "
+#: app/views/user_mailer/changeemail_confirm.rhtml:10
+msgid "We will not reveal your email addresses to anybody unless you\nor the law tell us to."
msgstr ""
-#: app/views/comment/new.rhtml:49
-msgid " Ideas on what <strong>other documents to request</strong> which the authority may hold. "
+#: app/views/user_mailer/confirm_login.rhtml:3
+msgid "Please click on the link below to confirm your email address."
msgstr ""
-#: app/views/comment/new.rhtml:52
-msgid "Advise on whether the <strong>refusal is legal</strong>, and how to complain about it if not."
+#: app/views/user_mailer/confirm_login.rhtml:8
+msgid "We will not reveal your email address to anybody unless you\nor the law tell us to."
msgstr ""
-#: app/views/comment/new.rhtml:56
-msgid "<strong>Advice</strong> on how to get a response that will satisfy the requester. </li>"
+#: lib/world_foi_websites.rb:5
+msgid "United Kingdom"
msgstr ""
-#: app/views/comment/new.rhtml:59
-msgid "You know what caused the error, and can <strong>suggest a solution</strong>, such as a working email address."
+#: lib/world_foi_websites.rb:9
+msgid "Kosovo"
msgstr ""
-#: app/views/comment/new.rhtml:62
-msgid "Your thoughts on what the {{site_name}} <strong>administrators</strong> should do about the request."
+#: lib/world_foi_websites.rb:13
+msgid "European Union"
msgstr ""
-#: app/views/comment/new.rhtml:69
-msgid "Annotations will be posted publicly here, and are \n <strong>not</strong> sent to {{public_body_name}}."
+#: lib/world_foi_websites.rb:17
+msgid "United States of America"
+msgstr ""
+
+#: lib/world_foi_websites.rb:21
+msgid "New Zealand"
msgstr ""
-#: lib/public_body_categories_en.rb:14
-msgid "Central government"
+#: lib/world_foi_websites.rb:25
+msgid "Germany"
msgstr ""
-#: lib/public_body_categories_en.rb:23
-msgid "Local and regional"
+#: lib/world_foi_websites.rb:29
+msgid "Chile"
msgstr ""
#: locale/model_attributes.rb:2
diff --git a/locale/de/app.po b/locale/de/app.po
index 604fcc500..81ce9ab75 100644
--- a/locale/de/app.po
+++ b/locale/de/app.po
@@ -2,15 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <kersti@access-info.org>, 2011.
# stefanw <stefanwehrmeyer@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2011-08-11 12:30+0200\n"
-"PO-Revision-Date: 2011-08-12 00:21+0000\n"
-"Last-Translator: KerstiRu <kersti@access-info.org>\n"
+"POT-Creation-Date: 2011-09-27 15:58+0200\n"
+"PO-Revision-Date: 2011-09-27 14:01+0000\n"
+"Last-Translator: dcabo <david.cabo@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,267 +19,190 @@ msgstr ""
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: app/models/incoming_message.rb:866
+#: app/controllers/application_controller.rb:298
msgid ""
-"\n"
-"\n"
-"[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
-msgstr ""
-
-#: app/views/user/set_profile_about_me.rhtml:14
-msgid ""
-" This will appear on your {{site_name}} profile, to make it\n"
-" easier for others to get involved with what you're doing."
+"<p>{{site_name}} is currently in maintenance. You can only view existing "
+"requests. You cannot make new ones, add followups or annotations, or "
+"otherwise change the database.</p> <p>{{read_only}}</p>"
msgstr ""
+"<p>{{site_name}} wird gerade überarbeitet. Sie können ausschließlich "
+"existierende Anfragen ansehen. Sie können keine neuen Anfragen stellen, "
+"Follow-ups oder Anmerkungen hinzufügen oder andere Änderungen an der "
+"Datenbank vornehmen.</p> <p>{{read_only}}</p>"
-#: app/views/comment/_comment_form.rhtml:16
-msgid ""
-" (<strong>no ranty</strong> politics, read our <a href=\"%s\">moderation "
-"policy</a>)"
-msgstr ""
+#: app/controllers/comment_controller.rb:55
+msgid "To post your annotation"
+msgstr "Um Ihre Anmerkung zu senden"
-#: app/views/request/upload_response.rhtml:40
-msgid ""
-" (<strong>patience</strong>, especially for large files, it may take a "
-"while!)"
-msgstr ""
-" (<strong>Geduld</strong>, speziell für größere Dateien kann es einen Moment"
-" dauern!)"
+#: app/controllers/comment_controller.rb:56
+msgid "Then your annotation to {{info_request_title}} will be posted."
+msgstr "Dann wird Ihr Kommentar zu {{info_request_title}} gesendet."
-#: app/views/user/show.rhtml:59
-msgid " (you)"
-msgstr " (Sie)"
+#: app/controllers/comment_controller.rb:57
+msgid "Confirm your annotation to {{info_request_title}}"
+msgstr "Bestätigen Sie Ihre Anmerkung zu {{info_request_title}}"
-#: app/views/user/signchangepassword_send_confirm.rhtml:18
-msgid ""
-" <strong>Note:</strong>\n"
-" We will send you an email. Follow the instructions in it to change\n"
-" your password."
-msgstr ""
-"<strong>Note:</strong>⏎ Sie werden in Kürze eine Email erhalten. Folgen Sie "
-"der Anleitung, um Ihr Passwort⏎ zu ändern."
+#: app/controllers/comment_controller.rb:62
+msgid "Thank you for making an annotation!"
+msgstr "Vielen Dank für Ihre Anmerkung"
-#: app/views/user/contact.rhtml:35
-msgid " <strong>Privacy note:</strong> Your email address will be given to"
+#: app/controllers/comment_controller.rb:73
+msgid " You will also be emailed updates about the request."
msgstr ""
+"Aktualisierungen zu dieser Anfrage werden Ihnen auch per Email übermittelt. "
-#: app/views/comment/new.rhtml:33
-msgid " <strong>Summarise</strong> the content of any information returned. "
-msgstr "Fassen Sie den Inhalt jeglicher erhaltenen Information zusammen. "
-
-#: app/views/comment/new.rhtml:23
-msgid " Advise on how to <strong>best clarify</strong> the request."
-msgstr " Hilfe zur Erstellung einer guten Informationsanfrage. "
-
-#: app/views/comment/new.rhtml:49
-msgid ""
-" Ideas on what <strong>other documents to request</strong> which the "
-"authority may hold. "
+#: app/controllers/comment_controller.rb:75
+msgid " You are already being emailed updates about the request."
msgstr ""
-" Ideas on what <strong>other documents to request</strong> which the "
-"authority may hold. "
+"Sie haben bereits Aktualisierungen zu dieser Anfrage per Email erhalten. "
-#: app/views/public_body/view_email.rhtml:30
+#: app/controllers/help_controller.rb:63
msgid ""
-" If you know the address to use, then please <a href=\"%s\">send it to us</a>.\n"
-" You may be able to find the address on their website, or by phoning them up and asking."
+"Your message has been sent. Thank you for getting in touch! We'll get back "
+"to you soon."
msgstr ""
-"Sollten Sie die korrekte Adresse kennen, <a href=\"%s\">senden Sie sie uns</a>.\n"
-" Sie können die Adresse wahrscheinlich auf der Webseite oder durch einen Anruf bei der Behörde herausfinden. "
+"Ihre Nachricht wurde gesendet. Vielen Dank für die Kontaktaufnahme! Wir "
+"werden uns in Kürze mit Ihnen in Verbindung senden. "
-#: app/views/user/set_profile_about_me.rhtml:26
-msgid ""
-" Include relevant links, such as to a campaign page, your blog or a\n"
-" twitter account. They will be made clickable. \n"
-" e.g."
+#: app/controllers/public_body_controller.rb:82
+#: app/controllers/user_controller.rb:140
+msgid "There was an error with the words you entered, please try again."
msgstr ""
-"Fügen Sie relevanten Links ein, z.B. zu einer Kampagnenseite, Ihrem Blog "
-"oder Twitterkonto. Die Links werden aktiviert widergegeben. z.B."
+"Mit den von Ihren eingegebenen Worten ist etwas schiefgegangen. Versuchen "
+"Sie es erneut. "
-#: app/views/comment/new.rhtml:27
-msgid ""
-" Link to the information requested, if it is <strong>already "
-"available</strong> on the Internet. "
-msgstr ""
-" Link zur angefragten Information,falls bereits online "
-"<strong>verfügbar</strong>. "
+#: app/controllers/public_body_controller.rb:123
+msgid "beginning with"
+msgstr "mit Anfangsbuchstabe "
-#: app/views/comment/new.rhtml:29
-msgid ""
-" Offer better ways of <strong>wording the request</strong> to get the "
-"information. "
-msgstr ""
-" Machen Sie bessere <strong>Formulierungsvorschläge</strong>, um die "
-"gewünschten Informationen zu erhalten. "
+#: app/controllers/request_controller.rb:31
+#: app/controllers/request_controller.rb:303
+msgid "To send your FOI request"
+msgstr "Um Ihre IFG-Anfrage zu senden"
-#: app/views/user/sign.rhtml:26
-msgid " Please sign in or make a new account."
-msgstr "Bitte melden Sie sich an oder erstellen Sie ein neues Benutzerkonto."
+#: app/controllers/request_controller.rb:32
+msgid "Then you'll be allowed to send FOI requests."
+msgstr "Dann ist es Ihnen gestattet eine IFG-Anfrage zu senden. "
-#: app/views/comment/new.rhtml:34
-msgid ""
-" Say how you've <strong>used the information</strong>, with links if "
-"possible."
-msgstr ""
-"Teilen Sie uns mit, <strong>wie Sie die Informationen verwendet "
-"haben</strong> - falls möglich mit Link."
+#: app/controllers/request_controller.rb:33
+msgid "Confirm your email address"
+msgstr "Bestätigen Sie Ihre Email-Adresse"
-#: app/views/comment/new.rhtml:28
-msgid ""
-" Suggest <strong>where else</strong> the requester might find the "
-"information. "
-msgstr ""
-"Machen Sie Vorschläge wo sonst die gewünschte Information eventuell zu "
-"finden ist "
+#: app/controllers/request_controller.rb:81
+msgid "To update the status of this FOI request"
+msgstr "Um den Status dieser IFG-Anfrage zu aktualisieren"
-#: app/views/user/set_profile_about_me.rhtml:11
-msgid " What are you investigating using Freedom of Information? "
-msgstr " Was recherchieren im Rahmen der Informationsfreiheit?"
+#: app/controllers/request_controller.rb:82
+msgid "Then you can update the status of your request to "
+msgstr "Dann können Sie den Status Ihrer Nachricht aktualisieren"
-#: app/controllers/comment_controller.rb:75
-msgid " You are already being emailed updates about the request."
-msgstr ""
-"Sie haben bereits Aktualisierungen zu dieser Anfrage per Email erhalten. "
+#: app/controllers/request_controller.rb:83
+msgid "Update the status of your request to "
+msgstr "Aktualisieren Sie den Status Ihrer Anfrage an"
-#: app/controllers/comment_controller.rb:73
-msgid " You will also be emailed updates about the request."
-msgstr ""
-"Aktualisierungen zu dieser Anfrage werden Ihnen auch per Email übermittelt. "
+#: app/controllers/request_controller.rb:155
+msgid "View and search requests"
+msgstr "Ansehen und Suchen von Anfragen"
-#: app/views/request/upload_response.rhtml:5
-msgid " made by "
+#: app/controllers/request_controller.rb:285
+msgid ""
+"<p>You do not need to include your email in the request in order to get a "
+"reply, as we will ask for it on the next screen (<a "
+"href=\"%s\">details</a>).</p>"
msgstr ""
+"<p>Um eine Antwort zu erhalten, müssen Sie Ihre Email-Adresse nicht in Ihre "
+"Anfrage einfügen, da wir diese auf der folgenden Seite erfragen werden (<a "
+"href=\"%s\">Details</a>).</p>"
-#: app/views/user/show.rhtml:123
-msgid " made no Freedom of Information requests using this site."
-msgstr "Keine Informationsfreiheitsanfrage über diese Seite gestellt."
-
-#: app/views/user/contact.rhtml:36
-msgid " when you send this message."
-msgstr "wenn Sie diese Nachricht senden. "
-
-#: app/views/public_body/show.rhtml:80
-msgid "%d Freedom of Information request made using this site"
-msgid_plural "%d Freedom of Information requests made using this site"
-msgstr[0] ""
-msgstr[1] ""
-
-#: app/views/general/frontpage.rhtml:36
-msgid "%d request"
-msgid_plural "%d requests"
-msgstr[0] ""
-msgstr[1] ""
-
-#: app/views/public_body/_body_listing_single.rhtml:21
-msgid "%d request made."
-msgid_plural "%d requests made."
-msgstr[0] ""
-msgstr[1] ""
-
-#: app/views/request/new.rhtml:102
-msgid "'Crime statistics by ward level for Wales'"
+#: app/controllers/request_controller.rb:287
+msgid ""
+"<p>You do not need to include your email in the request in order to get a "
+"reply (<a href=\"%s\">details</a>).</p>"
msgstr ""
+"<p> Es ist nicht erfoderlich Ihre Emailadresse in der Anfrage zu nennen, um "
+"eine Antwort zu erhalten (<a href=\"%s\">Details</a>).</p>"
-#: app/views/request/new.rhtml:100
-msgid "'Pollution levels over time for the River Tyne'"
+#: app/controllers/request_controller.rb:289
+msgid ""
+"<p>We recommend that you edit your request and remove the email address.\n"
+" If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
msgstr ""
+"<p>Wir empfehlen Ihnen Ihre Anfrage zu bearbeiten und Ihre Emailadresse zu entfernen.\n"
+" Sollten Sie die Emaildresse nicht entfernen, wir diese an die entsprechende Behörde gesendet, jedoch nicht auf der Seite angezeigt.</p>"
-#: app/controllers/user_controller.rb:355
+#: app/controllers/request_controller.rb:293
msgid ""
-",\n"
-"\n"
-"\n"
-"\n"
-"Yours,\n"
-"\n"
-"{{user_name}}"
+"<p>Your request contains a <strong>postcode</strong>. Unless it directly "
+"relates to the subject of your request, please remove any address as it will"
+" <strong>appear publicly on the Internet</strong>.</p>"
msgstr ""
-",\n"
-"\n"
-"\n"
-"\n"
-"Mit freundlichem Gruß,\n"
-"\n"
-"{{user_name}}"
+"<p>Ihre Anfrage enthält eine <strong>Postleitzahl</strong>. Sollte diese "
+"nicht unmittelbar in Zusammenhang mit Ihrer Anfrage stehen, empfehlen wir "
+"diese zu entfern en, da diese ansonsten<strong>im Internet veröffentlicht "
+"wird </strong>.</p>"
-#: app/views/request/_after_actions.rhtml:9
-msgid "<a href=\"%s\">Add an annotation</a> (to help the requester or others)"
-msgstr ""
-"<a href=\"%s\">Kommentar hinzufügen</a> (um den Anfragensteller oder andere "
-"Nutzern zu unterstützen)"
+#: app/controllers/request_controller.rb:304
+msgid "Then your FOI request to {{public_body_name}} will be sent."
+msgstr "Dann wird Ihre OFG-Anfrage an {{public_body_name}} gesendet. "
-#: app/views/public_body/list.rhtml:29
-msgid "<a href=\"%s\">Are we missing a public authority?</a>."
-msgstr "<a href=\"%s\">Fehlt eine Behörde?</a>."
+#: app/controllers/request_controller.rb:305
+msgid "Confirm your FOI request to "
+msgstr "Bestätigen Sie Ihre IFG-Anfrage "
-#: app/views/request/_sidebar.rhtml:45
+#: app/controllers/request_controller.rb:316
msgid ""
-"<a href=\"%s\">Are you the owner of\n"
-" any commercial copyright on this page?</a>"
-msgstr "<a href=\"%s\">Halten Sie die Urheberrechte dieser Seite?</a>"
-
-#: app/views/general/search.rhtml:53
-msgid "<a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add one</a>."
-msgstr "<a href=\"%s\">Alle durchsuchen</a> or <a href=\"%s\">ask us to add one</a>."
-
-#: app/views/general/exception_caught.rhtml:13
-msgid "<a href=\"%s\">Contact us</a> to tell us about the problem</li>"
+"<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\n"
+" <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\n"
+" replied by then.</p>\n"
+" <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an \n"
+" annotation below telling people about your writing.</p>"
msgstr ""
-"<a href=\"%s\">Kontaktieren Sie uns</a>, um das Problem zu beschreiben</li>"
-#: app/views/public_body/list.rhtml:43
-msgid "<a href=\"%s\">can't find the one you want?</a>"
-msgstr ""
-"<a href=\"%s\">Können Sie die von Ihnen benötigte Information nicht "
-"finden?</a>"
+#: app/controllers/request_controller.rb:343
+msgid "To classify the response to this FOI request"
+msgstr "Um die Antwort auf diese IFG-Anfrage zu klassifizieren"
-#: app/views/request/_followup.rhtml:39 app/views/request/_followup.rhtml:46
-#: app/views/request/show.rhtml:83 app/views/request/show.rhtml:87
-msgid "<a href=\"%s\">details</a>"
-msgstr "<a href=\"%s\">Details</a>"
+#: app/controllers/request_controller.rb:344
+msgid "Then you can classify the FOI response you have got from "
+msgstr ""
+"Dann klassifizieren Sie die IFG-Anfrage welche Sie erhalten haben, von"
-#: app/views/request/_followup.rhtml:74
-msgid "<a href=\"%s\">what's that?</a>"
-msgstr "<a href=\"%s\">Was ist das?</a>"
+#: app/controllers/request_controller.rb:345
+msgid "Classify an FOI response from "
+msgstr "Klassifizieren Sie eine IFG-Anfrage von"
-#: app/views/public_body/show.rhtml:50
+#: app/controllers/request_controller.rb:352
msgid ""
-"<a href=\"{{url}}\">Make a new Freedom of Information request</a> to "
-"{{public_body_name}}"
+"Please choose whether or not you got some of the information that you "
+"wanted."
msgstr ""
+"Bitte wählen Sie ob Sie einige der erwünschten Informationen erhalten haben "
+"oder ob dies nicht der Fall ist. "
-#: app/controllers/request_game_controller.rb:23
+#: app/controllers/request_controller.rb:358
msgid ""
-"<p>All done! Thank you very much for your help.</p><p>There are <a "
-"href=\"{{helpus_url}}\">more things you can do</a> to help "
-"{{site_name}}.</p>"
+"The request has been updated since you originally loaded this page. Please "
+"check for any new incoming messages below, and try again."
msgstr ""
+"Die Anfrage wurde seit Ihrem letzten Besuch auf dieser Seite aktualisiert. "
+"Bitte checken Sie unten nach neu eingegangenen Nachrichten, nud versuchen "
+"Sie es erneut."
-#: app/controllers/request_controller.rb:399
+#: app/controllers/request_controller.rb:384
msgid ""
-"<p>Thank you! Here are some ideas on what to do next:</p>\n"
-" <ul>\n"
-" <li>To send your request to another authority, first copy the text of your request below, then <a href=\"{{find_authority_url}}\">find the other authority</a>.</li>\n"
-" <li>If you would like to contest the authority's claim that they do not hold the information, here is \n"
-" <a href=\"{{complain_url}}\">how to complain</a>.\n"
-" </li>\n"
-" <li>We have <a href=\"{{other_means_url}}\">suggestions</a>\n"
-" on other means to answer your question.\n"
-" </li>\n"
-" </ul>"
+"Thank you for updating the status of the request '<a "
+"href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests "
+"below for you to classify."
msgstr ""
+"Herzlichen Dank für die Aktualisierung der Anfrage '<a "
+"href=\"{{url}}\">{{info_request_title}}</a>'. Untenstehend finden Sie einige"
+" weitere Anfragen, welche durch Sie zugeordnet werden sollten."
-#: app/controllers/request_controller.rb:393
-msgid ""
-"<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you "
-"should have got a response promptly, and normally before the end of "
-"<strong>{{date_response_required_by}}</strong>.</p>"
-msgstr ""
-"<p>Vielen Dank! Wir hoffen Sie müssen nicht viel länger warten.</p> <p>Nach "
-"gesetzlicher Vorschrift hätten Sie sofort oder vor Ende "
-"<strong>{{date_response_required_by}}</strong> erhalten sollen. </p>"
+#: app/controllers/request_controller.rb:387
+msgid "Thank you for updating this request!"
+msgstr "Vielen Dank für die Aktualisierung dieser Anfrage!"
-#: app/controllers/request_controller.rb:389
+#: app/controllers/request_controller.rb:395
msgid ""
"<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\n"
"{{date_response_required_by}}</strong>.</p>"
@@ -287,56 +211,56 @@ msgstr ""
"gesetzlicher Vorschrift hätten Sie sofort oder vor Ende "
"<strong>{{date_response_required_by}}</strong> erhalten sollen. </p>"
-#: app/controllers/request_controller.rb:428
-msgid ""
-"<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a "
-"response within 20 days, or be told if it will take longer (<a "
-"href=\"{{review_url}}\">details</a>).</p>"
-msgstr ""
-
-#: app/controllers/request_controller.rb:431
-msgid ""
-"<p>Thank you! We'll look into what happened and try and fix it up.</p><p>If "
-"the error was a delivery failure, and you can find an up to date FOI email "
-"address for the authority, please tell us using the form below.</p>"
-msgstr ""
-"<p>Vielen Dank! Wir überprüfen das Problem und werden versuchen es zu "
-"beheben.</p><p>Sollte es sich um einen Übertragungsfehler gehandelt haben "
-"und Sie können eine aktuelle IFG Email-Adresse dieser Behörde finden, teilen"
-" Sie uns diese bitte mit Hilfe des unten angezeigten Formulars mit.</p>"
-
-#: app/controllers/request_controller.rb:396
+#: app/controllers/request_controller.rb:399
msgid ""
-"<p>Thank you! Your request is long overdue, by more than 40 working days. "
-"Most requests should be answered within 20 working days. You might like to "
-"complain about this, see below.</p>"
+"<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you "
+"should have got a response promptly, and normally before the end of "
+"<strong>{{date_response_required_by}}</strong>.</p>"
msgstr ""
+"<p>Vielen Dank! Wir hoffen Sie müssen nicht viel länger warten.</p> <p>Nach "
+"gesetzlicher Vorschrift hätten Sie sofort oder vor Ende "
+"<strong>{{date_response_required_by}}</strong> erhalten sollen. </p>"
-#: app/controllers/user_controller.rb:495
+#: app/controllers/request_controller.rb:402
msgid ""
-"<p>Thanks for changing the text about you on your profile.</p>\n"
-" <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
+"<p>Thank you! Your request is long overdue, by more than "
+"{{very_late_number_of_days}} working days. Most requests should be answered "
+"within {{late_number_of_days}} working days. You might like to complain "
+"about this, see below.</p>"
msgstr ""
-"<p>Vielen Dank für die Änderung Ihres Profiltextes.</p>\n"
-" <p><strong>Weiter...</strong> Sie können auch ein Profilbild hochladen.</p>"
-#: app/controllers/user_controller.rb:417
+#: app/controllers/request_controller.rb:405
msgid ""
-"<p>Thanks for updating your profile photo.</p>\n"
-" <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
+"<p>Thank you! Here are some ideas on what to do next:</p>\n"
+" <ul>\n"
+" <li>To send your request to another authority, first copy the text of your request below, then <a href=\"{{find_authority_url}}\">find the other authority</a>.</li>\n"
+" <li>If you would like to contest the authority's claim that they do not hold the information, here is \n"
+" <a href=\"{{complain_url}}\">how to complain</a>.\n"
+" </li>\n"
+" <li>We have <a href=\"{{other_means_url}}\">suggestions</a>\n"
+" on other means to answer your question.\n"
+" </li>\n"
+" </ul>"
msgstr ""
-"<p>Danke für die Aktualisierung Ihres Profilbildes.</p>\n"
-" <p><strong>Nächster Schritt...</strong> Sie können Informationen zu Ihrer Person und Ihrer Suchanfrage zu Ihrem Profil hinzufügen.</p>"
+"<p>Vielen Dank! Hier einige Ideen was Sie als nächstes tun können:</p>\n"
+" <ul>\n"
+" <li>Um eine Anfrage an eine andere Behörde zu senden, kopieren Sie als erstes den unten angezeigten Text Ihrer Anfrage. Dann <a href=\"{{find_authority_url}}\">finden Sie die andere Behörde</a>.</li>\n"
+" <li>Falls Sie die Behauptung der Behörde die Informationen nicht zu haben anfechten möchten, schauen Sie hier wie Sie Ihre\n"
+" <a href=\"{{complain_url}}\">Beschwerde einreichen können</a>.\n"
+" </li>\n"
+" <li>Wir haben weitere <a href=\"{{other_means_url}}\">Vorschläge</a>\n"
+" , welche Ihre Frage beantworten könnten.\n"
+" </li>\n"
+" </ul>"
-#: app/controllers/request_controller.rb:284
+#: app/controllers/request_controller.rb:420
msgid ""
-"<p>We recommend that you edit your request and remove the email address.\n"
-" If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
+"Oh no! Sorry to hear that your request was refused. Here is what to do now."
msgstr ""
-"<p>Wir empfehlen Ihnen Ihre Anfrage zu bearbeiten und Ihre Emailadresse zu entfernen.\n"
-" Sollten Sie die Emaildresse nicht entfernen, wir diese an die entsprechende Behörde gesendet, jedoch nicht auf der Seite angezeigt.</p>"
+"Oh nein! Es tut uns leid zu hören, dass Ihre Anfrage abgelehnt wurde. Lesen "
+"Sie hier was Sie nun tun können. "
-#: app/controllers/request_controller.rb:417
+#: app/controllers/request_controller.rb:423
msgid ""
"<p>We're glad you got all the information that you wanted. If you write "
"about or make use of the information, please come back and add an annotation"
@@ -344,613 +268,626 @@ msgid ""
"href=\"{{donation_url}}\">make a donation</a> to the charity which runs "
"it.</p>"
msgstr ""
+"<p>Wir freuen uns, dass Sie die von Ihnen gewünschten Informationen erhalten"
+" haben. Solten Sie darüber schreiben oder die Informationen andersweitig "
+"verwenden, kommen Sie bitte zurück und fügen Sie einen Kommentar an, in "
+"welchem Sie uns mitteilen, wie Sie die Informationen verwendet haben "
+".</p><p>Falls Sie {{site_name}} hilfreich fanden, <a "
+"href=\"{{donation_url}}\">senden Sie eine Spende</a> an die Organisation "
+"hinter dieser Seite.</p>"
-#: app/controllers/request_controller.rb:420
+#: app/controllers/request_controller.rb:426
msgid ""
"<p>We're glad you got some of the information that you wanted. If you found "
"{{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to "
"the charity which runs it.</p><p>If you want to try and get the rest of the "
"information, here's what to do now.</p>"
msgstr ""
+"<p>Wir freuen uns, dass Sie die von Ihnen gewünschten Informationen erhalten"
+" haben. Falls Sie {{site_name}} hilfreich fanden, <a "
+"href=\"{{donation_url}}\">senden Sie eine Spende</a>an die Organisation "
+"hinter dieser Seite.</p><p>Falls Sie versuchen möchten den Rest der "
+"Information zu erhalten, schauen Sie hier was Sie tun können.</p>"
-#: app/controllers/request_controller.rb:282
+#: app/controllers/request_controller.rb:429
msgid ""
-"<p>You do not need to include your email in the request in order to get a "
-"reply (<a href=\"%s\">details</a>).</p>"
+"Please write your follow up message containing the necessary clarifications "
+"below."
msgstr ""
-"<p> Es ist nicht erfoderlich Ihre Emailadresse in der Anfrage zu nennen, um "
-"eine Antwort zu erhalten (<a href=\"%s\">details</a>).</p>"
+"Bitte geben Sie unten Ihre Follow-up Nachricht mit den nötigen "
+"Klärungsdetails ein. "
-#: app/controllers/request_controller.rb:280
+#: app/controllers/request_controller.rb:434
msgid ""
-"<p>You do not need to include your email in the request in order to get a "
-"reply, as we will ask for it on the next screen (<a "
-"href=\"%s\">details</a>).</p>"
+"<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a "
+"response within {{late_number_of_days}} days, or be told if it will take "
+"longer (<a href=\"{{review_url}}\">details</a>).</p>"
msgstr ""
-"<p>Um eine Antwort zu erhalten, müssen Sie Ihre Email-Adresse nicht in Ihre "
-"Anfrage einfügen, da wir diese auf der folgenden Seite erfragen werden (<a "
-"href=\"%s\">Details</a>).</p>"
+"<p>Vielen Dank! Hoffentlich mussten Sie nicht zu lange warten.</p><p>Sie "
+"sollten innerhalb {{late_number_of_days}} Tagen eine Antwort erhalten, oder "
+"eine Nachricht, dass es länger dauern kann (<a "
+"href=\"{{review_url}}\">Details</a>).</p>"
-#: app/controllers/request_controller.rb:288
+#: app/controllers/request_controller.rb:437
msgid ""
-"<p>Your request contains a <strong>postcode</strong>. Unless it directly "
-"relates to the subject of your request, please remove any address as it will"
-" <strong>appear publicly on the Internet</strong>.</p>"
+"<p>Thank you! We'll look into what happened and try and fix it up.</p><p>If "
+"the error was a delivery failure, and you can find an up to date FOI email "
+"address for the authority, please tell us using the form below.</p>"
msgstr ""
-"<p>Ihre Anfrage enthält eine <strong>Postleitzahl</strong>. Sollte diese "
-"nicht unmittelbar in Zusammenhang mit Ihrer Anfrage stehen, empfehlen wir "
-"diese zu entfern en, da diese ansonsten<strong>im Internet veröffentlicht "
-"wird </strong>.</p>"
+"<p>Vielen Dank! Wir überprüfen das Problem und werden versuchen es zu "
+"beheben.</p><p>Sollte es sich um einen Übertragungsfehler gehandelt haben "
+"und Sie können eine aktuelle IFG Email-Adresse dieser Behörde finden, teilen"
+" Sie uns diese bitte mit Hilfe des unten angezeigten Formulars mit.</p>"
-#: app/controllers/request_controller.rb:311
-msgid ""
-"<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\n"
-" <p><strong>We will email you</strong> when there is a response, or after 20 working days if the authority still hasn't\n"
-" replied by then.</p>\n"
-" <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an \n"
-" annotation below telling people about your writing.</p>"
-msgstr ""
+#: app/controllers/request_controller.rb:440
+msgid "Please use the form below to tell us more."
+msgstr "Bitte nutzen Sie das Formular, um uns ausführlicher zu informieren. "
-#: app/controllers/application_controller.rb:279
+#: app/controllers/request_controller.rb:443
msgid ""
-"<p>{{site_name}} is currently in maintenance. You can only view existing "
-"requests. You cannot make new ones, add followups or annotations, or "
-"otherwise change the database.</p> <p>{{read_only}}</p>"
+"If you have not done so already, please write a message below telling the "
+"authority that you have withdrawn your request. Otherwise they will not know"
+" it has been withdrawn."
msgstr ""
+"Falls noch nicht geschehen, senden Sie bitte eine Nachricht, um die Behörde "
+"zu informieren, dass Sie Ihre Anfrage zurückgezogen haben. Anderenfalls "
+"weiss diese nicht, dass dies geschehen ist. "
-#: app/views/user/confirm.rhtml:11
-msgid ""
-"<small>If you use web-based email or have \"junk mail\" filters, also check your\n"
-"bulk/spam mail folders. Sometimes, our messages are marked that way.</small>\n"
-"</p>"
-msgstr ""
-"Sollten Sie eine webbasierten Emailanbieter oder ´junk mail´ Filter nutzen, "
-"prüfen Sie Ihren Spamordner. Es kommt vor, dass unsere Nachrichten dort "
-"landen. "
+#: app/controllers/request_controller.rb:548
+msgid "To send a follow up message to "
+msgstr "Um eine Nachfrage zu senden"
-#: app/views/request/new.rhtml:131
-msgid ""
-"<strong> Can I request information about myself?</strong>\n"
-"\t\t\t<a href=\"%s\">No! (Click here for details)</a>"
-msgstr ""
-"<strong> Kann ich Informationen zu meiner eigenen Person anfragen?</strong>\n"
-"<span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><a href=\"%s\">Nein! (Click here for details)</a>"
+#: app/controllers/request_controller.rb:549
+msgid "To reply to "
+msgstr "Um eine Antwort zu senden an"
-#: app/views/general/search.rhtml:130
-msgid ""
-"<strong><code>commented_by:tony_bowden</code></strong> to search annotations"
-" made by Tony Bowden, typing the name as in the URL."
-msgstr ""
+#: app/controllers/request_controller.rb:551
+msgid "Then you can write follow up message to "
+msgstr "Dann können Sie eine Nachfrage senden an"
-#: app/views/general/search.rhtml:132
-msgid ""
-"<strong><code>filetype:pdf</code></strong> to find all responses with PDF "
-"attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
-msgstr ""
-"<strong><code>Dateityp:PDF</code></strong> um alle Antworten mit PDF-Anhang "
-"zu finden. Oder versuchen Sie es hiermit: "
-"<code>{{list_of_file_extensions}}</code>"
+#: app/controllers/request_controller.rb:552
+msgid "Then you can write your reply to "
+msgstr "Dann können Sie Ihre Antwort schreiben an"
-#: app/views/general/search.rhtml:131
-msgid ""
-"<strong><code>request:</code></strong> to restrict to a specific request, "
-"typing the title as in the URL."
-msgstr ""
-"<strong><code>Anfrage:</code></strong> um die Suchanfrage zu begrenzen, "
-"geben Sie den Titel wie in der URL ein."
+#: app/controllers/request_controller.rb:554
+msgid "Write your FOI follow up message to "
+msgstr "Senden Sie Ihre Follow-Up Nachricht an "
-#: app/views/general/search.rhtml:129
-msgid ""
-"<strong><code>requested_by:julian_todd</code></strong> to search requests "
-"made by Julian Todd, typing the name as in the URL."
-msgstr ""
+#: app/controllers/request_controller.rb:555
+msgid "Write a reply to "
+msgstr "Antwort senden"
-#: app/views/general/search.rhtml:128
+#: app/controllers/request_controller.rb:562
msgid ""
-"<strong><code>requested_from:home_office</code></strong> to search requests "
-"from the Home Office, typing the name as in the URL."
+"Your follow up has not been sent because this request has been stopped to "
+"prevent spam. Please <a href=\"%s\">contact us</a> if you really want to "
+"send a follow up message."
msgstr ""
+"Ihre Nachfrage wurde nicht gesendet, da Sie durch unseren Spamfilter "
+"gestoppt wurde. Bitte <a href=\"%s\">kontaktieren Sie uns</a> wenn Sie "
+"wirklich eine Nachfrage senden möchten. "
-#: app/views/general/search.rhtml:126
+#: app/controllers/request_controller.rb:565
msgid ""
-"<strong><code>status:</code></strong> to select based on the status or "
-"historical status of the request, see the <a href=\"{{statuses_url}}\">table"
-" of statuses</a> below."
+"You previously submitted that exact follow up message for this request."
msgstr ""
+"Sie haben kürzlich dieselbe Follow-up Nachricht für diese Anfrage gesendet. "
-#: app/views/general/search.rhtml:134
-msgid ""
-"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n"
-" and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n"
-" can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
-msgstr ""
+#: app/controllers/request_controller.rb:588
+msgid "Your internal review request has been sent on its way."
+msgstr "Ihre Anfrage zur internen Überprüfung wurde gesendet. "
-#: app/views/general/search.rhtml:127
-msgid ""
-"<strong><code>variety:</code></strong> to select type of thing to search "
-"for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
-msgstr ""
+#: app/controllers/request_controller.rb:590
+msgid "Your follow up message has been sent on its way."
+msgstr "Ihre Follow-up Nachricht wurde gesendet."
-#: app/views/comment/new.rhtml:56
+#: app/controllers/request_controller.rb:712
msgid ""
-"<strong>Advice</strong> on how to get a response that will satisfy the "
-"requester. </li>"
+"To upload a response, you must be logged in using an email address from "
msgstr ""
+"Um eine Antwort hochzuladen müssen Sie angemeldet sein und dafür eine "
+"folgende Email-Adresse benutzen:"
-#: app/views/request/_other_describe_state.rhtml:56
-msgid "<strong>All the information</strong> has been sent"
-msgstr "Informationen wurden vollständig gesendet"
+#: app/controllers/request_controller.rb:713
+msgid "Then you can upload an FOI response. "
+msgstr "Dann können Sie eine IFG-Antwort hochladen. "
-#: app/views/request/_followup.rhtml:79
-msgid ""
-"<strong>Anything else</strong>, such as clarifying, prompting, thanking"
-msgstr ""
+#: app/controllers/request_controller.rb:714
+#: app/controllers/user_controller.rb:542
+msgid "Confirm your account on {{site_name}}"
+msgstr "Bestätigen Sie Ihr Nutzerkonto auf {{site_name}}"
-#: app/views/request/details.rhtml:12
-msgid ""
-"<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \n"
-"a good internal knowledge of user behaviour on {{site_name}}. How, \n"
-"why and by whom requests are categorised is not straightforward, and there will\n"
-"be user error and ambiguity. You will also need to understand FOI law, and the\n"
-"way authorities use it. Plus you'll need to be an elite statistician. Please\n"
-"<a href=\"{{contact_path}}\">contact us</a> with questions."
+#: app/controllers/request_controller.rb:741
+msgid "Please type a message and/or choose a file containing your response."
msgstr ""
+"Bitte geben Sie eine Nachricht ein und / oder wählen Sie eine Datei aus, "
+"welche Ihre Antwort enthält"
-#: app/views/request/_other_describe_state.rhtml:28
-msgid "<strong>Clarification</strong> has been requested"
-msgstr "Klärung der Angelegenheit wurde angefragt"
-
-#: app/views/request/_other_describe_state.rhtml:14
+#: app/controllers/request_controller.rb:747
msgid ""
-"<strong>No response</strong> has been received\n"
-" <small>(maybe there's just an acknowledgement)</small>"
+"Thank you for responding to this FOI request! Your response has been "
+"published below, and a link to your response has been emailed to "
msgstr ""
+"Vielen Dank für Ihre IFG-Anfrage! Ihre Antwort wird unten angezeigt und ein "
+"Link zu Ihrer Antwort wurde gesendet an"
-#: app/views/user/signchangeemail.rhtml:30
-msgid ""
-"<strong>Note:</strong>\n"
-" We will send an email to your new email address. Follow the\n"
-" instructions in it to confirm changing your email."
-msgstr ""
-"<strong>Note:</strong>\n"
-" Es wird eine Email an Ihre neue Emailadresse versendet. Folgen Sie den darin angegebenen Schritten, um die Änderung Ihrer Emailadresse zu bestätigen."
+#: app/controllers/request_controller.rb:773
+msgid "To download the zip file"
+msgstr "Um die Zip-Datei herunterzuladen"
-#: app/views/user/contact.rhtml:32
-msgid ""
-"<strong>Note:</strong> You're sending a message to yourself, presumably\n"
-" to try out how it works."
+#: app/controllers/request_controller.rb:774
+msgid "Then you can download a zip file of {{info_request_title}}."
msgstr ""
-"<strong>Achtung:</strong> Sie senden eine Nachricht an sich selbst, "
-"vermutlich um herauszufinden, wie es funktioniert. "
+"Dann können Sie eine Zip-Datei von {{info_request_title}} herunterladen. "
-#: app/views/request/preview.rhtml:31
-msgid ""
-"<strong>Privacy note:</strong> If you want to request private information about\n"
-" yourself then <a href=\"%s\">click here</a>."
+#: app/controllers/request_controller.rb:775
+msgid "Log in to download a zip file of {{info_request_title}}"
msgstr ""
-"<strong>Privacy note:</strong> Falls Sie Informationen zu Ihrer eingenen "
-"Person erfragen wollen <a href=\"%s\">Klicken Sie hier</a>."
+"Melden Sie sich an, um eine Zip-Datei von {{info_request_title}} "
+"herunterzuladen"
-#: app/views/user/set_crop_profile_photo.rhtml:35
+#: app/controllers/request_game_controller.rb:23
msgid ""
-"<strong>Privacy note:</strong> Your photo will be shown in public on the Internet, \n"
-" wherever you do something on {{site_name}}."
+"<p>All done! Thank you very much for your help.</p><p>There are <a "
+"href=\"{{helpus_url}}\">more things you can do</a> to help "
+"{{site_name}}.</p>"
msgstr ""
+"<p>Fertig! Ganz herzlichen Dank für Ihre Hilfe.</p><p>Es gibt <a "
+"href=\"{{helpus_url}}\">noch mehr womit Sie uns helfen "
+"können</a>{{site_name}}.</p>"
-#: app/views/request/followup_preview.rhtml:37
-msgid ""
-"<strong>Privacy warning:</strong> Your message, and any response\n"
-" to it, will be displayed publicly on this website."
-msgstr ""
-"<strong>Privacy warning:</strong> Ihre Nachricht als auch alle "
-"entsprechenden Reaktionen werden auf dieser Webseite veröffentlicht."
+#: app/controllers/request_game_controller.rb:40
+msgid "To play the request categorisation game"
+msgstr "Um uns mit der Kategorisierung von Anfragen zu unterstützen"
-#: app/views/request/_other_describe_state.rhtml:52
-msgid "<strong>Some of the information</strong> has been sent "
-msgstr "Information wurde teilweise gesendet"
+#: app/controllers/request_game_controller.rb:41
+msgid "Then you can play the request categorisation game."
+msgstr "Dann können Sie die helden einige Anfraggen zuzuordnen. "
-#: app/views/general/exception_caught.rhtml:17
-msgid "<strong>Technical details:</strong>"
-msgstr "<strong>Technische Details:</strong>"
+#: app/controllers/request_game_controller.rb:42
+msgid "Play the request categorisation game"
+msgstr "Helfen Sie uns ausstehende Anfragen zuzuordnen"
-#: app/views/comment/new.rhtml:35
-msgid "<strong>Thank</strong> the public authority or "
-msgstr "<strong>Danken Sie</strong> der Behörde oder "
+#: app/controllers/request_game_controller.rb:52
+msgid "Thank you for helping us keep the site tidy!"
+msgstr "vielen Dank für die Ihre Mithilfe die Seite aktuell zu halten. "
-#: app/views/request/new.rhtml:23
+#: app/controllers/services_controller.rb:21
msgid ""
-"<strong>browse</strong> the authority's <a href=\"%s\">publication "
-"scheme</a> or <strong>search</strong> their web site ..."
+"Hello! You can make Freedom of Information requests within {{country_name}} "
+"at {{link_to_website}}"
msgstr ""
+"Hallo! IFG-Anfragen innerhalb von {{country_name}} können Sie hier stellen: "
+"{{link_to_website}} "
-#: app/views/request/show.rhtml:91
-msgid "<strong>did not have</strong> the information requested."
-msgstr "Die angefragten Informationen waren <strong>nicht vorhanden</strong>."
+#: app/controllers/track_controller.rb:98
+msgid "You are already being emailed updates about "
+msgstr "Sie erhielten bereits Aktualisierungen zu"
-#: app/views/request/new.rhtml:25
-msgid "<strong>search</strong> the authority's web site ..."
-msgstr "<strong>Besuchen Sie</strong> die Webseite dieser Behörde"
+#: app/controllers/track_controller.rb:111
+msgid "You will now be emailed updates about "
+msgstr "Sie erhalten nun Email-Aktualisierungen über"
-#: app/views/comment/new.rhtml:45
-msgid ""
-"A <strong>summary</strong> of the response if you have received it by post. "
-msgstr ""
-"Eine <strong>Zusammenfassung</strong> of the response if you have received "
-"it by post. "
+#: app/controllers/track_controller.rb:143
+msgid "To cancel this alert"
+msgstr "Um diese Benachrichtigung zu löschen"
-#: app/views/general/search.rhtml:162
-msgid "A public authority"
-msgstr ""
+#: app/controllers/track_controller.rb:144
+msgid "Then you can cancel the alert."
+msgstr "Dann können Sie die Statusnachricht abmelden "
-#: app/views/request/_other_describe_state.rhtml:34
-msgid "A response will be sent <strong>by post</strong>"
-msgstr "Antwort wird <strong>postalisch</strong> zugestellt"
+#: app/controllers/track_controller.rb:145
+msgid "Cancel a {{site_name}} alert"
+msgstr "Benachrichtigung für {{site_name}} abbestellen"
-#: app/views/general/search.rhtml:151
-msgid "A strange reponse, required attention by the {{site_name}} team"
-msgstr ""
+#: app/controllers/track_controller.rb:154
+msgid "You will no longer be emailed updates about "
+msgstr "Sie erhalten keinen weiteren Aktualisierungen über"
-#: app/views/general/search.rhtml:163
-msgid "A {{site_name}} user"
-msgstr ""
+#: app/controllers/track_controller.rb:173
+msgid "To cancel these alerts"
+msgstr "Um diese Benachrichtigungen zu löschen"
-#: app/views/user/set_profile_about_me.rhtml:20
-msgid "About you:"
-msgstr "Zu Ihrer Person:"
+#: app/controllers/track_controller.rb:174
+msgid "Then you can cancel the alerts."
+msgstr "Dann können Sie die Statusnachrichten abmelden"
-#: app/models/info_request_event.rb:293
-msgid "Acknowledgement"
-msgstr "Bestätigung"
+#: app/controllers/track_controller.rb:175
+msgid "Cancel some {{site_name}} alerts"
+msgstr "Einige Benachrichtigungen für {{site_name}} abbestellen"
-#: app/views/request/_sidebar.rhtml:5
-msgid "Act on what you've learnt"
-msgstr ""
+#: app/controllers/track_controller.rb:183
+msgid "You will no longer be emailed updates for those alerts"
+msgstr "Sie werden keine weiteren Aktualisierungen zu diesen Alerts erhalten"
-#: app/views/comment/new.rhtml:14
-msgid "Add an annotation to "
-msgstr "Fügen Sie einen Kommentar hinzu"
+#: app/controllers/user_controller.rb:43
+msgid "{{search_results}} matching '{{query}}'"
+msgstr "{{search_results}} passen zu '{{query}}'"
-#: app/views/request/show_response.rhtml:47
+#: app/controllers/user_controller.rb:207
msgid ""
-"Add an annotation to your request with choice quotes, or\n"
-" a <strong>summary of the response</strong>."
+"That doesn't look like a valid email address. Please check you have typed it"
+" correctly."
msgstr ""
-"Fügen Sie Ihrer Anfrage einen Kommentar mit Wahlzitat oder, "
-"eine<strong>Zusammenfassung Ihrer Antwort</strong>hinzu. "
+"Dies sieht nicht nach einer gültigen Emailadresse aus. Bitte überprüfen Sie "
+"Ihre Eingabe. "
-#: app/views/public_body/_body_listing_single.rhtml:26
-msgid "Added on {{date}}"
-msgstr ""
+#: app/controllers/user_controller.rb:221
+msgid "Then you can change your password on {{site_name}}"
+msgstr "Dann können Sie Ihr Passwort unter {{site_name}} ändern"
-#: app/models/user.rb:54
-msgid "Admin level is not included in list"
+#: app/controllers/user_controller.rb:222
+msgid "Change your password {{site_name}}"
+msgstr "Passwort ändern{{site_name}}"
+
+#: app/controllers/user_controller.rb:249
+msgid "Your password has been changed."
+msgstr "Ihr Passwort wurde geändert."
+
+#: app/controllers/user_controller.rb:266
+msgid "To change your email address used on {{site_name}}"
+msgstr "Um Ihre auf {{site_name}} verwendete Email-Adresse zu ändern"
+
+#: app/controllers/user_controller.rb:267
+msgid "Then you can change your email address used on {{site_name}}"
+msgstr "können Sie Ihre auf {{site_name}} verwendete Email-Adresse beenden"
+
+#: app/controllers/user_controller.rb:268
+#: app/views/user/signchangeemail.rhtml:1
+#: app/views/user/signchangeemail.rhtml:11
+msgid "Change your email address used on {{site_name}}"
+msgstr "Ändern Sie die unter {{site_name}} genutzte Email-Adresse"
+
+#: app/controllers/user_controller.rb:328
+msgid "You have now changed your email address used on {{site_name}}"
msgstr ""
+"Sie haben die aud der Seite {{site_name}} verwendete Email-Adresse nun "
+"geändert"
-#: app/views/request_mailer/requires_admin.rhtml:9
-msgid "Administration URL:"
-msgstr "Administrator URL"
+#: app/controllers/user_controller.rb:347
+msgid "To send a message to "
+msgstr "Um eine Nachricht zu senden an "
-#: app/views/general/search.rhtml:31 app/views/general/search.rhtml:121
-msgid "Advanced search tips"
-msgstr "Tipps zur erweiterten Suchanfrage"
+#: app/controllers/user_controller.rb:348
+msgid "Then you can send a message to "
+msgstr "Dann können Sie eine Nachricht senden an"
-#: app/views/comment/new.rhtml:52
+#: app/controllers/user_controller.rb:349
+msgid "Send a message to "
+msgstr "Nachricht senden an"
+
+#: app/controllers/user_controller.rb:367
+msgid "Your message to {{recipient_user_name}} has been sent!"
+msgstr "Ihre Nachricht an {{recipient_user_name}} wurde versendet!"
+
+#: app/controllers/user_controller.rb:373
msgid ""
-"Advise on whether the <strong>refusal is legal</strong>, and how to complain"
-" about it if not."
+",\n"
+"\n"
+"\n"
+"\n"
+"Yours,\n"
+"\n"
+"{{user_name}}"
msgstr ""
+",\n"
+"\n"
+"\n"
+"\n"
+"Mit freundlichem Gruß,\n"
+"\n"
+"{{user_name}}"
-#: app/views/request/new.rhtml:69
+#: app/controllers/user_controller.rb:389
+msgid "You need to be logged in to change your profile photo."
+msgstr "Sie müssen angemeldet sein, um Ihren Profilbild zu ändern. "
+
+#: app/controllers/user_controller.rb:416
+#: app/controllers/user_controller.rb:432
+msgid "Thank you for updating your profile photo"
+msgstr "Vielen Dank für die Aktualisierung Ihres Profilbildes"
+
+#: app/controllers/user_controller.rb:435
msgid ""
-"Air, water, soil, land, flora and fauna (including how these effect\n"
-" human beings)"
+"<p>Thanks for updating your profile photo.</p>\n"
+" <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
msgstr ""
-"Luft, Wasser, Erde, Land, Flora and Fauna (inkl. wie diese den Menschen "
-"beeinflussen)"
+"<p>Danke für die Aktualisierung Ihres Profilbildes.</p>\n"
+" <p><strong>Nächster Schritt...</strong> Sie können Informationen zu Ihrer Person und Ihrer Suchanfrage zu Ihrem Profil hinzufügen.</p>"
-#: app/models/info_request_event.rb:309
-msgid "All information sent"
-msgstr "Information vollständig gesendet"
+#: app/controllers/user_controller.rb:451
+msgid "You need to be logged in to clear your profile photo."
+msgstr "Sie müssen angemeldet sein, um Ihren Profilbild zu löschen."
-#: app/views/general/search.rhtml:146
-msgid "All of the information requested has been received"
-msgstr ""
+#: app/controllers/user_controller.rb:460
+msgid "You've now cleared your profile photo"
+msgstr "Sie haben Ihr Profilbild nun gelöscht"
-#: app/views/public_body/list.rhtml:5
-msgid "Alphabet"
-msgstr "Alphabet"
+#: app/controllers/user_controller.rb:488
+msgid "You need to be logged in to change the text about you on your profile."
+msgstr "Sie müssen angemeldet sein, um Ihren Profiltext zu ändern. "
-#: app/views/public_body/_body_listing_single.rhtml:12
-msgid "Also called {{other_name}}."
-msgstr ""
+#: app/controllers/user_controller.rb:510
+msgid "You have now changed the text about you on your profile."
+msgstr "Sie haben den Text zu Ihrer Person in Ihrem Profil nun geändert. "
-#: app/views/request_mailer/new_response.rhtml:12
+#: app/controllers/user_controller.rb:513
msgid ""
-"Although all responses are automatically published, we depend on\n"
-"you, the original requester, to evaluate them."
+"<p>Thanks for changing the text about you on your profile.</p>\n"
+" <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
msgstr ""
-"Obwould alle Antworten automatisch veröffentlicht werden, sind wir auf Sie "
-"als ursprünglichen Antragsteller angewiesen, um diese zu bewerten"
+"<p>Vielen Dank für die Änderung Ihres Profiltextes.</p>\n"
+" <p><strong>Weiter...</strong> Sie können auch ein Profilbild hochladen.</p>"
-#: app/views/request/_other_describe_state.rhtml:70
-msgid "An <strong>error message</strong> has been received"
-msgstr "Eine <strong>Fehlermeldung</strong> wurde empfangen"
+#: app/controllers/user_controller.rb:541
+msgid "Then you can sign in to {{site_name}}"
+msgstr "Dann können Sie sich auf {{site_name}} einloggen. "
-#: app/views/general/search.rhtml:161
-msgid "Annotation added to request"
-msgstr ""
+#: app/models/about_me_validator.rb:24
+msgid "Please keep it shorter than 500 characters"
+msgstr "Bitte bleiben Sie unter 500 Zeichen"
-#: app/views/user/show.rhtml:34
-msgid "Annotations"
-msgstr "Anmerkungen"
+#: app/models/change_email_validator.rb:29
+msgid "Please enter your old email address"
+msgstr "Bitte geben Sie Ihre alte E-Mail-Adresse ein"
-#: app/views/comment/new.rhtml:17
-msgid ""
-"Annotations are so anyone, including you, can help the requester with their "
-"request. For example:"
-msgstr ""
-"Anmerkungen helfen Ihnen sowie weiteren Benutzern bei der Erstellungen einer"
-" neuer Anfrage. Beispielsweise:"
+#: app/models/change_email_validator.rb:30
+msgid "Please enter your new email address"
+msgstr "Bitte geben Sie Ihre neue Email-Adresse ein"
-#: app/views/comment/new.rhtml:69
-msgid ""
-"Annotations will be posted publicly here, and are \n"
-" <strong>not</strong> sent to {{public_body_name}}."
-msgstr ""
-"Anmerkungen werden hier veröffentlicht, und werden \n"
-" <strong>nicht</strong> an {{public_body_name}} gesendet."
+#: app/models/change_email_validator.rb:31
+msgid "Please enter your password"
+msgstr "Bitte geben Sie Ihr Passwort ein"
-#: app/views/request/_after_actions.rhtml:6
-msgid "Anyone:"
-msgstr "Jeder:"
+#: app/models/change_email_validator.rb:39
+msgid "Old email doesn't look like a valid address"
+msgstr "Alte Email sieht nicht nach gültiger Adresse aus"
-#: app/views/request/new.rhtml:47
+#: app/models/change_email_validator.rb:44
msgid ""
-"Ask for <strong>specific</strong> documents or information, this site is not"
-" suitable for general enquiries."
+"Old email address isn't the same as the address of the account you are "
+"logged in with"
msgstr ""
-"Fragen Sie nach <strong>spezifischen</strong> Dokumenten oder Informationen."
-" Diese Seite ist nicht für generelle Anfragen vorgesehen. "
+"Die alte Email-Adresse stimmt nicht mit der Adresse des Kontos, über welches"
+" Sie eingeloggt sind überein"
+
+#: app/models/change_email_validator.rb:47
+msgid "Password is not correct"
+msgstr "falsches Passwort"
+
+#: app/models/change_email_validator.rb:53
+msgid "New email doesn't look like a valid address"
+msgstr "Die neue Email-Adresse scheint ungültig"
+
+#: app/models/comment.rb:59
+msgid "Please enter your annotation"
+msgstr "Bitte geben Sie Ihre Anmerkung ein"
-#: app/views/request/show_response.rhtml:31
+#: app/models/comment.rb:62
msgid ""
-"At the bottom of this page, write a reply to them trying to persuade them to scan it in\n"
-" (<a href=\"%s\">more details</a>)."
+"Please write your annotation using a mixture of capital and lower case "
+"letters. This makes it easier for others to read."
msgstr ""
-"Am Ende der Seite können Sie eine Antwort mit der Aufforderung das Dokument einzuscannen senden\n"
-" (<a href=\"%s\">weitere Details</a>)."
+"Bitte nutzen Sie eine Mischung aus Groß- und Kleinschreibung für Ihre "
+"Anmerkung. Dies vereinfacht das Lesen für andere."
-#: app/views/request/upload_response.rhtml:33
-msgid "Attachment (optional):"
-msgstr "Anhang (freiwillig)"
+#: app/models/contact_validator.rb:28 app/models/user.rb:38
+msgid "Please enter your name"
+msgstr "Bitte geben Sie Ihren Namen ein"
-#: app/models/info_request.rb:783
-msgid "Awaiting classification."
-msgstr "Zuordnung wird erwartet. "
+#: app/models/contact_validator.rb:29 app/models/user.rb:36
+msgid "Please enter your email address"
+msgstr "Bitte geben Sie Ihre E-Mail Adresse ein"
-#: app/models/info_request.rb:803
-msgid "Awaiting internal review."
-msgstr "Interne Prüfung ausstehend."
+#: app/models/contact_validator.rb:30
+msgid "Please enter a subject"
+msgstr "Bitte geben Sie einen Betreff ein"
-#: app/models/info_request.rb:785
-msgid "Awaiting response."
-msgstr "Antwort ausstehend. "
+#: app/models/contact_validator.rb:31
+msgid "Please enter the message you want to send"
+msgstr "Bitte geben Sie die Nachricht ein, die Sie senden wollen"
+
+#: app/models/contact_validator.rb:34
+msgid "Email doesn't look like a valid address"
+msgstr "Dies sieht nicht nach einer gültigen Email-Adresse aus"
-#: app/views/request/new.rhtml:43
+#: app/models/incoming_message.rb:867
msgid ""
-"Browse <a href=\"%s\">other requests</a> for examples of how to word your "
-"request."
+"\n"
+"\n"
+"[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
msgstr ""
-"Durchsuchen Sie <a href=\"%s\">andere Anfragen</a> für "
-"Formulierungsbeispiele. "
+"\n"
+"\n"
+"[ {{site_name}} Anmerkung: Der obenstehende Text war schlecht kodiert und merkwürdige Zeichen wurden entfernt. ]"
+
+#: app/models/info_request.rb:34
+msgid "Please enter a summary of your request"
+msgstr "Bitte geben Sie eine Zusammenfassung Ihrer Anfrage ein"
+
+#: app/models/info_request.rb:35
+msgid "Please write a summary with some text in it"
+msgstr "Bitte schreiben Sie eine Zusammenfassung mit etwas Text"
-#: app/views/request/new.rhtml:41
+#: app/models/info_request.rb:120
msgid ""
-"Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for "
-"examples of how to word your request."
+"Please write the summary using a mixture of capital and lower case letters. "
+"This makes it easier for others to read."
msgstr ""
+"Bitte nutzen Sie eine Mischung aus Groß- und Kleinschreibung für die "
+"Zusammenfassung. Dies vereinfacht das Lesen für andere."
-#: app/views/request/show.rhtml:86
+#: app/models/info_request.rb:123
msgid ""
-"By law, under all circumstances, {{public_body_link}} should have responded "
-"by now"
+"Please keep the summary short, like in the subject of an email. You can use "
+"a phrase, rather than a full sentence."
msgstr ""
-"Nach gesetzlicher Vorschrift sollte {{public_body_link}} Ihnen inzwischen "
-"unter allen Umständen geantwortet haben. "
+"Bitte halten Sie die Zusammenfassung kurz, wie in der Betreffzeile einer "
+"E-Mail. Sie können eine Phrase, sondern als ein ganzer Satz."
-#: app/views/request/show.rhtml:78
+#: app/models/info_request.rb:126
msgid ""
-"By law, {{public_body_link}} should normally have responded "
-"<strong>promptly</strong> and"
+"Please describe more what the request is about in the subject. There is no "
+"need to say it is an FOI request, we add that on anyway."
msgstr ""
-"Nach gesetzlicher Vorschrift sollte {{public_body_link}} "
-"<strong>umgehend</strong> geantwortet haben und"
+"Bitte beschreiben Sie im Betreff, um was es in der Anfrage geht. Sie "
+"brauchen nicht sagen, dass es eine IFG-Anfrage ist, dies wird automatisch "
+"hinzugefügt."
-#: app/views/general/search.rhtml:17
+#: app/models/info_request.rb:395
msgid ""
-"Can't find it? <a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add"
-" it</a>."
+"This request has been set by an administrator to \"allow new responses from "
+"nobody\""
msgstr ""
-"Nicht gefunden? <a href=\"%s\">Durchsuchen Sie alle Behörden</a> oder <a "
-"href=\"%s\">bitten Sie uns die Behörde hinzuzufügen</a>."
-
-#: app/controllers/track_controller.rb:145
-msgid "Cancel a {{site_name}} alert"
-msgstr "Benachrichtigung für {{site_name}} abbestellen"
-
-#: app/controllers/track_controller.rb:175
-msgid "Cancel some {{site_name}} alerts"
-msgstr "Einige Benachrichtigungen für {{site_name}} abbestellen"
-#: locale/model_attributes.rb:39
-msgid "CensorRule|Last edit comment"
+#: app/models/info_request.rb:401
+msgid ""
+"Only the authority can reply to this request, but there is no \"From\" "
+"address to check against"
msgstr ""
+"Diese Anfrage kann ausschliesslich von der Behörde beantwortet werden, "
+"jedoch besteht keine ´von´ Adresse zum Vergleich. "
-#: locale/model_attributes.rb:38
-msgid "CensorRule|Last edit editor"
+#: app/models/info_request.rb:405
+msgid ""
+"Only the authority can reply to this request, and I don't recognise the "
+"address this reply was sent from"
msgstr ""
+"Die Beantwortung dieser Anfrage ist ausschliesslich der Behörde gewährt und "
+"die Adresse dieser Antwort ist mir nicht bekannt. "
-#: locale/model_attributes.rb:37
-msgid "CensorRule|Replacement"
-msgstr ""
+#: app/models/info_request.rb:785
+msgid "Awaiting classification."
+msgstr "Zuordnung wird erwartet. "
-#: locale/model_attributes.rb:36
-msgid "CensorRule|Text"
-msgstr ""
+#: app/models/info_request.rb:787
+msgid "Awaiting response."
+msgstr "Antwort ausstehend. "
-#: lib/public_body_categories_en.rb:14
-msgid "Central government"
-msgstr "Zentralregierung"
+#: app/models/info_request.rb:789
+msgid "Delayed."
+msgstr "Verzögert."
-#: app/views/user/signchangeemail.rhtml:37
-msgid "Change email on {{site_name}}"
-msgstr ""
+#: app/models/info_request.rb:791
+msgid "Long overdue."
+msgstr "Stark verspätet."
-#: app/views/user/signchangepassword.rhtml:27
-msgid "Change password on {{site_name}}"
-msgstr "Passwort ändern: {{site_name}}"
+#: app/models/info_request.rb:793
+msgid "Information not held."
+msgstr "Information nicht verfügbr"
-#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104
-msgid "Change profile photo"
-msgstr "Profilbild ändern"
+#: app/models/info_request.rb:795
+msgid "Refused."
+msgstr "Abgelehnt."
-#: app/views/user/set_profile_about_me.rhtml:1
-msgid "Change the text about you on your profile at {{site_name}}"
-msgstr ""
+#: app/models/info_request.rb:797
+msgid "Partially successful."
+msgstr "Teilweise erfolgreich. "
-#: app/views/user/show.rhtml:107
-msgid "Change your email"
-msgstr "Emailadresse ändern"
+#: app/models/info_request.rb:799
+msgid "Successful."
+msgstr "Erfolgreich."
-#: app/controllers/user_controller.rb:250
-#: app/views/user/signchangeemail.rhtml:1
-#: app/views/user/signchangeemail.rhtml:11
-msgid "Change your email address used on {{site_name}}"
-msgstr "Ändern Sie die unter {{site_name}} genutzte Email-Adresse"
+#: app/models/info_request.rb:801
+msgid "Waiting clarification."
+msgstr "Klärung wird erwartet. "
-#: app/views/user/show.rhtml:106
-msgid "Change your password"
-msgstr "Passwort ändern"
+#: app/models/info_request.rb:803
+msgid "Handled by post."
+msgstr "Postalisch bearbeitet."
-#: app/views/user/signchangepassword.rhtml:1
-#: app/views/user/signchangepassword.rhtml:11
-#: app/views/user/signchangepassword_send_confirm.rhtml:1
-#: app/views/user/signchangepassword_send_confirm.rhtml:9
-msgid "Change your password on {{site_name}}"
-msgstr "Ändern Sie Ihr Passwort: {{site_name}}"
+#: app/models/info_request.rb:805
+msgid "Awaiting internal review."
+msgstr "Interne Prüfung ausstehend."
-#: app/controllers/user_controller.rb:204
-msgid "Change your password {{site_name}}"
-msgstr "Passwort ändern{{site_name}}"
+#: app/models/info_request.rb:807
+msgid "Delivery error"
+msgstr "Übertragungsfehler"
-#: app/views/public_body/show.rhtml:15 app/views/public_body/show.rhtml:17
-msgid "Charity registration"
-msgstr ""
+#: app/models/info_request.rb:809
+msgid "Unusual response."
+msgstr "Ungewöhnliche Antwort."
-#: app/views/general/exception_caught.rhtml:6
-msgid "Check for mistakes if you typed or copied the address."
-msgstr ""
-"Sollten Sie die Adresse eingegeben oder kopiert haben, überprüfen Sie diese "
-"auf Fehler."
+#: app/models/info_request.rb:811
+msgid "Withdrawn by the requester."
+msgstr "Vom Antragsteller zurückgezogen"
-#: app/views/request/followup_preview.rhtml:14
-#: app/views/request/preview.rhtml:7
-msgid "Check you haven't included any <strong>personal information</strong>."
-msgstr ""
-"Stellen Sie sicher, dass Sie keine <strong>persönlichen "
-"Informationen</strong>verwendet haben."
+#: app/models/info_request.rb:816 app/models/info_request_event.rb:318
+msgid "unknown status "
+msgstr "unbekannter Status"
+
+#: app/models/info_request_event.rb:306
+msgid "Response"
+msgstr "Antwort"
+
+#: app/models/info_request_event.rb:313
+msgid "Internal review request"
+msgstr "Anfrage zur internen Prüfung"
-#: app/models/info_request_event.rb:331
+#: app/models/info_request_event.rb:316
msgid "Clarification"
msgstr "Klärung"
-#: app/models/info_request_event.rb:295
-msgid "Clarification required"
-msgstr "Klärung notwendig"
+#: app/models/info_request_event.rb:320
+msgid "Follow up"
+msgstr "Follow-up"
-#: app/controllers/request_controller.rb:339
-msgid "Classify an FOI response from "
+#: app/models/info_request_event.rb:323
+msgid "display_status only works for incoming and outgoing messages right now"
msgstr ""
+"Anzeigestatus funktioniert momentan nur für ein- und ausgehende Nachrichten"
-#: app/views/request_mailer/very_overdue_alert.rhtml:6
-msgid ""
-"Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\n"
-"review, asking them to find out why response to the request has been so slow."
-msgstr ""
+#: app/models/outgoing_message.rb:63
+msgid "Dear {{public_body_name}},"
+msgstr "Sehr geehrte / Sehr geehrter {{public_body_name}},"
-#: app/views/request_mailer/overdue_alert.rhtml:5
-msgid ""
-"Click on the link below to send a message to {{public_body}} reminding them "
-"to reply to your request."
-msgstr ""
-"Klicken Sie auf den unten aufgeführten Link an {{public_body}}, um eine "
-"Anfrageerinnerung zu versenden."
+#: app/models/outgoing_message.rb:68
+msgid "Yours sincerely,"
+msgstr "Mit freundlichem Gruß, "
-#: locale/model_attributes.rb:22
-msgid "Comment|Body"
-msgstr ""
+#: app/models/outgoing_message.rb:70
+msgid "Yours faithfully,"
+msgstr "Mit freundlichem Gruß, "
-#: locale/model_attributes.rb:21
-msgid "Comment|Comment type"
-msgstr ""
+#: app/models/outgoing_message.rb:74
+msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
+msgstr "HINTELASSEN SIE HIER DETAILS ZU IHRER BESCHWERDE"
-#: locale/model_attributes.rb:24
-msgid "Comment|Locale"
-msgstr ""
+#: app/models/outgoing_message.rb:146
+msgid "Please give details explaining why you want a review"
+msgstr "Bitte machen Sie Angaben, warum Sie eine Durchsicht möchten"
-#: locale/model_attributes.rb:23
-msgid "Comment|Visible"
-msgstr ""
+#: app/models/outgoing_message.rb:148
+msgid "Please enter your follow up message"
+msgstr "Bitte geben Sie Ihre Follow-Up-Nachricht ein"
-#: app/models/track_thing.rb:147
-msgid "Confirm you want to be emailed about new requests"
-msgstr ""
+#: app/models/outgoing_message.rb:151
+msgid "Please enter your letter requesting information"
+msgstr "Bitte geben Sie Ihre Briefanfrage-Informationen ein"
-#: app/models/track_thing.rb:214
+#: app/models/outgoing_message.rb:157
msgid ""
-"Confirm you want to be emailed about new requests or responses matching "
-"'{{query}}'"
-msgstr ""
-
-#: app/models/track_thing.rb:198
-msgid "Confirm you want to be emailed about requests by '{{user_name}}'"
+"Please sign at the bottom with your name, or alter the \"%{signoff}\" "
+"signature"
msgstr ""
+"Bitte unterschreiben Sie unten mit Ihrem Namen oder ändern Sie Ihre \"% "
+"{signoff}\" Signatur"
-#: app/models/track_thing.rb:182
+#: app/models/outgoing_message.rb:160
msgid ""
-"Confirm you want to be emailed about requests to '{{public_body_name}}'"
-msgstr ""
-
-#: app/models/track_thing.rb:163
-msgid "Confirm you want to be emailed when an FOI request succeeds"
-msgstr ""
-"Bestätigen Sie, dass Sie bei erfolgreicher IFG-Anfrage eine Emailbestätigung"
-" erhalten möchten"
-
-#: app/controllers/request_controller.rb:300
-msgid "Confirm your FOI request to "
-msgstr "Bestätigen Sie Ihre IFG-Anfrage "
-
-#: app/controllers/request_controller.rb:703
-#: app/controllers/user_controller.rb:515
-msgid "Confirm your account on {{site_name}}"
-msgstr "Bestätigen Sie Ihr Nutzerkonto auf {{site_name}}"
-
-#: app/controllers/comment_controller.rb:57
-msgid "Confirm your annotation to {{info_request_title}}"
-msgstr "Bestätigen Sie Ihre Anmerkung zu {{info_request_title}}"
-
-#: app/models/user_mailer.rb:34
-msgid "Confirm your new email address on {{site_name}}"
+"Please write your message using a mixture of capital and lower case letters."
+" This makes it easier for others to read."
msgstr ""
+"Bitte nutzen Sie eine Mischung aus Groß- und Kleinschreibung für Ihre "
+"Nachricht. Dies vereinfacht das Lesen für andere."
-#: app/views/layouts/default.rhtml:127
-msgid "Contact {{site_name}}"
-msgstr "Kontakt {{site_name}}"
+#: app/models/outgoing_message.rb:163
+msgid "Please choose what sort of reply you are making."
+msgstr "Bitte wählen Sie, welche Art von Antwort Sie geben."
-#: app/models/request_mailer.rb:210
-msgid "Could not identify the request from the email address"
-msgstr ""
+#: app/models/profile_photo.rb:91
+msgid "Please choose a file containing your photo."
+msgstr "Bitte wählen Sie eine Datei mit Ihrem Foto."
#: app/models/profile_photo.rb:96
msgid ""
@@ -960,1840 +897,2078 @@ msgstr ""
"Konnte die hochgeladene Bilddatei nicht verarbeiten. PNG, JPEG, GIF und "
"viele andere gängige Bildformate werden unterstützt."
-#: app/views/user/set_crop_profile_photo.rhtml:6
-msgid "Crop your profile photo"
-msgstr ""
+#: app/models/profile_photo.rb:101
+msgid "Failed to convert image to a PNG"
+msgstr "Konnte Bild nicht in ein PNG konvertieren"
-#: app/views/request/new.rhtml:74
+#: app/models/profile_photo.rb:105
msgid ""
-"Cultural sites and built structures (as they may be affected by the\n"
-" environmental factors listed above)"
+"Failed to convert image to the correct size: at %{cols}x%{rows}, need "
+"%{width}x%{height}"
msgstr ""
+"Konnte Bild nicht in die richtige Größe umwandeln: %{cols} x %{rows}, "
+"brauche %{width} x %{height}"
-#: app/views/request/show.rhtml:68
-msgid ""
-"Currently <strong>waiting for a response</strong> from {{public_body_link}},"
-" they must respond promptly and"
-msgstr ""
-"<strong>Antwort</strong> von {{public_body_link}} wird erwartet. Sie sollte "
-"in Kürze eine Antwort erhalten und"
+#: app/models/public_body.rb:36
+msgid "Name can't be blank"
+msgstr "Name muss eingegeben werden "
-#: app/models/info_request_event.rb:299
-msgid "Deadline Extended"
-msgstr "Frist verlängert"
+#: app/models/public_body.rb:37
+msgid "URL name can't be blank"
+msgstr "URL muss angegeben werden"
-#: app/models/outgoing_message.rb:57
-msgid "Dear "
-msgstr "Sehr geehrte / sehr geehrter "
+#: app/models/public_body.rb:39
+msgid "Short name is already taken"
+msgstr "Nutzername bereits vergeben "
-#: app/models/info_request.rb:787
-msgid "Delayed."
-msgstr "Verzögert."
+#: app/models/public_body.rb:40
+msgid "Name is already taken"
+msgstr "Benutzername vergeben"
-#: app/models/info_request.rb:805 app/models/info_request_event.rb:315
-msgid "Delivery error"
-msgstr "Übertragungsfehler"
+#: app/models/request_mailer.rb:218
+msgid "Could not identify the request from the email address"
+msgstr "Die Email-Adresse der Anfragen konnte nicht identifiziert werden"
-#: app/views/request/details.rhtml:1 app/views/request/details.rhtml:2
-msgid "Details of request '"
-msgstr "Anfragedetails"
+#: app/models/track_mailer.rb:25
+msgid "Your {{site_name}} email alert"
+msgstr "Ihr {{site_name}} Email Alarm"
-#: app/views/general/search.rhtml:50 app/views/general/search.rhtml:62
-msgid "Did you mean: {{correction}}"
-msgstr "Meinten Sie: {{correction}}"
+#: app/models/track_thing.rb:83 app/views/general/search.rhtml:54
+msgid "users"
+msgstr "Nutzer"
-#: app/views/outgoing_mailer/_followup_footer.rhtml:1
-msgid ""
-"Disclaimer: This message and any reply that you make will be published on "
-"the internet. Our privacy and copyright policies:"
-msgstr ""
-"Haftungsausschluss: Diese Nachricht und alle Antworten werden im Internet veröffentlicht. \t\n"
-"Nutzungsbedingungen und Datenschutz:"
+#: app/models/track_thing.rb:86 app/views/general/search.rhtml:103
+#: app/views/request/_request_filter_form.rhtml:14
+msgid "comments"
+msgstr "Anmerkungen"
-#: app/views/request/_view_html_prefix.rhtml:6
-msgid "Download original attachment"
-msgstr "Originalanhang herunterladen"
+#: app/models/track_thing.rb:89 app/views/general/search.rhtml:55
+msgid "authorities"
+msgstr "Behörden"
-#: app/views/request/_followup.rhtml:85
-msgid ""
-"Edit and add <strong>more details</strong> to the message above,\n"
-" explaining why you are dissatisfied with their response."
-msgstr ""
-"Bearbeiten Sie Ihre Anfrage und fügen Sie <strong>weitere Details</strong> hinzu,\n"
-" explaining why you are dissatisfied with their response."
+#: app/models/track_thing.rb:92 app/models/track_thing.rb:111
+#: app/models/track_thing.rb:113 app/views/general/search.rhtml:53
+msgid "requests"
+msgstr "Anfragen"
-#: app/views/admin_public_body/_locale_selector.rhtml:2
-msgid "Edit language version:"
-msgstr "Sprachauswahl ändern:"
+#: app/models/track_thing.rb:95
+msgid "between two dates"
+msgstr "zwischen zwei Datum"
-#: app/views/user/set_profile_about_me.rhtml:9
-msgid "Edit text about you"
-msgstr "Profiltext ändern"
+#: app/models/track_thing.rb:98
+msgid "unsuccessful"
+msgstr "nicht erfolgreich"
-#: app/models/user.rb:135
-msgid "Either the email or password was not recognised, please try again."
-msgstr ""
-"Passwort oder emailadresse wurde nicht erkannt. Bitte versuchen Sie es "
-"erneut. "
+#: app/models/track_thing.rb:101
+msgid "successful"
+msgstr "erfolgreich"
-#: app/models/user.rb:137
-msgid ""
-"Either the email or password was not recognised, please try again. Or create"
-" a new account using the form on the right."
-msgstr ""
-"Emailadresse oder Passwort ungültig. Bitte versuchen Sie es erneut oder "
-"erstellen Sie ein neues Benutzerkonto mit dem Formular auf der rechten "
-"Seite. "
+#: app/models/track_thing.rb:104
+msgid "awaiting a response"
+msgstr "eine Antwort erwartend"
-#: app/models/contact_validator.rb:34
-msgid "Email doesn't look like a valid address"
-msgstr "Dies sieht nicht nach einer gültigen Email-Adresse aus"
+#: app/models/track_thing.rb:112
+msgid "requests which are {{list_of_statuses}}"
+msgstr "Anfragen mit dem Status {{list_of_statuses}} "
-#: app/views/comment/_comment_form.rhtml:8
-msgid "Email me future updates to this request"
-msgstr ""
-"Informieren Sie mich über zukünftige Aktualisierungen zu dieser Anfrage"
+#: app/models/track_thing.rb:112 app/models/track_thing.rb:120
+msgid " or "
+msgstr " oder "
-#: app/models/track_thing.rb:155
-msgid "Email me new successful responses "
-msgstr "Neue erfolgreiche Anfragen per Email erhalten "
+#: app/models/track_thing.rb:116
+msgid "anything"
+msgstr "alles"
-#: app/models/track_thing.rb:139
-msgid "Email me when there are new requests"
-msgstr ""
+#: app/models/track_thing.rb:122
+msgid "{{list_of_things}} matching text '{{search_query}}'"
+msgstr "{{list_of_things}} passen zum Text '{{search_query}}'"
-#: app/views/user/show.rhtml:36
-msgid "Email subscriptions"
-msgstr "Email Abo"
+#: app/models/track_thing.rb:195
+msgid "'{{link_to_request}}', a request"
+msgstr "'{{link_to_request}}', eine Anfrage"
-#: app/views/general/search.rhtml:123
-msgid ""
-"Enter words that you want to find separated by spaces, e.g. <strong>climbing"
-" lane</strong>"
-msgstr "Trennen Sie Ihre Suchbegriffen durch Leerzeichen"
+#: app/models/track_thing.rb:196
+msgid "Track this request by email"
+msgstr "Diese Anfrage via Email verfolgen"
-#: app/views/request/upload_response.rhtml:23
-msgid ""
-"Enter your response below. You may attach one file (use email, or \n"
-"<a href=\"%s\">contact us</a> if you need more)."
-msgstr ""
-"Geben Sie unten Ihre Antwort ein. Sie könne eine Datei anhängen (nutzen Sie Email, oder \n"
-"<a href=\"%s\">kontaktieren Sie uns</a> falls Sie mehrere Anhänge benötigen)."
+#: app/models/track_thing.rb:197
+msgid "You are already tracking this request by email"
+msgstr "Sie folgen dieser Anfrage bereits via Email"
-#: app/views/public_body/show.rhtml:96
-msgid "Environmental Information Regulations requests made"
+#: app/models/track_thing.rb:199 app/models/track_thing.rb:200
+msgid "New updates for the request '{{request_title}}'"
+msgstr "Neue Aktualisierungen der Anfrage '{{request_title}}'"
+
+#: app/models/track_thing.rb:202
+msgid "To follow updates to the request '{{request_title}}'"
+msgstr "Um Aktualisierungen der Anfrage '{{request_title}}' zu folgen"
+
+#: app/models/track_thing.rb:203
+msgid ""
+"Then you will be emailed whenever the request '{{request_title}}' is "
+"updated."
msgstr ""
+"Dann erhalten Sie jedesmal eine Email, wenn die Anfrage '{{request_title}}' "
+"aktualisiert wird."
-#: app/views/public_body/show.rhtml:69
-msgid "Environmental Information Regulations requests made using this site"
+#: app/models/track_thing.rb:204
+msgid "Confirm you want to follow updates to the request '{{request_title}}'"
msgstr ""
+"Bestätigen Sie, dass Sie Aktualsierungen der folgenden Anfrage erhalten "
+"möchten: '{{request_title}}'"
-#: app/views/request/details.rhtml:4
-msgid "Event history"
-msgstr "Verlaufsübersicht"
+#: app/models/track_thing.rb:211
+msgid "any <a href=\"/list\">new requests</a>"
+msgstr "jegliche <a href=\"/list\">neue Anfragen</a>"
-#: app/views/request/_sidebar.rhtml:41
-msgid "Event history details"
-msgstr "Details Verlaufsübersicht"
+#: app/models/track_thing.rb:212
+msgid "Email me when there are new requests"
+msgstr "Informieren Sie mich per Email, wenn es neue Anfragen gibt"
-#: app/views/request/new.rhtml:124
-msgid ""
-"Everything that you enter on this page \n"
-" will be <strong>displayed publicly</strong> on\n"
-" this website forever (<a href=\"%s\">why?</a>)."
-msgstr ""
-"Jegliche auf dieser Seite eingegebene Information wird\n"
-" für immer auf dieser Internetseite <strong>veröffentlicht</strong>(<a href=\"%s\">Warum?</a>)."
+#: app/models/track_thing.rb:213
+msgid "You are being emailed when there are new requests"
+msgstr "Im Falle neuer Anfragen werden Sie per Email informiert werden"
-#: app/views/request/new.rhtml:116
-msgid ""
-"Everything that you enter on this page, including <strong>your name</strong>, \n"
-" will be <strong>displayed publicly</strong> on\n"
-" this website forever (<a href=\"%s\">why?</a>)."
-msgstr ""
-"Jegliche auf dieser Seite eingegebene Information, inklusive <strong>Ihrem Namen</strong>, ⏎ wird\n"
-" für immer auf dieser Internetseite <strong>veröffentlicht</strong>(<a href=\"%s\">Warum?</a>)."
+#: app/models/track_thing.rb:215 app/models/track_thing.rb:216
+msgid "New Freedom of Information requests"
+msgstr "Neue IFG-Anfragen"
-#: locale/model_attributes.rb:60
-msgid "EximLogDone|Filename"
-msgstr ""
+#: app/models/track_thing.rb:218
+msgid "To be emailed about any new requests"
+msgstr "Um Emails zu allen neuen Anfragen zu erhalten"
-#: locale/model_attributes.rb:61
-msgid "EximLogDone|Last stat"
+#: app/models/track_thing.rb:219
+msgid "Then you will be emailed whenever anyone makes a new FOI request."
msgstr ""
+"Sie werden dann per email informiert, sobald jemand eine neue IFG-Anfrage "
+"stellt. "
-#: locale/model_attributes.rb:19
-msgid "EximLog|Line"
+#: app/models/track_thing.rb:220
+msgid "Confirm you want to be emailed about new requests"
msgstr ""
+"Bitte bestätigen Sie, dass Sie über neue Anfragen informiert werden möchten"
-#: locale/model_attributes.rb:18
-msgid "EximLog|Order"
-msgstr ""
+#: app/models/track_thing.rb:227
+msgid "any <a href=\"/list/successful\">successful requests</a>"
+msgstr "jegliche <a href=\"/list/successful\">erfolgreiche Anfragen</a>"
-#: app/views/public_body/view_email.rhtml:3
-msgid "FOI email address for {{public_body}}"
-msgstr "IFG-Emailadresse für {{public_body}}"
+#: app/models/track_thing.rb:228
+msgid "Email me new successful responses "
+msgstr "Neue erfolgreiche Anfragen per Email erhalten "
-#: app/views/user/show.rhtml:33
-msgid "FOI requests"
-msgstr "IFG-Anfrage"
+#: app/models/track_thing.rb:229
+msgid "You are being emailed about any new successful responses"
+msgstr "Sie werden per Email über neue erfolgreiche Antworten informiert "
-#: app/models/track_thing.rb:193 app/models/track_thing.rb:194
-msgid "FOI requests by '{{user_name}}'"
-msgstr ""
+#: app/models/track_thing.rb:231 app/models/track_thing.rb:232
+msgid "Successful Freedom of Information requests"
+msgstr "Erfolgreiche Informationsfreiheitsanfrage"
-#: app/models/profile_photo.rb:101
-msgid "Failed to convert image to a PNG"
-msgstr "Konnte Bild nicht in ein PNG konvertieren"
+#: app/models/track_thing.rb:234
+msgid "To be emailed about any successful requests"
+msgstr "Um per Email über erfolgreiche Anfragen informiert zu werden"
-#: app/models/profile_photo.rb:105
-msgid ""
-"Failed to convert image to the correct size: at %{cols}x%{rows}, need "
-"%{width}x%{height}"
+#: app/models/track_thing.rb:235
+msgid "Then you will be emailed whenever an FOI request succeeds."
msgstr ""
-"Konnte Bild nicht in die richtige Größe umwandeln: %{cols} x %{rows}, "
-"brauche %{width} x %{height}"
-
-#: app/views/request/new.rhtml:21
-msgid "First,"
-msgstr "Erstens, "
+"Sie werden bei jeder erfolgreichen IFG-Anfrage per Email benachrichtigt. "
-#: app/views/general/frontpage.rhtml:8
-msgid ""
-"First, type in the <strong>name of the UK public authority</strong> you'd \n"
-" <br>like information from. <strong>By law, they have to respond</strong>\n"
-" (<a href=\"%s\">why?</a>)."
+#: app/models/track_thing.rb:236
+msgid "Confirm you want to be emailed when an FOI request succeeds"
msgstr ""
-"Schritt 1, suchen Sie nach dem <strong>Namen der gewünschten Behörde. </strong> \n"
-"<br><strong>Die Behörden sind gesetzlich verpflichtet Ihre Anfrage zu beantworten.</strong>\n"
-" (<a href=\"%s\">Warum?</a>)."
-
-#: app/views/request_mailer/old_unclassified_updated.rhtml:4
-msgid "Follow this link to see the request:"
-msgstr "Folgen Sie diesem Link, um die Anfrage anzusehen:"
+"Bestätigen Sie, dass Sie bei erfolgreicher IFG-Anfrage eine Emailbestätigung"
+" erhalten möchten"
-#: app/models/info_request_event.rb:335
-msgid "Follow up"
-msgstr "Follow-up"
+#: app/models/track_thing.rb:246
+msgid "'{{link_to_authority}}', a public authority"
+msgstr "'{{link_to_authority}}', eine Behörde"
-#: app/views/general/search.rhtml:159
-msgid "Follow up message sent by requester"
-msgstr ""
+#: app/models/track_thing.rb:247
+msgid "Track requests to {{public_body_name}} by email"
+msgstr "An {{public_body_name}} gestellte Anfragen via Email verfolgen"
-#: app/views/public_body/view_email.rhtml:14
-msgid "Follow up messages to existing requests are sent to "
-msgstr ""
+#: app/models/track_thing.rb:248
+msgid "You are already tracking requests to {{public_body_name}} by email"
+msgstr "Sie verfolgen die Anfragen an {{public_body_name}} bereits via Email"
-#: app/views/request/_followup.rhtml:16
+#: app/models/track_thing.rb:253
msgid ""
-"Follow ups and new responses to this request have been stopped to prevent "
-"spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and"
-" need to send a follow up."
+"To be emailed about requests made using {{site_name}} to the public "
+"authority '{{public_body_name}}'"
msgstr ""
+"Um Emails bzgl. der durch {{site_name}} an die Behörde "
+"'{{public_body_name}}' gestellte Anfragen"
-#: app/views/public_body/show.rhtml:61
+#: app/models/track_thing.rb:254
msgid ""
-"For an unknown reason, it is not possible to make a request to this "
-"authority."
+"Then you will be emailed whenever someone requests something or gets a "
+"response from '{{public_body_name}}'."
msgstr ""
-"Aus unbekannten Gründen ist es nicht möglich eine Anfrage a diese Behörde zu"
-" stellen. "
+"Dann erhalten Sie eine Email sobald jemand eine Anfrage an die folgende "
+"Behörde stellt oder eine Antwort von dieser erhält: '{{public_body_name}}'"
-#: app/views/user/_signin.rhtml:21
-msgid "Forgotten your password?"
-msgstr "Passwort vergessen?"
-
-#: app/views/public_body/show.rhtml:56
+#: app/models/track_thing.rb:255
msgid ""
-"Freedom of Information law does not apply to this authority, so you cannot make\n"
-" a request to it."
+"Confirm you want to be emailed about requests to '{{public_body_name}}'"
msgstr ""
+"Bitte bestätigen Sie, dass Sie über neue Anfragen an '{{public_body_name}}' "
+"informiert werden möchten"
-#: app/views/request/followup_bad.rhtml:11
-msgid "Freedom of Information law no longer applies to"
-msgstr "Informationsfreiheitsgesetz ist nicht länger gültig für"
-
-#: app/views/public_body/view_email.rhtml:10
-msgid ""
-"Freedom of Information law no longer applies to this authority.Follow up "
-"messages to existing requests are sent to "
-msgstr ""
-"Das Informationsfreiheitsgesetz ist für diese Behörde nicht länger gültig. "
-"Follow-up Nachrichten bestehnder Nachrichten wurden gesendet an"
+#: app/models/track_thing.rb:262
+msgid "'{{link_to_user}}', a person"
+msgstr "'{{link_to_user}}', eine Person"
-#: app/views/user/show.rhtml:128
-msgid "Freedom of Information request"
-msgstr "Informationsfreiheitsanfrage"
+#: app/models/track_thing.rb:263
+msgid "Track this person by email"
+msgstr "Dieser Person via Email folgen"
-#: app/views/public_body/show.rhtml:98
-msgid "Freedom of Information requests made"
-msgstr "Anfrage ausgeführt"
+#: app/models/track_thing.rb:264
+msgid "You are already tracking this person by email"
+msgstr "Sie folgen dieser Person bereits via Email"
-#: app/views/user/show.rhtml:121 app/views/user/show.rhtml:140
-msgid "Freedom of Information requests made by"
-msgstr "Informationsfreiheitsanfrage gestellt durch"
+#: app/models/track_thing.rb:266 app/models/track_thing.rb:267
+msgid "FOI requests by '{{user_name}}'"
+msgstr "IFG-Anfrage von '{{user_name}}'"
-#: app/views/public_body/show.rhtml:72
-msgid "Freedom of Information requests made using this site"
-msgstr "Anfrage über diese Seite gestellt"
+#: app/models/track_thing.rb:269
+msgid "To be emailed about requests by '{{user_name}}'"
+msgstr "Um Emails zu Anfragen von '{{user_name}}' zu erhalten"
-#: app/views/request/followup_bad.rhtml:12
+#: app/models/track_thing.rb:270
msgid ""
-"From the request page, try replying to a particular message, rather than sending\n"
-" a general followup. If you need to make a general followup, and know\n"
-" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
+"Then you will be emailed whenever '{{user_name}}' requests something or gets"
+" a response."
msgstr ""
+"Dann erhalten Sie eine Email sobald '{{user_name}}' eine Anfrage stellt oder"
+" eine Antwort erhält. "
-#: app/models/outgoing_message.rb:73
-msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
-msgstr "HINTELASSEN SIE HIER DETAILS ZU IHRER BESCHWERDE"
-
-#: app/views/general/exception_caught.rhtml:14
-msgid "Go to our <a href=\"%s\">front page</a></li>"
-msgstr "Gehen Sie zu unserer <a href=\"%s\">Startseite</a></li>"
-
-#: app/models/info_request_event.rb:297
-msgid "Handled by post"
-msgstr "Postalisch bearbeitet"
+#: app/models/track_thing.rb:271
+msgid "Confirm you want to be emailed about requests by '{{user_name}}'"
+msgstr ""
+"Bitte bestätigen Sie, dass Sie über neue Anfragen von '{{user_name}}' "
+"informiert werden möchten"
-#: app/models/info_request.rb:801
-msgid "Handled by post."
-msgstr "Postalisch bearbeitet."
+#: app/models/track_thing.rb:279
+msgid "Track things matching this search by email"
+msgstr "Folgen Sie ähnlichen Anfragen etc. per Email"
-#: app/views/layouts/default.rhtml:102
-msgid "Hello!"
-msgstr "Hallo!"
+#: app/models/track_thing.rb:280
+msgid "You are already tracking things matching this search by email"
+msgstr "Sie folgen einer solchen Suchanfrage bereits per Email"
-#: app/views/layouts/default.rhtml:99
-msgid "Hello, {{username}}!"
-msgstr "Hallo, "
+#: app/models/track_thing.rb:282 app/models/track_thing.rb:283
+msgid "Requests or responses matching your saved search"
+msgstr "Zu Ihrer gespeicherten Suche passende Anfragen und Antworten"
-#: app/views/layouts/default.rhtml:94
-msgid "Help"
-msgstr "Hilfe"
+#: app/models/track_thing.rb:285
+msgid "To follow requests and responses matching your search"
+msgstr "Um Ihrer Suchanfrage ähnelnten Anfragen und Antworten zu folgen"
-#: app/views/request/details.rhtml:50
+#: app/models/track_thing.rb:286
msgid ""
-"Here <strong>described</strong> means when a user selected a status for the request, and\n"
-"the most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\n"
-"{{site_name}} for intermediate events, which weren't given an explicit\n"
-"description by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
+"Then you will be emailed whenever a new request or response matches your "
+"search."
msgstr ""
+"Dann werden Sie per Email über neue Anfragen oder Antworten informiert, die "
+"auf Ihre Suche zutreffen. "
-#: app/views/request/_other_describe_state.rhtml:4
+#: app/models/track_thing.rb:287
msgid ""
-"Hi! We need your help. The person who made the following request\n"
-" hasn't told us whether or not it was successful. Would you mind taking\n"
-" a moment to read it and help us keep the place tidy for everyone?\n"
-" Thanks."
+"Confirm you want to be emailed about new requests or responses matching your"
+" search"
msgstr ""
+"Bestätigen Sie, dass Sie zu Ihrer Suche passende Anfragen und Antworten per "
+"Email erhalten möchten"
-#: locale/model_attributes.rb:57
-msgid "Holiday|Day"
-msgstr ""
+#: app/models/user.rb:40
+msgid "Please enter a password"
+msgstr "Bitte geben Sie ein Passwort ein"
-#: locale/model_attributes.rb:58
-msgid "Holiday|Description"
+#: app/models/user.rb:51
+msgid "Please enter the same password twice"
+msgstr "Bitte geben Sie das gleiche Passwort zweimal ein"
+
+#: app/models/user.rb:56
+msgid "Admin level is not included in list"
+msgstr "Administrative Ebene ist in Liste nicht enthalten"
+
+#: app/models/user.rb:117
+msgid "Please enter a valid email address"
+msgstr "Bitte geben Sie eine gültige E-Mail-Adresse ein"
+
+#: app/models/user.rb:120
+msgid "Please enter your name, not your email address, in the name field."
msgstr ""
+"Bitte geben Sie Ihren Namen und nicht Ihre E-Mail-Adresse in das Name-Feld "
+"ein."
-#: app/views/public_body/show.rhtml:7
-msgid "Home page of authority"
-msgstr "Offizielle Homepage der Behörde"
+#: app/models/user.rb:133
+msgid "{{user_name}} (Banned)"
+msgstr "{{user_name}} (Banned)"
-#: app/views/request/new.rhtml:63
-msgid ""
-"However, you have the right to request environmental\n"
-" information under a different law"
+#: app/models/user.rb:146
+msgid "Either the email or password was not recognised, please try again."
msgstr ""
-"Sie haben jeoch das Recht Umweltanfragen unter einem anderen Gesetz zu "
-"stellen. "
+"Passwort oder emailadresse wurde nicht erkannt. Bitte versuchen Sie es "
+"erneut. "
-#: app/views/request/new.rhtml:73
-msgid "Human health and safety"
-msgstr "Gesundheit und Sicherheit"
+#: app/models/user.rb:148
+msgid ""
+"Either the email or password was not recognised, please try again. Or create"
+" a new account using the form on the right."
+msgstr ""
+"Emailadresse oder Passwort ungültig. Bitte versuchen Sie es erneut oder "
+"erstellen Sie ein neues Benutzerkonto mit dem Formular auf der rechten "
+"Seite. "
-#: app/views/request/_followup.rhtml:68
-msgid "I am asking for <strong>new information</strong>"
-msgstr "Ich beantrage <strong>neue Informationen</strong>"
+#: app/models/user_mailer.rb:34
+msgid "Confirm your new email address on {{site_name}}"
+msgstr "Confirm your new email address on {{site_name}}"
-#: app/views/request/_followup.rhtml:73
-msgid "I am requesting an <strong>internal review</strong>"
-msgstr "Ich stelle eine Anfrage zur <strong>internen Prüfung</strong>"
+#: app/models/user_mailer.rb:45
+msgid "Unable to change email address on {{site_name}}"
+msgstr "Nicht in der Lage die Emailadresse auf {{site_name}} zu ändern"
-#: app/views/request_game/play.rhtml:39
-msgid "I don't like these ones &mdash; give me some more!"
-msgstr ""
+#: app/views/admin_public_body/_locale_selector.rhtml:2
+msgid "Edit language version:"
+msgstr "Sprachauswahl ändern:"
-#: app/views/request_game/play.rhtml:40
-msgid "I don't want to do any more tidying now!"
+#: app/views/comment/_comment_form.rhtml:8
+msgid "Email me future updates to this request"
msgstr ""
+"Informieren Sie mich über zukünftige Aktualisierungen zu dieser Anfrage"
-#: app/views/request/_describe_state.rhtml:91
-msgid "I would like to <strong>withdraw this request</strong>"
-msgstr "Ich möchte diese <strong>Anfrage zurückziehen</strong>"
+#: app/views/comment/_comment_form.rhtml:15
+msgid "Preview your annotation"
+msgstr "Überprüfen Sie Ihren Kommentar"
-#: app/views/request/_describe_state.rhtml:11
+#: app/views/comment/_comment_form.rhtml:16
msgid ""
-"I'm still <strong>waiting</strong> for my information\n"
-" <small>(maybe you got an acknowledgement)</small>"
-msgstr ""
-"Ich <strong>warte</strong>noch immer auf meine Informationen\n"
-" <small>(vielleicht haben Sie eine Bestätigung erhalten)</small>"
+" (<strong>no ranty</strong> politics, read our <a href=\"%s\">moderation "
+"policy</a>)"
+msgstr "<a href=\"%s\">Moderationsregeln</a>)"
-#: app/views/request/_describe_state.rhtml:18
-msgid "I'm still <strong>waiting</strong> for the internal review"
-msgstr "Ich <strong>warte</strong> noch immer auf die interne Prüfung"
+#: app/views/comment/_single_comment.rhtml:10
+msgid "You"
+msgstr "Sie"
-#: app/views/request/_describe_state.rhtml:32
-msgid "I'm waiting for an <strong>internal review</strong> response"
-msgstr "Ich warte auf eine Antwort der <strong>internen Prüfung</strong>"
+#: app/views/comment/_single_comment.rhtml:10
+msgid "left an annotation"
+msgstr "Anmerkung hinterlassen"
-#: app/views/request/_describe_state.rhtml:25
-msgid "I've been asked to <strong>clarify</strong> my request"
-msgstr ""
-"Ich wurde gefragt meine Anfrage <strong>deutlicher zu erläutern</strong>"
+#: app/views/comment/_single_comment.rhtml:24
+msgid "Report abuse"
+msgstr "Missbrauch melden"
-#: app/views/request/_describe_state.rhtml:60
-msgid "I've received <strong>all the information"
-msgstr "Angefragte Information <strong> vollständig erhalten"
+#: app/views/comment/new.rhtml:14
+msgid "Add an annotation"
+msgstr "Fügen Sie einee Anmerkung bei"
-#: app/views/request/_describe_state.rhtml:56
-msgid "I've received <strong>some of the information</strong>"
-msgstr "Angefragte Information <strong> teilweise erhalten </strong>"
+#: app/views/comment/new.rhtml:18
+msgid ""
+"Annotations are so anyone, including you, can help the requester with their "
+"request. For example:"
+msgstr ""
+"Anmerkungen helfen Ihnen, sowie weiteren Benutzern bei der Erstellungen "
+"einer neuer Anfrage. Zum Beispiel:"
-#: app/views/request/_describe_state.rhtml:76
-msgid "I've received an <strong>error message</strong>"
-msgstr "Fehlerhafte Information <strong>erhalten</strong>"
+#: app/views/comment/new.rhtml:24
+msgid " Advise on how to <strong>best clarify</strong> the request."
+msgstr " Hilfe zur Erstellung einer guten Informationsanfrage. "
-#: app/views/public_body/view_email.rhtml:28
+#: app/views/comment/new.rhtml:28
msgid ""
-"If the address is wrong, or you know a better address, please <a "
-"href=\"%s\">contact us</a>."
+" Link to the information requested, if it is <strong>already "
+"available</strong> on the Internet. "
msgstr ""
-"Sollte die Adresse falsch sein oder sollten Sie eine bessere Adresse kennen,"
-" so <a href=\"%s\">kontaktieren Sie uns</a>bitte."
+" Link zur angefragten Information,falls bereits online "
+"<strong>verfügbar</strong>. "
-#: app/views/request_mailer/stopped_responses.rhtml:10
+#: app/views/comment/new.rhtml:29
msgid ""
-"If this is incorrect, or you would like to send a late response to the request\n"
-"or an email on another subject to {{user}}, then please\n"
-"email {{contact_email}} for help."
+" Suggest <strong>where else</strong> the requester might find the "
+"information. "
msgstr ""
+"Machen Sie Vorschläge wo sonst die gewünschte Information eventuell zu "
+"finden ist "
-#: app/views/request/_followup.rhtml:20
+#: app/views/comment/new.rhtml:30
msgid ""
-"If you are dissatisfied by the response you got from\n"
-" the public authority, you have the right to\n"
-" complain (<a href=\"%s\">details</a>)."
+" Offer better ways of <strong>wording the request</strong> to get the "
+"information. "
msgstr ""
-"Sollten Sie mit den erhaltenen Informationen nicht zufrieden sein, haben Sie"
-" das Recht eine Beschwerde einzureichen (<a href=\"%s\">details</a>)."
+" Machen Sie bessere <strong>Formulierungsvorschläge</strong>, um die "
+"gewünschten Informationen zu erhalten. "
-#: app/views/user/no_cookies.rhtml:20
-msgid "If you are still having trouble, please <a href=\"%s\">contact us</a>."
-msgstr ""
-"Sollten weiterhin Probleme bestehen, bitte <a href=\"%s\">kontaktieren Sie "
-"uns</a>."
+#: app/views/comment/new.rhtml:34
+msgid " <strong>Summarise</strong> the content of any information returned. "
+msgstr "Fassen Sie den Inhalt jeglicher erhaltenen Information zusammen. "
-#: app/views/request/hidden.rhtml:15
+#: app/views/comment/new.rhtml:35
msgid ""
-"If you are the requester, then you may <a href=\"%s\">sign in</a> to view "
-"the request."
+" Say how you've <strong>used the information</strong>, with links if "
+"possible."
msgstr ""
-"Falls Sie der Antragsteller sind, <a href=\"%s\">melden Sie sich an</a>, um "
-"die Anfrage anzusehen."
+"Teilen Sie uns mit, <strong>wie Sie die Informationen verwendet "
+"haben</strong> - falls möglich mit Link."
-#: app/views/request/new.rhtml:119
+#: app/views/comment/new.rhtml:36
+msgid "<strong>Thank</strong> the public authority or "
+msgstr "<strong>Danken Sie</strong> der Behörde oder "
+
+#: app/views/comment/new.rhtml:39
msgid ""
-"If you are thinking of using a pseudonym,\n"
-" please <a href=\"%s\">read this first</a>."
+"Suggest how the requester can find the <strong>rest of the "
+"information</strong>."
msgstr ""
-"Wenn Sie ein Pseudonym als Benutzername verwenden möchten,\n"
-" bitte <a href=\"%s\">lesen Sie hier</a>."
-
-#: app/views/request/show.rhtml:105
-msgid "If you are {{user_link}}, please"
-msgstr "Wenn Sie {{user_link}} sind, bitte"
+"Schlagen Sie vor, wie der Anfragensteller <strong>den Rest der "
+"Information</strong> finden kann."
-#: app/views/user/bad_token.rhtml:7
+#: app/views/comment/new.rhtml:42
msgid ""
-"If you can't click on it in the email, you'll have to <strong>select and copy\n"
-"it</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\n"
-"you would type the address of any other webpage."
+"Point to <strong>related information</strong>, campaigns or forums which may"
+" be useful."
msgstr ""
+"Weisen Sie auf ähnliche, evtl. nütziche Informationen, Kampagnen oder Foren "
+"hin"
-#: app/views/request/show_response.rhtml:49
+#: app/views/comment/new.rhtml:46
msgid ""
-"If you can, scan in or photograph the response, and <strong>send us\n"
-" a copy to upload</strong>."
+"A <strong>summary</strong> of the response if you have received it by post. "
msgstr ""
-"Fall möglich, scannen oder photographieren Sie die Antwort und<strong>senden"
-" Sie uns eine Kopie zum Upload</strong>."
+"Eine <strong>Zusammenfassung</strong> of the response if you have received "
+"it by post. "
-#: app/views/outgoing_mailer/_followup_footer.rhtml:4
+#: app/views/comment/new.rhtml:50
msgid ""
-"If you find this service useful as an FOI officer, please ask your web "
-"manager to link to us from your organisation's FOI page."
+" Ideas on what <strong>other documents to request</strong> which the "
+"authority may hold. "
msgstr ""
+" Ideas on what <strong>other documents to request</strong> which the "
+"authority may hold. "
-#: app/views/user/bad_token.rhtml:13
+#: app/views/comment/new.rhtml:53
msgid ""
-"If you got the email <strong>more than six months ago</strong>, then this login link won't work any\n"
-"more. Please try doing what you were doing from the beginning."
+"Advise on whether the <strong>refusal is legal</strong>, and how to complain"
+" about it if not."
msgstr ""
-"Wenn Sie diese Email <strong>vor mehr als sechs Monaten erhalten "
-"haben</strong>, ist dieser Anmeldecode nichtmehr aktiv. Bitte nehmen Sie "
-"eine neue Registrierung vor. "
+"Beratung zur <strong>Rechtsgültigkeit der Ablehnung</strong> und wie Sie "
+"dagene angehen können."
-#: app/controllers/request_controller.rb:437
+#: app/views/comment/new.rhtml:57
msgid ""
-"If you have not done so already, please write a message below telling the "
-"authority that you have withdrawn your request. Otherwise they will not know"
-" it has been withdrawn."
+"<strong>Advice</strong> on how to get a response that will satisfy the "
+"requester. </li>"
msgstr ""
-"Falls noch nicht geschehen, senden Sie bitte eine Nachricht, um die Behörde "
-"zu informieren, dass Sie Ihre Anfrage zurückgezogen haben. Anderenfalls "
-"weiss diese nicht, dass dies geschehen ist. "
+"<strong>Ratschlag</strong> bzgl. Antworten, welche den Anfragesteller "
+"zufriedenstellen. </li>"
-#: app/views/user/signchangeemail_confirm.rhtml:11
-#: app/views/user/signchangepassword_confirm.rhtml:10
+#: app/views/comment/new.rhtml:60
msgid ""
-"If you use web-based email or have \"junk mail\" filters, also check your\n"
-"bulk/spam mail folders. Sometimes, our messages are marked that way."
+"You know what caused the error, and can <strong>suggest a solution</strong>,"
+" such as a working email address."
msgstr ""
-"Sollten Sie ein webbasiertes Emailkonto oder Spamfilter benutzen, überrpüfen"
-" Sie Ihre Bulk-, Spamordner. Unsere Nachrichten landen teilweise in diese "
-"Ordnern. "
+"Sie kennen die Ursache des Fehlers und können eine <strong>Lösung "
+"anbieten</strong>, wie z.B. eine funktionierende Email-Adresse. "
-#: app/views/user/banned.rhtml:15
+#: app/views/comment/new.rhtml:63
msgid ""
-"If you would like us to lift this ban, then you may politely\n"
-"<a href=\"/help/contact\">contact us</a> giving reasons.\n"
+"Your thoughts on what the {{site_name}} <strong>administrators</strong> "
+"should do about the request."
msgstr ""
-"Falls Sie möchten, dass wir diese Sperre aufheben, mögen Sie uns höflich\n"
-"<a href=\"/help/contact\">kontaktieren</a> und einen Grund angeben.\n"
+"Ihre Meinung zu empfehlenswerten Schritte von {{site_name}} durch die "
+"<strong>Administratoren</strong> bzgl. der Anfrage."
-#: app/views/user/_signup.rhtml:6
-msgid "If you're new to {{site_name}}"
+#: app/views/comment/new.rhtml:70
+msgid ""
+"Annotations will be posted publicly here, and are \n"
+" <strong>not</strong> sent to {{public_body_name}}."
msgstr ""
+"Anmerkungen werden hier veröffentlicht, und werden \n"
+" <strong>nicht</strong> an {{public_body_name}} gesendet."
-#: app/views/user/_signin.rhtml:7
-msgid "If you've used {{site_name}} before"
-msgstr ""
+#: app/views/comment/preview.rhtml:1
+msgid "Preview new annotation on '{{info_request_title}}'"
+msgstr "Sehen Sie den neuen Kommentar zu '{{info_request_title}}'"
-#: app/views/user/no_cookies.rhtml:12
+#: app/views/comment/preview.rhtml:5
+msgid "Now preview your annotation"
+msgstr "Überprüfen Sie nun Ihren Kommentar"
+
+#: app/views/comment/preview.rhtml:10
msgid ""
-"If your browser is set to accept cookies and you are seeing this message,\n"
-"then there is probably a fault with our server."
+"Your name and annotation will appear in <strong>search engines</strong>."
msgstr ""
-"Sollte Ihr Browser Cookies zulassen und Sie trotzdem diese Nachricht "
-"erhalten, gibt es wahrscheinlich ein Problem mit unserem Server."
+"Ihr Name und Ihr Kommentar wird in <strong>Suchmaschinen</strong>.angezeigt "
+"werden. "
-#: locale/model_attributes.rb:63
-msgid "IncomingMessage|Cached attachment text clipped"
-msgstr ""
+#: app/views/comment/preview.rhtml:20
+msgid "Re-edit this annotation"
+msgstr "Anmerkung erneut bearbeiten"
-#: locale/model_attributes.rb:64
-msgid "IncomingMessage|Cached main body text folded"
-msgstr ""
+#: app/views/comment/preview.rhtml:21
+msgid "Post annotation"
+msgstr "Anmerkung hinzufügen"
-#: locale/model_attributes.rb:65
-msgid "IncomingMessage|Cached main body text unfolded"
-msgstr ""
+#: app/views/contact_mailer/message.rhtml:4
+msgid "Message sent using {{site_name}} contact form, "
+msgstr "Nachricht gesendet über {{site_name}} Kontaktformular, "
-#: locale/model_attributes.rb:44
-msgid "InfoRequestEvent|Calculated state"
-msgstr ""
+#: app/views/contact_mailer/message.rhtml:7
+msgid "Last request viewed: "
+msgstr "Zuletzt angesehene Anfrage:"
-#: locale/model_attributes.rb:43
-msgid "InfoRequestEvent|Described state"
+#: app/views/contact_mailer/message.rhtml:10
+msgid "Last authority viewed: "
+msgstr "Zuletzt angesehene Behörde: "
+
+#: app/views/contact_mailer/user_message.rhtml:2
+msgid "{{user_name}} has used {{site_name}} to send you the message below."
msgstr ""
+"{{user_name}} hat {{site_name}} verwendet, um Ihnen die unten angezeigte "
+"Nachricht zu senden."
-#: locale/model_attributes.rb:41
-msgid "InfoRequestEvent|Event type"
+#: app/views/contact_mailer/user_message.rhtml:3
+msgid ""
+"Your details have not been given to anyone, unless you choose to reply to this\n"
+"message, which will then go directly to the person who wrote the message."
msgstr ""
+"Ihre Details wurden nicht weitergegeben, ausser wenn Sie sich entschieden "
+"haben auf diese Nachricht zu antworten. Ihre Antwort geht dann direkt an die"
+" Person, welche die Nachricht geschrieben hat. "
-#: locale/model_attributes.rb:45
-msgid "InfoRequestEvent|Last described at"
+#: app/views/contact_mailer/user_message.rhtml:10
+msgid "View Freedom of Information requests made by {{user_name}}:"
+msgstr "Sehen Sie die durch {{user_name}} gestellten IFG-Anfragen an:"
+
+#: app/views/general/_advanced_search_tips.rhtml:3
+msgid "Advanced search tips"
+msgstr "Tipps zur erweiterten Suchanfrage"
+
+#: app/views/general/_advanced_search_tips.rhtml:5
+msgid ""
+"Enter words that you want to find separated by spaces, e.g. <strong>climbing"
+" lane</strong>"
+msgstr "Trennen Sie Ihre Suchbegriffen durch Leerzeichen"
+
+#: app/views/general/_advanced_search_tips.rhtml:6
+msgid ""
+"Use OR (in capital letters) where you don't mind which word, e.g. "
+"<strong><code>commons OR lords</code></strong>"
msgstr ""
+"Nutzen Sie ODER (in Großbuchstaben) wo es Ihnen gleich ist, welches Wort "
+"verwendet wird, z.B. <strong><code>Komission ODER Ausschuss</code></strong>"
-#: locale/model_attributes.rb:42
-msgid "InfoRequestEvent|Params yaml"
+#: app/views/general/_advanced_search_tips.rhtml:7
+msgid ""
+"Use quotes when you want to find an exact phrase, e.g. "
+"<strong><code>\"Liverpool City Council\"</code></strong>"
msgstr ""
+"Verwenden Sie Anführungszeichen, e.g. <strong><code>\"Europäischer "
+"Bürgerbeauftragter\"</code></strong>"
-#: locale/model_attributes.rb:46
-msgid "InfoRequestEvent|Prominence"
+#: app/views/general/_advanced_search_tips.rhtml:8
+msgid ""
+"<strong><code>status:</code></strong> to select based on the status or "
+"historical status of the request, see the <a href=\"{{statuses_url}}\">table"
+" of statuses</a> below."
msgstr ""
+"<strong><code>Status:</code></strong> um eine Auswahl nach Status oder "
+"historischem Status der Anfrage zu treffen, gehen Sie zur unten "
+"angezeigten<a href=\"{{statuses_url}}\">Statusübersicht</a> ."
-#: locale/model_attributes.rb:86
-msgid "InfoRequest|Allow new responses from"
+#: app/views/general/_advanced_search_tips.rhtml:9
+msgid ""
+"<strong><code>variety:</code></strong> to select type of thing to search "
+"for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
msgstr ""
+"<strong><code>variety:</code></strong> um Mögliche Suchoptionen zu wählen, "
+"gehen Sie zur unten angezeigten <a "
+"href=\"{{varieties_url}}\">Auswahlansich</a> ."
-#: locale/model_attributes.rb:82
-msgid "InfoRequest|Awaiting description"
+#: app/views/general/_advanced_search_tips.rhtml:10
+msgid ""
+"<strong><code>requested_from:home_office</code></strong> to search requests "
+"from the Home Office, typing the name as in the URL."
msgstr ""
+"<strong><code>angefragt durch:home_office</code></strong>um Anfragen vom "
+"Home Office zu suchen, den Namen wie in der URL eingebend."
-#: locale/model_attributes.rb:81
-msgid "InfoRequest|Described state"
+#: app/views/general/_advanced_search_tips.rhtml:11
+msgid ""
+"<strong><code>requested_by:julian_todd</code></strong> to search requests "
+"made by Julian Todd, typing the name as in the URL."
msgstr ""
+"<strong><code>angefragt_durch:julian_todd</code></strong>um Anfragen von "
+"Julian Todd zu suchen, den Namen wie in der URL eingebend."
-#: locale/model_attributes.rb:87
-msgid "InfoRequest|Handle rejected responses"
+#: app/views/general/_advanced_search_tips.rhtml:12
+msgid ""
+"<strong><code>commented_by:tony_bowden</code></strong> to search annotations"
+" made by Tony Bowden, typing the name as in the URL."
msgstr ""
+"<strong><code>kommentiert_durch:tony_bowden</code></strong> um Kommentare "
+"von Tony Bowden zu suche, den Namen wie in der URL eingebend."
-#: locale/model_attributes.rb:85
-msgid "InfoRequest|Law used"
+#: app/views/general/_advanced_search_tips.rhtml:13
+msgid ""
+"<strong><code>request:</code></strong> to restrict to a specific request, "
+"typing the title as in the URL."
msgstr ""
+"<strong><code>Anfrage:</code></strong> um die Suchanfrage zu begrenzen, "
+"geben Sie den Titel wie in der URL ein."
-#: locale/model_attributes.rb:83
-msgid "InfoRequest|Prominence"
+#: app/views/general/_advanced_search_tips.rhtml:14
+msgid ""
+"<strong><code>filetype:pdf</code></strong> to find all responses with PDF "
+"attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
msgstr ""
+"<strong><code>Dateityp:PDF</code></strong> um alle Antworten mit PDF-Anhang "
+"zu finden. Oder versuchen Sie es hiermit: "
+"<code>{{list_of_file_extensions}}</code>"
-#: locale/model_attributes.rb:80
-msgid "InfoRequest|Title"
+#: app/views/general/_advanced_search_tips.rhtml:15
+msgid ""
+"Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show "
+"things that happened in the first two weeks of January."
msgstr ""
+"Geben Sie <strong><code>01/01/2008..14/01/2008</code></strong> ein, um "
+"ausschliesslich Vorgänge aus diesem Zeitraum anzuzeigen."
-#: locale/model_attributes.rb:84
-msgid "InfoRequest|Url title"
+#: app/views/general/_advanced_search_tips.rhtml:16
+msgid ""
+"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n"
+" and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n"
+" can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
msgstr ""
+"<strong><code>markieren Sie:Karitas</code></strong>, um alle Behörden oder Anfragen mit dieser Markierung zu finden. Sie können mehrere Markierungen, \n"
+" and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n"
+" can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
-#: app/models/info_request_event.rb:303
-msgid "Information not held"
-msgstr "Information nicht verfügbar"
+#: app/views/general/_advanced_search_tips.rhtml:19
+msgid ""
+"Read about <a href=\"{{advanced_search_url}}\">advanced search "
+"operators</a>, such as proximity and wildcards."
+msgstr ""
+"Lesen Sie mehr über <a href=\"{{advanced_search_url}}\">Anbieter erweiterter"
+" Suchfunktionen</a>, wie proximity and wildcards."
-#: app/models/info_request.rb:791
-msgid "Information not held."
-msgstr "Information nicht verfügbr"
+#: app/views/general/_advanced_search_tips.rhtml:22
+msgid "Table of statuses"
+msgstr "Statusliste"
-#: app/views/request/new.rhtml:71
+#: app/views/general/_advanced_search_tips.rhtml:23
msgid ""
-"Information on emissions and discharges (e.g. noise, energy,\n"
-" radiation, waste materials)"
+"All the options below can use <strong>status</strong> or "
+"<strong>latest_status</strong> before the colon. For example, "
+"<strong>status:not_held</strong> will match requests which have "
+"<em>ever</em> been marked as not held; "
+"<strong>latest_status:not_held</strong> will match only requests that are "
+"<em>currently</em> marked as not held."
msgstr ""
-"Informationen über emissions and discharges (e.g. noise, energy,\n"
-" radiation, waste materials)"
-#: app/models/info_request_event.rb:311
-msgid "Internal review acknowledgement"
+#: app/views/general/_advanced_search_tips.rhtml:26
+msgid "Waiting for the public authority to reply"
+msgstr "Antwort der Behörde wird erwartet"
+
+#: app/views/general/_advanced_search_tips.rhtml:27
+msgid "The public authority does not have the information requested"
+msgstr "Der Behörde liegen die angefragten Informationen nicht vor. "
+
+#: app/views/general/_advanced_search_tips.rhtml:28
+msgid "The request was refused by the public authority"
+msgstr "Die Anfrage wurde von der Behörde abgelehnt"
+
+#: app/views/general/_advanced_search_tips.rhtml:29
+msgid "Some of the information requested has been received"
+msgstr "Ein Teil der angefragten Informationen wurde erhalten."
+
+#: app/views/general/_advanced_search_tips.rhtml:30
+msgid "All of the information requested has been received"
+msgstr "Die angefragten Informationen wurden vollständig empfangen"
+
+#: app/views/general/_advanced_search_tips.rhtml:31
+msgid "The public authority would like part of the request explained"
msgstr ""
+"Die Behörde würde gerne weitere Erläuterungen zu einem Teil der Anfrage "
+"erhalten."
-#: app/models/info_request_event.rb:328
-msgid "Internal review request"
-msgstr "Anfrage zur internen Prüfung"
+#: app/views/general/_advanced_search_tips.rhtml:32
+msgid "The public authority would like to / has responded by post"
+msgstr "Die Behörde würde gerne / hat Ihnen postalisch geantwortet"
-#: app/views/outgoing_mailer/initial_request.rhtml:8
+#: app/views/general/_advanced_search_tips.rhtml:33
msgid ""
-"Is {{email_address}} the wrong address for {{type_of_request}} requests to "
-"{{public_body_name}}? If so, please contact us using this form:"
+"Waiting for the public authority to complete an internal review of their "
+"handling of the request"
msgstr ""
-"Ist {{email_address}} die falsche Email-Adresse für {{type_of_request}} "
-"Anfragen an {{public_body_name}}? Sollte dies der Fall sein, so kontaktieren"
-" Sie uns bitte über dieses Formular:"
+"Die Fertigstellung einer internen Prüfung der Bearbeitungsweise Ihrer "
+"Anfrage durch die Behörde wird erwartet"
-#: app/views/user/no_cookies.rhtml:8
-msgid ""
-"It may be that your browser is not set to accept a thing called \"cookies\",\n"
-"or cannot do so. If you can, please enable cookies, or try using a different\n"
-"browser. Then press refresh to have another go."
+#: app/views/general/_advanced_search_tips.rhtml:34
+msgid "Received an error message, such as delivery failure."
+msgstr "Fehlermeldung, wie z.B. Sendefehler, erhalten. "
+
+#: app/views/general/_advanced_search_tips.rhtml:35
+msgid "A strange reponse, required attention by the {{site_name}} team"
msgstr ""
+"Eine merkwürdige Antwort benötigte die Aufmerksamkeit des {{site_name}} "
+"Teams"
-#: app/views/user/_user_listing_single.rhtml:21
-msgid "Joined in"
-msgstr "Angemeldet"
+#: app/views/general/_advanced_search_tips.rhtml:36
+msgid "The requester has abandoned this request for some reason"
+msgstr ""
+"Der Anfragensteller hat die Anfrage aus unbekannten Gründen zurückgezogen. "
-#: app/views/user/show.rhtml:62
-msgid "Joined {{site_name}} in"
+#: app/views/general/_advanced_search_tips.rhtml:39
+msgid "Table of varieties"
msgstr ""
-#: app/views/request/new.rhtml:48
+#: app/views/general/_advanced_search_tips.rhtml:40
msgid ""
-"Keep it <strong>focused</strong>, you'll be more likely to get what you want"
-" (<a href=\"%s\">why?</a>)."
+"All the options below can use <strong>variety</strong> or "
+"<strong>latest_variety</strong> before the colon. For example, "
+"<strong>variety:sent</strong> will match requests which have <em>ever</em> "
+"been sent; <strong>latest_variety:sent</strong> will match only requests "
+"that are <em>currently</em> marked as sent."
msgstr ""
-"Machen Sie es <strong>kurz und bündig</strong>, die Wahrscheinlichkeit die "
-"gewünschten Informationen zu erhalten ist somit größer(<a "
-"href=\"%s\">Warum?</a>)."
-#: app/views/contact_mailer/message.rhtml:10
-msgid "Last authority viewed: "
-msgstr "Zuletzt angesehene Behörde: "
+#: app/views/general/_advanced_search_tips.rhtml:42
+msgid "Original request sent"
+msgstr "Ursprüngliche Anfrage gesendet"
-#: app/views/contact_mailer/message.rhtml:7
-msgid "Last request viewed: "
-msgstr "Zuletzt angesehene Anfrage:"
+#: app/views/general/_advanced_search_tips.rhtml:43
+msgid "Follow up message sent by requester"
+msgstr "Nachfrage durch Anfragensteller gesendet"
-#: app/views/user/no_cookies.rhtml:17
-msgid ""
-"Let us know what you were doing when this message\n"
-"appeared and your browser and operating system type and version."
-msgstr ""
-"Teilen Sie uns mit bei welchem Vorgang diese Nachricht angezeigt wurde, also"
-" auch den Namen Ihres Browsers, und den Namen und die Version Ihres "
-"Betriebssystems."
+#: app/views/general/_advanced_search_tips.rhtml:44
+msgid "Response from a public authority"
+msgstr "Antwort von einer Behörde"
-#: app/views/request/_correspondence.rhtml:27
-#: app/views/request/_correspondence.rhtml:57
-msgid "Link to this"
-msgstr ""
+#: app/views/general/_advanced_search_tips.rhtml:45
+msgid "Annotation added to request"
+msgstr "Anfrage wurde kommentiert"
-#: app/views/public_body/list.rhtml:32
-msgid "List of all authorities (CSV)"
-msgstr "Liste aller Behörden (CSV)"
+#: app/views/general/_advanced_search_tips.rhtml:46
+msgid "A public authority"
+msgstr "Eine Behörde"
-#: lib/public_body_categories_en.rb:23
-msgid "Local and regional"
-msgstr "Örtlich und regional"
+#: app/views/general/_advanced_search_tips.rhtml:47
+msgid "A {{site_name}} user"
+msgstr "Ein/Eine {{site_name}} Benutzer/in"
-#: app/models/info_request.rb:789
-msgid "Long overdue."
-msgstr "Stark verspätet."
+#: app/views/general/_credits.rhtml:1
+msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
+msgstr "Unterstützt von <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
-#: app/views/public_body/show.rhtml:47
-msgid "Make a new Environmental Information request"
-msgstr "Stellen Sie eine neue Umweltanfrage"
+#: app/views/general/_footer.rhtml:2
+msgid "Contact {{site_name}}"
+msgstr "Kontaktieren Sie {{site_name}}"
-#: app/views/request/new.rhtml:1
-msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
-msgstr "Stellen Sie einen {{law_used_short}} Antrag an '{{public_body_name}}'"
+#: app/views/general/_footer.rhtml:3 app/views/general/blog.rhtml:7
+msgid "Follow us on twitter"
+msgstr "Folgen Sie uns auf Twitter"
-#: app/views/layouts/default.rhtml:15
-msgid "Make and browse Freedom of Information (FOI) requests"
-msgstr ""
-"Hier können Sie Anfragen an das Informationsgesetz (IFG)stellen und "
-"bestehende Anfragen durchsuchen"
+#: app/views/general/_localised_datepicker.rhtml:4
+msgid "Done"
+msgstr "Erledigt"
-#: app/views/layouts/default.rhtml:67
-msgid "Make and explore Freedom of Information requests"
+#: app/views/general/_localised_datepicker.rhtml:5
+msgid "Prev"
msgstr ""
-"Hier können Sie Informationsfreiheitsanfragen stellen und bestehende "
-"Anfragen durchsuchen"
-#: app/views/general/frontpage.rhtml:4
-msgid "Make or explore Freedom of Information requests"
+#: app/views/general/_localised_datepicker.rhtml:6
+msgid "Next"
+msgstr "Folgende/r"
+
+#: app/views/general/_localised_datepicker.rhtml:7
+msgid "Today"
+msgstr "Heute"
+
+#: app/views/general/_localised_datepicker.rhtml:13
+msgid "Wk"
msgstr ""
-"Hier können Sie Informationsfreiheitsanfragen stellen oder bestehende "
-"Anfragen durchsuchen"
-#: app/views/layouts/default.rhtml:87
-msgid "Make request"
+#: app/views/general/_topnav.rhtml:3
+msgid "Home"
+msgstr "Home"
+
+#: app/views/general/_topnav.rhtml:4
+msgid "Make a request"
msgstr "Anfrage stellen"
-#: app/views/public_body/_body_listing_single.rhtml:23
-msgid "Make your own request"
-msgstr "Eigene Anfrage stellen"
+#: app/views/general/_topnav.rhtml:5
+msgid "View requests"
+msgstr "Anfragen ansehen"
-#: app/views/contact_mailer/message.rhtml:4
-msgid "Message sent using {{site_name}} contact form, "
-msgstr ""
+#: app/views/general/_topnav.rhtml:6
+msgid "View authorities"
+msgstr "Behörden ansehen"
-#: app/views/request/new_bad_contact.rhtml:1
-msgid "Missing contact details for '"
-msgstr "Folgende Kontaktdetails fehlen:"
+#: app/views/general/_topnav.rhtml:7
+msgid "Read blog"
+msgstr "Blog lesen"
-#: app/views/public_body/show.rhtml:5
-msgid "More about this authority"
-msgstr "Weitere Informationen zu dieser Behörde"
+#: app/views/general/_topnav.rhtml:8
+msgid "Help"
+msgstr "Hilfe"
-#: app/views/general/frontpage.rhtml:41
-msgid "More authorities..."
-msgstr "Weitere Behörden"
+#: app/views/general/blog.rhtml:1
+msgid "{{site_name}} blog and tweets"
+msgstr "{{site_name}} Blog und Tweets"
-#: app/views/general/frontpage.rhtml:55
-msgid "More successful requests..."
-msgstr "Weitere erfolgreiche Anfragen"
+#: app/views/general/blog.rhtml:6
+msgid "Stay up to date"
+msgstr "Bleiben Sie auf dem Laufenden"
-#: app/views/request/_describe_state.rhtml:64
-msgid "My request has been <strong>refused</strong>"
-msgstr "Meine Anfrage wurde <strong>abgelehnt</strong>"
+#: app/views/general/blog.rhtml:8
+msgid "Subscribe to blog"
+msgstr "Blog folgen"
-#: app/views/layouts/default.rhtml:91
-msgid "My requests"
-msgstr "Meine Anfragen "
+#: app/views/general/blog.rhtml:53
+msgid "Posted on {{date}} by {{author}}"
+msgstr "Verfasst am {{date}} durch {{author}}"
-#: app/models/public_body.rb:36
-msgid "Name can't be blank"
-msgstr "Name muss eingegeben werden "
+#: app/views/general/blog.rhtml:56
+msgid "{{number_of_comments}} comments"
+msgstr "{{number_of_comments}} Kommentare"
-#: app/models/public_body.rb:40
-msgid "Name is already taken"
-msgstr "Benutzername vergeben"
+#: app/views/general/exception_caught.rhtml:3
+msgid "Sorry, we couldn't find that page"
+msgstr "Diese Seite wurde leider nicht gefunden"
-#: app/models/track_thing.rb:142 app/models/track_thing.rb:143
-msgid "New Freedom of Information requests"
+#: app/views/general/exception_caught.rhtml:5
+msgid "The page doesn't exist. Things you can try now:"
+msgstr "Die Seite existiert nicht. Was Sie nun versuchen können:"
+
+#: app/views/general/exception_caught.rhtml:8
+msgid "Check for mistakes if you typed or copied the address."
msgstr ""
+"Sollten Sie die Adresse eingegeben oder kopiert haben, überprüfen Sie diese "
+"auf Fehler."
-#: app/views/user/signchangeemail.rhtml:20
-msgid "New e-mail:"
-msgstr "Neue Email:"
+#: app/views/general/exception_caught.rhtml:9
+msgid "Search the site to find what you were looking for."
+msgstr ""
+"Duchsuchen Sie die Seite, um die von Ihnen gewünschten Informationen zu "
+"finden. "
-#: app/models/change_email_validator.rb:53
-msgid "New email doesn't look like a valid address"
-msgstr "Die neue Email-Adresse scheint ungültig"
+#: app/views/general/exception_caught.rhtml:12
+#: app/views/general/frontpage.rhtml:23 app/views/general/search.rhtml:32
+#: app/views/general/search.rhtml:45 app/views/public_body/list.rhtml:42
+#: app/views/request/_request_filter_form.rhtml:49
+#: app/views/request/select_authority.rhtml:41
+msgid "Search"
+msgstr "Suche"
-#: app/views/user/signchangepassword.rhtml:15
-msgid "New password:"
-msgstr "Neues Passwort:"
+#: app/views/general/exception_caught.rhtml:17
+msgid "Sorry, there was a problem processing this page"
+msgstr "Sorry, bei der Übermittlung dieser Seite sind Probleme aufgetreten"
-#: app/views/user/signchangepassword.rhtml:20
-msgid "New password: (again)"
-msgstr "Neues Passwort: (erneut eingeben)"
+#: app/views/general/exception_caught.rhtml:18
+msgid ""
+"You have found a bug. Please <a href=\"{{contact_url}}\">contact us</a> to "
+"tell us about the problem"
+msgstr ""
+"Sie haben einen Fehler gefunden. Bitte <a "
+"href=\"{{contact_url}}\">kontaktieren Sie uns</a>, um uns das Problem zu "
+"schildern"
-#: app/views/request/show_response.rhtml:62
-msgid "New response to your request"
-msgstr "Neue Antwort auf Ihre Anfrage"
+#: app/views/general/exception_caught.rhtml:21
+msgid "Technical details"
+msgstr "Technische Details"
-#: app/views/request/show_response.rhtml:68
-msgid "New response to {{law_used_short}} request"
-msgstr "Neue Antwort auf {{law_used_short}} Anfrage"
+#: app/views/general/exception_caught.rhtml:22
+msgid "Unknown"
+msgstr "Unbekannt"
-#: app/views/general/search.rhtml:40
-msgid "Newest results first"
-msgstr "Aktuellste Ergebnisse zuerst anzeigen"
+#: app/views/general/frontpage.rhtml:5
+msgid ""
+"Make a new<br/>\n"
+" <strong>Freedom <span>of</span><br/>\n"
+" Information<br/>\n"
+" request</strong>"
+msgstr ""
+"Stellen Sie eine neue<br/>\n"
+" <strong>Informationsfreiheitsanfrage</strong>"
-#: app/views/user/set_draft_profile_photo.rhtml:32
-msgid "Next, crop your photo &gt;&gt;"
+#: app/views/general/frontpage.rhtml:10
+msgid "Start now &raquo;"
msgstr ""
-#: app/views/general/search.rhtml:16
-msgid "Next, select the public authority you'd like to make the request from."
+#: app/views/general/frontpage.rhtml:15
+msgid ""
+"Search over<br/>\n"
+" <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\n"
+" <strong>{{number_of_authorities}} authorities</strong>"
msgstr ""
-"Nächster Schritt: Wählen Sie die Behörde, an welche Sie eine Anfrage senden "
-"möchten. "
+"Suchen Sie in mehr als<br/>\n"
+" <strong>{{number_of_requests}} Anfragen</strong> <span>und</span><br/>\n"
+" <strong>{{number_of_authorities}} Behörden</strong>"
-#: app/views/general/search.rhtml:48
-msgid "No public authorities found"
-msgstr "Keine Behörde gefunden"
+#: app/views/general/frontpage.rhtml:37
+msgid "Who can I request information from?"
+msgstr "Von wem kann ich Informationen anfragen?"
-#: app/views/request/list.rhtml:23
-msgid "No requests of this sort yet."
-msgstr "Es besteht noch keine Anfrage dieser Art."
+#: app/views/general/frontpage.rhtml:38
+msgid ""
+"{{site_name}} covers requests to {{number_of_authorities}} authorities, "
+"including:"
+msgstr ""
+"{{site_name}} beinhaltet Anfragen an {{number_of_authorities}} Behörden, "
+"einschliesslich:"
-#: app/views/request/similar.rhtml:7
-msgid "No similar requests found."
-msgstr "Keine vergleichbaren Anfragen gefunden. "
+#: app/views/general/frontpage.rhtml:43
+msgid "%d request"
+msgid_plural "%d requests"
+msgstr[0] "%d Anfrage"
+msgstr[1] "%d Anfragen"
-#: app/views/public_body/show.rhtml:73
+#: app/views/general/frontpage.rhtml:48
+msgid "Browse all authorities..."
+msgstr "Durchsuchen Sie alle Behörden"
+
+#: app/views/general/frontpage.rhtml:54
+msgid "What information has been released?"
+msgstr "Welche Informationen wurden veröffentlicht?"
+
+#: app/views/general/frontpage.rhtml:55
msgid ""
-"Nobody has made any Freedom of Information requests to {{public_body_name}} "
-"using this site yet."
+"{{site_name}} users have made {{number_of_requests}} requests, including:"
msgstr ""
-"Bisher hat niemand eine Anfrage an {{public_body_name}} über diese Seite "
-"gestellt."
+"{{site_name}} Benutzer haben {{number_of_requests}} Anfragen gestellt, u.a.:"
-#: app/views/public_body/_body_listing.rhtml:2
-#: app/views/request/_request_listing.rhtml:2
-msgid "None found."
-msgstr "Keine gefunden."
+#: app/views/general/frontpage.rhtml:60
+msgid "answered a request about"
+msgstr "eine Anfrage beantwortet über"
-#: app/views/user/signchangeemail_confirm.rhtml:3
-#: app/views/user/signchangepassword_confirm.rhtml:1
-#: app/views/user/signchangepassword_confirm.rhtml:3
-msgid "Now check your email!"
-msgstr "Rufen Sie nun Ihre Emails ab. "
-
-#: app/views/comment/preview.rhtml:5
-msgid "Now preview your annotation"
-msgstr "Überprüfen Sie Ihre Anfrage"
+#: app/views/general/frontpage.rhtml:62
+msgid "{{length_of_time}} ago"
+msgstr "vor {{length_of_time}} "
-#: app/views/request/followup_preview.rhtml:10
-msgid "Now preview your follow up"
-msgstr "Überprüfen Sie nun Ihr Follow-up"
+#: app/views/general/frontpage.rhtml:67
+msgid "More successful requests..."
+msgstr "Weitere erfolgreiche Anfragen"
-#: app/views/request/followup_preview.rhtml:8
-msgid "Now preview your message asking for an internal review"
-msgstr "Überprüfen Sie nun Ihre Anfrage zur internen Prüfung"
+#: app/views/general/search.rhtml:8
+msgid "Search Freedom of Information requests, public authorities and users"
+msgstr "Suchen Sie nach Informationsfreiheitsanfragen, Behörden und Nutzern"
-#: app/views/request/preview.rhtml:5
-msgid "Now preview your request"
-msgstr "Überprüfen Sie Ihre Anfrage"
+#: app/views/general/search.rhtml:10 app/views/public_body/show.rhtml:109
+msgid "There were no requests matching your query."
+msgstr "Es gab keine zu Ihrer Suche passenden Anfragen."
-#: app/views/user/set_draft_profile_photo.rhtml:46
-msgid "OR remove the existing photo"
-msgstr "OR entfernen Sie das bestehende Photo"
+#: app/views/general/search.rhtml:12
+msgid "Results page {{page_number}}"
+msgstr "Ergebnisanzeige {{page_number}}"
-#: app/views/general/frontpage.rhtml:25
+#: app/views/general/search.rhtml:24
msgid ""
-"OR, <strong>search</strong> for information others have requested using "
-"{{site_name}}"
+"To use the advanced search, combine phrases and labels as described in the "
+"search tips below."
msgstr ""
-"oder <strong>suchen Sie</strong> nach Informationen, welche von anderne "
-"Nutzern angefragt wurden. {{site_name}}"
+"Um die erweiterte Suchoption zu nutzen, kombinieren Sie Formulierungen und "
+"Kennzeichen, wie in den unten aufgeführten Suchhinweisen beschrieben. "
-#: app/controllers/request_controller.rb:414
-msgid ""
-"Oh no! Sorry to hear that your request was refused. Here is what to do now."
-msgstr ""
-"Oh nein! Es tut uns leid zu hören, dass Ihre Anfrage abgelehnt wurde. Lesen "
-"Sie hier was Sie nun tun können. "
+#: app/views/general/search.rhtml:33
+msgid "Simple search"
+msgstr "Einfache Suche"
-#: app/views/user/signchangeemail.rhtml:15
-msgid "Old e-mail:"
-msgstr "Alte Emailadresse: "
+#: app/views/general/search.rhtml:46
+msgid "Advanced search"
+msgstr "Erweiterte Suche"
-#: app/models/change_email_validator.rb:44
-msgid ""
-"Old email address isn't the same as the address of the account you are "
-"logged in with"
-msgstr ""
+#: app/views/general/search.rhtml:51
+#: app/views/request/_request_filter_form.rhtml:29
+msgid "Showing"
+msgstr "Anzeigen"
-#: app/models/change_email_validator.rb:39
-msgid "Old email doesn't look like a valid address"
-msgstr ""
+#: app/views/general/search.rhtml:56
+msgid "everything"
+msgstr "alles"
-#: app/views/user/show.rhtml:32
-msgid "On this page"
-msgstr "Auf dieser Seite"
+#: app/views/general/search.rhtml:75
+msgid "Tags (separated by a space):"
+msgstr "Tags (mit Leerzeichen getrennt):"
-#: app/views/general/search.rhtml:71
-msgid "One public authority matching &#x2018;{{user_search_query}}&#x2019;"
-msgstr "Eine zutreffende Behörde &#x2018;{{user_search_query}}&#x2019;"
+#: app/views/general/search.rhtml:87
+msgid "Restrict to"
+msgstr "Vorbehalten für"
-#: app/views/public_body/show.rhtml:91
-msgid "Only requests made using {{site_name}} are shown."
-msgstr ""
-"Es werden ausschliesslich Anfragen zu folgendem Sucheintrag angezeit: "
-"{{site_name}} "
+#: app/views/general/search.rhtml:88
+#: app/views/request/_request_filter_form.rhtml:31
+msgid "successful requests"
+msgstr "erfolgreiche Anfragen"
-#: app/models/info_request.rb:405
-msgid ""
-"Only the authority can reply to this request, and I don't recognise the "
-"address this reply was sent from"
-msgstr ""
+#: app/views/general/search.rhtml:89
+#: app/views/request/_request_filter_form.rhtml:32
+msgid "unsuccessful requests"
+msgstr "nicht erfolgreiche Anfragen"
-#: app/models/info_request.rb:401
-msgid ""
-"Only the authority can reply to this request, but there is no \"From\" "
-"address to check against"
-msgstr ""
+#: app/views/general/search.rhtml:90
+#: app/views/request/_request_filter_form.rhtml:33
+msgid "unresolved requests"
+msgstr "ungelöste Anfragen"
-#: app/views/general/search.rhtml:158
-msgid "Original request sent"
-msgstr ""
+#: app/views/general/search.rhtml:91
+msgid "internal reviews"
+msgstr "interne Prüfung"
-#: locale/model_attributes.rb:26
-msgid "OutgoingMessage|Body"
-msgstr ""
+#: app/views/general/search.rhtml:100
+msgid "Search in"
+msgstr "Suchen Sie in"
-#: locale/model_attributes.rb:29
-msgid "OutgoingMessage|Last sent at"
-msgstr ""
+#: app/views/general/search.rhtml:101
+#: app/views/request/_request_filter_form.rhtml:12
+msgid "messages from users"
+msgstr "Nachrichten von Nutzern"
-#: locale/model_attributes.rb:28
-msgid "OutgoingMessage|Message type"
-msgstr ""
+#: app/views/general/search.rhtml:102
+#: app/views/request/_request_filter_form.rhtml:13
+msgid "messages from authorities"
+msgstr "Nachrichten von Behörden"
-#: locale/model_attributes.rb:27
-msgid "OutgoingMessage|Status"
-msgstr ""
+#: app/views/general/search.rhtml:129
+msgid "Show most relevant results first"
+msgstr "Relevanteste Suchergebnisse zuerst anzeigen "
-#: locale/model_attributes.rb:30
-msgid "OutgoingMessage|What doing"
-msgstr ""
+#: app/views/general/search.rhtml:131
+msgid "Newest results first"
+msgstr "Aktuellste Ergebnisse zuerst anzeigen"
-#: app/models/info_request.rb:795
-msgid "Partially successful."
-msgstr "Teilweise erfolgreich. "
+#: app/views/general/search.rhtml:133
+msgid "Recently described results first"
+msgstr "Kürzlich widergegebene Ergebnisse zuerst"
-#: app/models/change_email_validator.rb:47
-msgid "Password is not correct"
-msgstr "falsches Passwort"
+#: app/views/general/search.rhtml:156
+msgid "One public authority found"
+msgstr "Eine Behörde gefunden"
-#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30
-msgid "Password:"
-msgstr "Passwort:"
+#: app/views/general/search.rhtml:158
+msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr "Behörde {{start_count}} bis {{end_count}} von {{total_count}}"
-#: app/views/user/_signup.rhtml:35
-msgid "Password: (again)"
-msgstr "Passwort: (nochmal eingeben)"
+#: app/views/general/search.rhtml:169
+msgid "No public authorities found"
+msgstr "Keine Behörde gefunden"
-#: app/views/user/set_draft_profile_photo.rhtml:13
-msgid "Photo of you:"
-msgstr "Ihr Profilbild:"
+#: app/views/general/search.rhtml:171
+msgid "Did you mean: {{correction}}"
+msgstr "Meinten Sie: {{correction}}"
-#: app/views/request/new.rhtml:76
-msgid "Plans and administrative measures that affect these matters"
+#: app/views/general/search.rhtml:173
+msgid "<a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add one</a>."
msgstr ""
+"<a href=\"%s\">Alle durchsuchen</a> or <a href=\"%s\">bitten Sie uns eine "
+"hinzuzufügen</a>."
-#: app/controllers/request_game_controller.rb:42
-msgid "Play the request categorisation game"
-msgstr ""
+#: app/views/general/search.rhtml:180
+msgid "One person found"
+msgstr "Eine Person gefunden"
-#: app/views/request_game/play.rhtml:1 app/views/request_game/play.rhtml:30
-msgid "Play the request categorisation game!"
-msgstr ""
+#: app/views/general/search.rhtml:182
+msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr "Leute {{start_count}} bis {{end_count}} von {{total_count}}"
-#: app/views/request/show.rhtml:101
-msgid "Please"
-msgstr "Bitte"
+#: app/views/general/search.rhtml:196
+msgid "One FOI request found"
+msgstr "Eine IFG-Anfrage gefunden"
-#: app/views/user/no_cookies.rhtml:15
-msgid "Please <a href=\"%s\">get in touch</a> with us so we can fix it."
-msgstr ""
-"Bitte<a href=\"%s\">nehmen Sie Kontakt mit uns auf</a>, damit wir das "
-"Problem beheben können. "
+#: app/views/general/search.rhtml:198
+msgid "FOI requests {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr "IFG-Anfragen {{start_count}} bis {{end_count}} von {{total_count}}"
-#: app/views/request/show.rhtml:52
-msgid ""
-"Please <strong>answer the question above</strong> so we know whether the "
+#: app/views/help/alaveteli.rhtml:6
+msgid "Would you like to see a website like this in your country?"
msgstr ""
-"Bitte <strong>beantworten Sie die oben angezeigte Frage</strong>, damit wir "
-"wissen ob"
+"Würden Sie eine solche Internetseite gerne für Ihr eigenes Land sehen?"
-#: app/views/user/show.rhtml:12
-msgid ""
-"Please <strong>go to the following requests</strong>, and let us\n"
-" know if there was information in the recent responses to them."
+#: app/views/layouts/default.rhtml:15 app/views/layouts/no_chrome.rhtml:8
+msgid "Make and browse Freedom of Information (FOI) requests"
msgstr ""
+"Hier können Sie Anfragen an das Informationsgesetz (IFG)stellen und "
+"bestehende Anfragen durchsuchen"
-#: app/views/request/_followup.rhtml:27
-msgid ""
-"Please <strong>only</strong> write messages directly relating to your "
-"request {{request_link}}. If you would like to ask for information that was "
-"not in your original request, then <a href=\"{{new_request_link}}\">file a "
-"new request</a>."
-msgstr ""
+#: app/views/layouts/default.rhtml:102
+msgid "Hello, {{username}}!"
+msgstr "Hallo, {{username}}!"
-#: app/views/request/new.rhtml:60
-msgid "Please ask for environmental information only"
-msgstr "Bitte fragen Sie ausschliesslich nach Umweltinformationen"
+#: app/views/layouts/default.rhtml:105
+msgid "My profile"
+msgstr "Mein Profil"
-#: app/views/user/bad_token.rhtml:2
-msgid ""
-"Please check the URL (i.e. the long code of letters and numbers) is copied\n"
-"correctly from your email."
-msgstr ""
+#: app/views/layouts/default.rhtml:109
+msgid "Sign out"
+msgstr "Ausloggen"
-#: app/models/profile_photo.rb:91
-msgid "Please choose a file containing your photo."
-msgstr "Bitte wählen Sie eine Datei mit Ihrem Foto."
+#: app/views/layouts/default.rhtml:111
+msgid "Sign in or sign up"
+msgstr "Amelden oder registrieren "
-#: app/models/outgoing_message.rb:162
-msgid "Please choose what sort of reply you are making."
-msgstr "Bitte wählen Sie, welche Art von Antwort Sie geben."
+#: app/views/layouts/default.rhtml:152
+msgid "Paste this link into emails, tweets, and anywhere else:"
+msgstr ""
+"Nutzen Sie diesen Link in Emails, tweets und beliebigen weiteren Optionen:"
-#: app/controllers/request_controller.rb:346
+#: app/views/outgoing_mailer/_followup_footer.rhtml:1
msgid ""
-"Please choose whether or not you got some of the information that you "
-"wanted."
+"Disclaimer: This message and any reply that you make will be published on "
+"the internet. Our privacy and copyright policies:"
msgstr ""
-"Bitte wählen Sie ob Sie einige der erwünschten Informationen erhalten haben "
-"oder ob dies nicht der Fall ist. "
+"Haftungsausschluss: Diese Nachricht und alle Antworten werden im Internet veröffentlicht. \t\n"
+"Nutzungsbedingungen und Datenschutz:"
-#: app/views/user_mailer/changeemail_confirm.rhtml:3
+#: app/views/outgoing_mailer/_followup_footer.rhtml:4
msgid ""
-"Please click on the link below to confirm that you want to \n"
-"change the email address that you use for {{site_name}}\n"
-"from {{old_email}} to {{new_email}}"
+"If you find this service useful as an FOI officer, please ask your web "
+"manager to link to us from your organisation's FOI page."
msgstr ""
+"Falls Sie als IFGler diesen Service nützlich finden, bitten Sie bitte Ihren "
+"Webadministrator die IFG-Seite Ihrer Organisation mit uns zu verlinken."
-#: app/views/user_mailer/confirm_login.rhtml:3
-msgid "Please click on the link below to confirm your email address."
+#: app/views/outgoing_mailer/followup.rhtml:6
+#: app/views/outgoing_mailer/initial_request.rhtml:5
+msgid "Please use this email address for all replies to this request:"
msgstr ""
-"Klicken Sie auf den unten aufgeführten Link, um Ihre Emailadresse zu "
-"bestätigen."
+"Bitte nutzen Sie diese Emailadresse für alle Antworten auf diese Anfrage:"
-#: app/models/info_request.rb:126
+#: app/views/outgoing_mailer/initial_request.rhtml:8
msgid ""
-"Please describe more what the request is about in the subject. There is no "
-"need to say it is an FOI request, we add that on anyway."
+"Is {{email_address}} the wrong address for {{type_of_request}} requests to "
+"{{public_body_name}}? If so, please contact us using this form:"
msgstr ""
-"Bitte beschreiben Sie im Betreff, um was es in der Anfrage geht. Sie "
-"brauchen nicht sagen, dass es eine IFG-Anfrage ist, dies wird automatisch "
-"hinzugefügt."
+"Ist {{email_address}} die falsche Email-Adresse für {{type_of_request}} "
+"Anfragen an {{public_body_name}}? Sollte dies der Fall sein, so kontaktieren"
+" Sie uns bitte über dieses Formular:"
-#: app/views/user/set_draft_profile_photo.rhtml:22
-msgid ""
-"Please don't upload offensive pictures. We will take down images\n"
-" that we consider inappropriate."
+#: app/views/public_body/_body_listing.rhtml:3
+#: app/views/request/_request_listing.rhtml:2
+msgid "None found."
+msgstr "Keine gefunden."
+
+#: app/views/public_body/_body_listing_single.rhtml:12
+msgid "Also called {{other_name}}."
+msgstr "Auch {{other_name}} genannt."
+
+#: app/views/public_body/_body_listing_single.rhtml:21
+msgid "%d request made."
+msgid_plural "%d requests made."
+msgstr[0] "%d Anfragen gestellt."
+msgstr[1] "%d Anfragen gestellt."
+
+#: app/views/public_body/_body_listing_single.rhtml:23
+msgid "Make your own request"
+msgstr "Eigene Anfrage stellen"
+
+#: app/views/public_body/_body_listing_single.rhtml:27
+msgid "Added on {{date}}"
+msgstr "Hinzugefügt am {{date}}"
+
+#: app/views/public_body/_search_ahead.rhtml:3
+#: app/views/request/select_authority.rhtml:47
+msgid "Top search results:"
+msgstr "Beste Suchergebnisse:"
+
+#: app/views/public_body/_search_ahead.rhtml:5
+#: app/views/request/select_authority.rhtml:49
+msgid "Select one to see more information about the authority."
msgstr ""
-"Bitte verwenden Sie keine anstößigen Bilder. Alle unangemessenen Bilder "
-"werden von uns entfernt."
+"Wählen Sie eine aus, um mehr Informationen über diese Behörde sehen zu "
+"können. "
-#: app/views/user/no_cookies.rhtml:3
-msgid "Please enable \"cookies\" to carry on"
-msgstr "Bitte erlauben Sie Cookies, um fortzufahren"
+#: app/views/public_body/_search_ahead.rhtml:8
+#: app/views/request/select_authority.rhtml:52
+msgid "No results found."
+msgstr "Keine Ergebnisse gefunden."
-#: app/models/user.rb:38
-msgid "Please enter a password"
-msgstr "Bitte geben Sie ein Passwort ein"
+#: app/views/public_body/list.rhtml:2
+msgid "Show only..."
+msgstr "Zeig mir nur..."
-#: app/models/contact_validator.rb:30
-msgid "Please enter a subject"
-msgstr "Bitte geben Sie einen Betreff ein"
+#: app/views/public_body/list.rhtml:4
+msgid "Beginning with"
+msgstr "Mit Anfangsbuchstabe"
-#: app/models/info_request.rb:34
-msgid "Please enter a summary of your request"
-msgstr "Bitte geben Sie eine Zusammenfassung Ihrer Anfrage ein"
+#: app/views/public_body/list.rhtml:28
+msgid "<a href=\"%s\">Are we missing a public authority?</a>."
+msgstr "<a href=\"%s\">Fehlt eine Behörde?</a>."
-#: app/models/user.rb:106
-msgid "Please enter a valid email address"
-msgstr "Bitte geben Sie eine gültige E-Mail-Adresse ein"
+#: app/views/public_body/list.rhtml:31
+msgid "List of all authorities (CSV)"
+msgstr "Liste aller Behörden (CSV)"
-#: app/models/contact_validator.rb:31
-msgid "Please enter the message you want to send"
-msgstr "Bitte geben Sie die Nachricht ein, die Sie senden wollen"
+#: app/views/public_body/list.rhtml:35
+msgid "Public authorities - {{description}}"
+msgstr "Behörden - {{description}}"
-#: app/models/user.rb:49
-msgid "Please enter the same password twice"
-msgstr "Bitte geben Sie das gleiche Passwort zweimal ein"
+#: app/views/public_body/list.rhtml:37
+msgid "Public authorities"
+msgstr "Behörden"
-#: app/models/comment.rb:59
-msgid "Please enter your annotation"
-msgstr "Bitte geben Sie Ihre Anmerkung ein"
+#: app/views/public_body/list.rhtml:46
+msgid "Found {{count}} public bodies {{description}}"
+msgstr " {{count}} Behörden {{description}} gefunden"
-#: app/models/contact_validator.rb:29 app/models/user.rb:34
-msgid "Please enter your email address"
-msgstr "Bitte geben Sie Ihre E-Mail Adresse ein"
+#: app/views/public_body/list.rhtml:50
+msgid "<a href=\"%s\">Can't find the one you want?</a>"
+msgstr "<a href=\"%s\">Gewünschte Behörde nicht gefunden?</a>"
-#: app/models/outgoing_message.rb:147
-msgid "Please enter your follow up message"
-msgstr "Bitte geben Sie Ihre Follow-Up-Nachricht ein"
+#: app/views/public_body/show.rhtml:4
+msgid "Follow this authority"
+msgstr "Dieser Behörde folgen"
-#: app/models/outgoing_message.rb:150
-msgid "Please enter your letter requesting information"
-msgstr "Bitte geben Sie Ihre Briefanfrage-Informationen ein"
+#: app/views/public_body/show.rhtml:7
+msgid "There is %d person following this authority"
+msgid_plural "There are %d people following this authority"
+msgstr[0] "Diese Behörde wird von %d Person beobachtet"
+msgstr[1] "Diese Behörde wird von %d Personen beobachtet."
-#: app/models/contact_validator.rb:28 app/models/user.rb:36
-msgid "Please enter your name"
-msgstr "Bitte geben Sie Ihren Namen ein"
+#: app/views/public_body/show.rhtml:10
+msgid "More about this authority"
+msgstr "Weitere Informationen zu dieser Behörde"
-#: app/models/user.rb:109
-msgid "Please enter your name, not your email address, in the name field."
-msgstr ""
-"Bitte geben Sie Ihren Namen und nicht Ihre E-Mail-Adresse in das Name-Feld "
-"ein."
+#: app/views/public_body/show.rhtml:12
+msgid "Home page of authority"
+msgstr "Offizielle Homepage der Behörde"
-#: app/models/change_email_validator.rb:30
-msgid "Please enter your new email address"
-msgstr "Bitte geben Sie Ihre neue Email-Adresse ein"
+#: app/views/public_body/show.rhtml:15
+msgid "Publication scheme"
+msgstr "Veröffentlichungsschema"
-#: app/models/change_email_validator.rb:29
-msgid "Please enter your old email address"
-msgstr "Bitte geben Sie Ihre alte E-Mail-Adresse ein"
+#: app/views/public_body/show.rhtml:20 app/views/public_body/show.rhtml:22
+msgid "Charity registration"
+msgstr "Charity Registrierung"
-#: app/models/change_email_validator.rb:31
-msgid "Please enter your password"
-msgstr "Bitte geben Sie Ihr Passwort ein"
+#: app/views/public_body/show.rhtml:26
+msgid "View FOI email address"
+msgstr "IFG-Emailadressen ansehen"
-#: app/models/outgoing_message.rb:145
-msgid "Please give details explaining why you want a review"
-msgstr "Bitte machen Sie Angaben, warum Sie eine Durchsicht möchten"
+#: app/views/public_body/show.rhtml:30
+msgid "Freedom of information requests to"
+msgstr "IFG-Anfrage an"
-#: app/models/about_me_validator.rb:24
-msgid "Please keep it shorter than 500 characters"
-msgstr "Bitte bleiben Sie unter 500 Zeichen"
+#: app/views/public_body/show.rhtml:35
+msgid "also called {{public_body_short_name}}"
+msgstr "auch genannt: {{public_body_short_name}}"
-#: app/models/info_request.rb:123
-msgid ""
-"Please keep the summary short, like in the subject of an email. You can use "
-"a phrase, rather than a full sentence."
-msgstr ""
-"Bitte halten Sie die Zusammenfassung kurz, wie in der Betreffzeile einer "
-"E-Mail. Sie können eine Phrase, sondern als ein ganzer Satz."
+#: app/views/public_body/show.rhtml:37
+msgid "admin"
+msgstr "Administration"
-#: app/views/request/new.rhtml:79
+#: app/views/public_body/show.rhtml:46
msgid ""
-"Please only request information that comes under those categories, <strong>do not waste your\n"
-" time</strong> or the time of the public authority by requesting unrelated information."
+"You can only request information about the environment from this authority."
msgstr ""
-"Bitte stellen Sie ausschliesslich Anfragen, welche unter dieser Kategorie "
-"fallen, <strong>vergeuden Sie nicht Ihre Zeit</strong> oder die der Behörden"
-" mit der Anfrage unzutreffender Informationen."
+"Umweltanfragen können ausschliesslich über diese Behörde gestellt werden. "
-#: app/views/request/new_please_describe.rhtml:5
+#: app/views/public_body/show.rhtml:52
+msgid "Make a new <strong>Environmental Information</strong> request"
+msgstr "Stellen Sie eine neue <strong>Umwelt-Anfrage</strong>"
+
+#: app/views/public_body/show.rhtml:54
msgid ""
-"Please select each of these requests in turn, and <strong>let everyone know</strong>\n"
-"if they are successful yet or not."
+"Make a new <strong>Freedom of Information</strong> request to "
+"{{public_body}}"
msgstr ""
+"Stellen Sie eine neue <strong>Informationsfreiheitsanfrage</strong> an "
+"{{public_body}}"
+
+#: app/views/public_body/show.rhtml:56
+msgid "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>"
+msgstr "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>"
+
+#: app/views/public_body/show.rhtml:56
+msgid "Start"
+msgstr "Start"
-#: app/models/outgoing_message.rb:156
+#: app/views/public_body/show.rhtml:60
msgid ""
-"Please sign at the bottom with your name, or alter the \"%{signoff}\" "
-"signature"
+"Freedom of Information law does not apply to this authority, so you cannot make\n"
+" a request to it."
msgstr ""
-"Bitte unterschreiben Sie unten mit Ihrem Namen oder ändern Sie Ihre \"% "
-"{signoff}\" Signatur"
-
-#: app/views/user/sign.rhtml:8
-msgid "Please sign in as "
-msgstr "Anmelden als"
+"Das Informationsfreiheitsgesetz trifft auf diese Behörde nicht zu. Sie "
+"können daher keine Anfrage stellen. "
-#: app/controllers/request_controller.rb:730
-msgid "Please type a message and/or choose a file containing your response."
+#: app/views/public_body/show.rhtml:63
+msgid "This authority no longer exists, so you cannot make a request to it."
msgstr ""
-"Bitte geben Sie eine Nachricht ein und / oder wählen Sie eine Datei aus, "
-"welche Ihre Antwort enthält"
+"Diese Behörde existiert nichtmehr. Es ist folglich nicht möglich eine "
+"Anfrage zu stellen. "
-#: app/controllers/request_controller.rb:434
-msgid "Please use the form below to tell us more."
-msgstr "Bitte nutzen Sie das Formular, um uns ausführlicher zu informieren. "
+#: app/views/public_body/show.rhtml:65
+msgid ""
+"For an unknown reason, it is not possible to make a request to this "
+"authority."
+msgstr ""
+"Aus unbekannten Gründen ist es nicht möglich eine Anfrage a diese Behörde zu"
+" stellen. "
-#: app/views/outgoing_mailer/followup.rhtml:6
-#: app/views/outgoing_mailer/initial_request.rhtml:5
-msgid "Please use this email address for all replies to this request:"
+#: app/views/public_body/show.rhtml:73
+msgid "Environmental Information Regulations requests made using this site"
msgstr ""
-"Bitte nutzen Sie diese Emailadresse für alle Antworten auf diese Anfrage:"
-#: app/models/info_request.rb:35
-msgid "Please write a summary with some text in it"
-msgstr "Bitte schreiben Sie eine Zusammenfassung mit etwas Text"
+#: app/views/public_body/show.rhtml:76
+msgid "Freedom of Information requests made using this site"
+msgstr "Anfrage über diese Seite gestellt"
-#: app/models/info_request.rb:120
+#: app/views/public_body/show.rhtml:77
msgid ""
-"Please write the summary using a mixture of capital and lower case letters. "
-"This makes it easier for others to read."
+"Nobody has made any Freedom of Information requests to {{public_body_name}} "
+"using this site yet."
msgstr ""
-"Bitte nutzen Sie eine Mischung aus Groß- und Kleinschreibung für die "
-"Zusammenfassung. Dies vereinfacht das Lesen für andere."
+"Bisher hat niemand eine Anfrage an {{public_body_name}} über diese Seite "
+"gestellt."
-#: app/models/comment.rb:62
-msgid ""
-"Please write your annotation using a mixture of capital and lower case "
-"letters. This makes it easier for others to read."
-msgstr ""
-"Bitte nutzen Sie eine Mischung aus Groß- und Kleinschreibung für Ihre "
-"Anmerkung. Dies vereinfacht das Lesen für andere."
+#: app/views/public_body/show.rhtml:85
+msgid "Search within the %d Freedom of Information requests to %s"
+msgid_plural "Search within the %d Freedom of Information requests made to %s"
+msgstr[0] "Suchen Sie in den %d an %s gestellten IFG-Anfragen"
+msgstr[1] "Suchen Sie in den %d an %s gestellten IFG-Anfragen"
-#: app/controllers/request_controller.rb:423
-msgid ""
-"Please write your follow up message containing the necessary clarifications "
-"below."
+#: app/views/public_body/show.rhtml:87
+msgid "%d Freedom of Information request to %s"
+msgid_plural "%d Freedom of Information requests to %s"
+msgstr[0] "%d Informationsfreiheitsanfrage an %s"
+msgstr[1] "%d Informationsfreiheitsanfragen an %s"
+
+#: app/views/public_body/show.rhtml:111
+msgid "Only requests made using {{site_name}} are shown."
msgstr ""
-"Bitte geben Sie unten Ihre Follow-up Nachricht mit den nötigen "
-"Klärungsdetails ein. "
+"Es werden ausschliesslich Anfragen zu folgendem Sucheintrag angezeigt: "
+"{{site_name}} "
-#: app/models/outgoing_message.rb:159
-msgid ""
-"Please write your message using a mixture of capital and lower case letters."
-" This makes it easier for others to read."
+#: app/views/public_body/show.rhtml:116
+msgid "Environmental Information Regulations requests made"
msgstr ""
-"Bitte nutzen Sie eine Mischung aus Groß- und Kleinschreibung für Ihre "
-"Nachricht. Dies vereinfacht das Lesen für andere."
-#: app/views/comment/new.rhtml:41
+#: app/views/public_body/show.rhtml:118
+msgid "Freedom of Information requests made"
+msgstr "Anfrage ausgeführt"
+
+#: app/views/public_body/show.rhtml:120
msgid ""
-"Point to <strong>related information</strong>, campaigns or forums which may"
-" be useful."
+"The search index is currently offline, so we can't show the Freedom of "
+"Information requests that have been made to this authority."
msgstr ""
-"Weisen Sie auf ähnliche, evtl. nütziche Informationen, Kampagnen oder Foren "
-"hin"
+"Da die Suchanzeige momentan offline ist, können wir die an diese Behörde "
+"gestellten Informationsfreiheitsanfragen gerade leider nicht anzeigen. "
-#: app/views/comment/preview.rhtml:21
-msgid "Post annotation"
-msgstr "Anmerkung hinzufügen"
+#: app/views/public_body/view_email.rhtml:3
+msgid "FOI email address for {{public_body}}"
+msgstr "IFG-Emailadresse für {{public_body}}"
-#: locale/model_attributes.rb:55
-msgid "PostRedirect|Circumstance"
+#: app/views/public_body/view_email.rhtml:7
+msgid ""
+"{{site_name}} sends new requests to <strong>{{request_email}}</strong> for "
+"this authority."
msgstr ""
-#: locale/model_attributes.rb:53
-msgid "PostRedirect|Email token"
+#: app/views/public_body/view_email.rhtml:10
+msgid ""
+"Freedom of Information law no longer applies to this authority.Follow up "
+"messages to existing requests are sent to "
msgstr ""
+"Das Informationsfreiheitsgesetz ist für diese Behörde nicht länger gültig. "
+"Follow-up Nachrichten bestehnder Nachrichten wurden gesendet an"
-#: locale/model_attributes.rb:52
-msgid "PostRedirect|Post params yaml"
-msgstr ""
+#: app/views/public_body/view_email.rhtml:14
+msgid "Follow up messages to existing requests are sent to "
+msgstr "Nachfragen bzgl. bestehender anfragen werden weitergeleitet an:"
-#: locale/model_attributes.rb:54
-msgid "PostRedirect|Reason params yaml"
+#: app/views/public_body/view_email.rhtml:17
+msgid "We do not have a working request email address for this authority."
msgstr ""
+"Für diese Behörde ist keine funktionierende Emailadresse zur "
+"Anfragenstellung verfügbar. "
-#: locale/model_attributes.rb:50
-msgid "PostRedirect|Token"
+#: app/views/public_body/view_email.rhtml:28
+msgid ""
+"If the address is wrong, or you know a better address, please <a "
+"href=\"%s\">contact us</a>."
msgstr ""
+"Sollte die Adresse falsch sein oder sollten Sie eine bessere Adresse kennen,"
+" so <a href=\"%s\">kontaktieren Sie uns</a>bitte."
-#: locale/model_attributes.rb:51
-msgid "PostRedirect|Uri"
+#: app/views/public_body/view_email.rhtml:30
+msgid ""
+" If you know the address to use, then please <a href=\"%s\">send it to us</a>.\n"
+" You may be able to find the address on their website, or by phoning them up and asking."
msgstr ""
+"Sollten Sie die korrekte Adresse kennen, <a href=\"%s\">senden Sie sie uns</a>.\n"
+" Sie können die Adresse wahrscheinlich auf der Webseite oder durch einen Anruf bei der Behörde herausfinden. "
-#: app/views/general/_credits.rhtml:1
-msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>."
-msgstr "Ermöglicht durch <a href=\"http://www.alaveteli.org/\">Alaveteli</a>."
+#: app/views/public_body/view_email_captcha.rhtml:1
+msgid "View FOI email address for '{{public_body_name}}'"
+msgstr "IFG-Emailadresse für {{public_body}} ansehen"
-#: app/views/request/followup_preview.rhtml:1
-msgid "Preview follow up to '"
-msgstr ""
+#: app/views/public_body/view_email_captcha.rhtml:3
+msgid "View FOI email address for {{public_body_name}}"
+msgstr "IFG-Emailadresse für {{public_body}} ansehen"
-#: app/views/comment/preview.rhtml:1
-msgid "Preview new annotation on '{{info_request_title}}'"
-msgstr "Sehen Sie den neuen Kommentar zu '{{info_request_title}}'"
+#: app/views/public_body/view_email_captcha.rhtml:5
+msgid ""
+"To view the email address that we use to send FOI requests to "
+"{{public_body_name}}, please enter these words."
+msgstr ""
+"Geben Sie bitte diese Worte ein, um die Email-Adresse zu sehen, welche wir "
+"verwenden, um IFG-Anfragen an {{public_body_name}} zu senden."
-#: app/views/comment/_comment_form.rhtml:15
-msgid "Preview your annotation"
-msgstr "Überprüfen Sie Ihre Anmerkung"
+#: app/views/public_body/view_email_captcha.rhtml:12
+msgid "View email"
+msgstr "Email ansehen"
-#: app/views/request/_followup.rhtml:96
-msgid "Preview your message"
-msgstr "Anfrage ansehen"
+#: app/views/request/_after_actions.rhtml:3
+msgid "Things to do with this request"
+msgstr "Weitere Möglichkeiten für diese Anfrage"
-#: app/views/request/new.rhtml:139
-msgid "Preview your public request"
-msgstr "Öffentliche Anfrage ansehen"
+#: app/views/request/_after_actions.rhtml:6
+msgid "Anyone:"
+msgstr "Jedermann:"
-#: locale/model_attributes.rb:15
-msgid "ProfilePhoto|Data"
+#: app/views/request/_after_actions.rhtml:9
+msgid "<a href=\"%s\">Add an annotation</a> (to help the requester or others)"
msgstr ""
+"<a href=\"%s\">Kommentar hinzufügen</a> (um den Anfragensteller oder andere "
+"Nutzern zu unterstützen)"
-#: locale/model_attributes.rb:16
-msgid "ProfilePhoto|Draft"
-msgstr ""
+#: app/views/request/_after_actions.rhtml:13
+#: app/views/request/_after_actions.rhtml:35
+msgid "Update the status of this request"
+msgstr "Status der Anfrage aktualisieren"
-#: app/views/public_body/list.rhtml:37
-msgid "Public authorities - {{description}}"
-msgstr "Behörden - {{description}}"
+#: app/views/request/_after_actions.rhtml:17
+msgid "Download a zip file of all correspondence"
+msgstr "Laden Sie eine Zip-Datei des gesamten Schriftverkehrs herunter."
-#: app/views/general/search.rhtml:73
-msgid ""
-"Public authorities {{start_count}} to {{end_count}} of {{total_count}} for "
-"{{user_search_query}}"
-msgstr ""
+#: app/views/request/_after_actions.rhtml:23
+msgid "{{info_request_user_name}} only:"
+msgstr "Nur {{info_request_user_name}}:"
-#: locale/model_attributes.rb:12
-msgid "PublicBody|First letter"
-msgstr ""
+#: app/views/request/_after_actions.rhtml:28
+msgid "Send a followup"
+msgstr "Nachfrage senden"
-#: locale/model_attributes.rb:10
-msgid "PublicBody|Home page"
-msgstr ""
+#: app/views/request/_after_actions.rhtml:30
+msgid "Write a reply"
+msgstr "Schreiben Sie eine Antwort"
-#: locale/model_attributes.rb:8
-msgid "PublicBody|Last edit comment"
-msgstr ""
+#: app/views/request/_after_actions.rhtml:39
+msgid "Request an internal review"
+msgstr "Interne Prüfung anfragen"
-#: locale/model_attributes.rb:7
-msgid "PublicBody|Last edit editor"
-msgstr ""
+#: app/views/request/_after_actions.rhtml:45
+msgid "{{public_body_name}} only:"
+msgstr "Nur {{public_body_name}}:"
-#: locale/model_attributes.rb:3
-msgid "PublicBody|Name"
-msgstr "Behörde|Name"
+#: app/views/request/_after_actions.rhtml:48
+msgid "Respond to request"
+msgstr "Auf Anfrage reagieren"
-#: locale/model_attributes.rb:11
-msgid "PublicBody|Notes"
-msgstr "Behörde|Anmerkung"
+#: app/views/request/_correspondence.rhtml:12
+#: app/views/request/_correspondence.rhtml:36
+#: app/views/request/simple_correspondence.rhtml:14
+#: app/views/request/simple_correspondence.rhtml:27
+msgid "From:"
+msgstr "Von:"
-#: locale/model_attributes.rb:13
-msgid "PublicBody|Publication scheme"
-msgstr ""
+#: app/views/request/_correspondence.rhtml:26
+#: app/views/request/_correspondence.rhtml:54
+msgid "Link to this"
+msgstr "Link erstellen"
-#: locale/model_attributes.rb:5
-msgid "PublicBody|Request email"
-msgstr "Behörde|Email anfragen"
+#: app/views/request/_describe_state.rhtml:4
+msgid "What best describes the status of this request now?"
+msgstr "Was ist die beste Beschreibung für diese Anfrage?"
-#: locale/model_attributes.rb:4
-msgid "PublicBody|Short name"
-msgstr ""
+#: app/views/request/_describe_state.rhtml:7
+#: app/views/request/_other_describe_state.rhtml:10
+msgid "This request is still in progress:"
+msgstr "Diese Anfrage ist noch in Bearbeitung"
-#: locale/model_attributes.rb:9
-msgid "PublicBody|Url name"
-msgstr "Behörde|URL"
+#: app/views/request/_describe_state.rhtml:11
+msgid ""
+"I'm still <strong>waiting</strong> for my information\n"
+" <small>(maybe you got an acknowledgement)</small>"
+msgstr ""
+"Ich <strong>warte</strong> noch immer auf meine Informationen\n"
+" <small>(vielleicht haben Sie eine Bestätigung erhalten)</small>"
-#: locale/model_attributes.rb:6
-msgid "PublicBody|Version"
-msgstr "Behörde|Version"
+#: app/views/request/_describe_state.rhtml:18
+msgid "I'm still <strong>waiting</strong> for the internal review"
+msgstr "Ich <strong>warte</strong> noch immer auf die interne Prüfung"
-#: app/views/public_body/show.rhtml:10
-msgid "Publication scheme"
+#: app/views/request/_describe_state.rhtml:25
+msgid "I've been asked to <strong>clarify</strong> my request"
msgstr ""
+"Ich wurde gebeten meine Anfrage <strong>deutlicher zu erläutern</strong>"
-#: locale/model_attributes.rb:48
-msgid "RawEmail|Data binary"
-msgstr ""
+#: app/views/request/_describe_state.rhtml:32
+msgid "I'm waiting for an <strong>internal review</strong> response"
+msgstr "Ich warte auf eine Antwort der <strong>internen Prüfung</strong>"
-#: app/views/comment/preview.rhtml:20
-msgid "Re-edit this annotation"
-msgstr "Anmerkung erneut bearbeiten"
+#: app/views/request/_describe_state.rhtml:38
+msgid "They are going to reply <strong>by post</strong>"
+msgstr "Ich erhalte meine Antwort <strong>auf dem Postweg</strong>"
-#: app/views/request/followup_preview.rhtml:49
-msgid "Re-edit this message"
-msgstr "Nachricht ändern"
+#: app/views/request/_describe_state.rhtml:44
+#: app/views/request/_other_describe_state.rhtml:40
+msgid "This particular request is finished:"
+msgstr "Diese Anfrage wurde abgeschlossen:"
-#: app/views/request/preview.rhtml:40
-msgid "Re-edit this request"
-msgstr "Anfrage ändern"
+#: app/views/request/_describe_state.rhtml:47
+#: app/views/request/_other_describe_state.rhtml:43
+msgid "The <strong>review has finished</strong> and overall:"
+msgstr "Die <strong>Prüfung wurde abgeschlossen</strong> und insgesamt:"
-#: app/views/general/search.rhtml:137
+#: app/views/request/_describe_state.rhtml:52
msgid ""
-"Read about <a href=\"{{advanced_search_url}}\">advanced search "
-"operators</a>, such as proximity and wildcards."
+"They do <strong>not have</strong> the information <small>(maybe they say who"
+" does)</small>"
msgstr ""
+"Die Informationen <strong>liegen nicht vor</strong> <small>(vielleicht "
+"können sie Ihnen mitteilen von wem Sie die Informationen erhalten "
+"können)</small>"
-#: app/views/layouts/default.rhtml:93
-msgid "Read blog"
-msgstr "Blog lesen"
+#: app/views/request/_describe_state.rhtml:56
+msgid "I've received <strong>some of the information</strong>"
+msgstr "Angefragte Information <strong> teilweise erhalten </strong>"
-#: app/views/request/new.rhtml:16
-msgid "Read this before writing your {{info_request_law_used_full}} request"
-msgstr ""
-"Lesen Sie dies bevor Sie Ihre {{info_request_law_used_full}} Anfrage "
-"schreiben"
+#: app/views/request/_describe_state.rhtml:60
+msgid "I've received <strong>all the information"
+msgstr "Angefragte Information <strong> vollständig erhalten"
-#: app/views/general/search.rhtml:150
-msgid "Received an error message, such as delivery failure."
-msgstr ""
+#: app/views/request/_describe_state.rhtml:64
+msgid "My request has been <strong>refused</strong>"
+msgstr "Meine Anfrage wurde <strong>abgelehnt</strong>"
-#: app/views/general/search.rhtml:42
-msgid "Recently described results first"
-msgstr "Kürzlich widergegebene Ergebnisse zuerst"
+#: app/views/request/_describe_state.rhtml:71
+msgid "Other:"
+msgstr "Andere/s:"
-#: app/controllers/request_controller.rb:139
-msgid "Recently sent Freedom of Information requests"
-msgstr "Kürzlich gesendete Informationsfreiheitsgesetzanfragen"
+#: app/views/request/_describe_state.rhtml:76
+msgid "I've received an <strong>error message</strong>"
+msgstr "Fehlerhafte Information <strong>erhalten</strong>"
-#: app/views/request/list.rhtml:6
-msgid "Recently sent requests"
-msgstr "Kürzlich gestellte Anfragen"
+#: app/views/request/_describe_state.rhtml:84
+msgid "This request <strong>requires administrator attention</strong>"
+msgstr "Diese Anfrage <strong>müsste einmal überprüft werden</strong>"
-#: app/controllers/request_controller.rb:144
-msgid "Recently successful responses"
-msgstr "Aktuelle erfolgreiche Antworten"
+#: app/views/request/_describe_state.rhtml:91
+msgid "I would like to <strong>withdraw this request</strong>"
+msgstr "Ich möchte diese <strong>Anfrage zurückziehen</strong>"
-#: app/models/info_request_event.rb:305
-msgid "Refused"
-msgstr "Abgelehnt"
+#: app/views/request/_describe_state.rhtml:101
+msgid "Submit status"
+msgstr "Status senden"
-#: app/models/info_request.rb:793
-msgid "Refused."
-msgstr "Abgelehnt."
+#: app/views/request/_describe_state.rhtml:101
+msgid "and we'll suggest <strong>what to do next</strong>"
+msgstr "und wir werden <strong>nächstmögliche Schritte</strong> vorschlagen"
-#: app/views/user/_signin.rhtml:26
+#: app/views/request/_describe_state.rhtml:107
msgid ""
-"Remember me</label> (keeps you signed in longer;\n"
-" do not use on a public computer) "
+"We don't know whether the most recent response to this request contains\n"
+" information or not\n"
+" &ndash;\n"
+"\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
msgstr ""
+"Wir sind nicht sicher, ob die letzte Antwort auf diese Anfrage Informationen enthält\n"
+" &ndash;\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span>falls Sie {{user_link}} sind, bitte <a href=\"{{url}}\">melden Sich an</a> und lassen es uns wissen. "
-#: app/views/request/_correspondence.rhtml:28
-msgid "Reply to this message"
-msgstr "Auf diese Nachricht antworten"
+#: app/views/request/_followup.rhtml:3
+msgid "the main FOI contact at {{public_body}}"
+msgstr "der Hauptkontakt für {{public_body}}"
-#: app/views/comment/_single_comment.rhtml:24
-msgid "Report abuse"
-msgstr "Missbrauch melden"
+#: app/views/request/_followup.rhtml:8
+msgid "Request an internal review from {{person_or_body}}"
+msgstr "Interne Prüfung von {{person_or_body}} anfragen"
-#: app/views/request/_after_actions.rhtml:37
-msgid "Request an internal review"
-msgstr "Interne Prüfung anfragen"
+#: app/views/request/_followup.rhtml:11
+msgid "Send a public follow up message to {{person_or_body}}"
+msgstr "Öffentliche Nachfrage an {{person_or_body}} senden"
-#: app/views/request/_followup.rhtml:4
-msgid "Request an internal review from"
-msgstr "Anfrage zur internen Prüfung von"
+#: app/views/request/_followup.rhtml:14
+msgid "Send a public reply to {{person_or_body}}"
+msgstr "Öffentliche Antwort an {{person_or_body}} senden"
-#: app/views/request/hidden.rhtml:1
-msgid "Request has been removed"
-msgstr "Anfrage wurde verweigert"
-
-#: app/views/request/_request_listing_via_event.rhtml:28
+#: app/views/request/_followup.rhtml:19
msgid ""
-"Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+"Don't want to address your message to {{person_or_body}}? You can also "
+"write to:"
msgstr ""
-"Anfrage gestellt an {{public_body_name}} durch {{info_request_user}} am "
-"{{date}}."
+"Möchten Sie Ihre Nachricht nicht an {{person_or_body}} senden? Schreiben "
+"Sie alternativ an:"
+
+#: app/views/request/_followup.rhtml:23 app/views/request/_followup.rhtml:28
+#: app/views/request/_followup.rhtml:34
+msgid "the main FOI contact address for {{public_body}}"
+msgstr "die Haupt-Kontaktadresse für {{public_body}}"
-#: app/views/request/_request_listing_via_event.rhtml:36
+#: app/views/request/_followup.rhtml:43
msgid ""
-"Request to {{public_body_name}} by {{info_request_user}}. Annotated by "
-"{{event_comment_user}} on {{date}}."
+"Follow ups and new responses to this request have been stopped to prevent "
+"spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and"
+" need to send a follow up."
msgstr ""
-"Anfrage an {{public_body_name}} durch {{info_request_user}}. Kommentiert "
-"durch {{event_comment_user}} am {{date}}."
+"Nachfragen und Antworten auf diese Anfrage wurden gestoppt, um Spam "
+"vorzubeugen. Bitte <a href=\"{{url}}\">kontaktieren Sie uns</a> falls Sie "
+"{{user_link}} sind und eine Nachfrage senden müssen."
-#: app/views/request/_request_listing_single.rhtml:12
+#: app/views/request/_followup.rhtml:47
msgid ""
-"Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
+"If you are dissatisfied by the response you got from\n"
+" the public authority, you have the right to\n"
+" complain (<a href=\"%s\">details</a>)."
msgstr ""
-"Angefragt von {{public_body_name}} durch {{info_request_user}} am {{date}}"
+"Sollten Sie mit den erhaltenen Informationen nicht zufrieden sein, haben Sie"
+" das Recht eine Beschwerde einzureichen (<a href=\"%s\">Details</a>)."
-#: app/views/request/_sidebar_request_listing.rhtml:13
-msgid "Requested on {{date}}"
-msgstr "Angefragt am {{date}}"
+#: app/views/request/_followup.rhtml:54
+msgid ""
+"Please <strong>only</strong> write messages directly relating to your "
+"request {{request_link}}. If you would like to ask for information that was "
+"not in your original request, then <a href=\"{{new_request_link}}\">file a "
+"new request</a>."
+msgstr ""
+"Bitte senden Sie <strong>ausschließlich</strong> Nachrichten, welche sich "
+"direkt auf Ihre Anfrage beziehen {{request_link}}. Sollten Sie Informationen"
+" anfragen wollen, welche nicht Teil Ihrer ursprünglichen Anfrage sind, dann "
+"<a href=\"{{new_request_link}}\">stellen Sie eine neue Anfrage</a>."
-#: app/models/track_thing.rb:209 app/models/track_thing.rb:210
-msgid "Requests or responses matching '{{query}}'"
+#: app/views/request/_followup.rhtml:59
+msgid ""
+"The response to your request has been <strong>delayed</strong>. You can say that, \n"
+" by law, the authority should normally have responded\n"
+" <strong>promptly</strong> and"
msgstr ""
+"Die Beantwortung auf Ihre Anfrage ist verspätet. Nach gesetzlicher "
+"Vorschrift sollte die Behörde unverzüglich geantwortet haben und"
-#: app/views/request/upload_response.rhtml:11
-msgid "Respond by email"
-msgstr "Email-Antwort senden"
+#: app/views/request/_followup.rhtml:63 app/views/request/show.rhtml:70
+#: app/views/request/show.rhtml:80
+msgid "in term time"
+msgstr "während des Semesters"
-#: app/views/request/_after_actions.rhtml:46
-msgid "Respond to request"
-msgstr "Auf Anfrage reagieren"
+#: app/views/request/_followup.rhtml:65
+msgid "by <strong>{{date}}</strong>"
+msgstr "bis zum <strong>{{date}}</strong>"
-#: app/views/request/upload_response.rhtml:5
-msgid "Respond to the FOI request"
-msgstr "IFG-Anfrage beantworten"
+#: app/views/request/_followup.rhtml:66 app/views/request/_followup.rhtml:73
+#: app/views/request/show.rhtml:83 app/views/request/show.rhtml:87
+msgid "<a href=\"%s\">details</a>"
+msgstr "<a href=\"%s\">Details</a>"
-#: app/views/request/upload_response.rhtml:21
-msgid "Respond using the web"
+#: app/views/request/_followup.rhtml:71
+msgid ""
+"The response to your request is <strong>long overdue</strong>. You can say that, by \n"
+" law, under all circumstances, the authority should have responded\n"
+" by now"
msgstr ""
+"The response to your request is <strong>long overdue</strong>. Nach "
+"gesetzlicher Vorschrift sollte {{public_body_link}} Ihnen inzwischen unter "
+"allen Umständen geantwortet haben. "
-#: app/views/general/search.rhtml:160
-msgid "Response from a public authority"
-msgstr ""
+#: app/views/request/_followup.rhtml:85
+msgid "What are you doing?"
+msgstr "Was machen Sie?"
-#: app/views/request/show.rhtml:77
-msgid "Response to this request is <strong>delayed</strong>."
-msgstr "Die Antwort auf diese Anfrage ist <strong>im Rückstand</strong>."
+#: app/views/request/_followup.rhtml:95
+msgid "I am asking for <strong>new information</strong>"
+msgstr "Ich beantrage <strong>neue Informationen</strong>"
-#: app/views/request/show.rhtml:85
-msgid "Response to this request is <strong>long overdue</strong>."
-msgstr ""
-"Die Antwort auf diese Anfrage ist <strong>lange im Rückstand</strong>."
+#: app/views/request/_followup.rhtml:100
+msgid "I am requesting an <strong>internal review</strong>"
+msgstr "Ich stelle eine Anfrage zur <strong>internen Prüfung</strong>"
-#: app/views/request/show_response.rhtml:64
-msgid "Response to your request"
-msgstr "Reagieren Sie auf Ihre Anfrage"
+#: app/views/request/_followup.rhtml:101
+msgid "<a href=\"%s\">what's that?</a>"
+msgstr "<a href=\"%s\">Was ist das?</a>"
-#: app/views/request/upload_response.rhtml:28
-msgid "Response:"
-msgstr "Antwort:"
+#: app/views/request/_followup.rhtml:106
+msgid ""
+"<strong>Anything else</strong>, such as clarifying, prompting, thanking"
+msgstr "<strong>Alles andere</strong>, z.B. Klärungen, Hinweise, Danksagungen"
-#: app/views/general/search.rhtml:9
-msgid "Results page {{page_number}}"
-msgstr "Ergebnisanzeige {{page_number}}"
+#: app/views/request/_followup.rhtml:112
+msgid ""
+"Edit and add <strong>more details</strong> to the message above,\n"
+" explaining why you are dissatisfied with their response."
+msgstr ""
+"Bearbeiten Sie Ihre Anfrage und fügen Sie <strong>weitere Details</strong> hinzu,\n"
+" explaining why you are dissatisfied with their response."
-#: app/views/user/set_profile_about_me.rhtml:35
-msgid "Save"
-msgstr "Speichern"
+#: app/views/request/_followup.rhtml:123
+msgid "Preview your message"
+msgstr "Anfrage ansehen"
-#: app/views/general/exception_caught.rhtml:10
-#: app/views/general/frontpage.rhtml:16 app/views/general/search.rhtml:29
-#: app/views/layouts/default.rhtml:80 app/views/request/new.rhtml:31
-msgid "Search"
-msgstr "Suche"
+#: app/views/request/_hidden_correspondence.rhtml:10
+msgid ""
+"This response has been hidden. See annotations to find out why.\n"
+" If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+msgstr ""
+"Dieser Kommentar wurde verborgen. Sehen Sie die Anmerkungen, um den Grund zu"
+" erfahren. Falls Sie diese Anfrage gestellt haben können Sie sich <a "
+"href=\"%s\">anmelden</a> um die Antwort zu lesen."
-#: app/views/general/search.rhtml:4
-msgid "Search Freedom of Information requests, public authorities and users"
-msgstr "Suchen Sie nach Informationsfreiheitsanfragen, Behörden und Nutzern"
+#: app/views/request/_hidden_correspondence.rhtml:17
+msgid ""
+"This outgoing message has been hidden. See annotations to\n"
+"\t\t\t\t\t\tfind out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+msgstr ""
+"Dieser Kommentar wurde verborgen. Sehen Sie die Anmerkungen, um den Grund zu"
+" erfahren. Falls Sie diese Anfrage gestellt haben können Sie sich <a "
+"href=\"%s\">einloggen</a> um die Antwort zu lesen."
-#: app/views/general/exception_caught.rhtml:7
-msgid "Search the site to find what you were looking for."
+#: app/views/request/_hidden_correspondence.rhtml:23
+msgid ""
+"This comment has been hidden. See annotations to\n"
+" find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
msgstr ""
-"Duchsuchen Sie die Seite, um die von Ihnen gewünschten Informationen zu "
-"finden. "
+"Dieser Kommentar wurde verborgen. Sehen Sie die Anmerkungen, um den Grund zu"
+" erfahren. Falls Sie diese Anfrage gestellt haben können Sie sich <a "
+"href=\"%s\">einloggen</a> um die Antwort zu lesen."
-#: app/controllers/user_controller.rb:331
-msgid "Send a message to "
-msgstr "Nachricht senden an"
+#: app/views/request/_hidden_correspondence.rhtml:32
+msgid "unexpected prominence on request event"
+msgstr ""
-#: app/views/request/_followup.rhtml:7
-msgid "Send a public follow up message to"
-msgstr "Senden Sie eine öffentliche Follow-up Nachricht"
+#: app/views/request/_other_describe_state.rhtml:4
+msgid ""
+"Hi! We need your help. The person who made the following request\n"
+" hasn't told us whether or not it was successful. Would you mind taking\n"
+" a moment to read it and help us keep the place tidy for everyone?\n"
+" Thanks."
+msgstr ""
+"Hallo! Wir brauchen Ihre Hilfe. Die Person, welche die folgende Anfrage "
+"gestellt hat, hat uns nicht mitgeteilt ob diese erfolgreich war. Wäre es "
+"okaz für Sie sich einen Moment Zeit zu nehmen, um die Anfrage zu lesen und "
+"uns somit zu helfen die Zeite für jedermann aktuell zu halten?"
-#: app/views/request/_followup.rhtml:10
-msgid "Send a public reply to"
-msgstr "Senden Sie eine öffentliche Antwort an"
+#: app/views/request/_other_describe_state.rhtml:14
+msgid ""
+"<strong>No response</strong> has been received\n"
+" <small>(maybe there's just an acknowledgement)</small>"
+msgstr ""
+"Es wurde <strong>Keine Antwort</strong> empfangen\n"
+" <small>(vielleicht gab es nur eine Bestätigung)</small>"
-#: app/views/request/_correspondence.rhtml:58
-msgid "Send follow up"
-msgstr "Follow-Up senden"
+#: app/views/request/_other_describe_state.rhtml:21
+msgid "Still awaiting an <strong>internal review</strong>"
+msgstr "<strong>internal review</strong> weiterhin ausstehend"
-#: app/views/request/followup_preview.rhtml:50
-msgid "Send message"
-msgstr "Nachricht senden"
+#: app/views/request/_other_describe_state.rhtml:28
+msgid "<strong>Clarification</strong> has been requested"
+msgstr "Klärung der Angelegenheit wurde angefragt"
-#: app/views/user/show.rhtml:69
-msgid "Send message to "
-msgstr "Nachricht senden an"
+#: app/views/request/_other_describe_state.rhtml:34
+msgid "A response will be sent <strong>by post</strong>"
+msgstr "Antwort wird <strong>postalisch</strong> zugestellt"
-#: app/views/request/preview.rhtml:41
-msgid "Send public "
-msgstr "Öffentlich senden"
+#: app/views/request/_other_describe_state.rhtml:48
+msgid ""
+"The authority do <strong>not have</strong> the information <small>(maybe "
+"they say who does)"
+msgstr ""
+"Die Informationen <strong>liegen der Behörde nicht vor</strong> the "
+"information <small>(vielleicht können sie Ihnen mitteilen von wem Sie die "
+"Informationen erhalten können)"
-#: app/views/user/show.rhtml:53
-msgid "Set your profile photo"
-msgstr "Profilbild wählen"
+#: app/views/request/_other_describe_state.rhtml:52
+msgid "<strong>Some of the information</strong> has been sent "
+msgstr "Information wurde teilweise gesendet"
-#: app/models/public_body.rb:39
-msgid "Short name is already taken"
-msgstr "Nutzername bereits vergeben "
+#: app/views/request/_other_describe_state.rhtml:56
+msgid "<strong>All the information</strong> has been sent"
+msgstr "Informationen wurden vollständig gesendet"
-#: app/views/general/search.rhtml:38
-msgid "Show most relevant results first"
-msgstr "Relevanteste Suchergebnisse zuerst anzeigen "
+#: app/views/request/_other_describe_state.rhtml:60
+msgid "The request has been <strong>refused</strong>"
+msgstr "Die Anfrage wurde <strong>abgelehnt</strong>"
-#: app/views/public_body/list.rhtml:3 app/views/request/list.rhtml:2
-msgid "Show only..."
-msgstr ""
+#: app/views/request/_other_describe_state.rhtml:70
+msgid "An <strong>error message</strong> has been received"
+msgstr "Eine <strong>Fehlermeldung</strong> wurde empfangen"
-#: app/views/user/_signin.rhtml:31 app/views/user/show.rhtml:113
-msgid "Sign in"
-msgstr "Anmelden"
+#: app/views/request/_request_filter_form.rhtml:6
+msgid "Keywords"
+msgstr "Stichwörter"
-#: app/views/user/sign.rhtml:20
-msgid "Sign in or make a new account"
-msgstr "Anmelden oder neues Benutzerkonto erstellen"
+#: app/views/request/_request_filter_form.rhtml:11
+msgid "Search for words in:"
+msgstr "Suchen Sie nach Begriffen in:"
-#: app/views/layouts/default.rhtml:103
-msgid "Sign in or sign up"
-msgstr "Amelden oder einloggen "
+#: app/views/request/_request_filter_form.rhtml:23
+msgid "Made between"
+msgstr "Gestellt zwischen"
-#: app/views/layouts/default.rhtml:100
-msgid "Sign out"
-msgstr "Ausloggen"
+#: app/views/request/_request_filter_form.rhtml:25
+msgid "and"
+msgstr "und"
-#: app/views/user/_signup.rhtml:41
-msgid "Sign up"
-msgstr "Benutzerkonto erstellen"
+#: app/views/request/_request_filter_form.rhtml:30
+msgid "all requests"
+msgstr "alle Anfragen"
-#: app/views/request/_sidebar.rhtml:30
-msgid "Similar requests"
-msgstr "Ähnliche Anfragen"
+#: app/views/request/_request_listing_short_via_event.rhtml:9
+msgid "To {{public_body_link_absolute}}"
+msgstr "An {{public_body_link_absolute}}"
-#: app/models/info_request_event.rb:307
-msgid "Some information sent"
-msgstr "Information teilweise gesendet"
+#: app/views/request/_request_listing_short_via_event.rhtml:10
+msgid "by {{user_link_absolute}}"
+msgstr "durch {{user_link_absolute}}"
-#: app/views/general/search.rhtml:145
-msgid "Some of the information requested has been received"
+#: app/views/request/_request_listing_single.rhtml:12
+msgid ""
+"Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
msgstr ""
+"Angefragt von {{public_body_name}} durch {{info_request_user}} am {{date}}"
-#: app/views/request_game/play.rhtml:31
+#: app/views/request/_request_listing_via_event.rhtml:20
msgid ""
-"Some people who've made requests haven't let us know whether they were\n"
-"successful or not. We need <strong>your</strong> help &ndash;\n"
-"choose one of these requests, read it, and let everyone know whether or not the\n"
-"information has been provided. Everyone'll be exceedingly grateful."
+"Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
msgstr ""
-"Nicht alle Anfragensteller haben uns über den Erfolg Ihrer Anfragen "
-"informiert. Wir sind auf <strong>Ihre</strong> Hilfe angewiesen. Wählen Sie "
-"eine dieser Anfragen, lesen Sie sie und teilen Sie uns mit, ob die "
-"gewünschte Information zur Verfügung gestellt wurde. Alle Nutzer wären Ihnen"
-" ausgesprochen dankbar. "
+"Anfrage gestellt an {{public_body_name}} durch {{info_request_user}} am "
+"{{date}}."
-#: app/views/user_mailer/changeemail_already_used.rhtml:1
-msgid ""
-"Someone, perhaps you, just tried to change their email address on\n"
-"{{site_name}} from {{old_email}} to {{new_email}}."
+#: app/views/request/_request_listing_via_event.rhtml:23
+msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
msgstr ""
+"gesendet an {{public_body_name}} durch {{info_request_user}} am {{date}}."
-#: app/views/general/exception_caught.rhtml:1
-msgid "Sorry, we couldn't find that page"
-msgstr "Diese Seite wurde leider nicht gefunden"
+#: app/views/request/_request_listing_via_event.rhtml:26
+msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
+msgstr "von {{public_body_name}} an {{info_request_user}} am {{date}}."
-#: app/views/request/new.rhtml:53
-msgid "Special note for this authority!"
-msgstr "Spezielle Nachricht and diese Behörde!"
+#: app/views/request/_request_listing_via_event.rhtml:28
+msgid ""
+"Request to {{public_body_name}} by {{info_request_user}}. Annotated by "
+"{{event_comment_user}} on {{date}}."
+msgstr ""
+"Anfrage an {{public_body_name}} durch {{info_request_user}}. Kommentiert "
+"durch {{event_comment_user}} am {{date}}."
-#: app/views/request/_other_describe_state.rhtml:21
-msgid "Still awaiting an <strong>internal review</strong>"
-msgstr "<strong>internal review</strong> weiterhin ausstehend"
+#: app/views/request/_request_listing_via_event.rhtml:30
+msgid "unknown event type indexed "
+msgstr "unbekannter Aktionstyp angezeigt"
-#: app/views/request/followup_preview.rhtml:23
-#: app/views/request/preview.rhtml:18
-msgid "Subject:"
-msgstr "Thema:"
+#: app/views/request/_search_ahead.rhtml:3
+msgid "Possibly related requests:"
+msgstr "Eventuell ähnliche Anfrage:"
-#: app/views/user/signchangepassword_send_confirm.rhtml:26
-msgid "Submit"
-msgstr "Senden"
+#: app/views/request/_search_ahead.rhtml:10
+msgid "Or search in their website for this information."
+msgstr "Oder suchen Sie auf deren Internetseite nach Informationen"
-#: app/views/request/_describe_state.rhtml:101
-msgid "Submit status"
-msgstr "Status senden"
+#: app/views/request/_sidebar.rhtml:2
+msgid "Follow this request"
+msgstr "Dieser Anfrage folgen"
-#: app/models/track_thing.rb:158 app/models/track_thing.rb:159
-msgid "Successful Freedom of Information requests"
-msgstr "Erfolgreiche Informationsfreiheitsanfrage"
+#: app/views/request/_sidebar.rhtml:5
+msgid "There is %d person following this request"
+msgid_plural "There are %d people following this request"
+msgstr[0] " %d Person verfolgen diese Anfrage"
+msgstr[1] " %d Personen verfolgen diese Anfrage"
-#: app/views/request/list.rhtml:5
-msgid "Successful responses"
-msgstr "Erfolgreiche Anfragen"
+#: app/views/request/_sidebar.rhtml:8
+msgid "Act on what you've learnt"
+msgstr "Handel aus Deinen Erfahrungen"
-#: app/models/info_request.rb:797
-msgid "Successful."
-msgstr "Erfolgreich."
+#: app/views/request/_sidebar.rhtml:13
+msgid "Tweet this request"
+msgstr "Tweet diese Anfrage"
-#: app/views/comment/new.rhtml:38
-msgid ""
-"Suggest how the requester can find the <strong>rest of the "
-"information</strong>."
-msgstr ""
-"Schlagen Sie vor, wie der Anfragensteller <strong>den Rest der "
-"Information</strong> finden kann."
+#: app/views/request/_sidebar.rhtml:17
+msgid "Start your own blog"
+msgstr "Starten Sie Ihren eigenen Blog"
-#: app/views/request/new.rhtml:93
-msgid "Summary:"
-msgstr "Zusammenfassung:"
+#: app/views/request/_sidebar.rhtml:24
+msgid "Similar requests"
+msgstr "Ähnliche Anfragen"
-#: app/views/general/search.rhtml:140
-msgid "Table of statuses"
-msgstr "Statusliste"
+#: app/views/request/_sidebar.rhtml:29
+msgid "More similar requests"
+msgstr "Weitere ähnliche Anfragen"
-#: app/views/request/preview.rhtml:45
-msgid "Tags:"
-msgstr "Links:"
+#: app/views/request/_sidebar.rhtml:35
+msgid "Event history details"
+msgstr "Details Verlaufsübersicht"
-#: app/controllers/request_game_controller.rb:52
-msgid "Thank you for helping us keep the site tidy!"
-msgstr ""
+#: app/views/request/_sidebar.rhtml:39
+msgid ""
+"<a href=\"%s\">Are you the owner of\n"
+" any commercial copyright on this page?</a>"
+msgstr "<a href=\"%s\">Halten Sie die Urheberrechte dieser Seite?</a>"
-#: app/controllers/comment_controller.rb:62
-msgid "Thank you for making an annotation!"
-msgstr "Vielen Dank für Ihre Anmerkung"
+#: app/views/request/_sidebar_request_listing.rhtml:13
+msgid "Requested on {{date}}"
+msgstr "Angefragt am {{date}}"
-#: app/controllers/request_controller.rb:736
-msgid ""
-"Thank you for responding to this FOI request! Your response has been "
-"published below, and a link to your response has been emailed to "
-msgstr ""
-"Vielen Dank für Ihre IFG-Anfrage! Ihre Antwort wird unten angezeigt und ein "
-"Link zu Ihrer Antwort wurde gesendet an"
+#: app/views/request/_view_html_prefix.rhtml:6
+msgid "Download original attachment"
+msgstr "Originalanhang herunterladen"
-#: app/controllers/request_controller.rb:378
+#: app/views/request/_view_html_prefix.rhtml:9
msgid ""
-"Thank you for updating the status of the request '<a "
-"href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests "
-"below for you to classify."
+"This is an HTML version of an attachment to the Freedom of Information "
+"request"
msgstr ""
+"Dies ist eine HTML Version eines Anhanges der Informationsfreiheitsanfrage"
-#: app/controllers/request_controller.rb:381
-msgid "Thank you for updating this request!"
-msgstr "Vielen Dank für die Aktualisierung dieser Anfrage!"
+#: app/views/request/details.rhtml:1 app/views/request/details.rhtml:2
+msgid "Details of request '"
+msgstr "Anfragedetails"
-#: app/controllers/user_controller.rb:398
-#: app/controllers/user_controller.rb:414
-msgid "Thank you for updating your profile photo"
-msgstr "Vielen Dank für die Aktualisierung Ihres Profilbildes"
+#: app/views/request/details.rhtml:4
+msgid "Event history"
+msgstr "Verlaufsübersicht"
-#: app/views/request_game/play.rhtml:42
+#: app/views/request/details.rhtml:6
msgid ""
-"Thanks for helping - your work will make it easier for everyone to find successful\n"
-"responses, and maybe even let us make league tables..."
+"This table shows the technical details of the internal events that happened\n"
+"to this request on {{site_name}}. This could be used to generate information about\n"
+"the speed with which authorities respond to requests, the number of requests\n"
+"which require a postal response and much more."
msgstr ""
-"Vielen Dank für die Hilfe - Ihre Arbeit wird es für jeden leichter machen "
-"erfolgreiche Antworten zu finden und es uns eventuell sogar ermöglichen "
-"Ranglisten zu erstellen..."
-#: app/views/user/show.rhtml:20
+#: app/views/request/details.rhtml:12
msgid ""
-"Thanks very much - this will help others find useful stuff. We'll\n"
-" also, if you need it, give advice on what to do next about your\n"
-" requests."
+"<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \n"
+"a good internal knowledge of user behaviour on {{site_name}}. How, \n"
+"why and by whom requests are categorised is not straightforward, and there will\n"
+"be user error and ambiguity. You will also need to understand FOI law, and the\n"
+"way authorities use it. Plus you'll need to be an elite statistician. Please\n"
+"<a href=\"{{contact_path}}\">contact us</a> with questions."
msgstr ""
+"<strong>Gewährleistungsausschluss!</strong>Um diese Daten ehrenhaft zu nutzen, benötigen Sie gute interne Kenntnisse des Nutzerverhaltens auf {{site_name}}. Es ist nicht überschaubar wie, warum und von wem Anfragen kategorisiert werden und es sind Nutzerfehler und Unklarheiten zu erwarten. Ein gutes Verständnis der Informationsfreiheits-Gesetzgebung und die Art und Weise der Anwendung durch Behörden ist ebenso wichtig. Ferner benötigen Sie herausragende Statisikkenntnisse. Für Fragen nehmen Sie bitte\n"
+"<a href=\"{{contact_path}}\">Kontakt</a> mit uns auf."
-#: app/views/request/new_please_describe.rhtml:20
+#: app/views/request/details.rhtml:50
msgid ""
-"Thanks very much for helping keep everything <strong>neat and organised</strong>.\n"
-" We'll also, if you need it, give you advice on what to do next about each of your\n"
-" requests."
+"Here <strong>described</strong> means when a user selected a status for the request, and\n"
+"the most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\n"
+"{{site_name}} for intermediate events, which weren't given an explicit\n"
+"description by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
msgstr ""
-#: app/controllers/user_controller.rb:189
+#: app/views/request/details.rhtml:58
msgid ""
-"That doesn't look like a valid email address. Please check you have typed it"
-" correctly."
+"You can get this page in computer-readable format as part of the main JSON\n"
+"page for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
msgstr ""
-"Dies sieht nicht nach einer gültigen Emailadresse aus. Bitte überprüfen Sie "
-"Ihre Eingabe. "
+"Im Rahmen der HauptJSON Seite können diese Seite in maschinenlesbarer Form erhalten. \n"
+" Sehen Sie hier: <a href=\"{{api_path}}\">API Sokumentation</a>."
-#: app/views/request/_describe_state.rhtml:47
-#: app/views/request/_other_describe_state.rhtml:43
-msgid "The <strong>review has finished</strong> and overall:"
-msgstr "Die <strong>Prüfung wurde abgeschlossen</strong> und insgesamt:"
+#: app/views/request/followup_bad.rhtml:2
+msgid "Unable to send follow up message to {{username}}"
+msgstr "Nachfrage an {{username}} kann nicht gesendet werden"
-#: app/views/request/new.rhtml:62
-msgid "The Freedom of Information Act <strong>does not apply</strong> to"
-msgstr "Das Informationsfreiheitsgesetz <strong>trifft nicht zu</strong> auf"
+#: app/views/request/followup_bad.rhtml:4
+msgid "Unable to send a reply to {{username}}"
+msgstr "Antwort an {{username}} kann nicht gesendet werden"
-#: app/views/user_mailer/changeemail_already_used.rhtml:8
-msgid "The accounts have been left as they previously were."
-msgstr "Die Nutzerkonten wurden in Ihrem ursprünglichen Zustand belassen."
+#: app/views/request/followup_bad.rhtml:11
+msgid "Freedom of Information law no longer applies to"
+msgstr "Informationsfreiheitsgesetz ist nicht länger gültig für"
-#: app/views/request/_other_describe_state.rhtml:48
+#: app/views/request/followup_bad.rhtml:12
msgid ""
-"The authority do <strong>not have</strong> the information <small>(maybe "
-"they say who does)"
+"From the request page, try replying to a particular message, rather than sending\n"
+" a general followup. If you need to make a general followup, and know\n"
+" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
msgstr ""
-"Die Informationen <strong>liegen der Behörde nicht vor</strong> the "
-"information <small>(vielleicht können sie Ihnen mitteilen von wem Sie die "
-"Informationen erhalten können)"
+"Von der Anfragen-Seite, versuchen Sie direkt auf spezifische Nachrichten zu "
+"reagieren anstall eine generelle Nachfrage zu senden. Falls Sie eine "
+"generelle Nachfrage stellen müssen und eine Emailadresse kennen, welche an "
+"die richtige Stelle geht, sind Sie so freundlich uns <a href=\"%s\">diese zu"
+" senden. "
-#: app/views/request/show_response.rhtml:28
+#: app/views/request/followup_bad.rhtml:18
msgid ""
-"The authority only has a <strong>paper copy</strong> of the information."
+"no longer exists. If you are trying to make\n"
+" From the request page, try replying to a particular message, rather than sending\n"
+" a general followup. If you need to make a general followup, and know\n"
+" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
msgstr ""
-"Die zuständige Behörde ist ausschliesslich in Besitz einer gedruckten "
-"Version <strong>paper copy</strong> der angefragten Informtion. "
+"besteht nicht mehr. Falls Sie versuchen \n"
+" Von der Anfragen-Seite, versuchen Sie auf spezifische Nachrichten zu Antworten anstatt generelle Nachfragen zu versenden. Wenn Sie eine gnerelle Nachfrage stellen müssen und eine Email-Adresse kennen, die an die richtige Stelle geht, <a href=\"%s\">senden Sie uns diese</a> bitte zu."
-#: app/views/request/show_response.rhtml:18
+#: app/views/request/followup_bad.rhtml:24
msgid ""
-"The authority say that they <strong>need a postal\n"
-" address</strong>, not just an email, for it to be a valid FOI request"
+"We do not have a working {{law_used_full}} address for {{public_body_name}}."
msgstr ""
-"Die Behörde gibt an, dass sie für eine gültige IFG-Anfrage eine "
-"<strong>Postanschrift</strong>, nicht nur eine Emailadresse, benötigt."
+"Wir haben keine funktionierende {{law_used_full}} Adresse für "
+"{{public_body_name}}."
-#: app/views/request/show.rhtml:109
+#: app/views/request/followup_bad.rhtml:24
msgid ""
-"The authority would like to / has <strong>responded by post</strong> to this"
-" request."
+"You may be able to find\n"
+" one on their website, or by phoning them up and asking. If you manage\n"
+" to find one, then please <a href=\"%s\">send it to us</a>."
msgstr ""
-"Dhe Behörde würde gerne / hat <strong>postalisch</strong> auf diese Anfrage "
-"reagiert."
+"Es ist mögliche eine auf deren Internetseite zu finden oder sie telefonisch "
+"zu erfragen. Sollten Sie sie herausfinden, <a href=\"%s\">senden sie sie uns"
+" bitte zu</a>."
-#: app/views/request_mailer/stopped_responses.rhtml:1
-msgid ""
-"The email that you, on behalf of {{public_body}}, sent to\n"
-"{{user}} to reply to an {{law_used_short}}\n"
-"request has not been delivered."
-msgstr ""
-"Ihre im Namen von {{public_body}} an\n"
-"{{user}} gesendete Anfrage, um auf {{law_used_short}}\n"
-"zu reagieren, wurde nicht übermittelt."
+#: app/views/request/followup_bad.rhtml:29
+msgid "unknown reason "
+msgstr "unbekannte Ursache"
-#: app/views/request/show_response.rhtml:22
-msgid ""
-"The law, the Ministry of Justice and the Information Commissioner\n"
-" all say that an email is sufficient (<a href=\"%s\">more details</a>).\n"
-" At the bottom of this page, write a reply to the authority explaining this to them."
-msgstr ""
+#: app/views/request/followup_preview.rhtml:1
+msgid "Preview follow up to '"
+msgstr "Überprüfen Sie die Nachfrage an"
-#: app/views/general/exception_caught.rhtml:3
-msgid "The page either doesn't exist, or is broken. Things you can try now:"
-msgstr "Diese Seite existiert nicht oder ist beschädigt. Versuchen Sie:"
+#: app/views/request/followup_preview.rhtml:8
+msgid "Now preview your message asking for an internal review"
+msgstr "Überprüfen Sie nun Ihre Anfrage zur internen Prüfung"
-#: app/views/general/search.rhtml:143
-msgid "The public authority does not have the information requested"
-msgstr ""
+#: app/views/request/followup_preview.rhtml:10
+msgid "Now preview your follow up"
+msgstr "Überprüfen Sie nun Ihr Follow-up"
-#: app/views/general/search.rhtml:147
-msgid "The public authority would like part of the request explained"
+#: app/views/request/followup_preview.rhtml:14
+#: app/views/request/preview.rhtml:7
+msgid "Check you haven't included any <strong>personal information</strong>."
msgstr ""
+"Stellen Sie sicher, dass Sie keine <strong> persönlichen Informationen "
+"</strong> verwendet haben."
-#: app/views/general/search.rhtml:148
-msgid "The public authority would like to / has responded by post"
+#: app/views/request/followup_preview.rhtml:15
+msgid "Your message will appear in <strong>search engines</strong>"
msgstr ""
+"Ihre Nachricht wird in <strong>Suchmaschinen</strong> angezeigt werden"
-#: app/views/request/_other_describe_state.rhtml:60
-msgid "The request has been <strong>refused</strong>"
-msgstr "Die Anfrage wurde <strong>abgelehnt</strong>"
+#: app/views/request/followup_preview.rhtml:22 app/views/request/new.rhtml:40
+#: app/views/request/preview.rhtml:17
+#: app/views/request/simple_correspondence.rhtml:16
+#: app/views/request/simple_correspondence.rhtml:28
+msgid "To:"
+msgstr "An:"
-#: app/controllers/request_controller.rb:352
+#: app/views/request/followup_preview.rhtml:23
+#: app/views/request/preview.rhtml:18
+msgid "Subject:"
+msgstr "Betreff:"
+
+#: app/views/request/followup_preview.rhtml:37
msgid ""
-"The request has been updated since you originally loaded this page. Please "
-"check for any new incoming messages below, and try again."
+"<strong>Privacy warning:</strong> Your message, and any response\n"
+" to it, will be displayed publicly on this website."
msgstr ""
+"<strong>Datenschutzhinweis:</strong> Ihre Nachricht als auch alle "
+"entsprechenden Reaktionen werden auf dieser Webseite veröffentlicht."
-#: app/views/request/show.rhtml:104
-msgid "The request is <strong>waiting for clarification</strong>."
-msgstr "<strong>Klärung</strong> der Anfrage wird erwartet."
-
-#: app/views/request/show.rhtml:97
-msgid "The request was <strong>partially successful</strong>."
-msgstr "Ihre Anfrage war <strong>teilweise erfolgreich</strong>."
-
-#: app/views/request/show.rhtml:93
-msgid "The request was <strong>refused</strong> by"
-msgstr "Die Anfrage wurde <strong>abgelehnt</strong> durch"
+#: app/views/request/followup_preview.rhtml:49
+msgid "Re-edit this message"
+msgstr "Nachricht ändern"
-#: app/views/request/show.rhtml:95
-msgid "The request was <strong>successful</strong>."
-msgstr "Die Anfrage war <strong>erfolgreich</strong>."
+#: app/views/request/followup_preview.rhtml:50
+msgid "Send message"
+msgstr "Nachricht senden"
-#: app/views/general/search.rhtml:144
-msgid "The request was refused by the public authority"
-msgstr ""
+#: app/views/request/hidden.rhtml:1
+msgid "Request has been removed"
+msgstr "Anfrage wurde verweigert"
#: app/views/request/hidden.rhtml:9
msgid ""
@@ -2804,703 +2979,1105 @@ msgstr ""
"Die von Ihnen ausgewählte Anfrage wurde verweigert. Dies kann unterschiedliche Ursachen haben, welche an dieser Stelle leider nicht näher erläutert werden können. Bitte<a\n"
" href=\"%s\">kontaktieren Sie uns</a> für weitere Fragen. "
-#: app/views/general/search.rhtml:152
-msgid "The requester has abandoned this request for some reason"
+#: app/views/request/hidden.rhtml:15
+msgid ""
+"If you are the requester, then you may <a href=\"%s\">sign in</a> to view "
+"the request."
msgstr ""
+"Falls Sie der Antragsteller sind, <a href=\"%s\">loggen Sie sich ein</a>, um"
+" die Anfrage anzusehen."
+
+#: app/views/request/list.rhtml:8
+msgid "Follow these requests"
+msgstr "Diesen Anfragen folgen"
+
+#: app/views/request/list.rhtml:19
+msgid "No requests of this sort yet."
+msgstr "Es besteht noch keine Anfrage dieser Art."
+
+#: app/views/request/list.rhtml:21
+msgid "{{count}} FOI requests found"
+msgstr "{{count}} IFG-Anfragen gefunden"
-#: app/views/request/_followup.rhtml:32
+#: app/views/request/list.rhtml:27
+msgid "Unexpected search result type"
+msgstr "Unerwartetes Suchergebnis"
+
+#: app/views/request/new.rhtml:20
+msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
+msgstr "Stellen Sie einen {{law_used_short}} Antrag an '{{public_body_name}}'"
+
+#: app/views/request/new.rhtml:22
+msgid "2. Ask for Information"
+msgstr "2. Informationen anfragen"
+
+#: app/views/request/new.rhtml:27
msgid ""
-"The response to your request has been <strong>delayed</strong>. You can say that, \n"
-" by law, the authority should normally have responded\n"
-" <strong>promptly</strong> and"
+"{{existing_request_user}} already\n"
+" created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n"
+" or edit the details below to make a new but similar request."
msgstr ""
-"Die Beantwortung auf Ihre Anfrage ist verspätet. Nach gesetzlicher "
-"Vorschrift sollte die Behörde unverzüglich geantwortet haben und"
+"{{existing_request_user}} already\n"
+" created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n"
+" or edit the details below to make a new but similar request."
-#: app/views/request/_followup.rhtml:44
+#: app/views/request/new.rhtml:44
msgid ""
-"The response to your request is <strong>long overdue</strong>. You can say that, by \n"
-" law, under all circumstances, the authority should have responded\n"
-" by now"
+"Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for "
+"examples of how to word your request."
msgstr ""
-"The response to your request is <strong>long overdue</strong>. Nach "
-"gesetzlicher Vorschrift sollte {{public_body_link}} Ihnen inzwischen unter "
-"allen Umständen geantwortet haben. "
+"Schauen Sie <a href='{{url}}'>andere Anfragen</a> an '{{public_body_name}}' "
+"für Formulierungsbeispiele an. "
-#: app/views/public_body/show.rhtml:100
+#: app/views/request/new.rhtml:46
msgid ""
-"The search index is currently offline, so we can't show the Freedom of "
-"Information requests that have been made to this authority."
+"Browse <a href='{{url}}'>other requests</a> for examples of how to word your"
+" request."
msgstr ""
-"Da die Suchanzeige momentan offline ist, können wir die an diese Behörde "
-"gestellten Informationsfreiheitsanfragen gerade leider nicht anzeigen. "
+"Durchsuchen Sie <a href='{{url}}'>andere Anfragen</a>für "
+"Formulierungsbeispiele für Ihre Anfrage."
-#: app/views/user/show.rhtml:141
+#: app/views/request/new.rhtml:52
+msgid "Special note for this authority!"
+msgstr "Spezielle Nachricht and diese Behörde!"
+
+#: app/views/request/new.rhtml:58
+msgid "Please ask for environmental information only"
+msgstr "Bitte fragen Sie ausschliesslich nach Umweltinformationen"
+
+#: app/views/request/new.rhtml:60
+msgid "The Freedom of Information Act <strong>does not apply</strong> to"
+msgstr "Das Informationsfreiheitsgesetz <strong>trifft nicht zu</strong> auf"
+
+#: app/views/request/new.rhtml:61
msgid ""
-"The search index is currently offline, so we can't show the Freedom of "
-"Information requests this person has made."
+"However, you have the right to request environmental\n"
+" information under a different law"
msgstr ""
-"Da die Suchanzeige momentan offline ist, können wir durch diese Person "
-"gestellten Informationsfreiheitsanfragen gerade leider nicht anzeigen. "
+"Nichtsdestrotrotz sind Sie berechtigt Umweltanfragen auf Basis eines anderen"
+" Gesetzes zu stellen"
-#: app/controllers/track_controller.rb:144
-msgid "Then you can cancel the alert."
+#: app/views/request/new.rhtml:63
+msgid ""
+"This covers a very wide spectrum of information about the state of\n"
+" the <strong>natural and built environment</strong>, such as:"
msgstr ""
-#: app/controllers/track_controller.rb:174
-msgid "Then you can cancel the alerts."
+#: app/views/request/new.rhtml:67
+msgid ""
+"Air, water, soil, land, flora and fauna (including how these effect\n"
+" human beings)"
msgstr ""
+"Luft, Wasser, Erde, Land, Flora und Fauna (einschliesslich deren Einfluss "
+"auf den Menschen)"
-#: app/controllers/user_controller.rb:249
-msgid "Then you can change your email address used on {{site_name}}"
+#: app/views/request/new.rhtml:69
+msgid ""
+"Information on emissions and discharges (e.g. noise, energy,\n"
+" radiation, waste materials)"
msgstr ""
+"Informationen bzg. Emissionen und Ablagerungen (e.g. Lärm, Energie,\n"
+" Strahlung, Abfallmaterialien)"
-#: app/controllers/user_controller.rb:203
-msgid "Then you can change your password on {{site_name}}"
-msgstr ""
+#: app/views/request/new.rhtml:71
+msgid "Human health and safety"
+msgstr "Gesundheit und Sicherheit"
-#: app/controllers/request_controller.rb:338
-msgid "Then you can classify the FOI response you have got from "
+#: app/views/request/new.rhtml:72
+msgid ""
+"Cultural sites and built structures (as they may be affected by the\n"
+" environmental factors listed above)"
msgstr ""
+"Kulturelle Seiten und erstellte Strukturen (da diese durch die oben "
+"gelisteten Umweltfaktoren beeinträchtigt sein könnten)"
-#: app/controllers/request_game_controller.rb:41
-msgid "Then you can play the request categorisation game."
-msgstr ""
+#: app/views/request/new.rhtml:74
+msgid "Plans and administrative measures that affect these matters"
+msgstr "Diese Aspekte beeinflussende Pläne und administrative Maßnahmen"
-#: app/controllers/user_controller.rb:330
-msgid "Then you can send a message to "
+#: app/views/request/new.rhtml:77
+msgid ""
+"Please only request information that comes under those categories, <strong>do not waste your\n"
+" time</strong> or the time of the public authority by requesting unrelated information."
msgstr ""
+"Bitte fragen Sie ausschliesslich auf diese Kategorien zutreffende "
+"Informationen an. <strong>Verschwenden Sie nicht Ihre⏎Zeit</strong> oder die"
+" Zeit der Behörde, indem Sie nicht zutreffende Informationen anfragen."
-#: app/controllers/user_controller.rb:514
-msgid "Then you can sign in to {{site_name}}"
-msgstr ""
+#: app/views/request/new.rhtml:84
+msgid "Summary:"
+msgstr "Zusammenfassung:"
-#: app/controllers/request_controller.rb:61
-msgid "Then you can update the status of your request to "
+#: app/views/request/new.rhtml:88
+msgid ""
+"a one line summary of the information you are requesting, \n"
+"\t\t\te.g."
msgstr ""
+"Einzeilige Zusammenfassung der von Ihnen angefragten Information, \n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span>e.g."
-#: app/controllers/request_controller.rb:702
-msgid "Then you can upload an FOI response. "
-msgstr "Dann können Sie eine IFG-Antwort hochladen. "
+#: app/views/request/new.rhtml:90
+msgid "'Pollution levels over time for the River Tyne'"
+msgstr "'Verschmutzungsgrades des Tyne Flusses im Zeitverlauf'"
-#: app/controllers/request_controller.rb:545
-msgid "Then you can write follow up message to "
+#: app/views/request/new.rhtml:92
+msgid "'Crime statistics by ward level for Wales'"
+msgstr "´Kriminalitätsrate auf Länderebene´"
+
+#: app/views/request/new.rhtml:104
+msgid "Write your request in <strong>simple, precise language</strong>."
msgstr ""
+"Formulieren Sie Ihre Anfrage in <strong>schlicht und präzise </strong>."
-#: app/controllers/request_controller.rb:546
-msgid "Then you can write your reply to "
+#: app/views/request/new.rhtml:105
+msgid ""
+"Ask for <strong>specific</strong> documents or information, this site is not"
+" suitable for general enquiries."
msgstr ""
+"Fragen Sie nach <strong>spezifischen</strong> Dokumenten oder Informationen."
+" Diese Seite ist nicht für generelle Anfragen vorgesehen. "
-#: app/models/track_thing.rb:197
+#: app/views/request/new.rhtml:106
msgid ""
-"Then you will be emailed whenever '{{user_name}}' requests something or gets"
-" a response."
+"Keep it <strong>focused</strong>, you'll be more likely to get what you want"
+" (<a href=\"%s\">why?</a>)."
msgstr ""
+"Machen Sie es <strong>kurz und bündig</strong>, die Wahrscheinlichkeit die "
+"gewünschten Informationen zu erhalten ist somit größer(<a "
+"href=\"%s\">Warum?</a>)."
-#: app/models/track_thing.rb:213
+#: app/views/request/new.rhtml:113
+msgid "Your request:"
+msgstr "Ihre Anfrage:"
+
+#: app/views/request/new.rhtml:120
msgid ""
-"Then you will be emailed whenever a new request or response matches "
-"'{{query}}'."
+"Everything that you enter on this page, including <strong>your name</strong>, \n"
+" will be <strong>displayed publicly</strong> on\n"
+" this website forever (<a href=\"%s\">why?</a>)."
msgstr ""
+"Jegliche auf dieser Seite eingegebene Information, inklusive <strong>Ihrem Namen</strong>, ⏎ wird\n"
+" permanent auf dieser Internetseite <strong>veröffentlicht</strong>(<a href=\"%s\"> Warum?</a>)."
-#: app/models/track_thing.rb:162
-msgid "Then you will be emailed whenever an FOI request succeeds."
+#: app/views/request/new.rhtml:123
+msgid ""
+"If you are thinking of using a pseudonym,\n"
+" please <a href=\"%s\">read this first</a>."
msgstr ""
-"Sie werden bei jeder erfolgreichen IFG-Anfrage per Email benachrichtigt. "
+"Wenn Sie ein Pseudonym als Benutzername verwenden möchten,\n"
+" bitte <a href=\"%s\">lesen Sie hier</a>."
-#: app/models/track_thing.rb:146
-msgid "Then you will be emailed whenever anyone makes a new FOI request."
+#: app/views/request/new.rhtml:128
+msgid ""
+"Everything that you enter on this page \n"
+" will be <strong>displayed publicly</strong> on\n"
+" this website forever (<a href=\"%s\">why?</a>)."
msgstr ""
+"Jegliche auf dieser Seite eingegebene Information wird\n"
+" permanent auf dieser Internetseite <strong>veröffentlicht</strong>(<a href=\"%s\"> Warum?</a>)."
-#: app/models/track_thing.rb:181
+#: app/views/request/new.rhtml:135
msgid ""
-"Then you will be emailed whenever someone requests something or gets a "
-"response from '{{public_body_name}}'."
+"<strong> Can I request information about myself?</strong>\n"
+"\t\t\t<a href=\"%s\">No! (Click here for details)</a>"
msgstr ""
+"<strong> Kann ich Informationen zu meiner eigenen Person anfragen?</strong>\n"
+"<span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><a href=\"%s\">Nein! (Weitere Informationen)</a>"
-#: app/controllers/request_controller.rb:299
-msgid "Then your FOI request to {{public_body_name}} will be sent."
-msgstr "Dann wird Ihre OFG-Anfrage an {{public_body_name}} gesendet. "
+#: app/views/request/new.rhtml:143
+msgid "Preview your public request"
+msgstr "Vorschau der Anfrage ansehen"
-#: app/controllers/comment_controller.rb:56
-msgid "Then your annotation to {{info_request_title}} will be posted."
-msgstr "Dann wird Ihr Kommentar zu {{info_request_title}} gesendet."
+#: app/views/request/new_bad_contact.rhtml:1
+msgid "Missing contact details for '"
+msgstr "Folgende Kontaktdetails fehlen:"
-#: app/views/request_mailer/comment_on_alert_plural.rhtml:1
+#: app/views/request/new_bad_contact.rhtml:5
msgid ""
-"There are {{count}} new annotations on your {{info_request}} request. Follow"
-" this link to see what they wrote."
+"Unfortunately, we do not have a working {{info_request_law_used_full}}\n"
+"address for"
msgstr ""
-"Es gibt {{count}} neue Anmerkungen zu Ihrer {{info_request}} Anfrage. Folgen"
-" Sie dem Link, um diese anzusehen. "
+"Wir haben leider keine funktionierende Email-Adresse für "
+"{{info_request_law_used_full}}"
-#: app/views/user/show.rhtml:4
+#: app/views/request/new_bad_contact.rhtml:6
msgid ""
-"There is <strong>more than one person</strong> who uses this site and has this name. \n"
-" One of them is shown below, you may mean a different one:"
+"You may be able to find\n"
+"one on their website, or by phoning them up and asking. If you manage\n"
+"to find one, then please <a href=\"{{help_url}}\">send it to us</a>."
msgstr ""
-"Es gibt <strong>mehrere Nutzer</strong> mit diesem Namen. Einer wird unten "
-"angezeigt, Sie könnten jedoch einen andere Person meinen:"
+"Sie können eventuell eine auf deren Internetseite finden, oder sie anrufen "
+"und nachfragen. Sollten Sie eine herausfinden, freuen wir uns über Ihre <a "
+"href=\"{{help_url}}\">Zusendung</a>."
-#: app/views/request/show.rhtml:113
+#: app/views/request/new_please_describe.rhtml:5
msgid ""
-"There was a <strong>delivery error</strong> or similar, which needs fixing "
-"by the {{site_name}} team."
+"Please select each of these requests in turn, and <strong>let everyone know</strong>\n"
+"if they are successful yet or not."
msgstr ""
+"Bitte wählen Sie diese Anfragen der Reihe nach aus und <strong>lassen Sie "
+"jederman wissen</strong>, ob sie bereits erfolgreich waren oder noch nicht. "
-#: app/controllers/public_body_controller.rb:77
-msgid "There was an error with the words you entered, please try again."
+#: app/views/request/new_please_describe.rhtml:16
+msgid ""
+"When you're done, <strong>come back here</strong>, <a href=\"%s\">reload "
+"this page</a> and file your new request."
msgstr ""
+"Wenn Sie fertig sind, <strong>kommen Sie hierher zurück</strong>, <a "
+"href=\"%s\">laden Sie die Seite erneut</a> und stellen Sie Ihre neue "
+"Anfrage."
-#: app/views/request/_describe_state.rhtml:38
-msgid "They are going to reply <strong>by post</strong>"
-msgstr "Ihnen wird <strong>postalisch</strong> geantwortet werden"
-
-#: app/views/request/_describe_state.rhtml:52
+#: app/views/request/new_please_describe.rhtml:20
msgid ""
-"They do <strong>not have</strong> the information <small>(maybe they say who"
-" does)</small>"
+"Thanks very much for helping keep everything <strong>neat and organised</strong>.\n"
+" We'll also, if you need it, give you advice on what to do next about each of your\n"
+" requests."
msgstr ""
-"Die Informationen <strong>liegen nicht vor</strong> <small>(vielleicht "
-"können sie Ihnen mitteilen von wem Sie die Informationen erhalten "
-"können)</small>"
+"Vielen Dank für die Mithilfe die Seite sauber und übersichtlich zu halten. "
+"Gerne beraten wir Sie auch bei den nächsten Schritten Ihrer Anfragen, falls "
+"Sie dies wünschen. "
-#: app/views/user/show.rhtml:83
-msgid "They have been given the following explanation:"
-msgstr "Die folgende Erklärung wurde abgegeben:"
+#: app/views/request/preview.rhtml:5
+msgid "3. Now check your request"
+msgstr "3. Überprüfen Sie nun Ihre Anfrage"
-#: app/views/request_mailer/overdue_alert.rhtml:3
+#: app/views/request/preview.rhtml:8
msgid ""
-"They have not replied to your {{law_used_short}} request {{title}} promptly,"
-" as normally required by law"
+"Your name, request and any responses will appear in <strong>search engines</strong>\n"
+" (<a href=\"%s\">details</a>)."
msgstr ""
-"Ihre {{law_used_short}} Anfrage {{title}}wurde nicht im gesetzlich "
-"vorgeschriebenen Zeitrahmen beantwortet. "
+"Ihr Name, Ihre Anfrage und alle Antworten werden in <strong>Suchmaschinen</strong> angezeigt werden\n"
+" (<a href=\"%s\">Details</a>)."
-#: app/views/request_mailer/very_overdue_alert.rhtml:3
+#: app/views/request/preview.rhtml:31
msgid ""
-"They have not replied to your {{law_used_short}} request {{title}}, \n"
-"as required by law"
+"<strong>Privacy note:</strong> If you want to request private information about\n"
+" yourself then <a href=\"%s\">click here</a>."
msgstr ""
-"Ihre {{law_used_short}} Anfrage {{title}} wurde nicht nach gesetzlicher "
-"Vorschrift beantwortet"
+"<strong>Privacy note:</strong> Falls Sie Informationen zu Ihrer eingenen "
+"Person erfragen wollen <a href=\"%s\">Klicken Sie hier</a>."
-#: app/views/request/_after_actions.rhtml:3
-msgid "Things to do with this request"
-msgstr "Weitere Möglichkeiten für diese Anfrage"
+#: app/views/request/preview.rhtml:40
+msgid "Edit this request"
+msgstr "Anfrage bearbeiten"
-#: app/views/public_body/show.rhtml:59
-msgid "This authority no longer exists, so you cannot make a request to it."
+#: app/views/request/preview.rhtml:41
+msgid "Send request"
+msgstr "Anfrage senden"
+
+#: app/views/request/preview.rhtml:45
+msgid "Tags:"
+msgstr "Links:"
+
+#: app/views/request/select_authority.rhtml:27
+msgid "Select the authority to write to"
+msgstr "Wählen Sie die zu kontaktierende Behörde"
+
+#: app/views/request/select_authority.rhtml:29
+msgid "1. Select an authority"
+msgstr "1. Behörde auswählen"
+
+#: app/views/request/select_authority.rhtml:35
+msgid ""
+"First, type in the <strong>name of the UK public authority</strong> you'd \n"
+" <br>like information from. <strong>By law, they have to respond</strong>\n"
+" (<a href=\"%s\">why?</a>)."
msgstr ""
-"Diese Behörde existiert nichtmehr. Es ist folglich nicht möglich eine "
-"Anfrage zu stellen. "
+"Zuerst, geben Sie <strong>EU Behörde</strong> ein, von welcher Sie \n"
+" <br>Informationen anfragen möchten. <strong>Diese muss Ihnen wie gesetzlich vorgschrieben antworten</strong>\n"
+" (<a href=\"%s\">warum?</a>)."
-#: app/views/request/_hidden_correspondence.rhtml:23
+#: app/views/request/show.rhtml:5
msgid ""
-"This comment has been hidden. See annotations to\n"
-" find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+"This request has prominence 'hidden'. You can only see it because you are logged\n"
+" in as a super user."
msgstr ""
+"Diese Anfrage ist verborgen. Sie können sie nur sehen weil Sie als "
+"Supernutzer eingeloggt sind. "
-#: app/views/request/new.rhtml:65
+#: app/views/request/show.rhtml:11
msgid ""
-"This covers a very wide spectrum of information about the state of\n"
-" the <strong>natural and built environment</strong>, such as:"
+"This request is hidden, so that only you the requester can see it. Please\n"
+" <a href=\"%s\">contact us</a> if you are not sure why."
msgstr ""
+"Diese Anfrage ist verborgen, so dass ausschliesslich Sie als Nutzer sie sehen können. \n"
+"Bitte⏎ <a href=\"%s\">kontaktieren Sie us</a> falls Sie nicht wissen warum."
-#: app/views/request/_view_html_prefix.rhtml:9
+#: app/views/request/show.rhtml:36
msgid ""
-"This is an HTML version of an attachment to the Freedom of Information "
-"request"
+"{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) made this "
+"{{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to "
+"{{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
msgstr ""
-"Dies ist eine HTML Version eines Anhanges der Informationsfreiheitsanfrage"
-#: app/views/request_mailer/stopped_responses.rhtml:5
+#: app/views/request/show.rhtml:44
+msgid "{{user}} made this {{law_used_full}} request"
+msgstr "{{user}} hat diese {{law_used_full}} Anfrage gestellt"
+
+#: app/views/request/show.rhtml:45
+msgid "to {{public_body}}"
+msgstr "an {{public_body}}"
+
+#: app/views/request/show.rhtml:52
msgid ""
-"This is because {{title}} is an old request that has been\n"
-"marked to no longer receive responses."
+"Please <strong>answer the question above</strong> so we know whether the "
msgstr ""
-"Die Ursache ist der veraltete Status dieser Anfrage {{title}}, \n"
-"welche keine weiteren Antworten erhalten kann."
+"Bitte <strong>beantworten Sie die oben angezeigte Frage</strong>, damit wir "
+"wissen ob"
-#: app/views/track/_tracking_links.rhtml:9
+#: app/views/request/show.rhtml:53
+msgid "useful information."
+msgstr "nützliche Information"
+
+#: app/views/request/show.rhtml:55
+msgid "This request has an <strong>unknown status</strong>."
+msgstr "Diese Anfrage hat einen <strong>unbekannten Status</strong>."
+
+#: app/views/request/show.rhtml:57
+msgid "We're waiting for someone to read"
+msgstr "Wir warten, dass es von jemandem gelesen wird"
+
+#: app/views/request/show.rhtml:59
msgid ""
-"This is your own request, so you will be automatically emailed when new "
-"responses arrive."
+"and update the status accordingly. Perhaps <strong>you</strong> might like "
+"to help out by doing that?"
msgstr ""
-"Dies ist Ihre Anfrage. Sie erhalten eine automatische Emailbenchrichtigung, "
-"sobald Ihre Anfrage beantwortet wird. "
+"und aktualisieren Sie den Status entsprechend. Vielleicht würden "
+"<strong>Sie</strong> uns somit gerne unterstützen?"
-#: app/views/request/_hidden_correspondence.rhtml:17
+#: app/views/request/show.rhtml:61
+msgid "We're waiting for"
+msgstr "Wir erwarten"
+
+#: app/views/request/show.rhtml:62
+msgid "to read"
+msgstr "zu lesen"
+
+#: app/views/request/show.rhtml:64
+msgid "and update the status."
+msgstr "und aktualisieren Sie den Status. "
+
+#: app/views/request/show.rhtml:68
msgid ""
-"This outgoing message has been hidden. See annotations to\n"
-"\t\t\t\t\t\tfind out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+"Currently <strong>waiting for a response</strong> from {{public_body_link}},"
+" they must respond promptly and"
msgstr ""
+"<strong>Antwort</strong> von {{public_body_link}} wird erwartet. Sie sollten"
+" in Kürze eine Antwort erhalten und"
-#: app/views/user/show.rhtml:122
-msgid "This person has"
-msgstr "Diese Person hat"
+#: app/views/request/show.rhtml:72
+msgid "normally"
+msgstr "normalerweise"
+
+#: app/views/request/show.rhtml:74
+msgid "no later than"
+msgstr "nicht später als"
+
+#: app/views/request/show.rhtml:77
+msgid "Response to this request is <strong>delayed</strong>."
+msgstr "Die Antwort auf diese Anfrage ist <strong>im Rückstand</strong>."
-#: app/views/user/show.rhtml:152
-msgid "This person's"
+#: app/views/request/show.rhtml:78
+msgid ""
+"By law, {{public_body_link}} should normally have responded "
+"<strong>promptly</strong> and"
msgstr ""
+"Nach gesetzlicher Vorschrift sollte {{public_body_link}} "
+"<strong>umgehend</strong> geantwortet haben und"
-#: app/views/request/_describe_state.rhtml:84
-msgid "This request <strong>requires administrator attention</strong>"
+#: app/views/request/show.rhtml:82
+msgid "by"
+msgstr "von"
+
+#: app/views/request/show.rhtml:85
+msgid "Response to this request is <strong>long overdue</strong>."
msgstr ""
+"Die Antwort auf diese Anfrage ist <strong>lange im Rückstand</strong>."
-#: app/views/request/show.rhtml:55
-msgid "This request has an <strong>unknown status</strong>."
-msgstr "Diese Anfrage hat einen <strong>unbekannten Status</strong>."
+#: app/views/request/show.rhtml:86
+msgid ""
+"By law, under all circumstances, {{public_body_link}} should have responded "
+"by now"
+msgstr ""
+"Nach gesetzlicher Vorschrift sollte {{public_body_link}} Ihnen inzwischen "
+"unter allen Umständen geantwortet haben. "
-#: app/views/request/show.rhtml:117
+#: app/views/request/show.rhtml:88
+msgid "You can <strong>complain</strong> by"
+msgstr "Sie können sich <strong>beschweren</strong>, indem sie"
+
+#: app/views/request/show.rhtml:89
+msgid "requesting an internal review"
+msgstr "Interne Prüfung beantragen "
+
+#: app/views/request/show.rhtml:91
+msgid "<strong>did not have</strong> the information requested."
+msgstr "Die angefragten Informationen waren <strong>nicht vorhanden</strong>."
+
+#: app/views/request/show.rhtml:93
+msgid "The request was <strong>refused</strong> by"
+msgstr "Die Anfrage wurde <strong>abgelehnt</strong> durch"
+
+#: app/views/request/show.rhtml:95
+msgid "The request was <strong>successful</strong>."
+msgstr "Die Anfrage war <strong>erfolgreich</strong>."
+
+#: app/views/request/show.rhtml:97
+msgid "The request was <strong>partially successful</strong>."
+msgstr "Ihre Anfrage war <strong>teilweise erfolgreich</strong>."
+
+#: app/views/request/show.rhtml:100
+msgid "is <strong>waiting for your clarification</strong>."
+msgstr "<strong>Ihre Erläuterung wird erwartet</strong>."
+
+#: app/views/request/show.rhtml:101
+msgid "Please"
+msgstr "Bitte"
+
+#: app/views/request/show.rhtml:102
+msgid "send a follow up message"
+msgstr "Nachfrage versenden"
+
+#: app/views/request/show.rhtml:104
+msgid "The request is <strong>waiting for clarification</strong>."
+msgstr "<strong>Klärung</strong> der Anfrage wird erwartet."
+
+#: app/views/request/show.rhtml:105
+msgid "If you are {{user_link}}, please"
+msgstr "Wenn Sie {{user_link}} sind, bitte"
+
+#: app/views/request/show.rhtml:106
+msgid "sign in"
+msgstr "Anmelden"
+
+#: app/views/request/show.rhtml:106
+msgid "to send a follow up message."
+msgstr "um eine Nachfrage zu senden. "
+
+#: app/views/request/show.rhtml:109
msgid ""
-"This request has been <strong>withdrawn</strong> by the person who made it. \n"
-" \t There may be an explanation in the correspondence below."
+"The authority would like to / has <strong>responded by post</strong> to this"
+" request."
msgstr ""
-"Diese Anfrage wurde von dem/der Anfrageninhaber/in <strong>zurückgezogen</strong>. \n"
-" <span class=\"whitespace other\" title=\"Tab\">»</span> Sie können evt. eine Begründung im unten angefügten Kommunikationsverlauf finden."
+"Dhe Behörde würde gerne / hat <strong>postalisch</strong> auf diese Anfrage "
+"reagiert."
-#: app/models/info_request.rb:395
+#: app/views/request/show.rhtml:111
msgid ""
-"This request has been set by an administrator to \"allow new responses from "
-"nobody\""
+"Waiting for an <strong>internal review</strong> by {{public_body_link}} of "
+"their handling of this request."
msgstr ""
+"<strong>Interne Prüfung</strong> durch {{public_body_link}} wird erwartet."
+
+#: app/views/request/show.rhtml:113
+msgid ""
+"There was a <strong>delivery error</strong> or similar, which needs fixing "
+"by the {{site_name}} team."
+msgstr ""
+"Es ist ein <strong>Übermittlungsfehler</strong>oder ähnliches aufgetreten, "
+"welcher von unserem {{site_name}} Team repariert werden muss. "
#: app/views/request/show.rhtml:115
msgid ""
"This request has had an unusual response, and <strong>requires "
"attention</strong> from the {{site_name}} team."
msgstr ""
+"Diese Anfrage erhielt eine ungewöhnliche Antwort und müsste einmal durch das"
+" {{site_name}} team <strong>überprüft</strong> werden."
-#: app/views/request/show.rhtml:5
+#: app/views/request/show.rhtml:117
msgid ""
-"This request has prominence 'hidden'. You can only see it because you are logged\n"
-" in as a super user."
+"This request has been <strong>withdrawn</strong> by the person who made it. \n"
+" \t There may be an explanation in the correspondence below."
msgstr ""
+"Diese Anfrage wurde von dem/der Anfrageninhaber/in <strong>zurückgezogen</strong>. \n"
+" <span class=\"whitespace other\" title=\"Tab\">»</span> Sie können evt. eine Begründung im unten angefügten Kommunikationsverlauf finden."
-#: app/views/request/show.rhtml:11
+#: app/views/request/show_response.rhtml:13
+msgid "Which of these is happening?"
+msgstr "Welcher dieser Aspekte ist zutreffend?"
+
+#: app/views/request/show_response.rhtml:18
msgid ""
-"This request is hidden, so that only you the requester can see it. Please\n"
-" <a href=\"%s\">contact us</a> if you are not sure why."
+"The authority say that they <strong>need a postal\n"
+" address</strong>, not just an email, for it to be a valid FOI request"
msgstr ""
+"Die Behörde gibt an, dass sie für eine gültige IFG-Anfrage eine "
+"<strong>Postanschrift</strong>, nicht nur eine Emailadresse, benötigt."
-#: app/views/request/_hidden_correspondence.rhtml:10
+#: app/views/request/show_response.rhtml:26
msgid ""
-"This response has been hidden. See annotations to find out why.\n"
-" If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+"The authority only has a <strong>paper copy</strong> of the information."
msgstr ""
+"Die zuständige Behörde ist ausschliesslich in Besitz einer gedruckten "
+"Version <strong>paper copy</strong> der angefragten Informtion. "
-#: app/views/request/new.rhtml:49
+#: app/views/request/show_response.rhtml:29
msgid ""
-"This site is <strong>public</strong>. Everything you type and any response "
-"will be published."
+"At the bottom of this page, write a reply to them trying to persuade them to scan it in\n"
+" (<a href=\"%s\">more details</a>)."
msgstr ""
-"Diese Seite ist <strong>öffentlich</strong>. Jede von Ihnen eingegebene "
-"Information, sowie jegliche Antwort wird veröffentlicht. "
+"Am Ende der Seite können Sie eine Antwort mit der Aufforderung das Dokument einzuscannen senden\n"
+" (<a href=\"%s\">weitere Details</a>)."
-#: app/views/request/details.rhtml:6
+#: app/views/request/show_response.rhtml:34
msgid ""
-"This table shows the technical details of the internal events that happened\n"
-"to this request on {{site_name}}. This could be used to generate information about\n"
-"the speed with which authorities respond to requests, the number of requests\n"
-"which require a postal response and much more."
+"You want to <strong>give your postal address</strong> to the authority in "
+"private."
msgstr ""
+"Sie möchten <strong>Ihre Anschrift</strong> geschützt an die Behörde senden."
-#: app/views/user/show.rhtml:79
-msgid "This user has been banned from {{site_name}} "
-msgstr ""
+#: app/views/request/show_response.rhtml:37
+msgid "To do that please send a private email to "
+msgstr "Senden Sie uns hierfür bitte eine private Email"
-#: app/views/user_mailer/changeemail_already_used.rhtml:5
+#: app/views/request/show_response.rhtml:39
msgid ""
-"This was not possible because there is already an account using \n"
-"the email address {{email}}."
+"containing your postal address, and asking them to reply to this request.\n"
+" Or you could phone them."
msgstr ""
+"Ihre Postanschrift beinhaltend und Sie fragend auf diese Afrage zu antworten.\n"
+" Oder Sie könnten Sie anrufen."
-#: app/models/track_thing.rb:145
-msgid "To be emailed about any new requests"
+#: app/views/request/show_response.rhtml:42
+msgid ""
+"When you receive the paper response, please help\n"
+" others find out what it says:"
msgstr ""
+"Wenn Sie die gedruckte Antwort erhalten, machen Sie den Inhalt bitte für "
+"andere Nutzer zugänglich"
-#: app/models/track_thing.rb:161
-msgid "To be emailed about any successful requests"
-msgstr "Um per Email über erfolgreiche Anfragen informiert zu werden"
-
-#: app/models/track_thing.rb:196
-msgid "To be emailed about requests by '{{user_name}}'"
+#: app/views/request/show_response.rhtml:45
+msgid ""
+"Add an annotation to your request with choice quotes, or\n"
+" a <strong>summary of the response</strong>."
msgstr ""
+"Fügen Sie Ihrer Anfrage einen Kommentar mit Wahlzitat oder, "
+"eine<strong>Zusammenfassung Ihrer Antwort</strong>hinzu. "
-#: app/models/track_thing.rb:180
+#: app/views/request/show_response.rhtml:47
msgid ""
-"To be emailed about requests made using {{site_name}} to the public "
-"authority '{{public_body_name}}'"
+"If you can, scan in or photograph the response, and <strong>send us\n"
+" a copy to upload</strong>."
msgstr ""
+"Fall möglich, scannen oder photographieren Sie die Antwort und<strong>senden"
+" Sie uns eine Kopie zum Upload</strong>."
-#: app/controllers/track_controller.rb:173
-msgid "To cancel these alerts"
-msgstr "Um diese Benachrichtigungen zu löschen"
+#: app/views/request/show_response.rhtml:60
+msgid "New response to your request"
+msgstr "Neue Antwort auf Ihre Anfrage"
-#: app/controllers/track_controller.rb:143
-msgid "To cancel this alert"
-msgstr "Um diese Benachrichtigung zu löschen"
+#: app/views/request/show_response.rhtml:62
+msgid "Response to your request"
+msgstr "Reagieren Sie auf Ihre Anfrage"
-#: app/views/user/no_cookies.rhtml:5
+#: app/views/request/show_response.rhtml:66
+msgid "New response to {{law_used_short}} request"
+msgstr "Neue Antwort auf {{law_used_short}} Anfrage"
+
+#: app/views/request/similar.rhtml:7
+msgid "No similar requests found."
+msgstr "Keine vergleichbaren Anfragen gefunden. "
+
+#: app/views/request/similar.rhtml:18
+msgid "Unexpected search result type "
+msgstr "Unerwartetes Suchergebnis"
+
+#: app/views/request/simple_correspondence.rhtml:1
msgid ""
-"To carry on, you need to sign in or make an account. Unfortunately, there\n"
-"was a technical problem trying to do this."
+"This is a plain-text version of the Freedom of Information request "
+"\"{{request_title}}\". The latest, full version is available online at "
+"{{full_url}}"
msgstr ""
-"Um fortzufahren müssen Sie sich anmelden oder ein Benutzerkonto erstellen. "
-"Leider sind bei diesem Versuch technische Störungen aufgetreten. "
+"Dies ist eine Klartext-Version der IFG-Anfrage \"{{request_title}}\". Die "
+"aktuellste, vollständige Version ist auf {{full_url}} erhältlich"
-#: app/controllers/user_controller.rb:248
-msgid "To change your email address used on {{site_name}}"
-msgstr ""
+#: app/views/request/simple_correspondence.rhtml:17
+#: app/views/request/simple_correspondence.rhtml:29
+#: app/views/request/simple_correspondence.rhtml:36
+msgid "Date:"
+msgstr "Datum:"
-#: app/controllers/request_controller.rb:337
-msgid "To classify the response to this FOI request"
-msgstr ""
+#: app/views/request/simple_correspondence.rhtml:21
+msgid "Attachment:"
+msgstr "Anhang:"
-#: app/views/request/show_response.rhtml:39
-msgid "To do that please send a private email to "
-msgstr "Senden Sie uns hierfür bitte eine private Email"
+#: app/views/request/simple_correspondence.rhtml:42
+msgid "{{username}} left an annotation:"
+msgstr "{{username}} hat eine Nachricht hinterlassen"
-#: app/views/request_mailer/not_clarified_alert.rhtml:2
-msgid "To do this, first click on the link below."
-msgstr "Klicken Sie hierfür bitte auf den unten angezeigten Link."
+#: app/views/request/upload_response.rhtml:5
+msgid "Respond to the FOI request"
+msgstr "IFG-Anfrage beantworten"
-#: app/models/track_thing.rb:212
-msgid "To follow requests and responses matching '{{query}}'"
-msgstr ""
+#: app/views/request/upload_response.rhtml:5
+msgid " made by "
+msgstr "erstellt durch"
-#: app/views/request_mailer/old_unclassified_updated.rhtml:1
+#: app/views/request/upload_response.rhtml:8
msgid ""
-"To help us keep the site tidy, someone else has updated the status of the \n"
-"{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
+"Your response will <strong>appear on the Internet</strong>, <a "
+"href=\"%s\">read why</a> and answers to other questions."
msgstr ""
+"Ihre Antwort, sowie Antworten auf andere Anfragen wierden <strong>im "
+"Internet erscheinen</strong>, <a href=\"%s\">Lesen Sie warum</a>"
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:1
-msgid "To let us know, follow this link and then select the appropriate box."
-msgstr ""
-"Um uns zu informieren, folgen Sie bitte dem Link und wählen Sie das "
-"zutreffende Feld aus. "
+#: app/views/request/upload_response.rhtml:11
+msgid "Respond by email"
+msgstr "Email-Antwort senden"
-#: app/controllers/request_game_controller.rb:40
-msgid "To play the request categorisation game"
+#: app/views/request/upload_response.rhtml:13
+msgid ""
+"You should have received a copy of the request by email, and you can respond\n"
+"by <strong>simply replying</strong> to that email. For your convenience, here is the address:"
msgstr ""
+"Sie sollten eine Kopie diesr Anfrage per Email erhalten haben. Sie können darauf reagieren, indem Sie\n"
+"by <strong>einfach antworten</strong> to that email. For your convenience, here is the address:"
-#: app/controllers/comment_controller.rb:55
-msgid "To post your annotation"
-msgstr "Um Ihre Anmerkung zu senden"
-
-#: app/controllers/request_controller.rb:543
-msgid "To reply to "
+#: app/views/request/upload_response.rhtml:16
+msgid ""
+"You may <strong>include attachments</strong>. If you would like to attach a\n"
+"file too large for email, use the form below."
msgstr ""
+"Vielleicht möchten Sie <strong>Dateien anhängen</strong>. Falls Sie eine "
+"Datei anhängen möchten, welche für die Emailübertragung zu groß sind, "
+"verwenden Sie das untenstehende Formular. "
-#: app/controllers/request_controller.rb:542
-msgid "To send a follow up message to "
-msgstr ""
+#: app/views/request/upload_response.rhtml:21
+msgid "Respond using the web"
+msgstr "Online antworten"
-#: app/controllers/user_controller.rb:329
-msgid "To send a message to "
+#: app/views/request/upload_response.rhtml:23
+msgid ""
+"Enter your response below. You may attach one file (use email, or \n"
+"<a href=\"%s\">contact us</a> if you need more)."
msgstr ""
+"Geben Sie unten Ihre Antwort ein. Sie könne eine Datei anhängen (nutzen Sie Email, oder \n"
+"<a href=\"%s\">kontaktieren Sie uns</a> falls Sie mehrere Anhänge benötigen)."
-#: app/controllers/request_controller.rb:298
-msgid "To send your FOI request"
-msgstr "Um Ihre IFG-Anfrage zu senden"
+#: app/views/request/upload_response.rhtml:28
+msgid "Response:"
+msgstr "Antwort:"
-#: app/controllers/request_controller.rb:60
-msgid "To update the status of this FOI request"
-msgstr "Um den Status dieser IFG-Anfrage zu aktualisieren"
+#: app/views/request/upload_response.rhtml:33
+msgid "Attachment (optional):"
+msgstr "Anhang (freiwillig)"
-#: app/controllers/request_controller.rb:701
+#: app/views/request/upload_response.rhtml:40
msgid ""
-"To upload a response, you must be logged in using an email address from "
+" (<strong>patience</strong>, especially for large files, it may take a "
+"while!)"
msgstr ""
+" (<strong>Geduld</strong>, speziell für größere Dateien kann es einen Moment"
+" dauern!)"
-#: app/views/public_body/view_email_captcha.rhtml:5
-msgid ""
-"To view the email address that we use to send FOI requests to "
-"{{public_body_name}}, please enter these words."
-msgstr ""
+#: app/views/request_game/play.rhtml:1 app/views/request_game/play.rhtml:30
+msgid "Play the request categorisation game!"
+msgstr "Helfen Sie uns ausstehende Anfragen zu kategorisieren!"
-#: app/views/request_mailer/new_response.rhtml:5
-msgid "To view the response, click on the link below."
+#: app/views/request_game/play.rhtml:31
+msgid ""
+"Some people who've made requests haven't let us know whether they were\n"
+"successful or not. We need <strong>your</strong> help &ndash;\n"
+"choose one of these requests, read it, and let everyone know whether or not the\n"
+"information has been provided. Everyone'll be exceedingly grateful."
msgstr ""
-"Um die Antwort zu lesen, klicken Sie bitte auf den unten angezeigten Link. "
+"Nicht alle Anfragensteller haben uns über den Erfolg Ihrer Anfragen "
+"informiert. Wir sind auf <strong>Ihre</strong> Hilfe angewiesen. Wählen Sie "
+"eine dieser Anfragen, lesen Sie sie und teilen Sie uns mit, ob die "
+"gewünschte Information zur Verfügung gestellt wurde. Alle Nutzer wären Ihnen"
+" ausgesprochen dankbar. "
-#: app/views/request/_request_listing_short_via_event.rhtml:9
-msgid "To {{public_body_link_absolute}}"
-msgstr "An {{public_body_link_absolute}}"
+#: app/views/request_game/play.rhtml:39
+msgid "I don't like these ones &mdash; give me some more!"
+msgstr "Ich würde gerne andere Anfragen erhalten!"
-#: app/views/request/followup_preview.rhtml:22 app/views/request/new.rhtml:88
-#: app/views/request/preview.rhtml:17
-msgid "To:"
-msgstr "An:"
+#: app/views/request_game/play.rhtml:40
+msgid "I don't want to do any more tidying now!"
+msgstr "Ich möchte gerade keine weiteren Anfragen bearbeiten!"
-#: app/models/track_thing.rb:174
-msgid "Track requests to {{public_body_name}} by email"
-msgstr "An {{public_body_name}} gestellte Anfragen via Email verfolgen"
+#: app/views/request_game/play.rhtml:42
+msgid ""
+"Thanks for helping - your work will make it easier for everyone to find successful\n"
+"responses, and maybe even let us make league tables..."
+msgstr ""
+"Vielen Dank für die Hilfe - Ihre Arbeit wird es für jeden leichter machen "
+"erfolgreiche Antworten zu finden und es uns eventuell sogar ermöglichen "
+"Ranglisten zu erstellen..."
-#: app/models/track_thing.rb:206
-msgid "Track things matching '{{query}}' by email"
+#: app/views/request_mailer/comment_on_alert.rhtml:1
+msgid ""
+"{{user_name}} has annotated your {{law_used_short}} \n"
+"request. Follow this link to see what they wrote."
msgstr ""
+"{{user_name}} hat Ihres {{law_used_short}} \n"
+"Anfrage kommentiert. Folgen Sie diesem Link, um die Anmerkung zu sehen."
-#: app/views/public_body/show.rhtml:3
-msgid "Track this authority"
-msgstr "Diese Behörde beobachten"
+#: app/views/request_mailer/comment_on_alert.rhtml:6
+#: app/views/request_mailer/comment_on_alert_plural.rhtml:5
+#: app/views/request_mailer/new_response.rhtml:15
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:8
+#: app/views/request_mailer/not_clarified_alert.rhtml:9
+#: app/views/request_mailer/old_unclassified_updated.rhtml:8
+#: app/views/request_mailer/overdue_alert.rhtml:9
+#: app/views/request_mailer/stopped_responses.rhtml:16
+#: app/views/request_mailer/very_overdue_alert.rhtml:11
+#: app/views/track_mailer/event_digest.rhtml:66
+#: app/views/user_mailer/already_registered.rhtml:11
+#: app/views/user_mailer/changeemail_already_used.rhtml:10
+#: app/views/user_mailer/changeemail_confirm.rhtml:13
+#: app/views/user_mailer/confirm_login.rhtml:11
+msgid "the {{site_name}} team"
+msgstr "das {{site_name}} Team"
-#: app/views/user/show.rhtml:29
-msgid "Track this person"
-msgstr "Dieser Person folgen "
+#: app/views/request_mailer/comment_on_alert_plural.rhtml:1
+msgid ""
+"There are {{count}} new annotations on your {{info_request}} request. Follow"
+" this link to see what they wrote."
+msgstr ""
+"Es gibt {{count}} neue Anmerkungen zu Ihrer {{info_request}} Anfrage. Folgen"
+" Sie dem Link, um diese anzusehen. "
-#: app/models/track_thing.rb:190
-msgid "Track this person by email"
+#: app/views/request_mailer/new_response.rhtml:1
+msgid "You have a new response to the {{law_used_full}} request "
msgstr ""
+"Sie haben eine neue Antwort auf die Anfrage {{law_used_full}} erhalten "
-#: app/views/request/_sidebar.rhtml:2
-msgid "Track this request"
-msgstr "Diese Anfrage verfolgen"
+#: app/views/request_mailer/new_response.rhtml:2
+msgid "that you made to"
+msgstr "welche Sie stellten an:"
-#: app/models/track_thing.rb:123
-msgid "Track this request by email"
+#: app/views/request_mailer/new_response.rhtml:5
+msgid "To view the response, click on the link below."
msgstr ""
+"Um die Antwort zu lesen, klicken Sie bitte auf den unten angezeigten Link. "
-#: locale/model_attributes.rb:33
-msgid "TrackThing|Track medium"
+#: app/views/request_mailer/new_response.rhtml:9
+msgid ""
+"When you get there, please update the status to say if the response \n"
+"contains any useful information."
msgstr ""
+"Wenn Sie dort hinkommen, aktualisieren Sie bitte den Status indem Sie uns "
+"wissen lassen, ob die Antwort nützliche Informationen enthält. "
-#: locale/model_attributes.rb:32
-msgid "TrackThing|Track query"
+#: app/views/request_mailer/new_response.rhtml:12
+msgid ""
+"Although all responses are automatically published, we depend on\n"
+"you, the original requester, to evaluate them."
msgstr ""
+"Obwould alle Antworten automatisch veröffentlicht werden, sind wir auf Sie "
+"als ursprünglichen Antragsteller angewiesen, um diese zu bewerten"
-#: locale/model_attributes.rb:34
-msgid "TrackThing|Track type"
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:1
+msgid "To let us know, follow this link and then select the appropriate box."
msgstr ""
+"Um uns zu informieren, folgen Sie bitte dem Link und wählen Sie das "
+"zutreffende Feld aus. "
-#: app/views/general/search.rhtml:133
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:5
msgid ""
-"Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show "
-"things that happened in the first two weeks of January."
+"Your request was called {{info_request}}. Letting everyone know whether you "
+"got the information will help us keep tabs on"
msgstr ""
-"Geben Sie <strong><code>01/01/2008..14/01/2008</code></strong> ein, um "
-"ausschliesslich Vorgänge aus diesem Zeitraum anzuzeigen."
+"Ihre Anfrage hat den folgenden Titel: {{info_request}}. Bitte informieren "
+"Sie uns, ob Sie die gewünschte Information erhalten. Dies hilft uns die "
+"Seite aktuell zu halten."
-#: app/models/public_body.rb:37
-msgid "URL name can't be blank"
-msgstr "URL muss angegeben werden"
+#: app/views/request_mailer/not_clarified_alert.rhtml:1
+msgid "request."
+msgstr "Anfrage."
-#: app/models/user_mailer.rb:45
-msgid "Unable to change email address on {{site_name}}"
-msgstr ""
+#: app/views/request_mailer/not_clarified_alert.rhtml:2
+msgid "To do this, first click on the link below."
+msgstr "Klicken Sie hierfür bitte auf den unten angezeigten Link."
-#: app/views/request/followup_bad.rhtml:4
-msgid "Unable to send a reply to {{username}}"
-msgstr "Antwort an {{username}} kann nicht gesendet werden"
+#: app/views/request_mailer/not_clarified_alert.rhtml:6
+msgid ""
+"You will only get an answer to your request if you follow up\n"
+"with the clarification."
+msgstr ""
+"Sie können nur eine Antwort auf Ihre Anfrage erhalten wenn Sie mti der "
+"Aufklärung fortfahren. "
-#: app/views/request/followup_bad.rhtml:2
-msgid "Unable to send follow up message to {{username}}"
-msgstr "Follow-Up Nachricht an {{username}} kann nicht gesendet werden"
+#: app/views/request_mailer/old_unclassified_updated.rhtml:1
+msgid ""
+"To help us keep the site tidy, someone else has updated the status of the \n"
+"{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
+msgstr ""
+"Um uns mit der Aktualisierung der Seite zu helfen hat ein/e andere/r "
+"Nutzer/in den Status der {{law_used_full}} Anfrage {{title}}, die Sie an "
+"{{public_body}} gestellt haben, in \"{{display_status}}\" geändert. Falls "
+"Sie mit dieser Änderung nicht einverstanden sind, aktualisieren Sie diesen "
+"bitte erneut, in einen Ihrer Meinung nach besser zutreffenden Status. "
-#: app/views/request/list.rhtml:29
-msgid "Unexpected search result type"
-msgstr "Unerwartetes Suchergebnis"
+#: app/views/request_mailer/old_unclassified_updated.rhtml:4
+msgid "Follow this link to see the request:"
+msgstr "Folgen Sie diesem Link, um die Anfrage anzusehen:"
-#: app/views/request/similar.rhtml:18
-msgid "Unexpected search result type "
-msgstr "Unerwartetes Suchergebnis"
+#: app/views/request_mailer/overdue_alert.rhtml:1
+msgid "have delayed."
+msgstr "haben verspätet."
-#: app/views/user/wrong_user_unknown_email.rhtml:3
+#: app/views/request_mailer/overdue_alert.rhtml:3
msgid ""
-"Unfortunately we don't know the FOI\n"
-"email address for that authority, so we can't validate this.\n"
-"Please <a href=\"%s\">contact us</a> to sort it out."
+"They have not replied to your {{law_used_short}} request {{title}} promptly,"
+" as normally required by law"
msgstr ""
-"Leider ist uns die IFG-Emailadresse dieser Behörde nicht bekannt, somit können wir dies nicht bestätigen.\n"
-"Bitte <a href=\"%s\">kontaktieren Sie uns</a> zur Klärung der Angelegenheit."
+"Ihre {{law_used_short}} Anfrage {{title}}wurde nicht im gesetzlich "
+"vorgeschriebenen Zeitrahmen beantwortet. "
-#: app/views/request/new_bad_contact.rhtml:5
+#: app/views/request_mailer/overdue_alert.rhtml:3
+msgid "during term time"
+msgstr "während der Saison"
+
+#: app/views/request_mailer/overdue_alert.rhtml:5
msgid ""
-"Unfortunately, we do not have a working {{info_request_law_used_full}}\n"
-"address for"
+"Click on the link below to send a message to {{public_body}} reminding them "
+"to reply to your request."
msgstr ""
-"Wir haben leider keine funktionierende Email-Adresse für "
-"{{info_request_law_used_full}}"
-
-#: app/views/general/exception_caught.rhtml:17
-msgid "Unknown"
-msgstr "Unbekannt"
-
-#: app/models/info_request_event.rb:317
-msgid "Unusual response"
-msgstr "Ungewöhnliche Antwort"
-
-#: app/models/info_request.rb:807
-msgid "Unusual response."
-msgstr "Ungewöhnliche Antwort."
+"Klicken Sie auf den unten aufgeführten Link an {{public_body}}, um eine "
+"Anfrageerinnerung zu versenden."
-#: app/views/request/_after_actions.rhtml:13
-#: app/views/request/_after_actions.rhtml:33
-msgid "Update the status of this request"
-msgstr "Status der Anfrage aktualisieren"
+#: app/views/request_mailer/requires_admin.rhtml:2
+msgid "has reported an"
+msgstr "hat berichtet"
-#: app/controllers/request_controller.rb:62
-msgid "Update the status of your request to "
+#: app/views/request_mailer/requires_admin.rhtml:3
+msgid ""
+"response as needing administrator attention. Take a look, and reply to this\n"
+"email to let them know what you are going to do about it."
msgstr ""
+"Antwort als Administrator-Check bedürftig. Schau nach und antworte auf diese"
+" Email, um sie wissen zu lassen was Du damit tun wirst. "
-#: app/views/general/search.rhtml:124
+#: app/views/request_mailer/requires_admin.rhtml:9
+msgid "Administration URL:"
+msgstr "Administrator URL"
+
+#: app/views/request_mailer/stopped_responses.rhtml:1
msgid ""
-"Use OR (in capital letters) where you don't mind which word, e.g. "
-"<strong><code>commons OR lords</code></strong>"
+"The email that you, on behalf of {{public_body}}, sent to\n"
+"{{user}} to reply to an {{law_used_short}}\n"
+"request has not been delivered."
msgstr ""
+"Ihre im Namen von {{public_body}} an\n"
+"{{user}} gesendete Anfrage, um auf {{law_used_short}}\n"
+"zu reagieren, wurde nicht übermittelt."
-#: app/views/general/search.rhtml:125
+#: app/views/request_mailer/stopped_responses.rhtml:5
msgid ""
-"Use quotes when you want to find an exact phrase, e.g. "
-"<strong><code>\"Liverpool City Council\"</code></strong>"
+"This is because {{title}} is an old request that has been\n"
+"marked to no longer receive responses."
msgstr ""
-"Verwenden Sie Anführungszeichen, e.g. <strong><code>\"Europäischer "
-"Bürgerbeauftragter\"</code></strong>"
+"Die Ursache ist der veraltete Status dieser Anfrage {{title}}, \n"
+"welche keine weiteren Antworten erhalten kann."
-#: locale/model_attributes.rb:67
-msgid "UserInfoRequestSentAlert|Alert type"
+#: app/views/request_mailer/stopped_responses.rhtml:10
+msgid ""
+"If this is incorrect, or you would like to send a late response to the request\n"
+"or an email on another subject to {{user}}, then please\n"
+"email {{contact_email}} for help."
msgstr ""
+"Falls dies falsch ist oder Sie eine späte Antwort auf diese Anfrage oder zu einem anderen Thema an {{user}} senden möchten, dann mailen Sie bitte\n"
+" {{contact_email}} ffür weitere Hilfe."
-#: locale/model_attributes.rb:78
-msgid "User|About me"
-msgstr "BenutzerIÜber mich"
+#: app/views/request_mailer/stopped_responses.rhtml:14
+msgid "Your original message is attached."
+msgstr "Ihre ursprüngliche Nachricht befindet sich im Anhang. "
-#: locale/model_attributes.rb:76
-msgid "User|Admin level"
-msgstr ""
+#: app/views/request_mailer/very_overdue_alert.rhtml:1
+msgid "are long overdue."
+msgstr "sind lange überfällig. "
-#: locale/model_attributes.rb:77
-msgid "User|Ban text"
+#: app/views/request_mailer/very_overdue_alert.rhtml:3
+msgid ""
+"They have not replied to your {{law_used_short}} request {{title}}, \n"
+"as required by law"
msgstr ""
+"Ihre {{law_used_short}} Anfrage {{title}} wurde nicht nach gesetzlicher "
+"Vorschrift beantwortet"
-#: locale/model_attributes.rb:69
-msgid "User|Email"
-msgstr "BenutzerIEmail"
-
-#: locale/model_attributes.rb:73
-msgid "User|Email confirmed"
-msgstr "UserIEmail bestätigt"
+#: app/views/request_mailer/very_overdue_alert.rhtml:4
+msgid "even during holidays"
+msgstr "sogar während der Ferien"
-#: locale/model_attributes.rb:71
-msgid "User|Hashed password"
+#: app/views/request_mailer/very_overdue_alert.rhtml:6
+msgid ""
+"Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\n"
+"review, asking them to find out why response to the request has been so slow."
msgstr ""
+"Klickeb Suin Sie auf den unten aufgeführten Link, um eine Nachricht an "
+"{{public_body_name}} zu senden. Sie möchten eventuell eine interne Prüfung "
+"anfragen, um zu fragen warum die Beantwortung der Anfrage so lange dauert."
-#: locale/model_attributes.rb:75
-msgid "User|Last daily track email"
+#: app/views/track/_tracking_links.rhtml:8
+msgid ""
+"This is your own request, so you will be automatically emailed when new "
+"responses arrive."
msgstr ""
+"Dies ist Ihre eigene Anfrage. Sie erhalten eine automatische "
+"Emailbenachrichtigung, sobald Ihre Anfrage beantwortet wird. "
-#: locale/model_attributes.rb:70
-msgid "User|Name"
-msgstr "BenutzerIName"
+#: app/views/track/_tracking_links.rhtml:21
+msgid "Follow by email"
+msgstr "Per Email folgen"
-#: locale/model_attributes.rb:72
-msgid "User|Salt"
-msgstr ""
+#: app/views/track/_tracking_links.rhtml:26
+msgid "RSS feed of updates"
+msgstr "RSS Feeds für Neuigkeiten"
-#: locale/model_attributes.rb:74
-msgid "User|Url name"
-msgstr "Benutzer|URL Name"
+#: app/views/track/_tracking_links.rhtml:26
+msgid "RSS feed"
+msgstr "RSS feed"
-#: app/views/public_body/show.rhtml:21
-msgid "View FOI email address"
-msgstr "IFG-emailadressen ansehen"
+#: app/views/track_mailer/event_digest.rhtml:21
+msgid "{{public_body}} sent a response to {{user_name}}"
+msgstr "{{public_body}} hat eine Antwort an {{user_name}} gesendet"
-#: app/views/public_body/view_email_captcha.rhtml:1
-msgid "View FOI email address for '{{public_body_name}}'"
-msgstr "IFG-Emailadresse für {{public_body}} ansehen"
+#: app/views/track_mailer/event_digest.rhtml:24
+msgid "{{user_name}} sent a follow up message to {{public_body}}"
+msgstr "{{user_name}} hat eine Nachfrage an {{public_body}} gesendet"
-#: app/views/public_body/view_email_captcha.rhtml:3
-msgid "View FOI email address for {{public_body_name}}"
-msgstr "IFG-Emailadresse für {{public_body}} ansehen"
+#: app/views/track_mailer/event_digest.rhtml:28
+msgid "{{user_name}} sent a request to {{public_body}}"
+msgstr "{{user_name}} ´hat eine Anfrage an {{public_body}} gesendet"
-#: app/views/contact_mailer/user_message.rhtml:10
-msgid "View Freedom of Information requests made by {{user_name}}:"
-msgstr ""
+#: app/views/track_mailer/event_digest.rhtml:31
+msgid "{{user_name}} added an annotation"
+msgstr "{{user_name}} hat eine Anmerkung beigefügt"
-#: app/views/layouts/default.rhtml:89
-msgid "View authorities"
-msgstr "Behörden ansehen"
+#: app/views/track_mailer/event_digest.rhtml:60
+msgid "Alter your subscription"
+msgstr "Ändern Sie Ihre Registrierung"
-#: app/views/public_body/view_email_captcha.rhtml:12
-msgid "View email"
-msgstr "Email ansehen"
+#: app/views/track_mailer/event_digest.rhtml:63
+msgid "Please click on the link below to cancel or alter these emails."
+msgstr ""
+"Bitte klicken Sie auf den unten angezeigten Link, um diese Emails zu "
+"annullieren oder ändern."
-#: app/views/layouts/default.rhtml:88
-msgid "View requests"
-msgstr "Anfragen ansehen"
+#: app/views/user/_signin.rhtml:7
+msgid "If you've used {{site_name}} before"
+msgstr "Falls Sie {{site_name}} zuvor genutzt haben"
-#: app/models/info_request.rb:799
-msgid "Waiting clarification."
-msgstr "Klärung wird erwartet. "
+#: app/views/user/_signin.rhtml:11 app/views/user/_signup.rhtml:9
+#: app/views/user/signchangepassword_send_confirm.rhtml:13
+msgid "Your e-mail:"
+msgstr "Ihre Email:"
-#: app/views/request/show.rhtml:111
-msgid ""
-"Waiting for an <strong>internal review</strong> by {{public_body_link}} of "
-"their handling of this request."
-msgstr ""
+#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30
+msgid "Password:"
+msgstr "Passwort:"
+
+#: app/views/user/_signin.rhtml:21
+msgid "Forgotten your password?"
+msgstr "Passwort vergessen?"
-#: app/views/general/search.rhtml:149
+#: app/views/user/_signin.rhtml:26
msgid ""
-"Waiting for the public authority to complete an internal review of their "
-"handling of the request"
+"Remember me</label> (keeps you signed in longer;\n"
+" do not use on a public computer) "
msgstr ""
+"Login speichern</label> (Sie bleiben eingeloggt. Nutzen Sie diese Funktion "
+"nicht an öffentlichen Computern) "
-#: app/views/general/search.rhtml:142
-msgid "Waiting for the public authority to reply"
-msgstr ""
+#: app/views/user/_signin.rhtml:32
+msgid "Sign in"
+msgstr "Anmelden"
-#: app/views/public_body/view_email.rhtml:17
-msgid "We do not have a working request email address for this authority."
-msgstr ""
-"Für diese Behörde ist keine funktionierende Emailadresse zur "
-"Anfragenstellung verfügbar. "
+#: app/views/user/_signup.rhtml:6
+msgid "If you're new to {{site_name}}"
+msgstr "Falls Sie neu auf {{site_name}} sind"
-#: app/views/request/followup_bad.rhtml:24
+#: app/views/user/_signup.rhtml:13
msgid ""
-"We do not have a working {{law_used_full}} address for {{public_body_name}}."
+"We will not reveal your email address to anybody unless you or\n"
+" the law tell us to (<a href=\"%s\">details</a>). "
msgstr ""
-"Wir haben keine funktionierende {{law_used_full}} Adresse für "
-"{{public_body_name}}."
+"Ohne Ihre Zustimmung oder gesetzliche Vorschrift werden wir Ihre Email-"
+"Adresse zu keinem Zeitpunkt veröffentlichen. (<a href=\"%s\">details</a>) "
-#: app/views/request/_describe_state.rhtml:107
+#: app/views/user/_signup.rhtml:18
+msgid "Your name:"
+msgstr "Ihr Name:"
+
+#: app/views/user/_signup.rhtml:22
msgid ""
-"We don't know whether the most recent response to this request contains\n"
-" information or not\n"
-" &ndash;\n"
-"\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
+"Your <strong>name will appear publicly</strong> \n"
+" (<a href=\"%s\">why?</a>)\n"
+" on this website and in search engines. If you\n"
+" are thinking of using a pseudonym, please \n"
+" <a href=\"%s\">read this first</a>."
msgstr ""
+"Ihr <strong>Name wird öffentlich</strong> \n"
+" (<a href=\"%s\">warum?</a>)\n"
+" auf dieser Internetseite und in Suchmaschinen angezeigt.Falls Sie lieber ein Pseudonym nutzen möchten, \n"
+" <a href=\"%s\">lesen Sie erst hier</a>."
-#: app/views/user_mailer/confirm_login.rhtml:8
+#: app/views/user/_signup.rhtml:35
+msgid "Password: (again)"
+msgstr "Passwort: (nochmal eingeben)"
+
+#: app/views/user/_signup.rhtml:46
+msgid "Sign up"
+msgstr "Benutzerkonto erstellen"
+
+#: app/views/user/_user_listing_single.rhtml:19
+#: app/views/user/_user_listing_single.rhtml:20
+msgid "made."
+msgstr "erledigt."
+
+#: app/views/user/_user_listing_single.rhtml:21
+msgid "Joined in"
+msgstr "Angemeldet"
+
+#: app/views/user/bad_token.rhtml:2
msgid ""
-"We will not reveal your email address to anybody unless you\n"
-"or the law tell us to."
+"Please check the URL (i.e. the long code of letters and numbers) is copied\n"
+"correctly from your email."
msgstr ""
+"Bitte überprüfen Sie, ob Sie die URL (Webadresse) korrekt aus Ihrer Email "
+"kopiert haben. "
-#: app/views/user_mailer/changeemail_confirm.rhtml:10
+#: app/views/user/bad_token.rhtml:7
msgid ""
-"We will not reveal your email addresses to anybody unless you\n"
-"or the law tell us to."
+"If you can't click on it in the email, you'll have to <strong>select and copy\n"
+"it</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\n"
+"you would type the address of any other webpage."
msgstr ""
-"Ohne Ihre Zustimmung oder gesetzliche Vorschrift werden wir Ihre Email-"
-"Adresse zu keinem Zeitpunkt veröffentlichen."
+"Falls Sie den link in Ihrer Email nicht anklicken können, müssen Sie diesen "
+"<strong>auswählen und kopieren</strong>. <strong>Fügen Sie diesen dann in "
+"Ihr Browserfenster ein</strong>, an der Stelle, an der Sie auch jede andere "
+"Webadresse eingeben würden."
-#: app/views/request/show.rhtml:61
-msgid "We're waiting for"
+#: app/views/user/bad_token.rhtml:13
+msgid ""
+"If you got the email <strong>more than six months ago</strong>, then this login link won't work any\n"
+"more. Please try doing what you were doing from the beginning."
msgstr ""
+"Wenn Sie diese Email <strong>vor mehr als sechs Monaten erhalten "
+"haben</strong>, ist dieser Anmeldecode nichtmehr aktiv. Bitte nehmen Sie "
+"eine neue Registrierung vor. "
-#: app/views/request/show.rhtml:57
-msgid "We're waiting for someone to read"
+#: app/views/user/banned.rhtml:9
+msgid ""
+"You will be unable to make new requests, send follow ups, add annotations or\n"
+"send messages to other users. You may continue to view other requests, and set\n"
+"up\n"
+"email alerts."
msgstr ""
+"Sie werden keine Anfragen stellen-, Nachfragen senden-, Kommentare "
+"hinzufügen- oder anderen Nachrichten senden können. Sie können weiterhin "
+"andere Anfragen anschauen oder die Funktion zur automatischen "
+"Emailbenachrichtigung einrichten."
-#: app/views/user/signchangeemail_confirm.rhtml:6
+#: app/views/user/banned.rhtml:15
msgid ""
-"We've sent an email to your new email address. You'll need to click the link in\n"
-"it before your email address will be changed."
+"If you would like us to lift this ban, then you may politely\n"
+"<a href=\"/help/contact\">contact us</a> giving reasons.\n"
msgstr ""
-"Wir haben eine Email an Ihre neue Emailadresse gesendet. Sie müssen den Link"
-" in dieser Email anklicken, um Ihre neue Adresse zu aktivieren. "
+"Falls Sie möchten, dass wir diese Sperre aufheben, mögen Sie uns höflich\n"
+"<a href=\"/help/contact\">kontaktieren</a> und einen Grund angeben.\n"
#: app/views/user/confirm.rhtml:6
msgid ""
@@ -3510,773 +4087,936 @@ msgstr ""
"Wir haben Ihnen eine Email gesendet. Um fortzufahren klicken Sie bitte den "
"darin angezeigten Link. "
-#: app/views/user/signchangepassword_confirm.rhtml:6
-msgid ""
-"We've sent you an email, click the link in it, then you can change your "
-"password."
-msgstr ""
-"Wir haben Ihnen eine Email gesendet. Klicken Sie den darin angezeigten Link,"
-" um Ihr Passwort zu ändern. "
-
-#: app/views/request/_followup.rhtml:58
-msgid "What are you doing?"
-msgstr "Was machen Sie?"
-
-#: app/views/request/_describe_state.rhtml:4
-msgid "What best describes the status of this request now?"
-msgstr "Was ist die beste Beschreibung für diese Anfrage?"
-
-#: app/views/request_mailer/new_response.rhtml:9
+#: app/views/user/confirm.rhtml:11
msgid ""
-"When you get there, please update the status to say if the response \n"
-"contains any useful information."
+"<small>If you use web-based email or have \"junk mail\" filters, also check your\n"
+"bulk/spam mail folders. Sometimes, our messages are marked that way.</small>\n"
+"</p>"
msgstr ""
+"Sollten Sie eine webbasierten Emailanbieter oder ´Junk-mail´ Filter nutzen, "
+"prüfen Sie Ihren Spamordner. Es kommt vor, dass unsere Nachrichten dort "
+"landen. "
-#: app/views/request/show_response.rhtml:44
+#: app/views/user/contact.rhtml:32
msgid ""
-"When you receive the paper response, please help\n"
-" others find out what it says:"
+"<strong>Note:</strong> You're sending a message to yourself, presumably\n"
+" to try out how it works."
msgstr ""
-"Wenn Sie die gedruckte Antwort erhalten, machen Sie den Inhalt bitte für "
-"andere Nutzer zugänglich"
+"<strong>Achtung:</strong> Sie senden eine Nachricht an sich selbst, "
+"vermutlich um herauszufinden, wie es funktioniert. "
-#: app/views/request/new_please_describe.rhtml:16
-msgid ""
-"When you're done, <strong>come back here</strong>, <a href=\"%s\">reload "
-"this page</a> and file your new request."
+#: app/views/user/contact.rhtml:35
+msgid " <strong>Privacy note:</strong> Your email address will be given to"
msgstr ""
+" <strong>Datenschutzerklärung:</strong> Ihre Emailadresse wird "
+"weitergeleitet an: "
-#: app/views/request/show_response.rhtml:13
-msgid "Which of these is happening?"
-msgstr "Welcher dieser Aspekte ist zutreffend?"
-
-#: app/models/info_request_event.rb:313
-msgid "Withdrawn by requester"
-msgstr "Von Antragsteller zurückgezogen"
-
-#: app/models/info_request.rb:809
-msgid "Withdrawn by the requester."
-msgstr "Vom Antragsteller zurückgezogen"
-
-#: app/controllers/request_controller.rb:549
-msgid "Write a reply to "
-msgstr "Antwort senden"
+#: app/views/user/contact.rhtml:36
+msgid " when you send this message."
+msgstr "wenn Sie diese Nachricht senden. "
-#: app/controllers/request_controller.rb:548
-msgid "Write your FOI follow up message to "
-msgstr "Senden Sie Ihre Follow-Up Nachricht an "
+#: app/views/user/no_cookies.rhtml:3
+msgid "Please enable \"cookies\" to carry on"
+msgstr "Bitte erlauben Sie Cookies, um fortzufahren"
-#: app/views/request/new.rhtml:46
-msgid "Write your request in <strong>simple, precise language</strong>."
+#: app/views/user/no_cookies.rhtml:5
+msgid ""
+"To carry on, you need to sign in or make an account. Unfortunately, there\n"
+"was a technical problem trying to do this."
msgstr ""
-"Formulieren Sie Ihre Anfrage in <strong>schlicht und präzise </strong>."
-
-#: app/models/info_request_event.rb:301
-msgid "Wrong Response"
-msgstr "Falsche Antwort"
+"Um fortzufahren müssen Sie sich anmelden oder ein Benutzerkonto erstellen. "
+"Leider sind bei diesem Versuch technische Störungen aufgetreten. "
-#: app/views/comment/_single_comment.rhtml:10
-msgid "You"
+#: app/views/user/no_cookies.rhtml:8
+msgid ""
+"It may be that your browser is not set to accept a thing called \"cookies\",\n"
+"or cannot do so. If you can, please enable cookies, or try using a different\n"
+"browser. Then press refresh to have another go."
msgstr ""
+"Möglicherweise blockiert Ihr Browser keine sogenannten ´Cookies´. Bitte "
+"erlauben Sie diese oder versuchen Sie es mit einem anderen Browser. Klicken "
+"Sie anschliessend auf aktualisieren, um es erneut zu versuchen. "
-#: app/controllers/track_controller.rb:98
-msgid "You are already being emailed updates about "
-msgstr "Sie erhielten bereits Aktualisierungen zu"
-
-#: app/models/track_thing.rb:175
-msgid "You are already tracking requests to {{public_body_name}} by email"
+#: app/views/user/no_cookies.rhtml:12
+msgid ""
+"If your browser is set to accept cookies and you are seeing this message,\n"
+"then there is probably a fault with our server."
msgstr ""
+"Sollte Ihr Browser Cookies zulassen und Sie trotzdem diese Nachricht "
+"erhalten, gibt es wahrscheinlich ein Problem mit unserem Server."
-#: app/models/track_thing.rb:207
-msgid "You are already tracking things matching '{{query}}' by email"
+#: app/views/user/no_cookies.rhtml:15
+msgid "Please <a href=\"%s\">get in touch</a> with us so we can fix it."
msgstr ""
+"Bitte<a href=\"%s\">nehmen Sie Kontakt mit uns auf</a>, damit wir das "
+"Problem beheben können. "
-#: app/models/track_thing.rb:191
-msgid "You are already tracking this person by email"
+#: app/views/user/no_cookies.rhtml:17
+msgid ""
+"Let us know what you were doing when this message\n"
+"appeared and your browser and operating system type and version."
msgstr ""
+"Teilen Sie uns mit bei welchem Vorgang diese Nachricht angezeigt wurde, also"
+" auch den Namen Ihres Browsers, und den Namen und die Version Ihres "
+"Betriebssystems."
-#: app/models/track_thing.rb:124
-msgid "You are already tracking this request by email"
+#: app/views/user/no_cookies.rhtml:20
+msgid "If you are still having trouble, please <a href=\"%s\">contact us</a>."
msgstr ""
+"Sollten weiterhin Probleme bestehen, bitte <a href=\"%s\">kontaktieren Sie "
+"uns</a>."
-#: app/models/track_thing.rb:156
-msgid "You are being emailed about any new successful responses"
-msgstr "Sie werden per Email über neue erfolgreiche Antworten informiert "
+#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104
+msgid "Change profile photo"
+msgstr "Profilbild ändern"
-#: app/models/track_thing.rb:140
-msgid "You are being emailed when there are new requests"
+#: app/views/user/set_crop_profile_photo.rhtml:6
+msgid "Crop your profile photo"
+msgstr "Bearbeiten Sie Ihr Profilbild"
+
+#: app/views/user/set_crop_profile_photo.rhtml:35
+msgid ""
+"<strong>Privacy note:</strong> Your photo will be shown in public on the Internet, \n"
+" wherever you do something on {{site_name}}."
msgstr ""
+"<strong>Datenschutzhinweis:</strong> Ihr Photo wird öffentlich im Internet angezeigt werden\n"
+" wo immer Sie {{site_name}} nutzen."
-#: app/views/request/show.rhtml:88
-msgid "You can <strong>complain</strong> by"
-msgstr "Sie können sich <strong>beschweren</strong>, indem sie"
+#: app/views/user/set_draft_profile_photo.rhtml:5
+msgid "Choose your profile photo"
+msgstr "Wählen Sie Ihr Profilbild"
-#: app/views/request/details.rhtml:58
+#: app/views/user/set_draft_profile_photo.rhtml:13
+msgid "Photo of you:"
+msgstr "Ihr Profilbild:"
+
+#: app/views/user/set_draft_profile_photo.rhtml:18
msgid ""
-"You can get this page in computer-readable format as part of the main JSON\n"
-"page for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
+"Your photo will be shown in public <strong>on the Internet</strong>, \n"
+" wherever you do something on {{site_name}}."
msgstr ""
+"<strong>Datenschutzhinweis:</strong> Ihr Photo wird öffentlich im Internet angezeigt werden\n"
+" wo immer Sie {{site_name}} nutzen."
-#: app/views/public_body/show.rhtml:40
+#: app/views/user/set_draft_profile_photo.rhtml:22
msgid ""
-"You can only request information about the environment from this authority."
+"Please don't upload offensive pictures. We will take down images\n"
+" that we consider inappropriate."
msgstr ""
-"Umweltanfragen können ausschliesslich über diese Behörde gestellt werden. "
+"Bitte verwenden Sie keine anstößigen Bilder. Alle unangemessenen Bilder "
+"werden von uns entfernt."
-#: app/views/user/show.rhtml:122
-msgid "You have"
-msgstr "Sie haben"
+#: app/views/user/set_draft_profile_photo.rhtml:32
+msgid "Next, crop your photo &gt;&gt;"
+msgstr "Nächster Schritt: Passen Sie Ihr Photo an >>"
-#: app/views/request_mailer/new_response.rhtml:1
-msgid "You have a new response to the {{law_used_full}} request "
-msgstr ""
-"Sie haben eine neue Antwort auf die Anfrage {{law_used_full}} erhalten "
+#: app/views/user/set_draft_profile_photo.rhtml:46
+msgid "OR remove the existing photo"
+msgstr "OR entfernen Sie das bestehende Photo"
-#: app/controllers/user_controller.rb:492
-msgid "You have now changed the text about you on your profile."
-msgstr "Sie haben den Text zu Ihrer Person in Ihrem Profil nun geändert. "
+#: app/views/user/set_draft_profile_photo.rhtml:55
+msgid "Cancel, return to your profile page"
+msgstr "Abbrechen, zurück zur Profilseite"
-#: app/controllers/user_controller.rb:310
-msgid "You have now changed your email address used on {{site_name}}"
+#: app/views/user/set_profile_about_me.rhtml:1
+msgid "Change the text about you on your profile at {{site_name}}"
msgstr ""
-"Sie haben die aud der Seite {{site_name}} verwendete Email-Adresse nun "
-"geändert"
+"Ändern Sie den Text zu Ihrer Person in Ihrem Nutzerprofil auf {{site_name}}"
-#: app/views/user_mailer/already_registered.rhtml:3
+#: app/views/user/set_profile_about_me.rhtml:3
+#: app/views/user/signchangeemail.rhtml:3
+msgid "internal error"
+msgstr "interner Fehler"
+
+#: app/views/user/set_profile_about_me.rhtml:9
+msgid "Edit text about you"
+msgstr "Profiltext ändern"
+
+#: app/views/user/set_profile_about_me.rhtml:11
+msgid " What are you investigating using Freedom of Information? "
+msgstr " Was recherchieren im Rahmen der Informationsfreiheit?"
+
+#: app/views/user/set_profile_about_me.rhtml:14
msgid ""
-"You just tried to sign up to {{site_name}}, when you\n"
-"already have an account. Your name and password have been\n"
-"left as they previously were.\n"
-"\n"
-"Please click on the link below."
+" This will appear on your {{site_name}} profile, to make it\n"
+" easier for others to get involved with what you're doing."
msgstr ""
+" Diese Information wird auf Ihrem {{site_name}} -profil angezeigt werden, um"
+" andere Nutzer über Ihre Aktivitäten zu informieren. "
-#: app/views/comment/new.rhtml:59
+#: app/views/user/set_profile_about_me.rhtml:20
+msgid "About you:"
+msgstr "Zu Ihrer Person:"
+
+#: app/views/user/set_profile_about_me.rhtml:26
msgid ""
-"You know what caused the error, and can <strong>suggest a solution</strong>,"
-" such as a working email address."
+" Include relevant links, such as to a campaign page, your blog or a\n"
+" twitter account. They will be made clickable. \n"
+" e.g."
msgstr ""
+"Fügen Sie relevanten Links ein, z.B. zu einer Kampagnenseite, Ihrem Blog "
+"oder Twitterkonto. Die Links werden aktiviert widergegeben. z.B."
-#: app/views/request/upload_response.rhtml:16
+#: app/views/user/set_profile_about_me.rhtml:35
+msgid "Save"
+msgstr "Speichern"
+
+#: app/views/user/show.rhtml:4
msgid ""
-"You may <strong>include attachments</strong>. If you would like to attach a\n"
-"file too large for email, use the form below."
+"There is <strong>more than one person</strong> who uses this site and has this name. \n"
+" One of them is shown below, you may mean a different one:"
msgstr ""
-"Vielleicht möchten Sie <strong>Dateien anhängen</strong>. Falls Sie eine "
-"Datei anhängen möchten, welche für die Emailübertragung zu groß sind, "
-"verwenden Sie das untenstehende Formular. "
+"Es gibt <strong>mehrere Nutzer</strong> mit diesem Namen. Einer wird unten "
+"angezeigt, Sie könnten jedoch einen andere Person meinen:"
-#: app/views/request/followup_bad.rhtml:24
+#: app/views/user/show.rhtml:12
msgid ""
-"You may be able to find\n"
-" one on their website, or by phoning them up and asking. If you manage\n"
-" to find one, then please <a href=\"%s\">send it to us</a>."
+"Please <strong>go to the following requests</strong>, and let us\n"
+" know if there was information in the recent responses to them."
msgstr ""
-"Es ist mögliche eine auf deren Internetseite zu finden oder sie telefonisch "
-"zu erfragen. Sollten Sie sie herausfinden, <a href=\"%s\">senden sie sie uns"
-" bitte zu</a>."
+"Bitte <strong>gehen Sie zu den folgende Anfragen</strong> und teilen Sie uns"
+" mit, ob in den letzten Antworten Informationen enthalten waren."
-#: app/views/request/new_bad_contact.rhtml:6
+#: app/views/user/show.rhtml:20
msgid ""
-"You may be able to find\n"
-"one on their website, or by phoning them up and asking. If you manage\n"
-"to find one, then please <a href=\"%s\">send it to us</a>."
+"Thanks very much - this will help others find useful stuff. We'll\n"
+" also, if you need it, give advice on what to do next about your\n"
+" requests."
msgstr ""
-"Es ist mögliche eine auf deren Internetseite zu finden oder sie telefonisch "
-"zu erfragen. Sollten Sie sie herausfinden, <a href=\"%s\">senden sie sie uns"
-" bitte zu</a>."
+"Vielen herzlichen Dank - dass hilft anderen auch Nützliches zu finden. Gerne"
+" beraten wir Sie auch bei den nächsten Schritten Ihrer Anfragen, falls Sie "
+"dies wünschen. "
-#: app/controllers/user_controller.rb:470
-msgid "You need to be logged in to change the text about you on your profile."
-msgstr "Sie müssen angemeldet sein, um Ihren Profiltext zu ändern. "
+#: app/views/user/show.rhtml:29
+msgid "Track this person"
+msgstr "Dieser Person folgen "
-#: app/controllers/user_controller.rb:371
-msgid "You need to be logged in to change your profile photo."
-msgstr "Sie müssen angemeldet sein, um Ihren Profilbild zu ändern. "
+#: app/views/user/show.rhtml:32
+msgid "On this page"
+msgstr "Auf dieser Seite"
-#: app/controllers/user_controller.rb:433
-msgid "You need to be logged in to clear your profile photo."
-msgstr "Sie müssen angemeldet sein, um Ihren Profilbild zu löschen."
+#: app/views/user/show.rhtml:33
+msgid "FOI requests"
+msgstr "IFG-Anfrage"
-#: app/controllers/request_controller.rb:559
-msgid ""
-"You previously submitted that exact follow up message for this request."
-msgstr ""
-"Sie haben kürzlich dieselbe Follow-up Nachricht für diese Anfrage gesendet. "
+#: app/views/user/show.rhtml:34
+msgid "Annotations"
+msgstr "Kommentare"
-#: app/views/request/upload_response.rhtml:13
-msgid ""
-"You should have received a copy of the request by email, and you can respond\n"
-"by <strong>simply replying</strong> to that email. For your convenience, here is the address:"
-msgstr ""
+#: app/views/user/show.rhtml:36
+msgid "Email subscriptions"
+msgstr "Email Abo"
-#: app/views/request/show_response.rhtml:36
-msgid ""
-"You want to <strong>give your postal address</strong> to the authority in "
-"private."
-msgstr ""
+#: app/views/user/show.rhtml:53
+msgid "Set your profile photo"
+msgstr "Profilbild wählen"
-#: app/views/user/banned.rhtml:9
-msgid ""
-"You will be unable to make new requests, send follow ups, add annotations or\n"
-"send messages to other users. You may continue to view other requests, and set\n"
-"up\n"
-"email alerts."
-msgstr ""
+#: app/views/user/show.rhtml:59
+msgid " (you)"
+msgstr " (Sie)"
-#: app/controllers/track_controller.rb:154
-msgid "You will no longer be emailed updates about "
-msgstr "Sie erhalten keinen weiteren Aktualisierungen über"
+#: app/views/user/show.rhtml:62
+msgid "Joined {{site_name}} in"
+msgstr "{{site_name}} beigetreten am"
-#: app/controllers/track_controller.rb:183
-msgid "You will no longer be emailed updates for those alerts"
-msgstr "Sie werden keine weiteren Aktualisierungen zu diesen Alerts erhalten"
+#: app/views/user/show.rhtml:69
+msgid "Send message to "
+msgstr "Nachricht senden an"
-#: app/controllers/track_controller.rb:111
-msgid "You will now be emailed updates about "
-msgstr ""
+#: app/views/user/show.rhtml:71
+msgid "just to see how it works"
+msgstr "um zu sehen wie es funktioniert"
-#: app/views/request_mailer/not_clarified_alert.rhtml:6
+#: app/views/user/show.rhtml:79
+msgid "This user has been banned from {{site_name}} "
+msgstr "Dieser Nutzer wurde von {{site_name}} entfernt"
+
+#: app/views/user/show.rhtml:83
+msgid "They have been given the following explanation:"
+msgstr "Die folgende Erklärung wurde abgegeben:"
+
+#: app/views/user/show.rhtml:96
+msgid "edit text about you"
+msgstr "Bearbeiten Sie den Infotext zu Ihrer Person"
+
+#: app/views/user/show.rhtml:106
+msgid "Change your password"
+msgstr "Passwort ändern"
+
+#: app/views/user/show.rhtml:107
+msgid "Change your email"
+msgstr "Emailadresse ändern"
+
+#: app/views/user/show.rhtml:113
msgid ""
-"You will only get an answer to your request if you follow up\n"
-"with the clarification."
+"<a href=\"%s\">Sign in</a> to change password, subscriptions and more "
+"({{user_name}} only)"
msgstr ""
+"<a href=\"%s\">Melden Sie sich an,</a> um Ihr Passwort und weitere "
+"Einstellungen zu ändern (auschließlich {{user_name}})"
-#: app/controllers/user_controller.rb:442
-msgid "You've now cleared your profile photo"
-msgstr "Sie haben Ihr Profilbild nun gelöscht"
+#: app/views/user/show.rhtml:123
+msgid "Search your contributions"
+msgstr "Suchen Sie Ihre Beiträge"
-#: app/views/user/show.rhtml:152
-msgid "Your "
+#: app/views/user/show.rhtml:125
+msgid "Search contributions by this person"
+msgstr "Suchen Sie Beiträge dieser Person"
+
+#: app/views/user/show.rhtml:136
+msgid "You have made no Freedom of Information requests using this site."
msgstr ""
+"Sie haben eine Informationsfreiheits-Anfrage über diese Seite gestellt. "
-#: app/views/user/_signup.rhtml:22
+#: app/views/user/show.rhtml:136
msgid ""
-"Your <strong>name will appear publicly</strong> \n"
-" (<a href=\"%s\">why?</a>)\n"
-" on this website and in search engines. If you\n"
-" are thinking of using a pseudonym, please \n"
-" <a href=\"%s\">read this first</a>."
+"This person has made no Freedom of Information requests using this site."
msgstr ""
+"Diese Person hat eine Informationsfreiheits-Anfrage über diese Seite "
+"gestellt. "
-#: app/views/contact_mailer/user_message.rhtml:3
+#: app/views/user/show.rhtml:141
+msgid "Your %d Freedom of Information request"
+msgid_plural "Your %d Freedom of Information requests"
+msgstr[0] "Ihre %d Informationsfreiheitsanfrage"
+msgstr[1] "Ihre %d Informationsfreiheitsanfragen"
+
+#: app/views/user/show.rhtml:141
+msgid "This person's %d Freedom of Information request"
+msgid_plural "This person's %d Freedom of Information requests"
+msgstr[0] ""
+" %d Informationsfreiheitsanfragen dieses Benutzers / dieser Benutzerin"
+msgstr[1] ""
+" %d Informationsfreiheitsanfragen dieses Benutzers / dieser Benutzerin"
+
+#: app/views/user/show.rhtml:155
+msgid "Freedom of Information requests made by you"
+msgstr "Von Ihnen gestellte IFG-Anfragen"
+
+#: app/views/user/show.rhtml:155
+msgid "Freedom of Information requests made by this person"
+msgstr "Informationsfreiheits-Anfrage durch diese Person gestellt"
+
+#: app/views/user/show.rhtml:156
msgid ""
-"Your details have not been given to anyone, unless you choose to reply to this\n"
-"message, which will then go directly to the person who wrote the message."
+"The search index is currently offline, so we can't show the Freedom of "
+"Information requests this person has made."
msgstr ""
+"Da die Suchanzeige momentan offline ist, können wir durch diese Person "
+"gestellten Informationsfreiheitsanfragen gerade leider nicht anzeigen. "
-#: app/views/user/_signin.rhtml:11 app/views/user/_signup.rhtml:9
-#: app/views/user/signchangepassword_send_confirm.rhtml:13
-msgid "Your e-mail:"
-msgstr "Ihre Email:"
+#: app/views/user/show.rhtml:162
+msgid "Your annotations"
+msgstr "Ihre Anmerkungen"
+
+#: app/views/user/show.rhtml:162
+msgid "This person's annotations"
+msgstr "Die Anmerkungen dieser Person"
+
+#: app/views/user/show.rhtml:165 app/views/user/show.rhtml:185
+msgid "None made."
+msgstr "Keine gestellt."
-#: app/views/user/show.rhtml:168
+#: app/views/user/show.rhtml:169
+msgid "Your %d annotation"
+msgid_plural "Your %d annotations"
+msgstr[0] "Ihre %d Anmerkunge"
+msgstr[1] "Ihre %d Anmerkungen"
+
+#: app/views/user/show.rhtml:169
+msgid "This person's %d annotation"
+msgid_plural "This person's %d annotations"
+msgstr[0] "Die %d Anmerkung dieser Person"
+msgstr[1] "Die %d Anmerkungen dieser Person"
+
+#: app/views/user/show.rhtml:184
msgid "Your email subscriptions"
-msgstr ""
+msgstr "Ihr Email-Abo"
-#: app/controllers/request_controller.rb:556
-msgid ""
-"Your follow up has not been sent because this request has been stopped to "
-"prevent spam. Please <a href=\"%s\">contact us</a> if you really want to "
-"send a follow up message."
-msgstr ""
+#: app/views/user/show.rhtml:187
+msgid "email subscription"
+msgstr "Anleitung mailen"
-#: app/controllers/request_controller.rb:584
-msgid "Your follow up message has been sent on its way."
-msgstr "Ihre Follow-up Nachricht wurde gesendet."
+#: app/views/user/show.rhtml:196 app/views/user/show.rhtml:210
+msgid "unsubscribe all"
+msgstr "alle abbestellen"
-#: app/controllers/request_controller.rb:582
-msgid "Your internal review request has been sent on its way."
-msgstr "Ihre Anfrage zur internen Überprüfung wurde gesendet. "
+#: app/views/user/show.rhtml:224
+msgid "unsubscribe"
+msgstr "abmelden"
-#: app/controllers/help_controller.rb:63
+#: app/views/user/sign.rhtml:8
+msgid "Please sign in as "
+msgstr "Anmelden als"
+
+#: app/views/user/sign.rhtml:11
+msgid "please sign in as "
+msgstr "Bitte melden Sie sich an als"
+
+#: app/views/user/sign.rhtml:20
+msgid "Sign in or make a new account"
+msgstr "Anmelden oder neues Benutzerkonto erstellen"
+
+#: app/views/user/sign.rhtml:26
+msgid " Please sign in or make a new account."
+msgstr "Bitte melden Sie sich an oder erstellen Sie ein neues Benutzerkonto."
+
+#: app/views/user/sign.rhtml:28
+msgid "please sign in or make a new account."
+msgstr "Bitte melden Sie sich an oder erstellen Sie ein neues Benutzerkonto."
+
+#: app/views/user/signchangeemail.rhtml:15
+msgid "Old e-mail:"
+msgstr "Alte Emailadresse: "
+
+#: app/views/user/signchangeemail.rhtml:20
+msgid "New e-mail:"
+msgstr "Neue Email:"
+
+#: app/views/user/signchangeemail.rhtml:25
+msgid "Your password:"
+msgstr "Ihr Passwort:"
+
+#: app/views/user/signchangeemail.rhtml:30
msgid ""
-"Your message has been sent. Thank you for getting in touch! We'll get back "
-"to you soon."
+"<strong>Note:</strong>\n"
+" We will send an email to your new email address. Follow the\n"
+" instructions in it to confirm changing your email."
msgstr ""
-"Ihre Nachricht wurde gesendet. Vielen Dank für die Kontaktaufnahme! Wir "
-"werden uns in Kürze mit Ihnen in Verbindung senden. "
+"<strong>Note:</strong>\n"
+" Es wird eine Email an Ihre neue Emailadresse versendet. Folgen Sie den darin angegebenen Schritten, um die Änderung Ihrer Emailadresse zu bestätigen."
-#: app/controllers/user_controller.rb:349
-msgid "Your message to {{recipient_user_name}} has been sent!"
-msgstr "Ihre Nachricht an {{recipient_user_name}} wurde versendet!"
+#: app/views/user/signchangeemail.rhtml:37
+msgid "Change email on {{site_name}}"
+msgstr "Email ändern auf {{site_name}}"
-#: app/views/request/followup_preview.rhtml:15
-msgid "Your message will appear in <strong>search engines</strong>"
-msgstr ""
-"Your message will appear in <strong>Suchmaschinen</strong> angezeigt werden"
+#: app/views/user/signchangeemail_confirm.rhtml:3
+#: app/views/user/signchangepassword_confirm.rhtml:1
+#: app/views/user/signchangepassword_confirm.rhtml:3
+msgid "Now check your email!"
+msgstr "Rufen Sie nun Ihre Emails ab. "
-#: app/views/comment/preview.rhtml:10
+#: app/views/user/signchangeemail_confirm.rhtml:6
msgid ""
-"Your name and annotation will appear in <strong>search engines</strong>."
+"We've sent an email to your new email address. You'll need to click the link in\n"
+"it before your email address will be changed."
msgstr ""
-"Ihr Name und Ihr Kommentar wird in <strong>Suchmaschinen</strong>.angezeigt "
-"werden. "
+"Wir haben eine Email an Ihre neue Emailadresse gesendet. Sie müssen den Link"
+" in dieser Email anklicken, um Ihre neue Adresse zu aktivieren. "
-#: app/views/request/preview.rhtml:8
+#: app/views/user/signchangeemail_confirm.rhtml:11
+#: app/views/user/signchangepassword_confirm.rhtml:10
msgid ""
-"Your name, request and any responses will appear in <strong>search engines</strong>\n"
-" (<a href=\"%s\">details</a>)."
+"If you use web-based email or have \"junk mail\" filters, also check your\n"
+"bulk/spam mail folders. Sometimes, our messages are marked that way."
msgstr ""
-"Ihr Name, Ihre Anfrage und alle Antworten werden in <strong>Suchmaschinen</strong> angezeigt werden\n"
-" (<a href=\"%s\">details</a>)."
+"Sollten Sie ein webbasiertes Emailkonto oder Spamfilter benutzen, überrpüfen"
+" Sie Ihre Bulk-, Spamordner. Unsere Nachrichten landen teilweise in diese "
+"Ordnern. "
-#: app/views/user/_signup.rhtml:18
-msgid "Your name:"
-msgstr "Ihr Name:"
+#: app/views/user/signchangepassword.rhtml:1
+#: app/views/user/signchangepassword.rhtml:11
+#: app/views/user/signchangepassword_send_confirm.rhtml:1
+#: app/views/user/signchangepassword_send_confirm.rhtml:9
+msgid "Change your password on {{site_name}}"
+msgstr "Ändern Sie Ihr Passwort: {{site_name}}"
-#: app/views/request_mailer/stopped_responses.rhtml:14
-msgid "Your original message is attached."
-msgstr "Ihre ursprüngliche Nachricht befindet sich im Anhang. "
+#: app/views/user/signchangepassword.rhtml:15
+msgid "New password:"
+msgstr "Neues Passwort:"
-#: app/controllers/user_controller.rb:231
-msgid "Your password has been changed."
-msgstr "Ihr Passwort wurde geändert."
+#: app/views/user/signchangepassword.rhtml:20
+msgid "New password: (again)"
+msgstr "Neues Passwort: (erneut eingeben)"
-#: app/views/user/signchangeemail.rhtml:25
-msgid "Your password:"
-msgstr "Ihr Passwort:"
+#: app/views/user/signchangepassword.rhtml:27
+msgid "Change password on {{site_name}}"
+msgstr "Passwort ändern: {{site_name}}"
-#: app/views/user/set_draft_profile_photo.rhtml:18
+#: app/views/user/signchangepassword_confirm.rhtml:6
msgid ""
-"Your photo will be shown in public <strong>on the Internet</strong>, \n"
-" wherever you do something on {{site_name}}."
+"We've sent you an email, click the link in it, then you can change your "
+"password."
msgstr ""
+"Wir haben Ihnen eine Email gesendet. Klicken Sie den darin angezeigten Link,"
+" um Ihr Passwort zu ändern. "
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:5
+#: app/views/user/signchangepassword_send_confirm.rhtml:18
msgid ""
-"Your request was called {{info_request}}. Letting everyone know whether you "
-"got the information will help us keep tabs on"
+" <strong>Note:</strong>\n"
+" We will send you an email. Follow the instructions in it to change\n"
+" your password."
msgstr ""
-"Ihre Anfrage hat den folgenden Titel: {{info_request}}. Bitte informieren "
-"Sie uns, ob Sie die gewünschte Information erhalten. Dies hilft uns die "
-"Seite aktuell zu halten."
+"<strong>Note:</strong>⏎ Sie werden in Kürze eine Email erhalten. Folgen Sie "
+"der Anleitung, um Ihr Passwort⏎ zu ändern."
-#: app/views/request/new.rhtml:109
-msgid "Your request:"
-msgstr "Ihre Anfrage:"
+#: app/views/user/signchangepassword_send_confirm.rhtml:26
+msgid "Submit"
+msgstr "Senden"
-#: app/views/request/upload_response.rhtml:8
+#: app/views/user/wrong_user.rhtml:2
+msgid "Sorry, but only {{user_name}} is allowed to do that."
+msgstr "Sorry, aber dieser Vorgang ist {{user_name}} vorbehalten."
+
+#: app/views/user/wrong_user_unknown_email.rhtml:3
msgid ""
-"Your response will <strong>appear on the Internet</strong>, <a "
-"href=\"%s\">read why</a> and answers to other questions."
+"Unfortunately we don't know the FOI\n"
+"email address for that authority, so we can't validate this.\n"
+"Please <a href=\"%s\">contact us</a> to sort it out."
msgstr ""
-"Ihre Antwort, sowie Antworten auf andere Anfragen wierden <strong>im "
-"Internet erscheinen</strong>, <a href=\"%s\">Lesen Sie warum</a>"
+"Leider ist uns die IFG-Emailadresse dieser Behörde nicht bekannt, somit können wir dies nicht bestätigen.\n"
+"Bitte <a href=\"%s\">kontaktieren Sie uns</a> zur Klärung der Angelegenheit."
-#: app/views/comment/new.rhtml:62
+#: app/views/user_mailer/already_registered.rhtml:3
msgid ""
-"Your thoughts on what the {{site_name}} <strong>administrators</strong> "
-"should do about the request."
+"You just tried to sign up to {{site_name}}, when you\n"
+"already have an account. Your name and password have been\n"
+"left as they previously were.\n"
+"\n"
+"Please click on the link below."
msgstr ""
+"Sie haben soeben versucht sich als neuer Nutzer von AskTheEU.org zu "
+"registrieren, obwohl Sie bereits ein Konto haben. Ihr Benutzername und "
+"Passwort sind unverändert. Bitte klicken Sie hier"
-#: app/models/track_mailer.rb:25
-msgid "Your {{site_name}} email alert"
+#: app/views/user_mailer/changeemail_already_used.rhtml:1
+msgid ""
+"Someone, perhaps you, just tried to change their email address on\n"
+"{{site_name}} from {{old_email}} to {{new_email}}."
msgstr ""
+"Jemand, evtl. Sie selber, hat soeben versucht seine/ihre Email-Adresse auf\n"
+"{{site_name}} von{{old_email}} in {{new_email}} zu ändern."
-#: app/models/outgoing_message.rb:69
-msgid "Yours faithfully,"
-msgstr "Mit freundlichem Gruß, "
+#: app/views/user_mailer/changeemail_already_used.rhtml:5
+msgid ""
+"This was not possible because there is already an account using \n"
+"the email address {{email}}."
+msgstr ""
+"Dieser Vorgang war nicht möglich, da bereits ein Nutzerkonto mit der Email-"
+"Adresse {{email}} besteht."
-#: app/models/outgoing_message.rb:67
-msgid "Yours sincerely,"
-msgstr "Mit freundlichem Gruß, "
+#: app/views/user_mailer/changeemail_already_used.rhtml:8
+msgid "The accounts have been left as they previously were."
+msgstr "Die Nutzerkonten wurden in Ihrem ursprünglichen Zustand belassen."
-#: app/views/request/new.rhtml:97
+#: app/views/user_mailer/changeemail_confirm.rhtml:3
msgid ""
-"a one line summary of the information you are requesting, \n"
-"\t\t\te.g."
+"Please click on the link below to confirm that you want to \n"
+"change the email address that you use for {{site_name}}\n"
+"from {{old_email}} to {{new_email}}"
msgstr ""
-"Einzeilige Zusammenfassung der von Ihnen angefragten Information, \n"
-"<span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span>e.g."
+"Bitte klicken Sie auf den unten angezeigten Link, um zu bestätigen, dass Sie \n"
+"die für {{site_name}} verwendete Email-Adresse\n"
+"von {{old_email}} in {{new_email}} ändern möchten"
-#: app/views/public_body/show.rhtml:31
-msgid "admin"
-msgstr "Administration"
-
-#: app/views/public_body/show.rhtml:29
-msgid "also called {{public_body_short_name}}"
-msgstr "auch genannt: {{public_body_short_name}}"
+#: app/views/user_mailer/changeemail_confirm.rhtml:10
+msgid ""
+"We will not reveal your email addresses to anybody unless you\n"
+"or the law tell us to."
+msgstr ""
+"Ohne Ihre Zustimmung oder gesetzliche Vorschrift werden wir Ihre Email-"
+"Adresse zu keinem Zeitpunkt veröffentlichen."
-#: app/views/user/wrong_user.rhtml:5
-msgid "and sign in as "
-msgstr "und melden Sie sich an als"
+#: app/views/user_mailer/confirm_login.rhtml:3
+msgid "Please click on the link below to confirm your email address."
+msgstr ""
+"Klicken Sie auf den unten aufgeführten Link, um Ihre Emailadresse zu "
+"bestätigen."
-#: app/views/request/show.rhtml:59
+#: app/views/user_mailer/confirm_login.rhtml:8
msgid ""
-"and update the status accordingly. Perhaps <strong>you</strong> might like "
-"to help out by doing that?"
+"We will not reveal your email address to anybody unless you\n"
+"or the law tell us to."
msgstr ""
+"Wir werden Ihre Emailadresse nicht veröffentlichen, sofern nicht von Ihnen "
+"freigegeben oder gesetzlich vorgeschrieben. "
-#: app/views/request/show.rhtml:64
-msgid "and update the status."
-msgstr "und aktualisieren Sie den Status. "
+#: lib/world_foi_websites.rb:5
+msgid "United Kingdom"
+msgstr "Vereinigtes Königreich"
-#: app/views/request/_describe_state.rhtml:101
-msgid "and we'll suggest <strong>what to do next</strong>"
-msgstr "und wir werden <strong>nächstmögliche Schritte</strong> vorschlagen"
+#: lib/world_foi_websites.rb:9
+msgid "Kosovo"
+msgstr "Kosovo"
-#: app/views/user/show.rhtml:153
-msgid "annotation"
-msgstr "Anmerkung"
+#: lib/world_foi_websites.rb:13
+msgid "European Union"
+msgstr "Europäische Union"
-#: app/views/user/show.rhtml:147
-msgid "annotations"
-msgstr "Anmerkungen"
+#: lib/world_foi_websites.rb:17
+msgid "United States of America"
+msgstr "Vereinigte Staaten von Amerika"
-#: app/models/track_thing.rb:138
-msgid "any <a href=\"/list\">new requests</a>"
-msgstr ""
+#: lib/world_foi_websites.rb:21
+msgid "New Zealand"
+msgstr "Neuseeland"
-#: app/models/track_thing.rb:154
-msgid "any <a href=\"/list/successful\">successful requests</a>"
-msgstr ""
+#: lib/world_foi_websites.rb:25
+msgid "Germany"
+msgstr "Deutschland"
-#: app/views/request_mailer/very_overdue_alert.rhtml:1
-msgid "are long overdue."
-msgstr "sind lange überfällig. "
+#: lib/world_foi_websites.rb:29
+msgid "Chile"
+msgstr "Chile"
-#: app/controllers/public_body_controller.rb:111
-msgid "beginning with"
-msgstr ""
+#: locale/model_attributes.rb:2
+msgid "public body"
+msgstr "Behörde"
-#: app/views/request/show.rhtml:82
-msgid "by"
-msgstr "von"
+#: locale/model_attributes.rb:3
+msgid "PublicBody|Name"
+msgstr "Behörde|Name"
-#: app/views/request/_followup.rhtml:38
-msgid "by <strong>{{date}}</strong>"
-msgstr "bis zum <strong>{{date}}</strong>"
+#: locale/model_attributes.rb:4
+msgid "PublicBody|Short name"
+msgstr "PublicBody|Short name"
-#: app/views/request/_request_listing_via_event.rhtml:34
-msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
-msgstr "von {{public_body_name}} an {{info_request_user}} am {{date}}."
+#: locale/model_attributes.rb:5
+msgid "PublicBody|Request email"
+msgstr "Behörde|Email anfragen"
-#: app/views/request/_request_listing_short_via_event.rhtml:10
-msgid "by {{user_link_absolute}}"
-msgstr "durch {{user_link_absolute}}"
+#: locale/model_attributes.rb:6
+msgid "PublicBody|Version"
+msgstr "Behörde|Version"
-#: locale/model_attributes.rb:35
-msgid "censor rule"
-msgstr ""
+#: locale/model_attributes.rb:7
+msgid "PublicBody|Last edit editor"
+msgstr "PublicBody|Last edit editor"
+
+#: locale/model_attributes.rb:8
+msgid "PublicBody|Last edit comment"
+msgstr "PublicBody|Last edit comment"
+
+#: locale/model_attributes.rb:9
+msgid "PublicBody|Url name"
+msgstr "Behörde|URL"
+
+#: locale/model_attributes.rb:10
+msgid "PublicBody|Home page"
+msgstr "PublicBody|Home page"
+
+#: locale/model_attributes.rb:11
+msgid "PublicBody|Notes"
+msgstr "Behörde|Anmerkung"
+
+#: locale/model_attributes.rb:12
+msgid "PublicBody|First letter"
+msgstr "PublicBody|First letter"
+
+#: locale/model_attributes.rb:13
+msgid "PublicBody|Publication scheme"
+msgstr "PublicBody|Publication scheme"
+
+#: locale/model_attributes.rb:14
+msgid "profile photo"
+msgstr "Profilbild"
+
+#: locale/model_attributes.rb:15
+msgid "ProfilePhoto|Data"
+msgstr "ProfilePhoto|Data"
+
+#: locale/model_attributes.rb:16
+msgid "ProfilePhoto|Draft"
+msgstr "ProfilePhoto|Draft"
+
+#: locale/model_attributes.rb:17
+msgid "exim log"
+msgstr "exim log"
+
+#: locale/model_attributes.rb:18
+msgid "EximLog|Order"
+msgstr "EximLog|Order"
+
+#: locale/model_attributes.rb:19
+msgid "EximLog|Line"
+msgstr "EximLog|Line"
#: locale/model_attributes.rb:20
msgid "comment"
msgstr "Kommentar"
-#: app/views/request/show_response.rhtml:41
-msgid ""
-"containing your postal address, and asking them to reply to this request.\n"
-" Or you could phone them."
-msgstr ""
+#: locale/model_attributes.rb:21
+msgid "Comment|Comment type"
+msgstr "Comment|Comment type"
-#: app/models/info_request_event.rb:338
-msgid "display_status only works for incoming and outgoing messages right now"
-msgstr ""
+#: locale/model_attributes.rb:22
+msgid "Comment|Body"
+msgstr "Comment|Body"
-#: app/views/request_mailer/overdue_alert.rhtml:3
-msgid "during term time"
-msgstr ""
+#: locale/model_attributes.rb:23
+msgid "Comment|Visible"
+msgstr "Comment|Visible"
-#: app/views/general/frontpage.rhtml:18
-msgid "e.g."
-msgstr "z.B."
+#: locale/model_attributes.rb:24
+msgid "Comment|Locale"
+msgstr "Comment|Locale"
-#: app/views/user/show.rhtml:96
-msgid "edit text about you"
-msgstr "Bearbeiten Sie den Infotext zu Ihrer Person"
+#: locale/model_attributes.rb:25
+msgid "outgoing message"
+msgstr "Gesendete Nachricht"
-#: app/views/user/show.rhtml:171
-msgid "email subscription"
-msgstr "Anleitung mailen"
+#: locale/model_attributes.rb:26
+msgid "OutgoingMessage|Body"
+msgstr "OutgoingMessage|Body"
-#: app/views/request_mailer/very_overdue_alert.rhtml:4
-msgid "even during holidays"
-msgstr ""
+#: locale/model_attributes.rb:27
+msgid "OutgoingMessage|Status"
+msgstr "OutgoingMessage|Status"
-#: locale/model_attributes.rb:17
-msgid "exim log"
-msgstr ""
+#: locale/model_attributes.rb:28
+msgid "OutgoingMessage|Message type"
+msgstr "OutgoingMessage|Message type"
-#: locale/model_attributes.rb:59
-msgid "exim log done"
-msgstr ""
+#: locale/model_attributes.rb:29
+msgid "OutgoingMessage|Last sent at"
+msgstr "OutgoingMessage|Last sent at"
-#: app/views/request_mailer/requires_admin.rhtml:2
-msgid "has reported an"
-msgstr ""
+#: locale/model_attributes.rb:30
+msgid "OutgoingMessage|What doing"
+msgstr "OutgoingMessage|What doing"
-#: app/views/request_mailer/overdue_alert.rhtml:1
-msgid "have delayed."
-msgstr ""
+#: locale/model_attributes.rb:31
+msgid "track thing"
+msgstr "nachverfolgen"
-#: locale/model_attributes.rb:56
-msgid "holiday"
-msgstr ""
+#: locale/model_attributes.rb:32
+msgid "TrackThing|Track query"
+msgstr "TrackThing|Track query"
-#: app/views/request/_followup.rhtml:36 app/views/request/show.rhtml:70
-#: app/views/request/show.rhtml:80
-msgid "in term time"
-msgstr ""
+#: locale/model_attributes.rb:33
+msgid "TrackThing|Track medium"
+msgstr "TrackThing|Track medium"
-#: app/views/public_body/list.rhtml:42
-msgid "in total"
-msgstr "vollständig"
+#: locale/model_attributes.rb:34
+msgid "TrackThing|Track type"
+msgstr "TrackThing|Track type"
-#: locale/model_attributes.rb:62
-msgid "incoming message"
-msgstr "Eingehende Nachricht"
+#: locale/model_attributes.rb:35
+msgid "censor rule"
+msgstr "censor rule"
-#: locale/model_attributes.rb:79
-msgid "info request"
-msgstr "Informationsanfrage"
+#: locale/model_attributes.rb:36
+msgid "CensorRule|Text"
+msgstr "CensorRule|Text"
+
+#: locale/model_attributes.rb:37
+msgid "CensorRule|Replacement"
+msgstr "CensorRule|Replacement"
+
+#: locale/model_attributes.rb:38
+msgid "CensorRule|Last edit editor"
+msgstr "CensorRule|Last edit editor"
+
+#: locale/model_attributes.rb:39
+msgid "CensorRule|Last edit comment"
+msgstr "CensorRule|Last edit comment"
#: locale/model_attributes.rb:40
msgid "info request event"
msgstr "Verlauf Informationsanfrage"
-#: app/views/user/set_profile_about_me.rhtml:3
-#: app/views/user/signchangeemail.rhtml:3
-msgid "internal error"
-msgstr "interner Fehler"
+#: locale/model_attributes.rb:41
+msgid "InfoRequestEvent|Event type"
+msgstr "InfoRequestEvent|Event type"
-#: app/views/request/show.rhtml:100
-msgid "is <strong>waiting for your clarification</strong>."
-msgstr "<strong>Ihre Erläuterung wird erwartet</strong>."
+#: locale/model_attributes.rb:42
+msgid "InfoRequestEvent|Params yaml"
+msgstr "InfoRequestEvent|Params yaml"
-#: app/views/user/show.rhtml:71
-msgid "just to see how it works"
-msgstr ""
+#: locale/model_attributes.rb:43
+msgid "InfoRequestEvent|Described state"
+msgstr "InfoRequestEvent|Described state"
-#: app/views/comment/_single_comment.rhtml:10
-msgid "left an annotation"
-msgstr "Anmerkung hinterlassen"
+#: locale/model_attributes.rb:44
+msgid "InfoRequestEvent|Calculated state"
+msgstr "InfoRequestEvent|Calculated state"
-#: app/views/user/_user_listing_single.rhtml:19
-#: app/views/user/_user_listing_single.rhtml:20
-msgid "made."
-msgstr ""
+#: locale/model_attributes.rb:45
+msgid "InfoRequestEvent|Last described at"
+msgstr "InfoRequestEvent|Last described at"
-#: app/views/request/show.rhtml:74
-msgid "no later than"
-msgstr "nicht später als"
+#: locale/model_attributes.rb:46
+msgid "InfoRequestEvent|Prominence"
+msgstr "InfoRequestEvent|Prominence"
-#: app/views/request/followup_bad.rhtml:18
-msgid ""
-"no longer exists. If you are trying to make\n"
-" From the request page, try replying to a particular message, rather than sending\n"
-" a general followup. If you need to make a general followup, and know\n"
-" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
+#: locale/model_attributes.rb:47
+msgid "post redirect"
msgstr ""
-#: app/views/request/show.rhtml:72
-msgid "normally"
-msgstr "normalerweise"
+#: locale/model_attributes.rb:48
+msgid "PostRedirect|Token"
+msgstr "PostRedirect|Token"
-#: app/views/user/show.rhtml:114
-msgid "only"
-msgstr "nur"
+#: locale/model_attributes.rb:49
+msgid "PostRedirect|Uri"
+msgstr "PostRedirect|Uri"
-#: locale/model_attributes.rb:25
-msgid "outgoing message"
-msgstr "Gesendete Nachricht"
+#: locale/model_attributes.rb:50
+msgid "PostRedirect|Post params yaml"
+msgstr "PostRedirect|Post params yaml"
-#: app/views/user/sign.rhtml:11
-msgid "please sign in as "
-msgstr "Bitte melden Sie sich an als"
+#: locale/model_attributes.rb:51
+msgid "PostRedirect|Email token"
+msgstr "PostRedirect|Email token"
-#: app/views/user/sign.rhtml:28
-msgid "please sign in or make a new account."
-msgstr "Bitte melden Sie sich an oder erstellen Sie ein neues Benutzerkonto."
+#: locale/model_attributes.rb:52
+msgid "PostRedirect|Reason params yaml"
+msgstr "PostRedirect|Reason params yaml"
-#: locale/model_attributes.rb:49
-msgid "post redirect"
-msgstr ""
+#: locale/model_attributes.rb:53
+msgid "PostRedirect|Circumstance"
+msgstr "PostRedirect|Circumstance"
-#: locale/model_attributes.rb:14
-msgid "profile photo"
-msgstr "Profilbild"
+#: locale/model_attributes.rb:54
+msgid "holiday"
+msgstr "Urlaub"
-#: locale/model_attributes.rb:2
-msgid "public body"
-msgstr "Behörde"
+#: locale/model_attributes.rb:55
+msgid "Holiday|Day"
+msgstr "Holiday|Day"
-#: locale/model_attributes.rb:47
-msgid "raw email"
-msgstr ""
+#: locale/model_attributes.rb:56
+msgid "Holiday|Description"
+msgstr "Holiday|Description"
-#: app/views/request_mailer/not_clarified_alert.rhtml:1
-msgid "request."
-msgstr "Anfrage."
+#: locale/model_attributes.rb:57
+msgid "exim log done"
+msgstr "exim log done"
-#: app/views/request/show.rhtml:89
-msgid "requesting an internal review"
-msgstr "Interne Prüfung beantragen "
+#: locale/model_attributes.rb:58
+msgid "EximLogDone|Filename"
+msgstr "EximLogDone|Filename"
-#: app/views/request_mailer/requires_admin.rhtml:3
-msgid ""
-"response as needing administrator attention. Take a look, and reply to this\n"
-"email to let them know what you are going to do about it."
-msgstr ""
+#: locale/model_attributes.rb:59
+msgid "EximLogDone|Last stat"
+msgstr "EximLogDone|Last stat"
-#: app/views/request/show.rhtml:102
-msgid "send a follow up message"
-msgstr "Nachfrage versenden"
+#: locale/model_attributes.rb:60
+msgid "incoming message"
+msgstr "Eingehende Nachricht"
-#: app/views/request/_request_listing_via_event.rhtml:31
-msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr ""
-"gesendet an {{public_body_name}} durch {{info_request_user}} am {{date}}."
+#: locale/model_attributes.rb:61
+msgid "IncomingMessage|Cached attachment text clipped"
+msgstr "IncomingMessage|Cached attachment text clipped"
-#: app/views/request/show.rhtml:106
-msgid "sign in"
-msgstr "Anmelden"
+#: locale/model_attributes.rb:62
+msgid "IncomingMessage|Cached main body text folded"
+msgstr "IncomingMessage|Cached main body text folded"
-#: app/views/user/wrong_user.rhtml:4
-msgid "sign out"
-msgstr "Abmelden"
+#: locale/model_attributes.rb:63
+msgid "IncomingMessage|Cached main body text unfolded"
+msgstr "IncomingMessage|Cached main body text unfolded"
-#: app/views/request_mailer/new_response.rhtml:2
-msgid "that you made to"
+#: locale/model_attributes.rb:64
+msgid "IncomingMessage|Sent at"
msgstr ""
-#: app/views/request_mailer/comment_on_alert.rhtml:6
-#: app/views/request_mailer/comment_on_alert_plural.rhtml:5
-#: app/views/request_mailer/new_response.rhtml:15
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:8
-#: app/views/request_mailer/not_clarified_alert.rhtml:9
-#: app/views/request_mailer/old_unclassified_updated.rhtml:8
-#: app/views/request_mailer/overdue_alert.rhtml:9
-#: app/views/request_mailer/stopped_responses.rhtml:16
-#: app/views/request_mailer/very_overdue_alert.rhtml:11
-#: app/views/track_mailer/event_digest.rhtml:66
-#: app/views/user_mailer/already_registered.rhtml:11
-#: app/views/user_mailer/changeemail_already_used.rhtml:10
-#: app/views/user_mailer/changeemail_confirm.rhtml:13
-#: app/views/user_mailer/confirm_login.rhtml:11
-msgid "the {{site_name}} team"
+#: locale/model_attributes.rb:65
+msgid "IncomingMessage|Subject"
msgstr ""
-#: app/views/user/show.rhtml:140
-msgid "this person"
-msgstr "diese Person"
-
-#: app/views/user/show.rhtml:113
-msgid ""
-"to change password, \n"
-" subscriptions and more"
+#: locale/model_attributes.rb:66
+msgid "IncomingMessage|Safe mail from"
msgstr ""
-#: app/views/request/new.rhtml:34
-msgid "to check that the info isn't already published."
+#: locale/model_attributes.rb:67
+msgid "IncomingMessage|Mail from domain"
msgstr ""
-#: app/views/request/show.rhtml:62
-msgid "to read"
+#: locale/model_attributes.rb:68
+msgid "IncomingMessage|Valid to reply to"
msgstr ""
-#: app/views/request/show.rhtml:106
-msgid "to send a follow up message."
+#: locale/model_attributes.rb:69
+msgid "user info request sent alert"
msgstr ""
-#: app/views/request/show.rhtml:45
-msgid "to {{public_body}}"
-msgstr "an {{public_body}}"
+#: locale/model_attributes.rb:70
+msgid "UserInfoRequestSentAlert|Alert type"
+msgstr "UserInfoRequestSentAlert|Alert type"
-#: locale/model_attributes.rb:31
-msgid "track thing"
-msgstr ""
+#: locale/model_attributes.rb:71
+msgid "user"
+msgstr "Benutzer"
-#: app/views/request/_hidden_correspondence.rhtml:32
-msgid "unexpected prominence on request event"
-msgstr ""
+#: locale/model_attributes.rb:72
+msgid "User|Email"
+msgstr "BenutzerIEmail"
-#: app/views/request/_request_listing_via_event.rhtml:38
-msgid "unknown event type indexed "
-msgstr ""
+#: locale/model_attributes.rb:73
+msgid "User|Name"
+msgstr "BenutzerIName"
-#: app/views/request/followup_bad.rhtml:29
-msgid "unknown reason "
-msgstr "unbekannte Ursache"
+#: locale/model_attributes.rb:74
+msgid "User|Hashed password"
+msgstr "Benutzer | Verschlüsseltes Passwort"
-#: app/models/info_request.rb:814 app/models/info_request_event.rb:333
-msgid "unknown status "
-msgstr "unbekannter Status"
+#: locale/model_attributes.rb:75
+msgid "User|Salt"
+msgstr "User|Salt"
-#: app/views/user/show.rhtml:208
-msgid "unsubscribe"
-msgstr "abmelden"
+#: locale/model_attributes.rb:76
+msgid "User|Email confirmed"
+msgstr "UserIEmail bestätigt"
-#: app/views/user/show.rhtml:180 app/views/user/show.rhtml:194
-msgid "unsubscribe all"
-msgstr "alle abbestellen"
+#: locale/model_attributes.rb:77
+msgid "User|Url name"
+msgstr "Benutzer|URL Name"
-#: app/views/request/show.rhtml:53
-msgid "useful information."
-msgstr "nützliche Information"
+#: locale/model_attributes.rb:78
+msgid "User|Last daily track email"
+msgstr "User|Last daily track email"
-#: locale/model_attributes.rb:68
-msgid "user"
-msgstr "Benutzer"
+#: locale/model_attributes.rb:79
+msgid "User|Admin level"
+msgstr "User|Admin level"
-#: locale/model_attributes.rb:66
-msgid "user info request sent alert"
-msgstr ""
+#: locale/model_attributes.rb:80
+msgid "User|Ban text"
+msgstr "User|Ban text"
-#: app/views/user/show.rhtml:140
-msgid "you"
-msgstr ""
+#: locale/model_attributes.rb:81
+msgid "User|About me"
+msgstr "BenutzerIÜber mich"
-#: app/views/request/new.rhtml:6
-msgid ""
-"{{existing_request_user}} already\n"
-" created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n"
-" or edit the details below to make a new but similar request."
-msgstr ""
+#: locale/model_attributes.rb:82
+msgid "info request"
+msgstr "Informationsanfrage"
-#: app/views/request/_after_actions.rhtml:20
-msgid "{{info_request_user_name}} only:"
-msgstr "{{info_request_user_name}} ausschließlich:"
+#: locale/model_attributes.rb:83
+msgid "InfoRequest|Title"
+msgstr "InfoRequest|Title"
-#: app/views/general/frontpage.rhtml:51
-msgid "{{length_of_time}} ago"
-msgstr "vor {{length_of_time}} "
+#: locale/model_attributes.rb:84
+msgid "InfoRequest|Described state"
+msgstr "InfoRequest|Described state"
-#: app/views/request/_after_actions.rhtml:43
-msgid "{{public_body_name}} only:"
-msgstr "{{public_body_name}} ausschließlich:"
+#: locale/model_attributes.rb:85
+msgid "InfoRequest|Awaiting description"
+msgstr "InfoAnfrage | Beschreibung wird erwartet"
-#: app/views/public_body/view_email.rhtml:7
-msgid ""
-"{{site_name}} sends new requests to <strong>{{request_email}}</strong> for "
-"this authority."
-msgstr ""
+#: locale/model_attributes.rb:86
+msgid "InfoRequest|Prominence"
+msgstr "InfoRequest|Prominence"
-#: app/models/user.rb:122
-msgid "{{user_name}} (Banned)"
-msgstr ""
+#: locale/model_attributes.rb:87
+msgid "InfoRequest|Url title"
+msgstr "InfoRequest|Url title"
-#: app/views/request_mailer/comment_on_alert.rhtml:1
-msgid ""
-"{{user_name}} has annotated your {{law_used_short}} \n"
-"request. Follow this link to see what they wrote."
-msgstr ""
-"{{user_name}} hat Ihres {{law_used_short}} \n"
-"Anfrage kommentiert. Folgen Sie diesem Link, um die Anmerkung zu sehen."
+#: locale/model_attributes.rb:88
+msgid "InfoRequest|Law used"
+msgstr "InfoRequest|Law used"
-#: app/views/contact_mailer/user_message.rhtml:2
-msgid "{{user_name}} has used {{site_name}} to send you the message below."
-msgstr ""
+#: locale/model_attributes.rb:89
+msgid "InfoRequest|Allow new responses from"
+msgstr "InfoAnfrage | Neue Antworten zulassen von"
-#: app/views/request/show.rhtml:36
-msgid ""
-"{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) made this "
-"{{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to "
-"{{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
-msgstr ""
+#: locale/model_attributes.rb:90
+msgid "InfoRequest|Handle rejected responses"
+msgstr "InfoRequest|Handle rejected responses"
-#: app/views/request/show.rhtml:44
-msgid "{{user}} made this {{law_used_full}} request"
-msgstr "{{user}} hat diese {{law_used_full}} Anfrage gestellt"
+#: locale/model_attributes.rb:91
+msgid "InfoRequest|Idhash"
+msgstr "InfoRequest|Idhash"
diff --git a/locale/es/app.po b/locale/es/app.po
index b2ebcea0d..f51a7327e 100644
--- a/locale/es/app.po
+++ b/locale/es/app.po
@@ -2,15 +2,16 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# <victoria@access-info.org>, 2011.
+# Translators:
# David Cabo <david.cabo@gmail.com>, 2011.
# skenaja <alex@alexskene.com>, 2011.
+# <victoria@access-info.org>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2011-08-11 12:30+0200\n"
-"PO-Revision-Date: 2011-08-12 00:21+0000\n"
+"POT-Creation-Date: 2011-10-09 01:10+0200\n"
+"PO-Revision-Date: 2011-10-08 23:08+0000\n"
"Last-Translator: dcabo <david.cabo@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,257 +20,217 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: app/models/incoming_message.rb:866
+#: app/controllers/application_controller.rb:298
msgid ""
-"\n"
-"\n"
-"[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
+"<p>{{site_name}} is currently in maintenance. You can only view existing "
+"requests. You cannot make new ones, add followups or annotations, or "
+"otherwise change the database.</p> <p>{{read_only}}</p>"
msgstr ""
-"\n"
-"\n"
-"[ {{site_name}} Nota: El texto anterior estaba mal codificado, y se han eliminado algunos carácteres extraños. ]"
+"<p>{{site_name}} está en mantenimiento temporalmente. Sólo puede ver "
+"peticiones existentes. No puede crear una nueva, añadir comentarios, enviar "
+"respuestas, o realizar otras operaciones que alteren la base de datos.</p> "
+"<p>{{read_only}}</p>"
-#: app/views/user/set_profile_about_me.rhtml:14
-msgid ""
-" This will appear on your {{site_name}} profile, to make it\n"
-" easier for others to get involved with what you're doing."
-msgstr ""
-" Esto aparecerá en su perfil de {{site_name}}, para facilitar\n"
-" que otras personas entiendan y participen sus peticiones."
+#: app/controllers/comment_controller.rb:55
+msgid "To post your annotation"
+msgstr "Añadir su comentario"
-#: app/views/comment/_comment_form.rhtml:16
-msgid ""
-" (<strong>no ranty</strong> politics, read our <a href=\"%s\">moderation "
-"policy</a>)"
-msgstr ""
-" (<strong>sin ataques políticos</strong>, lea nuestra <a "
-"href=\"%s\">política de moderación</a>)"
+#: app/controllers/comment_controller.rb:56
+msgid "Then your annotation to {{info_request_title}} will be posted."
+msgstr "Entonces se enviará su comentario a {{info_request_title}}."
-#: app/views/request/upload_response.rhtml:40
-msgid ""
-" (<strong>patience</strong>, especially for large files, it may take a "
-"while!)"
-msgstr ""
-" (<strong>paciencia</strong>, especialmente con ficheros grandes, puede "
-"tardar unos minutos!)"
+#: app/controllers/comment_controller.rb:57
+msgid "Confirm your annotation to {{info_request_title}}"
+msgstr "Confirme su comentario a {{info_request_title}}"
-#: app/views/user/show.rhtml:59
-msgid " (you)"
-msgstr " (usted)"
+#: app/controllers/comment_controller.rb:62
+msgid "Thank you for making an annotation!"
+msgstr "¡Gracias por hacer un comentario!"
-#: app/views/user/signchangepassword_send_confirm.rhtml:18
+#: app/controllers/comment_controller.rb:73
+msgid " You will also be emailed updates about the request."
+msgstr " Recibirá actualizaciones por correo sobre esta petición."
+
+#: app/controllers/comment_controller.rb:75
+msgid " You are already being emailed updates about the request."
+msgstr " Ya está recibiendo actualizaciones por correo sobre la petición."
+
+#: app/controllers/help_controller.rb:63
msgid ""
-" <strong>Note:</strong>\n"
-" We will send you an email. Follow the instructions in it to change\n"
-" your password."
+"Your message has been sent. Thank you for getting in touch! We'll get back "
+"to you soon."
msgstr ""
-" <strong>Nota::</strong>\n"
-" Le enviaremos un correo. Siga sus instrucciones para cambiar\n"
-" su contraseña."
+"Su mensaje ha sido enviado. Gracias por escribir, nos pondremos en contacto "
+"con usted pronto."
-#: app/views/user/contact.rhtml:35
-msgid " <strong>Privacy note:</strong> Your email address will be given to"
+#: app/controllers/public_body_controller.rb:82
+#: app/controllers/user_controller.rb:140
+msgid "There was an error with the words you entered, please try again."
msgstr ""
-" <strong>Nota sobre privacidad:</strong> Su dirección de correo será dada a"
+"Ha habido un error con las palabras introducidas, por favor pruebe otra vez."
-#: app/views/comment/new.rhtml:33
-msgid " <strong>Summarise</strong> the content of any information returned. "
-msgstr ""
-" <strong>Resuma</strong> el contenido de cualquier información obtenida. "
+#: app/controllers/public_body_controller.rb:123
+msgid "beginning with"
+msgstr "empezando con"
-#: app/views/comment/new.rhtml:23
-msgid " Advise on how to <strong>best clarify</strong> the request."
-msgstr ""
-" Consejo sobre cómo <strong>aclarar lo mejor posible</strong> la petición."
+#: app/controllers/request_controller.rb:31
+#: app/controllers/request_controller.rb:303
+msgid "To send your FOI request"
+msgstr "Para enviar su petición de información"
-#: app/views/comment/new.rhtml:49
-msgid ""
-" Ideas on what <strong>other documents to request</strong> which the "
-"authority may hold. "
-msgstr ""
-" Ideas sobre <strong>qué otros documentos pedir</strong> que el organismo "
-"público puede tener. "
+#: app/controllers/request_controller.rb:32
+msgid "Then you'll be allowed to send FOI requests."
+msgstr "Entonces podrá enviar solicitudes de información."
-#: app/views/public_body/view_email.rhtml:30
-msgid ""
-" If you know the address to use, then please <a href=\"%s\">send it to us</a>.\n"
-" You may be able to find the address on their website, or by phoning them up and asking."
-msgstr ""
-" Si conoce la dirección a utilizar, entonces por favor <a href=\"%s\">envíenosla</a>.\n"
-" Puede que la encuentre en su página web, o llamándoles por teléfono y preguntando."
+#: app/controllers/request_controller.rb:33
+msgid "Confirm your email address"
+msgstr "Confirme su dirección de correo"
-#: app/views/user/set_profile_about_me.rhtml:26
-msgid ""
-" Include relevant links, such as to a campaign page, your blog or a\n"
-" twitter account. They will be made clickable. \n"
-" e.g."
-msgstr ""
-" Incluya enlaces relevantes, como a una página informativa, su blog o\n"
-" cuenta de Twitter. Se convertirán en enlaces automáticamente. \n"
-" Por ejemplo:"
+#: app/controllers/request_controller.rb:81
+msgid "To update the status of this FOI request"
+msgstr "Para actualizar el estado de su petición de información"
-#: app/views/comment/new.rhtml:27
+#: app/controllers/request_controller.rb:82
+msgid "Then you can update the status of your request to "
+msgstr "Entonces podrá actualizar el estado de su petición a "
+
+#: app/controllers/request_controller.rb:83
+msgid "Update the status of your request to "
+msgstr "Actualizar el estado de la petición a "
+
+#: app/controllers/request_controller.rb:155
+msgid "View and search requests"
+msgstr "Ver y buscar solicitudes"
+
+#: app/controllers/request_controller.rb:285
msgid ""
-" Link to the information requested, if it is <strong>already "
-"available</strong> on the Internet. "
+"<p>You do not need to include your email in the request in order to get a "
+"reply, as we will ask for it on the next screen (<a "
+"href=\"%s\">details</a>).</p>"
msgstr ""
-" Enlace a la información pedida, si <strong>ya está disponible</strong> en "
-"Internet. "
+"<p>No necesita incluir su dirección de correo en la petición para recibir "
+"una respuesta, se la pediremos en el siguiente paso (<a href=\"%s\">más "
+"detalles</a>).</p>"
-#: app/views/comment/new.rhtml:29
+#: app/controllers/request_controller.rb:287
msgid ""
-" Offer better ways of <strong>wording the request</strong> to get the "
-"information. "
+"<p>You do not need to include your email in the request in order to get a "
+"reply (<a href=\"%s\">details</a>).</p>"
msgstr ""
-" Ofrecer mejores formas de <strong>redactar su petición</strong> para "
-"conseguir la información. "
-
-#: app/views/user/sign.rhtml:26
-msgid " Please sign in or make a new account."
-msgstr " Por favor abra una sesión o cree una nueva cuenta"
+"<p>No necesita incluir su dirección de correo en la petición para recibir "
+"una respuesta (<a href=\"%s\">más detalles</a>).</p>"
-#: app/views/comment/new.rhtml:34
+#: app/controllers/request_controller.rb:289
msgid ""
-" Say how you've <strong>used the information</strong>, with links if "
-"possible."
+"<p>We recommend that you edit your request and remove the email address.\n"
+" If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
msgstr ""
-" Diga cómo ha <strong>usado la información</strong>, con enlaces si es "
-"posible."
+"<p>Le aconsejamos que edite su petición y elimine su dirección de correo.\n"
+" Si la deja, su dirección será enviada al organismo público, pero no será visible en esta web.</p>"
-#: app/views/comment/new.rhtml:28
+#: app/controllers/request_controller.rb:293
msgid ""
-" Suggest <strong>where else</strong> the requester might find the "
-"information. "
+"<p>Your request contains a <strong>postcode</strong>. Unless it directly "
+"relates to the subject of your request, please remove any address as it will"
+" <strong>appear publicly on the Internet</strong>.</p>"
msgstr ""
-" Sugiera <strong>en qué otro lugar</strong> el peticionario puede encontrar "
-"la información. "
-
-#: app/views/user/set_profile_about_me.rhtml:11
-msgid " What are you investigating using Freedom of Information? "
-msgstr " ¿Qué está investigando usando Acceso a la Información? "
-
-#: app/controllers/comment_controller.rb:75
-msgid " You are already being emailed updates about the request."
-msgstr " Ya está recibiendo actualizaciones por correo sobre la petición."
-
-#: app/controllers/comment_controller.rb:73
-msgid " You will also be emailed updates about the request."
-msgstr " Recibirá actualizaciones por correo sobre esta petición."
-
-#: app/views/request/upload_response.rhtml:5
-msgid " made by "
-msgstr " hecha por "
+"<p>Su petición incluye un <strong>código postal</strong>. Salvo que esté "
+"directamente relacionado con su petición, por favor elimine cualquier "
+"dirección, ya que <strong>estará disponible públicamente en "
+"Internet</strong>.</p>"
-#: app/views/user/show.rhtml:123
-msgid " made no Freedom of Information requests using this site."
-msgstr " no ha hecho peticiones de Acceso a la Información en esta web."
+#: app/controllers/request_controller.rb:304
+msgid "Then your FOI request to {{public_body_name}} will be sent."
+msgstr "Entonces su petición a {{public_body_name}} será enviada."
-#: app/views/user/contact.rhtml:36
-msgid " when you send this message."
-msgstr " cuando envió este mensaje."
+#: app/controllers/request_controller.rb:305
+msgid "Confirm your FOI request to "
+msgstr "Confirme su petición a "
-#: app/views/public_body/show.rhtml:80
-msgid "%d Freedom of Information request made using this site"
-msgid_plural "%d Freedom of Information requests made using this site"
-msgstr[0] ""
-msgstr[1] ""
+#: app/controllers/request_controller.rb:316
+msgid ""
+"<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\n"
+" <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\n"
+" replied by then.</p>\n"
+" <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an \n"
+" annotation below telling people about your writing.</p>"
+msgstr ""
+"<p>¡Su petición de {{law_used_full}} ha sido <strong>enviada</strong>!</p>\n"
+"<p><strong>Le avisaremos por correo</strong> cuando haya una respuesta, o en {{late_number_of_days}} días laborables si el organismo todavía no ha respondido.</p>\n"
+"<p>Si escribe sobre esta petición (en un foro o blog, por ejemplo) por favor enlace a esta página, y añada un comentario a continuación informando a posibles interesados.</p>"
-#: app/views/general/frontpage.rhtml:36
-msgid "%d request"
-msgid_plural "%d requests"
-msgstr[0] "%d petición"
-msgstr[1] "%d peticiones"
+#: app/controllers/request_controller.rb:343
+msgid "To classify the response to this FOI request"
+msgstr "Reclasificar la respuesta a esta petición"
-#: app/views/public_body/_body_listing_single.rhtml:21
-msgid "%d request made."
-msgid_plural "%d requests made."
-msgstr[0] ""
-msgstr[1] ""
+#: app/controllers/request_controller.rb:344
+msgid "Then you can classify the FOI response you have got from "
+msgstr "Entonces podrá clasificar la respuesta que ha obtenido "
-#: app/views/request/new.rhtml:102
-msgid "'Crime statistics by ward level for Wales'"
-msgstr "'Estadísticas de crímenes por región en España'"
+#: app/controllers/request_controller.rb:345
+msgid "Classify an FOI response from "
+msgstr "Clasifique una petición de "
-#: app/views/request/new.rhtml:100
-msgid "'Pollution levels over time for the River Tyne'"
-msgstr "'Niveles históricos de contaminación en el río Ebro'"
+#: app/controllers/request_controller.rb:352
+msgid ""
+"Please choose whether or not you got some of the information that you "
+"wanted."
+msgstr "Por favor indique si ha recibido o no la información que quería."
-#: app/controllers/user_controller.rb:355
+#: app/controllers/request_controller.rb:358
msgid ""
-",\n"
-"\n"
-"\n"
-"\n"
-"Yours,\n"
-"\n"
-"{{user_name}}"
+"The request has been updated since you originally loaded this page. Please "
+"check for any new incoming messages below, and try again."
msgstr ""
-",\n"
-"\n"
-"\n"
-"\n"
-"Un saludo,\n"
-"\n"
-"{{user_name}}"
+"La petición ha sido actualizada desde que llegó inicialmente a esta página. "
+"Por favor revise si ha llegado un nuevo mensaje a continuación, y vuelva a "
+"intentarlo."
-#: app/views/request/_after_actions.rhtml:9
-msgid "<a href=\"%s\">Add an annotation</a> (to help the requester or others)"
+#: app/controllers/request_controller.rb:384
+msgid ""
+"Thank you for updating the status of the request '<a "
+"href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests "
+"below for you to classify."
msgstr ""
-"<a href=\"%s\">Añada un comentario</a> (para ayudar al peticionario o a "
-"otros)"
+"Gracias por actualizar el estado de la petición '<a "
+"href=\"{{url}}\">{{info_request_title}}</a>'. A continuación le mostramos "
+"algunas peticiones más que puede clasificar."
-#: app/views/public_body/list.rhtml:29
-msgid "<a href=\"%s\">Are we missing a public authority?</a>."
-msgstr "<a href=\"%s\">¿Nos falta algún organismo público?</a>."
+#: app/controllers/request_controller.rb:387
+msgid "Thank you for updating this request!"
+msgstr "¡Gracias por actualizar esta petición!"
-#: app/views/request/_sidebar.rhtml:45
+#: app/controllers/request_controller.rb:395
msgid ""
-"<a href=\"%s\">Are you the owner of\n"
-" any commercial copyright on this page?</a>"
+"<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\n"
+"{{date_response_required_by}}</strong>.</p>"
msgstr ""
-"<a href=\"%s\">¿Posee el copyright\n"
-" de alguna información de esta página?</a>"
-
-#: app/views/general/search.rhtml:53
-msgid "<a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add one</a>."
-msgstr "<a href=\"%s\">Ver todas</a> o <a href=\"%s\">pídanos que añadamos una</a>."
-
-#: app/views/general/exception_caught.rhtml:13
-msgid "<a href=\"%s\">Contact us</a> to tell us about the problem</li>"
-msgstr "<a href=\"%s\">Contáctenos</a> para informarnos sobre el problema</li>"
-
-#: app/views/public_body/list.rhtml:43
-msgid "<a href=\"%s\">can't find the one you want?</a>"
-msgstr "<a href=\"%s\">¿No puede encontrar el que busca?</a>"
-
-#: app/views/request/_followup.rhtml:39 app/views/request/_followup.rhtml:46
-#: app/views/request/show.rhtml:83 app/views/request/show.rhtml:87
-msgid "<a href=\"%s\">details</a>"
-msgstr "<a href=\"%s\">detalles</a>"
-
-#: app/views/request/_followup.rhtml:74
-msgid "<a href=\"%s\">what's that?</a>"
-msgstr "<a href=\"%s\">¿Qué es eso?</a>"
+"<p>¡Gracias! Esperamos que su espera no sea demasiado larga.</p> <p>Por ley, debería recibir una respuesta pronto, y normalmente antes del fin de <strong>\n"
+"{{date_response_required_by}}</strong>.</p>"
-#: app/views/public_body/show.rhtml:50
+#: app/controllers/request_controller.rb:399
msgid ""
-"<a href=\"{{url}}\">Make a new Freedom of Information request</a> to "
-"{{public_body_name}}"
+"<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you "
+"should have got a response promptly, and normally before the end of "
+"<strong>{{date_response_required_by}}</strong>.</p>"
msgstr ""
-"<a href=\"{{url}}\">Haga una nueva petición de acceso a la información</a> a "
-"{{public_body_name}}"
+"<p>¡Gracias! Esperamos que no tenga que esperar mucho más.</p> <p>Por ley, "
+"debería recibir una respuesta pronto, y normalmente antes del final de "
+"<strong>{{date_response_required_by}}</strong>.</p>"
-#: app/controllers/request_game_controller.rb:23
+#: app/controllers/request_controller.rb:402
msgid ""
-"<p>All done! Thank you very much for your help.</p><p>There are <a "
-"href=\"{{helpus_url}}\">more things you can do</a> to help "
-"{{site_name}}.</p>"
+"<p>Thank you! Your request is long overdue, by more than "
+"{{very_late_number_of_days}} working days. Most requests should be answered "
+"within {{late_number_of_days}} working days. You might like to complain "
+"about this, see below.</p>"
msgstr ""
-"<p>¡Ya está! Muchas gracias por su ayuda.</p><p>Hay <a "
-"href=\"{{helpus_url}}\">más cosas que puede hacer</a> para ayudar a "
-"{{site_name}}.</p>"
+"<p>¡Gracias! Su petición está muy retrasada, han pasado más de "
+"{{very_late_number_of_days}} días laborales. La mayoría de las peticiones "
+"deberían ser respondidas en {{late_number_of_days}} días laborales. Puede "
+"reclamar sobre esta situación, como se explica más abajo.</p>"
-#: app/controllers/request_controller.rb:399
+#: app/controllers/request_controller.rb:405
msgid ""
"<p>Thank you! Here are some ideas on what to do next:</p>\n"
" <ul>\n"
@@ -293,80 +254,14 @@ msgstr ""
" </li>\n"
" </ul>"
-#: app/controllers/request_controller.rb:393
-msgid ""
-"<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you "
-"should have got a response promptly, and normally before the end of "
-"<strong>{{date_response_required_by}}</strong>.</p>"
-msgstr ""
-"<p>¡Gracias! Esperamos que no tenga que esperar mucho más.</p> <p>Por ley, "
-"debería recibir una respuesta pronto, y normalmente antes del final de "
-"<strong>{{date_response_required_by}}</strong>.</p>"
-
-#: app/controllers/request_controller.rb:389
-msgid ""
-"<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\n"
-"{{date_response_required_by}}</strong>.</p>"
-msgstr ""
-"<p>¡Gracias! Esperamos que su espera no sea demasiado larga.</p> <p>Por ley, debería recibir una respuesta pronto, y normalmente antes del fin de <strong>\n"
-"{{date_response_required_by}}</strong>.</p>"
-
-#: app/controllers/request_controller.rb:428
-msgid ""
-"<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a "
-"response within 20 days, or be told if it will take longer (<a "
-"href=\"{{review_url}}\">details</a>).</p>"
-msgstr ""
-"<p>¡Gracias! Esperamos que su búsqueda no sea demasiado larga.</p><p>Debería recibir "
-"una respuesta en 20 días, o ser informado de posibles retrasos (<a "
-"href=\"{{review_url}}\">detalles</a>).</p>"
-
-#: app/controllers/request_controller.rb:431
-msgid ""
-"<p>Thank you! We'll look into what happened and try and fix it up.</p><p>If "
-"the error was a delivery failure, and you can find an up to date FOI email "
-"address for the authority, please tell us using the form below.</p>"
-msgstr ""
-"<p>¡Gracias! Investigaremos lo ocurrido y trataremos de arreglarlo.</p><p> "
-"Si el error ha sido al intentar entregar el correo, y puede encontrar una "
-"dirección más actualizada para este organismo, por favor indíquenoslo en el "
-"siguiente formulario.</p>"
-
-#: app/controllers/request_controller.rb:396
-msgid ""
-"<p>Thank you! Your request is long overdue, by more than 40 working days. "
-"Most requests should be answered within 20 working days. You might like to "
-"complain about this, see below.</p>"
-msgstr ""
-"<p>¡Gracias! Su petición está muy retrasada, más de 40 días laborables. "
-"La mayoría de las peticiones deberían ser contestadas en 20 días laborables. "
-"Puede que usted quiera reclamar, como le explicamos a continuación.</p>"
-
-#: app/controllers/user_controller.rb:495
-msgid ""
-"<p>Thanks for changing the text about you on your profile.</p>\n"
-" <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
-msgstr ""
-"<p>Gracias por actualizar el texto de su perfil personal.</p>\n"
-" <p><strong>Ahora...</strong> puede subir también una foto a su perfil.</p>"
-
-#: app/controllers/user_controller.rb:417
-msgid ""
-"<p>Thanks for updating your profile photo.</p>\n"
-" <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
-msgstr ""
-"<p>Gracias por actualizar la foto de su perfil.</p>\n"
-" <p><strong>Ahora...</strong> puede escribir sobre usted y su investigación en su perfil.</p>"
-
-#: app/controllers/request_controller.rb:284
+#: app/controllers/request_controller.rb:420
msgid ""
-"<p>We recommend that you edit your request and remove the email address.\n"
-" If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
+"Oh no! Sorry to hear that your request was refused. Here is what to do now."
msgstr ""
-"<p>Le aconsejamos que edite su petición y elimine su dirección de correo.\n"
-" Si la deja, su dirección será enviada al organismo público, pero no será visible en esta web.</p>"
+"¡Oh no! Sentimos oir que su petición ha sido rechazada. Esto es lo que puede"
+" hacer ahora."
-#: app/controllers/request_controller.rb:417
+#: app/controllers/request_controller.rb:423
msgid ""
"<p>We're glad you got all the information that you wanted. If you write "
"about or make use of the information, please come back and add an annotation"
@@ -374,665 +269,617 @@ msgid ""
"href=\"{{donation_url}}\">make a donation</a> to the charity which runs "
"it.</p>"
msgstr ""
-"<p>Nos alegra saber que ha obtenido toda la información que solicitó. Si escribe "
-"sobre ella, o la utiliza, por favor vuelva y añada un comentario a continuación"
-" explicando lo que ha hecho.</p><p>Si {{site_name}} le ha resultado útil, <a "
-"href=\"{{donation_url}}\">puede donar</a> a la ONG responsable.</p>"
+"<p>Nos alegra saber que ha obtenido toda la información que solicitó. Si "
+"escribe sobre ella, o la utiliza, por favor vuelva y añada un comentario a "
+"continuación explicando lo que ha hecho.</p><p>Si {{site_name}} le ha "
+"resultado útil, <a href=\"{{donation_url}}\">puede donar</a> a la ONG "
+"responsable.</p>"
-#: app/controllers/request_controller.rb:420
+#: app/controllers/request_controller.rb:426
msgid ""
"<p>We're glad you got some of the information that you wanted. If you found "
"{{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to "
"the charity which runs it.</p><p>If you want to try and get the rest of the "
"information, here's what to do now.</p>"
msgstr ""
-"<p>Nos alegra saber que ha obtenido parte de la información que solicitó. Si escribe "
-"sobre ella, o la utiliza, por favor vuelva y añada un comentario a continuación"
-" explicando lo que ha hecho.</p><p>Si {{site_name}} le ha resultado útil, <a "
-"href=\"{{donation_url}}\">puede donar</a> a la ONG responsable.</p>"
+"<p>Nos alegra saber que ha obtenido parte de la información que solicitó. Si"
+" escribe sobre ella, o la utiliza, por favor vuelva y añada un comentario a "
+"continuación explicando lo que ha hecho.</p><p>Si {{site_name}} le ha "
+"resultado útil, <a href=\"{{donation_url}}\">puede donar</a> a la ONG "
+"responsable.</p>"
-#: app/controllers/request_controller.rb:282
+#: app/controllers/request_controller.rb:429
msgid ""
-"<p>You do not need to include your email in the request in order to get a "
-"reply (<a href=\"%s\">details</a>).</p>"
+"Please write your follow up message containing the necessary clarifications "
+"below."
msgstr ""
-"<p>No necesita incluir su dirección de correo en la petición para recibir "
-"una respuesta (<a href=\"%s\">más detalles</a>).</p>"
+"Por favor escriba su mensaje conteniendo las aclaraciones necesarias a "
+"continuación."
-#: app/controllers/request_controller.rb:280
+#: app/controllers/request_controller.rb:434
msgid ""
-"<p>You do not need to include your email in the request in order to get a "
-"reply, as we will ask for it on the next screen (<a "
-"href=\"%s\">details</a>).</p>"
+"<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a "
+"response within {{late_number_of_days}} days, or be told if it will take "
+"longer (<a href=\"{{review_url}}\">details</a>).</p>"
msgstr ""
-"<p>No necesita incluir su dirección de correo en la petición para recibir "
-"una respuesta, se la pediremos en el siguiente paso (<a href=\"%s\">más "
-"detalles</a>).</p>"
+"<p>¡Gracias! Deseamos que su espera no sea demasiado larga.</p><p>Debería "
+"recibir una respuesta en {{late_number_of_days}} días, o ser informado de "
+"que tardará más (<a href=\"{{review_url}}\">más información</a>).</p>"
-#: app/controllers/request_controller.rb:288
+#: app/controllers/request_controller.rb:437
msgid ""
-"<p>Your request contains a <strong>postcode</strong>. Unless it directly "
-"relates to the subject of your request, please remove any address as it will"
-" <strong>appear publicly on the Internet</strong>.</p>"
+"<p>Thank you! We'll look into what happened and try and fix it up.</p><p>If "
+"the error was a delivery failure, and you can find an up to date FOI email "
+"address for the authority, please tell us using the form below.</p>"
msgstr ""
-"<p>Su petición incluye un <strong>código postal</strong>. Salvo que esté "
-"directamente relacionado con su petición, por favor elimine cualquier "
-"dirección, ya que <strong>estará disponible públicamente en "
-"Internet</strong>.</p>"
+"<p>¡Gracias! Investigaremos lo ocurrido y trataremos de arreglarlo.</p><p> "
+"Si el error ha sido al intentar entregar el correo, y puede encontrar una "
+"dirección más actualizada para este organismo, por favor indíquenoslo en el "
+"siguiente formulario.</p>"
-#: app/controllers/request_controller.rb:311
-msgid ""
-"<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\n"
-" <p><strong>We will email you</strong> when there is a response, or after 20 working days if the authority still hasn't\n"
-" replied by then.</p>\n"
-" <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an \n"
-" annotation below telling people about your writing.</p>"
-msgstr ""
-"<p>¡Su petición {{law_used_full}} <strong>ha sido enviada</strong>!</p>\n"
-" <p><strong>Le avisaremos por correo</strong> cuando haya una respuesta, o en 20 días laborables si el organismo\n"
-" todavía no ha respondido.</p>\n"
-" <p>Si escribe sobre esta petición (en un foro o blog, por ejemplo) por favor enlace a esta página, y añada\n"
-" un comentario a continuación informando a posibles interesados.</p>"
+#: app/controllers/request_controller.rb:440
+msgid "Please use the form below to tell us more."
+msgstr "Por favor use el formulario a continuación para decirnos más."
-#: app/controllers/application_controller.rb:279
+#: app/controllers/request_controller.rb:443
msgid ""
-"<p>{{site_name}} is currently in maintenance. You can only view existing "
-"requests. You cannot make new ones, add followups or annotations, or "
-"otherwise change the database.</p> <p>{{read_only}}</p>"
+"If you have not done so already, please write a message below telling the "
+"authority that you have withdrawn your request. Otherwise they will not know"
+" it has been withdrawn."
msgstr ""
-"<p>{{site_name}} está en mantenimiento temporalmente. Sólo puede ver peticiones "
-"existentes. No puede crear una nueva, añadir comentarios, enviar respuestas, o "
-"realizar otras operaciones que alteren la base de datos.</p> <p>{{read_only}}</p>"
+"Si no lo ha hecho ya, por favor escriba un mensaje a continuación informando"
+" al organismo público de que ha retirado su petición. De lo contrario no "
+"sabrá que lo ha hecho."
-#: app/views/user/confirm.rhtml:11
-msgid ""
-"<small>If you use web-based email or have \"junk mail\" filters, also check your\n"
-"bulk/spam mail folders. Sometimes, our messages are marked that way.</small>\n"
-"</p>"
-msgstr ""
-"<small>Si usa correo web o tiene filtros \"anti spam\", por favor compruebe\n"
-"sus carpetas de spam. A veces, nuestros mensajes se marcan así por error.</small>\n"
-"</p>"
+#: app/controllers/request_controller.rb:548
+msgid "To send a follow up message to "
+msgstr "Enviar una respuesta a "
-#: app/views/request/new.rhtml:131
-msgid ""
-"<strong> Can I request information about myself?</strong>\n"
-"\t\t\t<a href=\"%s\">No! (Click here for details)</a>"
-msgstr ""
-"<strong> ¿Puedo pedir información sobre mí?</strong>\n"
-"\t\t\t<a href=\"%s\">¡No! (Pulse aquí para más detalles)</a>"
+#: app/controllers/request_controller.rb:549
+msgid "To reply to "
+msgstr "Contestar a "
-#: app/views/general/search.rhtml:130
-msgid ""
-"<strong><code>commented_by:tony_bowden</code></strong> to search annotations"
-" made by Tony Bowden, typing the name as in the URL."
-msgstr ""
-"<strong><code>commented_by:rafael_nadal</code></strong> para buscar "
-"comentarios hechos por el usuario 'rafael_nadal'."
+#: app/controllers/request_controller.rb:551
+msgid "Then you can write follow up message to "
+msgstr "Entonces podrá escribir un mensaje a "
-#: app/views/general/search.rhtml:132
-msgid ""
-"<strong><code>filetype:pdf</code></strong> to find all responses with PDF "
-"attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
-msgstr ""
-"<strong><code>filetype:pdf</code></strong> para buscar todas las respuestas "
-"con PDFs adjuntos. O prueba estas: <code>{{list_of_file_extensions}}</code>"
+#: app/controllers/request_controller.rb:552
+msgid "Then you can write your reply to "
+msgstr "Entonces podrá escribir su respuesta a "
-#: app/views/general/search.rhtml:131
-msgid ""
-"<strong><code>request:</code></strong> to restrict to a specific request, "
-"typing the title as in the URL."
-msgstr ""
-"<strong><code>request:</code></strong> para restringir la búsqueda a una "
-"petición específica, escribiendo el título tal y como aparece en la URL."
+#: app/controllers/request_controller.rb:554
+msgid "Write your FOI follow up message to "
+msgstr "Escriba su respuesta a "
-#: app/views/general/search.rhtml:129
-msgid ""
-"<strong><code>requested_by:julian_todd</code></strong> to search requests "
-"made by Julian Todd, typing the name as in the URL."
-msgstr ""
-"<code><strong>requested_by:julian_todd</strong></code> para buscar las "
-"peticiones realizadas por Julian Todd, escribiendo el nombre como aparece en"
-" la URL."
+#: app/controllers/request_controller.rb:555
+msgid "Write a reply to "
+msgstr "Escribir una respuesta a "
-#: app/views/general/search.rhtml:128
+#: app/controllers/request_controller.rb:562
msgid ""
-"<strong><code>requested_from:home_office</code></strong> to search requests "
-"from the Home Office, typing the name as in the URL."
+"Your follow up has not been sent because this request has been stopped to "
+"prevent spam. Please <a href=\"%s\">contact us</a> if you really want to "
+"send a follow up message."
msgstr ""
-"<strong><code>requested_from:consejo_europeo</code></strong> para buscar "
-"peticiones realizadas al Consejo Europeo, escribiendo su nombre como aparece"
-" en la URL."
+"Su respuesta no ha sido enviada porque esta petición ha sido bloqueada para "
+"evitar spam. Por favor <a href=\"%s\">contáctenos</a> si realmente quiere "
+"enviar una respuesta."
-#: app/views/general/search.rhtml:126
+#: app/controllers/request_controller.rb:565
msgid ""
-"<strong><code>status:</code></strong> to select based on the status or "
-"historical status of the request, see the <a href=\"{{statuses_url}}\">table"
-" of statuses</a> below."
-msgstr ""
-"<strong><code>status:</code></strong> para filtrar en función del estado actual "
-"o histórico de la petición, consulte la <a href=\"{{statuses_url}}\">tabla"
-" de estados</a> a continuación."
+"You previously submitted that exact follow up message for this request."
+msgstr "Ya ha enviado esa misma respuesta a esta petición."
-#: app/views/general/search.rhtml:134
-msgid ""
-"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n"
-" and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n"
-" can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
-msgstr ""
-"<strong><code>tag:salud</code></strong> para buscar todos los organismos públicos o peticiones con la etiqueta dada. Puede incluir múltiples etiquetas, \n"
-" y valores, e.g. <code>tag:salud AND tag:financial_transaction:335633</code>. Por defecto, basta con que cualquiera de las etiquetas\n"
-" esté presente, añada <code>AND</code> explícitamente si sólo quiere resultados con todas ellas presentes."
+#: app/controllers/request_controller.rb:588
+msgid "Your internal review request has been sent on its way."
+msgstr "Su petición para una revisión interna está en camino."
-#: app/views/general/search.rhtml:127
-msgid ""
-"<strong><code>variety:</code></strong> to select type of thing to search "
-"for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
-msgstr ""
-"<strong><code>variety:</code></strong> para filtrar en función del tipo de objeto, "
-"consulte la <a href=\"{{varieties_url}}\">tabla de tipos de objetos</a> a continuación."
+#: app/controllers/request_controller.rb:590
+msgid "Your follow up message has been sent on its way."
+msgstr "Su mensaje de seguimiento está en camino."
-#: app/views/comment/new.rhtml:56
+#: app/controllers/request_controller.rb:712
msgid ""
-"<strong>Advice</strong> on how to get a response that will satisfy the "
-"requester. </li>"
+"To upload a response, you must be logged in using an email address from "
msgstr ""
-"<strong>Consejos</strong> sobre cómo conseguir una respuesta que satisfaga "
-"al peticionario. </li>"
+"Para cargar una respuesta, debe estar registrado con una dirección de correo"
+" electrónico de"
-#: app/views/request/_other_describe_state.rhtml:56
-msgid "<strong>All the information</strong> has been sent"
-msgstr "<strong>Toda la información</strong> ha sido enviada"
+#: app/controllers/request_controller.rb:713
+msgid "Then you can upload an FOI response. "
+msgstr "Entonces podrá subir una respuesta. "
-#: app/views/request/_followup.rhtml:79
-msgid ""
-"<strong>Anything else</strong>, such as clarifying, prompting, thanking"
-msgstr ""
-"<strong>Otras cosas</strong>, como aclarar, preguntar, dar las gracias"
+#: app/controllers/request_controller.rb:714
+#: app/controllers/user_controller.rb:542
+msgid "Confirm your account on {{site_name}}"
+msgstr "Confirme su cuenta en {{site_name}}"
-#: app/views/request/details.rhtml:12
-msgid ""
-"<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \n"
-"a good internal knowledge of user behaviour on {{site_name}}. How, \n"
-"why and by whom requests are categorised is not straightforward, and there will\n"
-"be user error and ambiguity. You will also need to understand FOI law, and the\n"
-"way authorities use it. Plus you'll need to be an elite statistician. Please\n"
-"<a href=\"{{contact_path}}\">contact us</a> with questions."
+#: app/controllers/request_controller.rb:741
+msgid "Please type a message and/or choose a file containing your response."
msgstr ""
-"<strong>¡Cuidado!</strong> Para utilizar estos datos de forma fiable necesita \n"
-"un conocimiento profundo del comportamiento de los usuarios de {{site_name}}. El cómo, \n"
-"por qué y por quién se clasifican las peticiones no es trivial, y se producen fallos\n"
-"humanos y decisiones discutibles. Necesita también comprender las leyes de acceso a la\n"
-"información, y cómo son utilizadas por los organismos públicos. Necesita por último ser\n"
-"un buen estadista. Por favor <a href=\"{{contact_path}}\">contacte con nosotros</a>\n"
-"si tiene cualquier duda."
-
-#: app/views/request/_other_describe_state.rhtml:28
-msgid "<strong>Clarification</strong> has been requested"
-msgstr "Se ha solicitado una <strong>aclaración</strong>"
+"Por favor escriba un mensaje y/o escoja un fichero conteniendo su respuesta."
-#: app/views/request/_other_describe_state.rhtml:14
+#: app/controllers/request_controller.rb:747
msgid ""
-"<strong>No response</strong> has been received\n"
-" <small>(maybe there's just an acknowledgement)</small>"
+"Thank you for responding to this FOI request! Your response has been "
+"published below, and a link to your response has been emailed to "
msgstr ""
-"No se ha recibido <strong>ninguna respuesta</strong>\n"
-" <small>(puede que se trate sólo de un acuse de recibo)</small>"
+"¡Gracias por responder a esta petición de información! Su respuesta ha sido "
+"publicada a continuación, y un enlace a su respuesta ha sido enviada a "
-#: app/views/user/signchangeemail.rhtml:30
-msgid ""
-"<strong>Note:</strong>\n"
-" We will send an email to your new email address. Follow the\n"
-" instructions in it to confirm changing your email."
-msgstr ""
-"<strong>Nota:</strong>\n"
-" Enviaremos un correo a la nueva dirección de correo. Siga\n"
-" sus instrucciones para confirmar la nueva dirección."
+#: app/controllers/request_controller.rb:773
+msgid "To download the zip file"
+msgstr "Descargar el fichero ZIP"
-#: app/views/user/contact.rhtml:32
-msgid ""
-"<strong>Note:</strong> You're sending a message to yourself, presumably\n"
-" to try out how it works."
-msgstr ""
-"<strong>Nota:</strong> Se está enviando un mensaje a sí mismo, suponemos\n"
-" que para probar cómo funciona."
+#: app/controllers/request_controller.rb:774
+msgid "Then you can download a zip file of {{info_request_title}}."
+msgstr "Entonces podrá descargarse el fichero ZIP de {{info_request_title}}."
-#: app/views/request/preview.rhtml:31
-msgid ""
-"<strong>Privacy note:</strong> If you want to request private information about\n"
-" yourself then <a href=\"%s\">click here</a>."
+#: app/controllers/request_controller.rb:775
+msgid "Log in to download a zip file of {{info_request_title}}"
msgstr ""
-"<strong>Nota sobre privacidad:</strong> Si quiere solicitar información privada\n"
-" sobre sí mismo entonces <a href=\"%s\">siga este enlace</a>."
+"Abra una sesión para descargar el fichero ZIP de {{info_request_title}}"
-#: app/views/user/set_crop_profile_photo.rhtml:35
+#: app/controllers/request_game_controller.rb:23
msgid ""
-"<strong>Privacy note:</strong> Your photo will be shown in public on the Internet, \n"
-" wherever you do something on {{site_name}}."
+"<p>All done! Thank you very much for your help.</p><p>There are <a "
+"href=\"{{helpus_url}}\">more things you can do</a> to help "
+"{{site_name}}.</p>"
msgstr ""
-"<strong>Nota sobre privacidad:</strong> Su foto será mostrada públicamente en Internet, \n"
-" junto a cada una de sus acciones en {{site_name}}."
+"<p>¡Ya está! Muchas gracias por su ayuda.</p><p>Hay <a "
+"href=\"{{helpus_url}}\">más cosas que puede hacer</a> para ayudar a "
+"{{site_name}}.</p>"
-#: app/views/request/followup_preview.rhtml:37
-msgid ""
-"<strong>Privacy warning:</strong> Your message, and any response\n"
-" to it, will be displayed publicly on this website."
-msgstr ""
-"<strong>Nota sobre privacidad:</strong> Su mensaje, y cualquier respuesta,\n"
-" estarán disponibles públicamente en esta web."
+#: app/controllers/request_game_controller.rb:40
+msgid "To play the request categorisation game"
+msgstr "Jugar al juego de recategorización de peticiones"
-#: app/views/request/_other_describe_state.rhtml:52
-msgid "<strong>Some of the information</strong> has been sent "
-msgstr "Se ha enviado <strong>parte de la información</strong> "
+#: app/controllers/request_game_controller.rb:41
+msgid "Then you can play the request categorisation game."
+msgstr "Entonces podrá jugar al juego de clasificar peticiones"
-#: app/views/general/exception_caught.rhtml:17
-msgid "<strong>Technical details:</strong>"
-msgstr "<strong>Detalles técnicos:</strong>"
+#: app/controllers/request_game_controller.rb:42
+msgid "Play the request categorisation game"
+msgstr "Juega al juego de clasificación de peticiones!"
-#: app/views/comment/new.rhtml:35
-msgid "<strong>Thank</strong> the public authority or "
-msgstr "<strong>Dé las gracias</strong> al organismo público o "
+#: app/controllers/request_game_controller.rb:52
+msgid "Thank you for helping us keep the site tidy!"
+msgstr "¡Gracias por ayudarnos a mantener la web en orden!"
-#: app/views/request/new.rhtml:23
+#: app/controllers/services_controller.rb:21
msgid ""
-"<strong>browse</strong> the authority's <a href=\"%s\">publication "
-"scheme</a> or <strong>search</strong> their web site ..."
+"Hello! You can make Freedom of Information requests within {{country_name}} "
+"at {{link_to_website}}"
msgstr ""
-"<strong>explore</strong> <a href=\"%s\">la información publicada</a> "
-"por el organismo o <strong>busque</strong> en su página web..."
+"¡Hola! Puede hacer solicitudes de información en {{country_name}} usando "
+"{{link_to_website}}"
-#: app/views/request/show.rhtml:91
-msgid "<strong>did not have</strong> the information requested."
-msgstr "<strong>no tenía</strong> la información solicitada."
+#: app/controllers/track_controller.rb:98
+msgid "You are already being emailed updates about "
+msgstr "Ya está recibiendo actualizaciones por correo sobre "
-#: app/views/request/new.rhtml:25
-msgid "<strong>search</strong> the authority's web site ..."
-msgstr "<strong>busque</strong> en la web del organismo público ..."
+#: app/controllers/track_controller.rb:111
+msgid "You will now be emailed updates about "
+msgstr "Ahora recibirá actualizaciones por correo sobre "
-#: app/views/comment/new.rhtml:45
-msgid ""
-"A <strong>summary</strong> of the response if you have received it by post. "
-msgstr ""
-"Un <strong>resumen</strong> de la respuesta si la ha recibido por correo "
-"ordinario. "
+#: app/controllers/track_controller.rb:143
+msgid "To cancel this alert"
+msgstr "Cancelar esta alerta"
-#: app/views/general/search.rhtml:162
-msgid "A public authority"
-msgstr "Un organismo público"
+#: app/controllers/track_controller.rb:144
+msgid "Then you can cancel the alert."
+msgstr "Entonces podrá cancelar su alerta."
-#: app/views/request/_other_describe_state.rhtml:34
-msgid "A response will be sent <strong>by post</strong>"
-msgstr "Una respuesta será enviada <strong>por correo ordinario</strong>"
+#: app/controllers/track_controller.rb:145
+msgid "Cancel a {{site_name}} alert"
+msgstr "Cancele una alerta de {{site_name}}"
-#: app/views/general/search.rhtml:151
-msgid "A strange reponse, required attention by the {{site_name}} team"
-msgstr "Una respuesta inusual, debe ser revisada por el equipo de {{site_name}}"
+#: app/controllers/track_controller.rb:154
+msgid "You will no longer be emailed updates about "
+msgstr "Ya no recibirá actualizaciones por correo sobre "
-#: app/views/general/search.rhtml:163
-msgid "A {{site_name}} user"
-msgstr "Un usuario de {{site_name}}"
+#: app/controllers/track_controller.rb:173
+msgid "To cancel these alerts"
+msgstr "Cancelar estas alertas"
-#: app/views/user/set_profile_about_me.rhtml:20
-msgid "About you:"
-msgstr "Sobre mí:"
+#: app/controllers/track_controller.rb:174
+msgid "Then you can cancel the alerts."
+msgstr "Entonces podrá cancelar las alertas."
-#: app/models/info_request_event.rb:293
-msgid "Acknowledgement"
-msgstr "Esperando respuesta"
+#: app/controllers/track_controller.rb:175
+msgid "Cancel some {{site_name}} alerts"
+msgstr "Cancelar alertas de {{site_name}}"
-#: app/views/request/_sidebar.rhtml:5
-msgid "Act on what you've learnt"
-msgstr "Utilice esta información"
+#: app/controllers/track_controller.rb:183
+msgid "You will no longer be emailed updates for those alerts"
+msgstr "Ya no recibirá correos para esas alertas"
-#: app/views/comment/new.rhtml:14
-msgid "Add an annotation to "
-msgstr "Añada un comentario a "
+#: app/controllers/user_controller.rb:43
+msgid "{{search_results}} matching '{{query}}'"
+msgstr "{{search_results}} encontrados por '{{query}}'"
-#: app/views/request/show_response.rhtml:47
+#: app/controllers/user_controller.rb:207
msgid ""
-"Add an annotation to your request with choice quotes, or\n"
-" a <strong>summary of the response</strong>."
+"That doesn't look like a valid email address. Please check you have typed it"
+" correctly."
msgstr ""
-"Añada un comentario a su petición con citas seleccionadas, o\n"
-" un <strong>resumen de la respuesta</strong>."
+"No parece ser una dirección de correo válida. Por favor comprueba que la ha "
+"escrito correctamente."
-#: app/views/public_body/_body_listing_single.rhtml:26
-msgid "Added on {{date}}"
-msgstr "Añadido el {{date}}"
+#: app/controllers/user_controller.rb:221
+msgid "Then you can change your password on {{site_name}}"
+msgstr "Entonces podrá cambiar su contraseña en {{site_name}}"
-#: app/models/user.rb:54
-msgid "Admin level is not included in list"
-msgstr "Nivel de Administrador no incluido en la lista"
+#: app/controllers/user_controller.rb:222
+msgid "Change your password {{site_name}}"
+msgstr "Cambie su contraseña en {{site_name}}"
-#: app/views/request_mailer/requires_admin.rhtml:9
-msgid "Administration URL:"
-msgstr "URL de Administración:"
+#: app/controllers/user_controller.rb:249
+msgid "Your password has been changed."
+msgstr "Su contraseña ha sido cambiada."
-#: app/views/general/search.rhtml:31 app/views/general/search.rhtml:121
-msgid "Advanced search tips"
-msgstr "Ayuda para la búsqueda avanzada"
+#: app/controllers/user_controller.rb:266
+msgid "To change your email address used on {{site_name}}"
+msgstr "Cambiar la dirección de correo usada en {{site_name}}"
+
+#: app/controllers/user_controller.rb:267
+msgid "Then you can change your email address used on {{site_name}}"
+msgstr "Entonces podrá cambiar el correo utilizado en {{site_name}}"
-#: app/views/comment/new.rhtml:52
+#: app/controllers/user_controller.rb:268
+#: app/views/user/signchangeemail.rhtml:1
+#: app/views/user/signchangeemail.rhtml:11
+msgid "Change your email address used on {{site_name}}"
+msgstr "Cambie su dirección de correo en {{site_name}}"
+
+#: app/controllers/user_controller.rb:328
+msgid "You have now changed your email address used on {{site_name}}"
+msgstr "Ha cambiado la dirección de correo que usa en {{site_name}}"
+
+#: app/controllers/user_controller.rb:347
+msgid "To send a message to "
+msgstr "Para enviar un mensaje a"
+
+#: app/controllers/user_controller.rb:348
+msgid "Then you can send a message to "
+msgstr "Entonces podrá mandar un mensaje a"
+
+#: app/controllers/user_controller.rb:349
+msgid "Send a message to "
+msgstr "Enviar un mensaje a "
+
+#: app/controllers/user_controller.rb:367
+msgid "Your message to {{recipient_user_name}} has been sent!"
+msgstr "Su mensaje a {{recipient_user_name}} ha sido enviado."
+
+#: app/controllers/user_controller.rb:373
msgid ""
-"Advise on whether the <strong>refusal is legal</strong>, and how to complain"
-" about it if not."
+",\n"
+"\n"
+"\n"
+"\n"
+"Yours,\n"
+"\n"
+"{{user_name}}"
msgstr ""
-"Consejo sobre <strong>si el rechazo es legal</strong>, y como apelar si no "
-"lo es."
+",\n"
+"\n"
+"\n"
+"\n"
+"Un saludo,\n"
+"\n"
+"{{user_name}}"
-#: app/views/request/new.rhtml:69
+#: app/controllers/user_controller.rb:389
+msgid "You need to be logged in to change your profile photo."
+msgstr "Necesita identificarse para cambiar la foto de su perfil."
+
+#: app/controllers/user_controller.rb:416
+#: app/controllers/user_controller.rb:432
+msgid "Thank you for updating your profile photo"
+msgstr "Gracias por actualizar su foto de perfil"
+
+#: app/controllers/user_controller.rb:435
msgid ""
-"Air, water, soil, land, flora and fauna (including how these effect\n"
-" human beings)"
+"<p>Thanks for updating your profile photo.</p>\n"
+" <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
msgstr ""
-"Aire, agua, tierra, flora y fauna (incluyendo sus efectos en los\n"
-" seres humanos)"
+"<p>Gracias por actualizar la foto de su perfil.</p>\n"
+" <p><strong>Ahora...</strong> puede escribir sobre usted y su investigación en su perfil.</p>"
-#: app/models/info_request_event.rb:309
-msgid "All information sent"
-msgstr "Toda la información enviada"
+#: app/controllers/user_controller.rb:451
+msgid "You need to be logged in to clear your profile photo."
+msgstr "Necesita identificarse para borrar la foto de su perfil."
-#: app/views/general/search.rhtml:146
-msgid "All of the information requested has been received"
-msgstr "Toda la informacion solicitada ha sido recibida"
+#: app/controllers/user_controller.rb:460
+msgid "You've now cleared your profile photo"
+msgstr "Ha borrado la foto de su perfil"
-#: app/views/public_body/list.rhtml:5
-msgid "Alphabet"
-msgstr "Alfabeto"
+#: app/controllers/user_controller.rb:488
+msgid "You need to be logged in to change the text about you on your profile."
+msgstr "Necesita identificarse para cambiar el texto de su perfil."
-#: app/views/public_body/_body_listing_single.rhtml:12
-msgid "Also called {{other_name}}."
-msgstr "También conocido como {{other_name}}."
+#: app/controllers/user_controller.rb:510
+msgid "You have now changed the text about you on your profile."
+msgstr "Ha cambiado el texto sobre usted en su perfil."
-#: app/views/request_mailer/new_response.rhtml:12
+#: app/controllers/user_controller.rb:513
msgid ""
-"Although all responses are automatically published, we depend on\n"
-"you, the original requester, to evaluate them."
+"<p>Thanks for changing the text about you on your profile.</p>\n"
+" <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
msgstr ""
-"Aunque todas las respuestas se publican automáticamente, dependemos\n"
-"de usted, el creador de la petición, para evaluarlas."
+"<p>Gracias por actualizar el texto de su perfil personal.</p>\n"
+" <p><strong>Ahora...</strong> puede subir también una foto a su perfil.</p>"
-#: app/views/request/_other_describe_state.rhtml:70
-msgid "An <strong>error message</strong> has been received"
-msgstr "Se ha recibido <strong>un mensaje de error</strong>"
+#: app/controllers/user_controller.rb:541
+msgid "Then you can sign in to {{site_name}}"
+msgstr "Entonces podrá entrar a {{site_name}}"
-#: app/views/general/search.rhtml:161
-msgid "Annotation added to request"
-msgstr "Comentario añadido a la petición"
+#: app/models/about_me_validator.rb:24
+msgid "Please keep it shorter than 500 characters"
+msgstr "Por favor, limite tu mensaje a 500 carácteres"
-#: app/views/user/show.rhtml:34
-msgid "Annotations"
-msgstr "Comentarios"
+#: app/models/change_email_validator.rb:29
+msgid "Please enter your old email address"
+msgstr "Por favor, introduzca su antigua dirección de correo"
-#: app/views/comment/new.rhtml:17
-msgid ""
-"Annotations are so anyone, including you, can help the requester with their "
-"request. For example:"
-msgstr ""
-"Los comentarios sirven para que cualquier, incluído usted, pueda ayudar al "
-"creador de la petición. Por ejemplo:"
+#: app/models/change_email_validator.rb:30
+msgid "Please enter your new email address"
+msgstr "Por favor, introduzca su nueva dirección de correo"
-#: app/views/comment/new.rhtml:69
-msgid ""
-"Annotations will be posted publicly here, and are \n"
-" <strong>not</strong> sent to {{public_body_name}}."
-msgstr ""
-"Los comentarios se muestran públicamente aquí, y \n"
-" <strong>no</strong> se envían a {{public_body_name}}."
+#: app/models/change_email_validator.rb:31
+msgid "Please enter your password"
+msgstr "Por favor, introduzca su contraseña"
-#: app/views/request/_after_actions.rhtml:6
-msgid "Anyone:"
-msgstr "Cualquiera:"
+#: app/models/change_email_validator.rb:39
+msgid "Old email doesn't look like a valid address"
+msgstr "La dirección de correo antigua no parece válida"
-#: app/views/request/new.rhtml:47
+#: app/models/change_email_validator.rb:44
msgid ""
-"Ask for <strong>specific</strong> documents or information, this site is not"
-" suitable for general enquiries."
+"Old email address isn't the same as the address of the account you are "
+"logged in with"
msgstr ""
-"Pida documentos o información <strong>específica</strong>, esta web no está "
-"pensada para resolver dudas generales."
+"La dirección de correo antiguo no es con la que ha abierto su sesión actual"
+
+#: app/models/change_email_validator.rb:47
+msgid "Password is not correct"
+msgstr "La contraseña no es correcta"
-#: app/views/request/show_response.rhtml:31
+#: app/models/change_email_validator.rb:53
+msgid "New email doesn't look like a valid address"
+msgstr "La nueva dirección no parece válida"
+
+#: app/models/comment.rb:59
+msgid "Please enter your annotation"
+msgstr "Por favor, introduzca su comentario"
+
+#: app/models/comment.rb:62
msgid ""
-"At the bottom of this page, write a reply to them trying to persuade them to scan it in\n"
-" (<a href=\"%s\">more details</a>)."
+"Please write your annotation using a mixture of capital and lower case "
+"letters. This makes it easier for others to read."
msgstr ""
-"Al final de esta página, escriba una respuesta intentando convencerles de que lo escaneen\n"
-" (<a href=\"%s\">más detalles</a>)."
+"Por favor, escriba su comentario usando letras mayúsculas y minúsculas para "
+"facilitar su lectura"
-#: app/views/request/upload_response.rhtml:33
-msgid "Attachment (optional):"
-msgstr "Adjuntos (opcional):"
+#: app/models/contact_validator.rb:28 app/models/user.rb:38
+msgid "Please enter your name"
+msgstr "Por favor, introduzca su nombre"
-#: app/models/info_request.rb:783
-msgid "Awaiting classification."
-msgstr "Esperando clasificación."
+#: app/models/contact_validator.rb:29 app/models/user.rb:36
+msgid "Please enter your email address"
+msgstr "Por favor, introduzca su dirección de correo"
-#: app/models/info_request.rb:803
-msgid "Awaiting internal review."
-msgstr "Esperando revisión interna."
+#: app/models/contact_validator.rb:30
+msgid "Please enter a subject"
+msgstr "Por favor, introduzca un asunto"
-#: app/models/info_request.rb:785
-msgid "Awaiting response."
-msgstr "Esperando respuesta."
+#: app/models/contact_validator.rb:31
+msgid "Please enter the message you want to send"
+msgstr "Por favor, introduzca el mensaje que quieres enviar"
+
+#: app/models/contact_validator.rb:34
+msgid "Email doesn't look like a valid address"
+msgstr "La dirección de correo no parece válida"
-#: app/views/request/new.rhtml:43
+#: app/models/incoming_message.rb:867
msgid ""
-"Browse <a href=\"%s\">other requests</a> for examples of how to word your "
-"request."
+"\n"
+"\n"
+"[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
msgstr ""
-"Revise <a href=\"%s\">otras peticiones</a> para ver ejemplos de cómo "
-"redactar su petición."
+"\n"
+"\n"
+"[ {{site_name}} Nota: El texto anterior estaba mal codificado, y se han eliminado algunos carácteres extraños. ]"
-#: app/views/request/new.rhtml:41
+#: app/models/info_request.rb:34
+msgid "Please enter a summary of your request"
+msgstr "Por favor, introduzca un resumen de su petición"
+
+#: app/models/info_request.rb:35
+msgid "Please write a summary with some text in it"
+msgstr "Por favor, escriba un resumen que no esté vacío"
+
+#: app/models/info_request.rb:120
msgid ""
-"Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for "
-"examples of how to word your request."
+"Please write the summary using a mixture of capital and lower case letters. "
+"This makes it easier for others to read."
msgstr ""
-"Explore <a href='{{url}}'>otras peticiones</a> a '{{public_body_name}}' para "
-"ver ejemplos de cómo redactar su petición."
+"Por favor, escriba el resumen usando letras mayúsculas y minúsculas para "
+"facilitar su lectura"
-#: app/views/request/show.rhtml:86
+#: app/models/info_request.rb:123
msgid ""
-"By law, under all circumstances, {{public_body_link}} should have responded "
-"by now"
+"Please keep the summary short, like in the subject of an email. You can use "
+"a phrase, rather than a full sentence."
msgstr ""
-"Por ley, bajo cualquier circunstancia, {{public_body_link}} ya debería haber"
-" respondido"
+"Por favor, mantenga el resumen corto, como en el asunto de un correo "
+"electrónico"
-#: app/views/request/show.rhtml:78
+#: app/models/info_request.rb:126
msgid ""
-"By law, {{public_body_link}} should normally have responded "
-"<strong>promptly</strong> and"
+"Please describe more what the request is about in the subject. There is no "
+"need to say it is an FOI request, we add that on anyway."
msgstr ""
-"Por ley, {{public_body_link}} debería haber respondido "
-"<strong>pronto</strong> y"
+"Por favor, describa mejor el tema de su petición en el asunto. Por cierto, "
+"no hace falta decir que es una petición FOI, ya lo añadimos nosotros."
-#: app/views/general/search.rhtml:17
+#: app/models/info_request.rb:395
msgid ""
-"Can't find it? <a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add"
-" it</a>."
+"This request has been set by an administrator to \"allow new responses from "
+"nobody\""
msgstr ""
-"No lo encuentra? <a href=\"%s\">Consulte la lista completa</a> o <a "
-"href=\"%s\">pídanos que añadamos uno nuevo</a> "
+"Esta petición ha sido configurada por el administrador a \"no permitir "
+"respuestas de nadie\""
-#: app/controllers/track_controller.rb:145
-msgid "Cancel a {{site_name}} alert"
-msgstr "Cancele una alerta de {{site_name}}"
+#: app/models/info_request.rb:401
+msgid ""
+"Only the authority can reply to this request, but there is no \"From\" "
+"address to check against"
+msgstr ""
+"Sólo el organismo puede responder a esta petición, pero no hay un campo "
+"\"From\" contra el que comparar"
-#: app/controllers/track_controller.rb:175
-msgid "Cancel some {{site_name}} alerts"
-msgstr "Cancelar alertas de {{site_name}}"
+#: app/models/info_request.rb:405
+msgid ""
+"Only the authority can reply to this request, and I don't recognise the "
+"address this reply was sent from"
+msgstr ""
+"Sólo el organismo puede responder a esta petición, y no reconozco la "
+"dirección desde la que se mandó esta respuesta"
-#: locale/model_attributes.rb:39
-msgid "CensorRule|Last edit comment"
-msgstr "CensorRule|Last edit comment"
+#: app/models/info_request.rb:785
+msgid "Awaiting classification."
+msgstr "Esperando clasificación."
-#: locale/model_attributes.rb:38
-msgid "CensorRule|Last edit editor"
-msgstr "CensorRule|Last edit editor"
+#: app/models/info_request.rb:787
+msgid "Awaiting response."
+msgstr "Esperando respuesta."
-#: locale/model_attributes.rb:37
-msgid "CensorRule|Replacement"
-msgstr "CensorRule|Replacement"
+#: app/models/info_request.rb:789
+msgid "Delayed."
+msgstr "Retrasado."
-#: locale/model_attributes.rb:36
-msgid "CensorRule|Text"
-msgstr "CensorRule|Text"
+#: app/models/info_request.rb:791
+msgid "Long overdue."
+msgstr "Muy retrasada."
-#: lib/public_body_categories_en.rb:14
-msgid "Central government"
-msgstr "Gobierno central"
+#: app/models/info_request.rb:793
+msgid "Information not held."
+msgstr "Información no disponible."
-#: app/views/user/signchangeemail.rhtml:37
-msgid "Change email on {{site_name}}"
-msgstr "Cambiar correo en {{site_name}}"
+#: app/models/info_request.rb:795
+msgid "Refused."
+msgstr "Rechazada."
-#: app/views/user/signchangepassword.rhtml:27
-msgid "Change password on {{site_name}}"
-msgstr "Cambiar la contraseña en {{site_name}}"
+#: app/models/info_request.rb:797
+msgid "Partially successful."
+msgstr "Éxito parcial."
-#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104
-msgid "Change profile photo"
-msgstr "Cambie la foto de perfil"
+#: app/models/info_request.rb:799
+msgid "Successful."
+msgstr "Exitosa."
-#: app/views/user/set_profile_about_me.rhtml:1
-msgid "Change the text about you on your profile at {{site_name}}"
-msgstr "Cambiar el texto de su perfil en {{site_name}}"
+#: app/models/info_request.rb:801
+msgid "Waiting clarification."
+msgstr "Esperando aclaración."
-#: app/views/user/show.rhtml:107
-msgid "Change your email"
-msgstr "Cambie su correo"
+#: app/models/info_request.rb:803
+msgid "Handled by post."
+msgstr "Resuelta por correo ordinario"
-#: app/controllers/user_controller.rb:250
-#: app/views/user/signchangeemail.rhtml:1
-#: app/views/user/signchangeemail.rhtml:11
-msgid "Change your email address used on {{site_name}}"
-msgstr "Cambie su dirección de correo en {{site_name}}"
+#: app/models/info_request.rb:805
+msgid "Awaiting internal review."
+msgstr "Esperando revisión interna."
-#: app/views/user/show.rhtml:106
-msgid "Change your password"
-msgstr "Cambie su contraseña"
+#: app/models/info_request.rb:807
+msgid "Delivery error"
+msgstr "Error en la entrega"
-#: app/views/user/signchangepassword.rhtml:1
-#: app/views/user/signchangepassword.rhtml:11
-#: app/views/user/signchangepassword_send_confirm.rhtml:1
-#: app/views/user/signchangepassword_send_confirm.rhtml:9
-msgid "Change your password on {{site_name}}"
-msgstr "Cambie su contraseña en {{site_name}}"
+#: app/models/info_request.rb:809
+msgid "Unusual response."
+msgstr "Respuesta no habitual."
-#: app/controllers/user_controller.rb:204
-msgid "Change your password {{site_name}}"
-msgstr "Cambie su contraseña en {{site_name}}"
+#: app/models/info_request.rb:811
+msgid "Withdrawn by the requester."
+msgstr "Retirada por el autor."
-#: app/views/public_body/show.rhtml:15 app/views/public_body/show.rhtml:17
-msgid "Charity registration"
-msgstr "Registro de la ONG"
+#: app/models/info_request.rb:816 app/models/info_request_event.rb:318
+msgid "unknown status "
+msgstr "estado desconocido "
-#: app/views/general/exception_caught.rhtml:6
-msgid "Check for mistakes if you typed or copied the address."
-msgstr "Busque erratas si ha copiado la dirección."
+#: app/models/info_request_event.rb:306
+msgid "Response"
+msgstr "Respuesta"
-#: app/views/request/followup_preview.rhtml:14
-#: app/views/request/preview.rhtml:7
-msgid "Check you haven't included any <strong>personal information</strong>."
-msgstr ""
-"Compruebe que no ha incluído <strong>ninguna información personal</strong>."
+#: app/models/info_request_event.rb:313
+msgid "Internal review request"
+msgstr "Petición de revisión interna"
-#: app/models/info_request_event.rb:331
+#: app/models/info_request_event.rb:316
msgid "Clarification"
msgstr "Aclaración"
-#: app/models/info_request_event.rb:295
-msgid "Clarification required"
-msgstr "Se necesita aclaración"
-
-#: app/controllers/request_controller.rb:339
-msgid "Classify an FOI response from "
-msgstr "Clasifique una petición de "
+#: app/models/info_request_event.rb:320
+msgid "Follow up"
+msgstr "Seguimiento"
-#: app/views/request_mailer/very_overdue_alert.rhtml:6
-msgid ""
-"Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\n"
-"review, asking them to find out why response to the request has been so slow."
+#: app/models/info_request_event.rb:323
+msgid "display_status only works for incoming and outgoing messages right now"
msgstr ""
-"Haga click en el siguiente enlace para mandar un mensaje a {{public_body_name}} solicitando que respondan a su petición. Puede pedir una revisión\n"
-"interna, preguntándoles por qué se ha demorado tanto la respuesta a su petición."
+"display_status sólo funciona para mensajes de entrada y salida ahora mismo"
-#: app/views/request_mailer/overdue_alert.rhtml:5
-msgid ""
-"Click on the link below to send a message to {{public_body}} reminding them "
-"to reply to your request."
-msgstr ""
-"Haga click en el siguiente enlace para enviar un mensaje a {{public_body}} "
-"recordándoles que deben responder a su petición."
+#: app/models/outgoing_message.rb:63
+msgid "Dear {{public_body_name}},"
+msgstr "Estimado {{public_body_name}},"
-#: locale/model_attributes.rb:22
-msgid "Comment|Body"
-msgstr "Comment|Body"
+#: app/models/outgoing_message.rb:68
+msgid "Yours sincerely,"
+msgstr "Un saludo,"
-#: locale/model_attributes.rb:21
-msgid "Comment|Comment type"
-msgstr "Comment|Comment type"
+#: app/models/outgoing_message.rb:70
+msgid "Yours faithfully,"
+msgstr "Un saludo,"
-#: locale/model_attributes.rb:24
-msgid "Comment|Locale"
-msgstr "Comment|Locale"
+#: app/models/outgoing_message.rb:74
+msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
+msgstr "DETALLE SU QUEJA AQUÍ"
-#: locale/model_attributes.rb:23
-msgid "Comment|Visible"
-msgstr "Comment|Visible"
+#: app/models/outgoing_message.rb:146
+msgid "Please give details explaining why you want a review"
+msgstr "Por favor, explica por qué quiere una revisión"
-#: app/models/track_thing.rb:147
-msgid "Confirm you want to be emailed about new requests"
-msgstr "Confirme que quiere recibir correos sobre nuevas peticiones"
+#: app/models/outgoing_message.rb:148
+msgid "Please enter your follow up message"
+msgstr "Por favor, introduzca su mensaje"
-#: app/models/track_thing.rb:214
+#: app/models/outgoing_message.rb:151
+msgid "Please enter your letter requesting information"
+msgstr "Por favor, introduzca su petición de información"
+
+#: app/models/outgoing_message.rb:157
msgid ""
-"Confirm you want to be emailed about new requests or responses matching "
-"'{{query}}'"
+"Please sign at the bottom with your name, or alter the \"%{signoff}\" "
+"signature"
msgstr ""
-"Confirme que quiere recibir correos sobre nuevas peticiones o respuestas "
-"que encajen con '{{query}}'"
-
-#: app/models/track_thing.rb:198
-msgid "Confirm you want to be emailed about requests by '{{user_name}}'"
-msgstr "Confirme que quiere recibir correos sobre las peticiones de '{{user_name}}'"
+"Por favor, firme con su nombre en la parte inferior, o cambia la firma "
+"\"%{signoff}\""
-#: app/models/track_thing.rb:182
+#: app/models/outgoing_message.rb:160
msgid ""
-"Confirm you want to be emailed about requests to '{{public_body_name}}'"
+"Please write your message using a mixture of capital and lower case letters."
+" This makes it easier for others to read."
msgstr ""
-"Confirme que quiere recibir correos sobre peticiones a '{{public_body_name}}'"
-
-#: app/models/track_thing.rb:163
-msgid "Confirm you want to be emailed when an FOI request succeeds"
-msgstr "Confirme que quiere recibir correos cuando una petición tenga éxito"
-
-#: app/controllers/request_controller.rb:300
-msgid "Confirm your FOI request to "
-msgstr "Confirme su petición a "
-
-#: app/controllers/request_controller.rb:703
-#: app/controllers/user_controller.rb:515
-msgid "Confirm your account on {{site_name}}"
-msgstr "Confirme su cuenta en {{site_name}}"
-
-#: app/controllers/comment_controller.rb:57
-msgid "Confirm your annotation to {{info_request_title}}"
-msgstr "Confirme su comentario a {{info_request_title}}"
-
-#: app/models/user_mailer.rb:34
-msgid "Confirm your new email address on {{site_name}}"
-msgstr "Confirme su nueva dirección de correo en {{site_name}}"
+"Por favor, escriba su mensaje usando letras mayúsculas y minúsculas para "
+"facilitar su lectura"
-#: app/views/layouts/default.rhtml:127
-msgid "Contact {{site_name}}"
-msgstr "Contacte con {{site_name}}"
+#: app/models/outgoing_message.rb:163
+msgid "Please choose what sort of reply you are making."
+msgstr "Por favor, elija el tipo de respuesta que está creando."
-#: app/models/request_mailer.rb:210
-msgid "Could not identify the request from the email address"
-msgstr "No hemos podido identificar la petición a partir de la dirección de correo"
+#: app/models/profile_photo.rb:91
+msgid "Please choose a file containing your photo."
+msgstr "Por favor elige el fichero que contiene tu foto"
#: app/models/profile_photo.rb:96
msgid ""
@@ -1042,2287 +889,2951 @@ msgstr ""
"No se pudo procesar la imagen subida. Puede utilizar PNG, JPEG, GIF u otros "
"formatos de imagen populares."
-#: app/views/user/set_crop_profile_photo.rhtml:6
-msgid "Crop your profile photo"
-msgstr "Recorte su foto de perfil"
+#: app/models/profile_photo.rb:101
+msgid "Failed to convert image to a PNG"
+msgstr "Error al convertir la imagen a PNG"
-#: app/views/request/new.rhtml:74
+#: app/models/profile_photo.rb:105
msgid ""
-"Cultural sites and built structures (as they may be affected by the\n"
-" environmental factors listed above)"
+"Failed to convert image to the correct size: at %{cols}x%{rows}, need "
+"%{width}x%{height}"
msgstr ""
-"Enclaves culturales y edificios (ya que pueden estar afectados por\n"
-" los factores medioambientales mencionados anteriormente)"
+"Error al convertir la imagen al tamaño adecuado: es %{cols}x%{rows}, debería"
+" ser %{width}x%{height}"
-#: app/views/request/show.rhtml:68
-msgid ""
-"Currently <strong>waiting for a response</strong> from {{public_body_link}},"
-" they must respond promptly and"
-msgstr ""
-"Actualmente <strong>esperando la respuesta</strong> de {{public_body_link}},"
-" que debe responder pronto y"
+#: app/models/public_body.rb:36
+msgid "Name can't be blank"
+msgstr "El nombre no puede estar vacío"
-#: app/models/info_request_event.rb:299
-msgid "Deadline Extended"
-msgstr "Fecha límite extendida"
+#: app/models/public_body.rb:37
+msgid "URL name can't be blank"
+msgstr "La URL no puede estar vacía."
-#: app/models/outgoing_message.rb:57
-msgid "Dear "
-msgstr "Estimado/a "
+#: app/models/public_body.rb:39
+msgid "Short name is already taken"
+msgstr "Nombre de usuario ya en uso"
-#: app/models/info_request.rb:787
-msgid "Delayed."
-msgstr "Retrasado."
+#: app/models/public_body.rb:40
+msgid "Name is already taken"
+msgstr "El nombre ya está siendo utilizado"
-#: app/models/info_request.rb:805 app/models/info_request_event.rb:315
-msgid "Delivery error"
-msgstr "Error en la entrega"
+#: app/models/request_mailer.rb:50
+msgid "FOI response requires admin - "
+msgstr "Respuesta a solicitud necesita un administrador - "
-#: app/views/request/details.rhtml:1 app/views/request/details.rhtml:2
-msgid "Details of request '"
-msgstr "Detalles de la petición '"
+#: app/models/request_mailer.rb:67
+msgid "New response to your FOI request - "
+msgstr "Nueva respuesta a tu solicitud de información - "
-#: app/views/general/search.rhtml:50 app/views/general/search.rhtml:62
-msgid "Did you mean: {{correction}}"
-msgstr "¿Quiere decir: {{correction}}?"
+#: app/models/request_mailer.rb:86
+msgid "Delayed response to your FOI request - "
+msgstr "Respuesta retrasada a tu solicitud de acceso a información - "
-#: app/views/outgoing_mailer/_followup_footer.rhtml:1
-msgid ""
-"Disclaimer: This message and any reply that you make will be published on "
-"the internet. Our privacy and copyright policies:"
+#: app/models/request_mailer.rb:105
+msgid "You're long overdue a response to your FOI request - "
+msgstr "La respuesta a tu solicitud de información está muy retrasada - "
+
+#: app/models/request_mailer.rb:125
+msgid "Was the response you got to your FOI request any good?"
+msgstr "¿Fue la respuesta a tu solicitud satisfactoria?"
+
+#: app/models/request_mailer.rb:168
+msgid "Somebody added a note to your FOI request - "
+msgstr "Nuevo comentario en tu solicitud de acceso a información - "
+
+#: app/models/request_mailer.rb:177
+msgid "Some notes have been added to your FOI request - "
+msgstr "Nuevos comentarios en tu solicitud de acceso a información - "
+
+#: app/models/request_mailer.rb:218
+msgid "Could not identify the request from the email address"
msgstr ""
-"Atención: Este mensaje y cualquier respuesta que usted haga serán publicadas"
-" en Internet. Nuestras políticas de privacidad y copyright:"
+"No hemos podido identificar la petición a partir de la dirección de correo"
-#: app/views/request/_view_html_prefix.rhtml:6
-msgid "Download original attachment"
-msgstr "Descargar ficheros adjuntos"
+#: app/models/track_mailer.rb:25
+msgid "Your {{site_name}} email alert"
+msgstr "Su alerta en {{site_name}}"
-#: app/views/request/_followup.rhtml:85
+#: app/models/track_thing.rb:83 app/views/general/search.rhtml:54
+msgid "users"
+msgstr "usuarios"
+
+#: app/models/track_thing.rb:86 app/views/general/search.rhtml:103
+#: app/views/request/_request_filter_form.rhtml:14
+msgid "comments"
+msgstr "comentarios"
+
+#: app/models/track_thing.rb:89 app/views/general/search.rhtml:55
+msgid "authorities"
+msgstr "organismos"
+
+#: app/models/track_thing.rb:92 app/models/track_thing.rb:111
+#: app/models/track_thing.rb:113 app/views/general/search.rhtml:53
+msgid "requests"
+msgstr "solicitudes"
+
+#: app/models/track_thing.rb:95
+msgid "between two dates"
+msgstr "entre dos fechas"
+
+#: app/models/track_thing.rb:98
+msgid "unsuccessful"
+msgstr "fallidas"
+
+#: app/models/track_thing.rb:101
+msgid "successful"
+msgstr "exitosas"
+
+#: app/models/track_thing.rb:104
+msgid "awaiting a response"
+msgstr "esperando una respuesta"
+
+#: app/models/track_thing.rb:112
+msgid "requests which are {{list_of_statuses}}"
+msgstr "solicitudes que son {{list_of_statuses}}"
+
+#: app/models/track_thing.rb:112 app/models/track_thing.rb:120
+msgid " or "
+msgstr " o "
+
+#: app/models/track_thing.rb:116
+msgid "anything"
+msgstr "cualquiera"
+
+#: app/models/track_thing.rb:122
+msgid "{{list_of_things}} matching text '{{search_query}}'"
+msgstr "{{list_of_things}} encontradas por '{{search_query}}'"
+
+#: app/models/track_thing.rb:195
+msgid "'{{link_to_request}}', a request"
+msgstr "'{{link_to_request}}', una solicitud"
+
+#: app/models/track_thing.rb:196
+msgid "Track this request by email"
+msgstr "Seguir esta petición por correo"
+
+#: app/models/track_thing.rb:197
+msgid "You are already tracking this request by email"
+msgstr "Ya está siguiendo esta petición por correo"
+
+#: app/models/track_thing.rb:199 app/models/track_thing.rb:200
+msgid "New updates for the request '{{request_title}}'"
+msgstr "Actualizaciones para la solicitud '{{request_title}}'"
+
+#: app/models/track_thing.rb:202
+msgid "To follow updates to the request '{{request_title}}'"
+msgstr "Para seguir actualizaciones a la solicitud '{{request_title}}'"
+
+#: app/models/track_thing.rb:203
msgid ""
-"Edit and add <strong>more details</strong> to the message above,\n"
-" explaining why you are dissatisfied with their response."
+"Then you will be emailed whenever the request '{{request_title}}' is "
+"updated."
msgstr ""
-"Edite y añada <strong>más detalles</strong> al mensaje anterior,\n"
-" explicando por qué no esta satisfecho con su respuesta."
+"Entonces recibirá correos siempre que la solicitud '{{request_title}}' se "
+"actualice."
-#: app/views/admin_public_body/_locale_selector.rhtml:2
-msgid "Edit language version:"
-msgstr "Editar versión en idioma:"
+#: app/models/track_thing.rb:204
+msgid "Confirm you want to follow updates to the request '{{request_title}}'"
+msgstr ""
+"Confirme que quiere recibir actualizaciones sobre la solicitud "
+"'{{request_title}}'"
-#: app/views/user/set_profile_about_me.rhtml:9
-msgid "Edit text about you"
-msgstr "Edite el texto sobre usted"
+#: app/models/track_thing.rb:211
+msgid "any <a href=\"/list\">new requests</a>"
+msgstr "cualquier <a href=\"/list\">petición nueva</a>"
-#: app/models/user.rb:135
-msgid "Either the email or password was not recognised, please try again."
-msgstr "El correo o la contraseña son inválidos, por favor pruebe otra vez."
+#: app/models/track_thing.rb:212
+msgid "Email me when there are new requests"
+msgstr "Recibir correos cuando haya nuevas peticiones"
-#: app/models/user.rb:137
-msgid ""
-"Either the email or password was not recognised, please try again. Or create"
-" a new account using the form on the right."
+#: app/models/track_thing.rb:213
+msgid "You are being emailed when there are new requests"
+msgstr "Usted está recibiendo correos cuando hay nuevas peticiones"
+
+#: app/models/track_thing.rb:215 app/models/track_thing.rb:216
+msgid "New Freedom of Information requests"
+msgstr "Nuevas peticiones de acceso a información"
+
+#: app/models/track_thing.rb:218
+msgid "To be emailed about any new requests"
+msgstr "Para recibir correos sobre nuevas peticiones"
+
+#: app/models/track_thing.rb:219
+msgid "Then you will be emailed whenever anyone makes a new FOI request."
msgstr ""
-"El correo o la contraseña son inválidos, por favor pruebe otra vez. O cree "
-"una nueva cuenta usando el formulario de la derecha."
+"Entonces recibirá un correo cada vez que alguien haga una nueva petición de "
+"información."
-#: app/models/contact_validator.rb:34
-msgid "Email doesn't look like a valid address"
-msgstr "La dirección de correo no parece válida"
+#: app/models/track_thing.rb:220
+msgid "Confirm you want to be emailed about new requests"
+msgstr "Confirme que quiere recibir correos sobre nuevas peticiones"
-#: app/views/comment/_comment_form.rhtml:8
-msgid "Email me future updates to this request"
-msgstr "Quiero recibir emails con las actulizaciones de esta solicitud"
+#: app/models/track_thing.rb:227
+msgid "any <a href=\"/list/successful\">successful requests</a>"
+msgstr "cualquier <a href=\"/list/successful\">petición con éxito</a>"
-#: app/models/track_thing.rb:155
+#: app/models/track_thing.rb:228
msgid "Email me new successful responses "
msgstr "Recibir respuestas válidas "
-#: app/models/track_thing.rb:139
-msgid "Email me when there are new requests"
-msgstr "Recibir correos cuando haya nuevas peticiones"
+#: app/models/track_thing.rb:229
+msgid "You are being emailed about any new successful responses"
+msgstr "Está recibiendo correos sobre cualquier nueva respuesta exitosa"
-#: app/views/user/show.rhtml:36
-msgid "Email subscriptions"
-msgstr "Suscripciones de correo"
+#: app/models/track_thing.rb:231 app/models/track_thing.rb:232
+msgid "Successful Freedom of Information requests"
+msgstr "Peticiones de acceso a la información con éxito"
-#: app/views/general/search.rhtml:123
-msgid ""
-"Enter words that you want to find separated by spaces, e.g. <strong>climbing"
-" lane</strong>"
-msgstr ""
-"Introduzca las palabras que desee separadas por espacio, es decir "
-"<strong>parlamento gasto</strong>"
+#: app/models/track_thing.rb:234
+msgid "To be emailed about any successful requests"
+msgstr "Para recibir correos sobre cualquier petición exitosa"
-#: app/views/request/upload_response.rhtml:23
-msgid ""
-"Enter your response below. You may attach one file (use email, or \n"
-"<a href=\"%s\">contact us</a> if you need more)."
-msgstr ""
-"Escriba su petición a continuación. Puede adjuntar un fichero (mande un correo,\n"
-" o <a href=\"%s\">contáctenos</a>, si necesita más)."
+#: app/models/track_thing.rb:235
+msgid "Then you will be emailed whenever an FOI request succeeds."
+msgstr "Entonces recibirá un correo cada vez que una petición tenga éxito."
-#: app/views/public_body/show.rhtml:96
-msgid "Environmental Information Regulations requests made"
-msgstr "Peticiones medio-ambientales realizadas"
+#: app/models/track_thing.rb:236
+msgid "Confirm you want to be emailed when an FOI request succeeds"
+msgstr "Confirme que quiere recibir correos cuando una petición tenga éxito"
-#: app/views/public_body/show.rhtml:69
-msgid "Environmental Information Regulations requests made using this site"
-msgstr "Peticiones medio-ambientales realizadas en esta web"
+#: app/models/track_thing.rb:246
+msgid "'{{link_to_authority}}', a public authority"
+msgstr "'{{link_to_authority}}', un organismo público"
-#: app/views/request/details.rhtml:4
-msgid "Event history"
-msgstr "Historial de eventos"
+#: app/models/track_thing.rb:247
+msgid "Track requests to {{public_body_name}} by email"
+msgstr "Seguir peticiones a {{public_body_name}} por correo"
-#: app/views/request/_sidebar.rhtml:41
-msgid "Event history details"
-msgstr "Historial de eventos"
+#: app/models/track_thing.rb:248
+msgid "You are already tracking requests to {{public_body_name}} by email"
+msgstr "Ya está siguiendo las peticiones a {{public_body_name}} por correo"
-#: app/views/request/new.rhtml:124
+#: app/models/track_thing.rb:253
msgid ""
-"Everything that you enter on this page \n"
-" will be <strong>displayed publicly</strong> on\n"
-" this website forever (<a href=\"%s\">why?</a>)."
+"To be emailed about requests made using {{site_name}} to the public "
+"authority '{{public_body_name}}'"
msgstr ""
-"Todo lo que escriba en esta página \n"
-" estará <strong>disponible públicamente</strong> en\n"
-" está web para siempre (<a href=\"%s\">¿por qué?</a>)."
+"Para recibir correos sobre peticiones hechas en {{site_name}} al organismo "
+"'{{public_body_name}}'"
-#: app/views/request/new.rhtml:116
+#: app/models/track_thing.rb:254
msgid ""
-"Everything that you enter on this page, including <strong>your name</strong>, \n"
-" will be <strong>displayed publicly</strong> on\n"
-" this website forever (<a href=\"%s\">why?</a>)."
+"Then you will be emailed whenever someone requests something or gets a "
+"response from '{{public_body_name}}'."
msgstr ""
-"Todo lo que escriba en esta página, incluyendo <strong>su nombre</strong>, \n"
-" estará <strong>disponible públicamente</strong> en\n"
-" está web para siempre (<a href=\"%s\">¿por qué?</a>)."
-
-#: locale/model_attributes.rb:60
-msgid "EximLogDone|Filename"
-msgstr "EximLogDone|Filename"
-
-#: locale/model_attributes.rb:61
-msgid "EximLogDone|Last stat"
-msgstr "EximLogDone|Last stat"
+"Entonces recibirá un correo cada vez que alguien haga una petición o reciba "
+"una respuesta de '{{public_body_name}}'."
-#: locale/model_attributes.rb:19
-msgid "EximLog|Line"
-msgstr "EximLog|Line"
+#: app/models/track_thing.rb:255
+msgid ""
+"Confirm you want to be emailed about requests to '{{public_body_name}}'"
+msgstr ""
+"Confirme que quiere recibir correos sobre peticiones a "
+"'{{public_body_name}}'"
-#: locale/model_attributes.rb:18
-msgid "EximLog|Order"
-msgstr "EximLog|Order"
+#: app/models/track_thing.rb:262
+msgid "'{{link_to_user}}', a person"
+msgstr "'{{link_to_user}}', una persona"
-#: app/views/public_body/view_email.rhtml:3
-msgid "FOI email address for {{public_body}}"
-msgstr "Dirección de correo para {{public_body}}"
+#: app/models/track_thing.rb:263
+msgid "Track this person by email"
+msgstr "Seguir a esta persona por correo"
-#: app/views/user/show.rhtml:33
-msgid "FOI requests"
-msgstr "Peticiones de información"
+#: app/models/track_thing.rb:264
+msgid "You are already tracking this person by email"
+msgstr "Ya está siguiendo a esta persona por correo"
-#: app/models/track_thing.rb:193 app/models/track_thing.rb:194
+#: app/models/track_thing.rb:266 app/models/track_thing.rb:267
msgid "FOI requests by '{{user_name}}'"
msgstr "Peticiones de información por '{{user_name}}'"
-#: app/models/profile_photo.rb:101
-msgid "Failed to convert image to a PNG"
-msgstr "Error al convertir la imagen a PNG"
+#: app/models/track_thing.rb:269
+msgid "To be emailed about requests by '{{user_name}}'"
+msgstr "Para recibir correos sobre peticiones de '{{user_name}}'"
-#: app/models/profile_photo.rb:105
+#: app/models/track_thing.rb:270
msgid ""
-"Failed to convert image to the correct size: at %{cols}x%{rows}, need "
-"%{width}x%{height}"
+"Then you will be emailed whenever '{{user_name}}' requests something or gets"
+" a response."
msgstr ""
-"Error al convertir la imagen al tamaño adecuado: es %{cols}x%{rows}, debería"
-" ser %{width}x%{height}"
-
-#: app/views/request/new.rhtml:21
-msgid "First,"
-msgstr "Primero,"
+"Entonces recibirá un correo cada vez que '{{user_name}}' solicite algo o "
+"reciba una respuesta."
-#: app/views/general/frontpage.rhtml:8
-msgid ""
-"First, type in the <strong>name of the UK public authority</strong> you'd \n"
-" <br>like information from. <strong>By law, they have to respond</strong>\n"
-" (<a href=\"%s\">why?</a>)."
+#: app/models/track_thing.rb:271
+msgid "Confirm you want to be emailed about requests by '{{user_name}}'"
msgstr ""
-"Primero, escriba el <strong>nombre del organismo público</strong> al que quiera \n"
-" <br>pedir información. <strong>Por ley, están obligados a responder</strong>\n"
-" (<a href=\"%s\">¿por qué?</a>)."
+"Confirme que quiere recibir correos sobre las peticiones de '{{user_name}}'"
-#: app/views/request_mailer/old_unclassified_updated.rhtml:4
-msgid "Follow this link to see the request:"
-msgstr "Siga este enlace para ver la petición:"
+#: app/models/track_thing.rb:279
+msgid "Track things matching this search by email"
+msgstr "Seguir esta búsqueda por correo"
-#: app/models/info_request_event.rb:335
-msgid "Follow up"
-msgstr "Seguimiento"
+#: app/models/track_thing.rb:280
+msgid "You are already tracking things matching this search by email"
+msgstr "Ya está siguiendo esta búsqueda por correo"
-#: app/views/general/search.rhtml:159
-msgid "Follow up message sent by requester"
-msgstr "Respuesta enviada por el creador de la petición"
+#: app/models/track_thing.rb:282 app/models/track_thing.rb:283
+msgid "Requests or responses matching your saved search"
+msgstr "Solicitudes o respuestas para su búsqueda guardada"
-#: app/views/public_body/view_email.rhtml:14
-msgid "Follow up messages to existing requests are sent to "
-msgstr "Las respuestas a peticiones existentes se envían a "
+#: app/models/track_thing.rb:285
+msgid "To follow requests and responses matching your search"
+msgstr "Para seguir solicitudes y respuestas que encajen con su búsqueda"
-#: app/views/request/_followup.rhtml:16
+#: app/models/track_thing.rb:286
msgid ""
-"Follow ups and new responses to this request have been stopped to prevent "
-"spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and"
-" need to send a follow up."
+"Then you will be emailed whenever a new request or response matches your "
+"search."
msgstr ""
-"Se han bloquedao nuevas respuestas a esta petición para prevenir "
-"spam. Por favor <a href=\"{{url}}\">contáctenos</a> si es usted {{user_link}} y"
-" necesita responder."
+"Entonces recibirá correos siempre que una nueva solicitud o respuesta encaje"
+" con su búsqueda."
-#: app/views/public_body/show.rhtml:61
+#: app/models/track_thing.rb:287
msgid ""
-"For an unknown reason, it is not possible to make a request to this "
-"authority."
+"Confirm you want to be emailed about new requests or responses matching your"
+" search"
msgstr ""
-"No es posible hacer una petición a este organismo, por motivos desconocidos."
+"Confirme que quiere recibir correos sobre nuevas solicitudes o respuestas "
+"que coincidan con su búsqueda"
-#: app/views/user/_signin.rhtml:21
-msgid "Forgotten your password?"
-msgstr "¿Ha olvidado su contraseña?"
+#: app/models/user.rb:40
+msgid "Please enter a password"
+msgstr "Por favor, introduzca una contraseña."
-#: app/views/public_body/show.rhtml:56
-msgid ""
-"Freedom of Information law does not apply to this authority, so you cannot make\n"
-" a request to it."
+#: app/models/user.rb:51
+msgid "Please enter the same password twice"
+msgstr "Por favor, introduzca la misma contraseña dos veces"
+
+#: app/models/user.rb:56
+msgid "Admin level is not included in list"
+msgstr "Nivel de Administrador no incluido en la lista"
+
+#: app/models/user.rb:117
+msgid "Please enter a valid email address"
+msgstr "Por favor, introduzca una dirección de correo válida"
+
+#: app/models/user.rb:120
+msgid "Please enter your name, not your email address, in the name field."
msgstr ""
-"La ley de acceso a la información no es aplicable a esta institución por lo "
-"que no puedes enviar una solicitud."
+"Por favor, introduzca su nombre - no su dirección de correo - en el campo "
+"para el nombre"
-#: app/views/request/followup_bad.rhtml:11
-msgid "Freedom of Information law no longer applies to"
-msgstr "La ley de acceso a la información ya no es aplicable a"
+#: app/models/user.rb:133
+msgid "{{user_name}} (Banned)"
+msgstr "{{user_name}} (Expulsado)"
-#: app/views/public_body/view_email.rhtml:10
+#: app/models/user.rb:146
+msgid "Either the email or password was not recognised, please try again."
+msgstr "El correo o la contraseña son inválidos, por favor pruebe otra vez."
+
+#: app/models/user.rb:148
msgid ""
-"Freedom of Information law no longer applies to this authority.Follow up "
-"messages to existing requests are sent to "
+"Either the email or password was not recognised, please try again. Or create"
+" a new account using the form on the right."
msgstr ""
-"La ley de acceso a la información ya no es aplicable a este organismo. Los "
-"mensajes de seguimiento de peticiones existentes se envían a "
+"El correo o la contraseña son inválidos, por favor pruebe otra vez. O cree "
+"una nueva cuenta usando el formulario de la derecha."
-#: app/views/user/show.rhtml:128
-msgid "Freedom of Information request"
-msgstr "Petición de acceso a la información"
+#: app/models/user_mailer.rb:34
+msgid "Confirm your new email address on {{site_name}}"
+msgstr "Confirme su nueva dirección de correo en {{site_name}}"
-#: app/views/public_body/show.rhtml:98
-msgid "Freedom of Information requests made"
-msgstr "Peticiones de acceso a información realizadas"
+#: app/models/user_mailer.rb:45
+msgid "Unable to change email address on {{site_name}}"
+msgstr "No se ha podido cambiar la dirección de correo en {{site_name}}"
-#: app/views/user/show.rhtml:121 app/views/user/show.rhtml:140
-msgid "Freedom of Information requests made by"
-msgstr "Peticiones de acceso a información hechas por"
+#: app/views/admin_public_body/_locale_selector.rhtml:2
+msgid "Edit language version:"
+msgstr "Editar versión en idioma:"
-#: app/views/public_body/show.rhtml:72
-msgid "Freedom of Information requests made using this site"
-msgstr "Peticiones de acceso a información realizadas por esta web"
+#: app/views/comment/_comment_form.rhtml:8
+msgid "Email me future updates to this request"
+msgstr "Quiero recibir emails con las actulizaciones de esta solicitud"
-#: app/views/request/followup_bad.rhtml:12
+#: app/views/comment/_comment_form.rhtml:15
+msgid "Preview your annotation"
+msgstr "Revise su comentario"
+
+#: app/views/comment/_comment_form.rhtml:16
msgid ""
-"From the request page, try replying to a particular message, rather than sending\n"
-" a general followup. If you need to make a general followup, and know\n"
-" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
+" (<strong>no ranty</strong> politics, read our <a href=\"%s\">moderation "
+"policy</a>)"
msgstr ""
-"Desde la página de la petición, intente responder a un mensaje en concreto, en vez de\n"
-" responder a la petición en general. Si necesita hacerlo y tiene una dirección de\n"
-" correo válida, por favor <a href=\"%s\">mándenosla</a>."
+" (<strong>sin ataques políticos</strong>, lea nuestra <a "
+"href=\"%s\">política de moderación</a>)"
-#: app/models/outgoing_message.rb:73
-msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
-msgstr "DETALLE SU QUEJA AQUÍ"
+#: app/views/comment/_single_comment.rhtml:10
+msgid "You"
+msgstr "Usted"
-#: app/views/general/exception_caught.rhtml:14
-msgid "Go to our <a href=\"%s\">front page</a></li>"
-msgstr "Ir a la <a href=\"%s\">página de inicio</a></li>"
+#: app/views/comment/_single_comment.rhtml:10
+msgid "left an annotation"
+msgstr "dejó un comentario"
-#: app/models/info_request_event.rb:297
-msgid "Handled by post"
-msgstr "Resuelta por correo ordinario"
+#: app/views/comment/_single_comment.rhtml:24
+msgid "Report abuse"
+msgstr "Denuncie abuso"
-#: app/models/info_request.rb:801
-msgid "Handled by post."
-msgstr "Resuelta por correo ordinario"
+#: app/views/comment/new.rhtml:14
+msgid "Add an annotation"
+msgstr "Añada un comentario"
-#: app/views/layouts/default.rhtml:102
-msgid "Hello!"
-msgstr "¡Hola!"
+#: app/views/comment/new.rhtml:18
+msgid ""
+"Annotations are so anyone, including you, can help the requester with their "
+"request. For example:"
+msgstr ""
+"Los comentarios sirven para que cualquier, incluído usted, pueda ayudar al "
+"creador de la petición. Por ejemplo:"
-#: app/views/layouts/default.rhtml:99
-msgid "Hello, {{username}}!"
-msgstr "¡Hola, {{username}}!"
+#: app/views/comment/new.rhtml:24
+msgid " Advise on how to <strong>best clarify</strong> the request."
+msgstr ""
+" Consejo sobre cómo <strong>aclarar lo mejor posible</strong> la petición."
-#: app/views/layouts/default.rhtml:94
-msgid "Help"
-msgstr "Ayuda"
+#: app/views/comment/new.rhtml:28
+msgid ""
+" Link to the information requested, if it is <strong>already "
+"available</strong> on the Internet. "
+msgstr ""
+" Enlace a la información pedida, si <strong>ya está disponible</strong> en "
+"Internet. "
-#: app/views/request/details.rhtml:50
+#: app/views/comment/new.rhtml:29
msgid ""
-"Here <strong>described</strong> means when a user selected a status for the request, and\n"
-"the most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\n"
-"{{site_name}} for intermediate events, which weren't given an explicit\n"
-"description by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
+" Suggest <strong>where else</strong> the requester might find the "
+"information. "
msgstr ""
-"Donde <strong>described</strong> significa que un usuario asignó el estado a la petición, y\n"
-"el evento más reciente ha sido actualizado con ese estado. <strong>calculated</strong> es inferido por\n"
-"{{site_name}} para los eventos intermedios, que no fueron descritos explícitamente por un usuario.\n"
-"Consulte los <a href=\"{{search_path}}\">consejos para búsquedas</a> para ver una descripción de los estados."
+" Sugiera <strong>en qué otro lugar</strong> el peticionario puede encontrar "
+"la información. "
-#: app/views/request/_other_describe_state.rhtml:4
+#: app/views/comment/new.rhtml:30
msgid ""
-"Hi! We need your help. The person who made the following request\n"
-" hasn't told us whether or not it was successful. Would you mind taking\n"
-" a moment to read it and help us keep the place tidy for everyone?\n"
-" Thanks."
+" Offer better ways of <strong>wording the request</strong> to get the "
+"information. "
msgstr ""
-"¡Hola! Necesitamos su ayuda. La persona que hizo la siguiente petición\n"
-" no nos ha dicho si tuvo o no éxito. ¿Le importaría invertir unos minutos\n"
-" en leerla y ayudarnos a clasificarla para el beneficio de todos? Gracias."
+" Ofrecer mejores formas de <strong>redactar su petición</strong> para "
+"conseguir la información. "
-#: locale/model_attributes.rb:57
-msgid "Holiday|Day"
-msgstr "Holiday|Day"
+#: app/views/comment/new.rhtml:34
+msgid " <strong>Summarise</strong> the content of any information returned. "
+msgstr ""
+" <strong>Resuma</strong> el contenido de cualquier información obtenida. "
-#: locale/model_attributes.rb:58
-msgid "Holiday|Description"
-msgstr "Holiday|Description"
+#: app/views/comment/new.rhtml:35
+msgid ""
+" Say how you've <strong>used the information</strong>, with links if "
+"possible."
+msgstr ""
+" Diga cómo ha <strong>usado la información</strong>, con enlaces si es "
+"posible."
-#: app/views/public_body/show.rhtml:7
-msgid "Home page of authority"
-msgstr "Sitio web del organismo"
+#: app/views/comment/new.rhtml:36
+msgid "<strong>Thank</strong> the public authority or "
+msgstr "<strong>Dé las gracias</strong> al organismo público o "
-#: app/views/request/new.rhtml:63
+#: app/views/comment/new.rhtml:39
msgid ""
-"However, you have the right to request environmental\n"
-" information under a different law"
+"Suggest how the requester can find the <strong>rest of the "
+"information</strong>."
msgstr ""
-"En cambio, tiene derecho a pedir información medioambiental\n"
-" bajo la cobertura de otra ley"
+"Sugerir al creador de la petición cómo puede encontrar el <strong>resto de "
+"la información</strong>."
-#: app/views/request/new.rhtml:73
-msgid "Human health and safety"
-msgstr "Salud y seguridad"
+#: app/views/comment/new.rhtml:42
+msgid ""
+"Point to <strong>related information</strong>, campaigns or forums which may"
+" be useful."
+msgstr ""
+"Haga referencia a <strong>información relacionada</strong>, campañas o foros"
+" que puedan ser útiles."
-#: app/views/request/_followup.rhtml:68
-msgid "I am asking for <strong>new information</strong>"
-msgstr "Estoy pidiendo <strong>nueva información</strong>"
+#: app/views/comment/new.rhtml:46
+msgid ""
+"A <strong>summary</strong> of the response if you have received it by post. "
+msgstr ""
+"Un <strong>resumen</strong> de la respuesta si la ha recibido por correo "
+"ordinario. "
-#: app/views/request/_followup.rhtml:73
-msgid "I am requesting an <strong>internal review</strong>"
-msgstr "Estoy pidiendo una <strong>revisión interna</strong>"
+#: app/views/comment/new.rhtml:50
+msgid ""
+" Ideas on what <strong>other documents to request</strong> which the "
+"authority may hold. "
+msgstr ""
+" Ideas sobre <strong>qué otros documentos pedir</strong> que el organismo "
+"público puede tener. "
-#: app/views/request_game/play.rhtml:39
-msgid "I don't like these ones &mdash; give me some more!"
-msgstr "Estas no me gustan &mdash; ¡dame más!"
+#: app/views/comment/new.rhtml:53
+msgid ""
+"Advise on whether the <strong>refusal is legal</strong>, and how to complain"
+" about it if not."
+msgstr ""
+"Consejo sobre <strong>si el rechazo es legal</strong>, y como apelar si no "
+"lo es."
-#: app/views/request_game/play.rhtml:40
-msgid "I don't want to do any more tidying now!"
-msgstr "Ya no quiero seguir clasificando"
+#: app/views/comment/new.rhtml:57
+msgid ""
+"<strong>Advice</strong> on how to get a response that will satisfy the "
+"requester. </li>"
+msgstr ""
+"<strong>Consejos</strong> sobre cómo conseguir una respuesta que satisfaga "
+"al peticionario. </li>"
-#: app/views/request/_describe_state.rhtml:91
-msgid "I would like to <strong>withdraw this request</strong>"
-msgstr "Me gustaría <strong>retirar esta petición</strong>"
+#: app/views/comment/new.rhtml:60
+msgid ""
+"You know what caused the error, and can <strong>suggest a solution</strong>,"
+" such as a working email address."
+msgstr ""
+"Sabe lo que ha causado el error, y puede <strong>sugerir una solución</a>, "
+"como una dirección de correo válida."
-#: app/views/request/_describe_state.rhtml:11
+#: app/views/comment/new.rhtml:63
msgid ""
-"I'm still <strong>waiting</strong> for my information\n"
-" <small>(maybe you got an acknowledgement)</small>"
+"Your thoughts on what the {{site_name}} <strong>administrators</strong> "
+"should do about the request."
msgstr ""
-"Todavía estoy <strong>esperando</strong> por mi información\n"
-" <small>(puede que haya obtenido un acuse de recibo)</small>"
+"Opine sobre lo que los <strong>administradores</strong> de {{site_name}} "
+"deberían hacer con la petición."
-#: app/views/request/_describe_state.rhtml:18
-msgid "I'm still <strong>waiting</strong> for the internal review"
-msgstr "Todavía estoy <strong>esperando</strong> por la revisión interna"
+#: app/views/comment/new.rhtml:70
+msgid ""
+"Annotations will be posted publicly here, and are \n"
+" <strong>not</strong> sent to {{public_body_name}}."
+msgstr ""
+"Los comentarios se muestran públicamente aquí, y \n"
+" <strong>no</strong> se envían a {{public_body_name}}."
-#: app/views/request/_describe_state.rhtml:32
-msgid "I'm waiting for an <strong>internal review</strong> response"
+#: app/views/comment/preview.rhtml:1
+msgid "Preview new annotation on '{{info_request_title}}'"
+msgstr "Revisar nuevo comentario a '{{info_request_title}}'"
+
+#: app/views/comment/preview.rhtml:5
+msgid "Now preview your annotation"
+msgstr "Ahora revise su comentario"
+
+#: app/views/comment/preview.rhtml:10
+msgid ""
+"Your name and annotation will appear in <strong>search engines</strong>."
msgstr ""
-"Estoy esperando por una respuesta de la <strong>revisión interna</strong>"
+"Su nombre y su comentario aparecerán en los <strong>motores de "
+"búsqueda</strong>."
-#: app/views/request/_describe_state.rhtml:25
-msgid "I've been asked to <strong>clarify</strong> my request"
-msgstr "Me han pedido que <strong>aclare</strong> mi petición"
+#: app/views/comment/preview.rhtml:20
+msgid "Re-edit this annotation"
+msgstr "Editar este comentario"
-#: app/views/request/_describe_state.rhtml:60
-msgid "I've received <strong>all the information"
-msgstr "He recibido <strong>toda la información"
+#: app/views/comment/preview.rhtml:21
+msgid "Post annotation"
+msgstr "Enviar comentario"
-#: app/views/request/_describe_state.rhtml:56
-msgid "I've received <strong>some of the information</strong>"
-msgstr "He recibido <strong>parte de la información</strong>"
+#: app/views/contact_mailer/message.rhtml:4
+msgid "Message sent using {{site_name}} contact form, "
+msgstr "Mensaje enviado usando {{site_name}}, "
-#: app/views/request/_describe_state.rhtml:76
-msgid "I've received an <strong>error message</strong>"
-msgstr "He recibido un <strong>mensaje de error</strong>"
+#: app/views/contact_mailer/message.rhtml:7
+msgid "Last request viewed: "
+msgstr "Última petición vista: "
-#: app/views/public_body/view_email.rhtml:28
+#: app/views/contact_mailer/message.rhtml:10
+msgid "Last authority viewed: "
+msgstr "Ultimo organismo visitado: "
+
+#: app/views/contact_mailer/user_message.rhtml:2
+msgid "{{user_name}} has used {{site_name}} to send you the message below."
+msgstr ""
+"{{user_name}} ha usado {{site_name}} para enviarle el siguiente mensaje."
+
+#: app/views/contact_mailer/user_message.rhtml:3
msgid ""
-"If the address is wrong, or you know a better address, please <a "
-"href=\"%s\">contact us</a>."
+"Your details have not been given to anyone, unless you choose to reply to this\n"
+"message, which will then go directly to the person who wrote the message."
msgstr ""
-"Si la dirección es incorrecta, o conoce una más actualizada, por favor <a "
-"href=\"%s\">contáctenos</a>."
+"Sus detalles no han sido compartidos con nadie, salve que elija contestar a este\n"
+"mensaje, que irá directamente a la persona que escribió el mensaje."
-#: app/views/request_mailer/stopped_responses.rhtml:10
+#: app/views/contact_mailer/user_message.rhtml:10
+msgid "View Freedom of Information requests made by {{user_name}}:"
+msgstr "Ver peticiones de acceso a información hechas por {{user_name}}:"
+
+#: app/views/general/_advanced_search_tips.rhtml:3
+msgid "Advanced search tips"
+msgstr "Ayuda para la búsqueda avanzada"
+
+#: app/views/general/_advanced_search_tips.rhtml:5
msgid ""
-"If this is incorrect, or you would like to send a late response to the request\n"
-"or an email on another subject to {{user}}, then please\n"
-"email {{contact_email}} for help."
+"Enter words that you want to find separated by spaces, e.g. <strong>climbing"
+" lane</strong>"
msgstr ""
-"Si no es correcto, o le gustaría enviar una respuesta a la petición\n"
-"o un correo sobre otro tema a {{user}}, entonces por favor\n"
-"escriba a {{contact_email}} solicitando ayuda."
+"Introduzca las palabras que desee separadas por espacio, es decir "
+"<strong>parlamento gasto</strong>"
-#: app/views/request/_followup.rhtml:20
+#: app/views/general/_advanced_search_tips.rhtml:6
msgid ""
-"If you are dissatisfied by the response you got from\n"
-" the public authority, you have the right to\n"
-" complain (<a href=\"%s\">details</a>)."
+"Use OR (in capital letters) where you don't mind which word, e.g. "
+"<strong><code>commons OR lords</code></strong>"
msgstr ""
-"Si no está satisfecho con la respuesta que ha recibido del\n"
-" organismo público, tiene derecho a\n"
-" apelar (<a href=\"%s\">detalles</a>)."
+"Escriba OR (en mayúsculas) cuando no le importe qué palabra, e.g. "
+"<strong><code>diputado OR parlamento</code></strong>"
-#: app/views/user/no_cookies.rhtml:20
-msgid "If you are still having trouble, please <a href=\"%s\">contact us</a>."
-msgstr "Si aún tiene problemas, por favor <a href=\"%s\">contáctenos</a>."
+#: app/views/general/_advanced_search_tips.rhtml:7
+msgid ""
+"Use quotes when you want to find an exact phrase, e.g. "
+"<strong><code>\"Liverpool City Council\"</code></strong>"
+msgstr ""
+"Utilice comillas cuando quiera buscar una frase exacta, por ejemplo "
+"<strong><code>\"Consejo de Europa\"</code></strong>"
-#: app/views/request/hidden.rhtml:15
+#: app/views/general/_advanced_search_tips.rhtml:8
msgid ""
-"If you are the requester, then you may <a href=\"%s\">sign in</a> to view "
-"the request."
+"<strong><code>status:</code></strong> to select based on the status or "
+"historical status of the request, see the <a href=\"{{statuses_url}}\">table"
+" of statuses</a> below."
msgstr ""
-"Si la petición es suya, puede <a href=\"%s\">abrir una sesión</a> para "
-"verla."
+"<strong><code>status:</code></strong> para filtrar en función del estado "
+"actual o histórico de la petición, consulte la <a "
+"href=\"{{statuses_url}}\">tabla de estados</a> a continuación."
-#: app/views/request/new.rhtml:119
+#: app/views/general/_advanced_search_tips.rhtml:9
msgid ""
-"If you are thinking of using a pseudonym,\n"
-" please <a href=\"%s\">read this first</a>."
+"<strong><code>variety:</code></strong> to select type of thing to search "
+"for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
msgstr ""
-"Si está pensando en utilizar un pseudónimo,\n"
-" por favor <a href=\"%s\">lea esto primero</a>."
+"<strong><code>variety:</code></strong> para filtrar en función del tipo de "
+"objeto, consulte la <a href=\"{{varieties_url}}\">tabla de tipos de "
+"objetos</a> a continuación."
-#: app/views/request/show.rhtml:105
-msgid "If you are {{user_link}}, please"
-msgstr "Si es {{user_link}}, por favor"
+#: app/views/general/_advanced_search_tips.rhtml:10
+msgid ""
+"<strong><code>requested_from:home_office</code></strong> to search requests "
+"from the Home Office, typing the name as in the URL."
+msgstr ""
+"<strong><code>requested_from:consejo_europeo</code></strong> para buscar "
+"peticiones realizadas al Consejo Europeo, escribiendo su nombre como aparece"
+" en la URL."
-#: app/views/user/bad_token.rhtml:7
+#: app/views/general/_advanced_search_tips.rhtml:11
msgid ""
-"If you can't click on it in the email, you'll have to <strong>select and copy\n"
-"it</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\n"
-"you would type the address of any other webpage."
+"<strong><code>requested_by:julian_todd</code></strong> to search requests "
+"made by Julian Todd, typing the name as in the URL."
msgstr ""
-"Si no puede hacer click en el enlace del correo, tendrá que <strong>seleccionarlo y copiarlo\n"
-"</strong> en el correo. A continuación, <strong>péguelo en su navegador</strong>, en el lugar\n"
-"dónde escribe la dirección de cualquier otra página web."
+"<code><strong>requested_by:julian_todd</strong></code> para buscar las "
+"peticiones realizadas por Julian Todd, escribiendo el nombre como aparece en"
+" la URL."
-#: app/views/request/show_response.rhtml:49
+#: app/views/general/_advanced_search_tips.rhtml:12
msgid ""
-"If you can, scan in or photograph the response, and <strong>send us\n"
-" a copy to upload</strong>."
+"<strong><code>commented_by:tony_bowden</code></strong> to search annotations"
+" made by Tony Bowden, typing the name as in the URL."
msgstr ""
-"Si puede, escanee o haga una foto de la respuesta, y <strong>mándenos\n"
-" una copia para que la subamos</strong>."
+"<strong><code>commented_by:rafael_nadal</code></strong> para buscar "
+"comentarios hechos por el usuario 'rafael_nadal'."
-#: app/views/outgoing_mailer/_followup_footer.rhtml:4
+#: app/views/general/_advanced_search_tips.rhtml:13
msgid ""
-"If you find this service useful as an FOI officer, please ask your web "
-"manager to link to us from your organisation's FOI page."
+"<strong><code>request:</code></strong> to restrict to a specific request, "
+"typing the title as in the URL."
msgstr ""
-"Si encuentra este servicio útil como responsable de Acceso a la Información,"
-" pida al responsable de su web que añada un enlace a nuestra web."
+"<strong><code>request:</code></strong> para restringir la búsqueda a una "
+"petición específica, escribiendo el título tal y como aparece en la URL."
-#: app/views/user/bad_token.rhtml:13
+#: app/views/general/_advanced_search_tips.rhtml:14
msgid ""
-"If you got the email <strong>more than six months ago</strong>, then this login link won't work any\n"
-"more. Please try doing what you were doing from the beginning."
+"<strong><code>filetype:pdf</code></strong> to find all responses with PDF "
+"attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
msgstr ""
-"Si recibió el correo <strong>hace más de seis meses</strong>, entonces el enlace ya no funcionará.\n"
-"Por favor intente hacer lo que estaba haciendo inicialmente."
+"<strong><code>filetype:pdf</code></strong> para buscar todas las respuestas "
+"con PDFs adjuntos. O prueba estas: <code>{{list_of_file_extensions}}</code>"
-#: app/controllers/request_controller.rb:437
+#: app/views/general/_advanced_search_tips.rhtml:15
msgid ""
-"If you have not done so already, please write a message below telling the "
-"authority that you have withdrawn your request. Otherwise they will not know"
-" it has been withdrawn."
+"Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show "
+"things that happened in the first two weeks of January."
msgstr ""
-"Si no lo ha hecho ya, por favor escriba un mensaje a continuación informando"
-" al organismo público de que ha retirado su petición. De lo contrario no "
-"sabrá que lo ha hecho."
+"Introduzca <code><strong>01/01/2008..14/01/2008</strong></code> para mostrar"
+" sólo las cosas que sucedieron en las dos primeras semanas de enero."
-#: app/views/user/signchangeemail_confirm.rhtml:11
-#: app/views/user/signchangepassword_confirm.rhtml:10
+#: app/views/general/_advanced_search_tips.rhtml:16
msgid ""
-"If you use web-based email or have \"junk mail\" filters, also check your\n"
-"bulk/spam mail folders. Sometimes, our messages are marked that way."
+"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n"
+" and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n"
+" can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
msgstr ""
-"Si usa correo web o tiene filtros \"anti spam\", por favor compruebe\n"
-"sus carpetas de spam. A veces, nuestros mensajes se marcan así por error."
+"<strong><code>tag:salud</code></strong> para buscar todos los organismos públicos o peticiones con la etiqueta dada. Puede incluir múltiples etiquetas, \n"
+" y valores, e.g. <code>tag:salud AND tag:financial_transaction:335633</code>. Por defecto, basta con que cualquiera de las etiquetas\n"
+" esté presente, añada <code>AND</code> explícitamente si sólo quiere resultados con todas ellas presentes."
-#: app/views/user/banned.rhtml:15
+#: app/views/general/_advanced_search_tips.rhtml:19
msgid ""
-"If you would like us to lift this ban, then you may politely\n"
-"<a href=\"/help/contact\">contact us</a> giving reasons.\n"
+"Read about <a href=\"{{advanced_search_url}}\">advanced search "
+"operators</a>, such as proximity and wildcards."
msgstr ""
-"Si quiere eliminar el bloqueo, entonces puede <a href=\"/help/contact\">contactarnos</a>\n"
-" explicándonos sus razones.\n"
+"Lea más sobre <a href=\"{{advanced_search_url}}\">operadores avanzados de "
+"búsqueda</a>, como indicadores de proximidad y comodines."
-#: app/views/user/_signup.rhtml:6
-msgid "If you're new to {{site_name}}"
-msgstr "Si es nuevo en {{site_name}}"
+#: app/views/general/_advanced_search_tips.rhtml:22
+msgid "Table of statuses"
+msgstr "Tabla de estados"
-#: app/views/user/_signin.rhtml:7
-msgid "If you've used {{site_name}} before"
-msgstr "Si ha usado {{site_name}} antes"
+#: app/views/general/_advanced_search_tips.rhtml:23
+msgid ""
+"All the options below can use <strong>status</strong> or "
+"<strong>latest_status</strong> before the colon. For example, "
+"<strong>status:not_held</strong> will match requests which have "
+"<em>ever</em> been marked as not held; "
+"<strong>latest_status:not_held</strong> will match only requests that are "
+"<em>currently</em> marked as not held."
+msgstr ""
+"All the options below can use <strong>status</strong> or "
+"<strong>latest_status</strong> before the colon. For example, "
+"<strong>status:not_held</strong> will match requests which have "
+"<em>ever</em> been marked as not held; "
+"<strong>latest_status:not_held</strong> will match only requests that are "
+"<em>currently</em> marked as not held."
-#: app/views/user/no_cookies.rhtml:12
+#: app/views/general/_advanced_search_tips.rhtml:26
+msgid "Waiting for the public authority to reply"
+msgstr "Esperando que el organismo responda"
+
+#: app/views/general/_advanced_search_tips.rhtml:27
+msgid "The public authority does not have the information requested"
+msgstr "El organismo no tiene la información solicitada"
+
+#: app/views/general/_advanced_search_tips.rhtml:28
+msgid "The request was refused by the public authority"
+msgstr "La petición ha sido rechazada por el organismo"
+
+#: app/views/general/_advanced_search_tips.rhtml:29
+msgid "Some of the information requested has been received"
+msgstr "Parte de la información solicitada ha sido recibida"
+
+#: app/views/general/_advanced_search_tips.rhtml:30
+msgid "All of the information requested has been received"
+msgstr "Toda la informacion solicitada ha sido recibida"
+
+#: app/views/general/_advanced_search_tips.rhtml:31
+msgid "The public authority would like part of the request explained"
+msgstr "El organismo ha pedido una aclaración a parte de la petición"
+
+#: app/views/general/_advanced_search_tips.rhtml:32
+msgid "The public authority would like to / has responded by post"
+msgstr "El organismo quiere responder (o ha respondido) por correo ordinario"
+
+#: app/views/general/_advanced_search_tips.rhtml:33
msgid ""
-"If your browser is set to accept cookies and you are seeing this message,\n"
-"then there is probably a fault with our server."
+"Waiting for the public authority to complete an internal review of their "
+"handling of the request"
msgstr ""
-"Si su navegador acepta cookies y está viendo este mensaje,\n"
-"puede que haya un problema en nuestro servidor."
+"Esperando que el organismo termine una revisión interna de su respuesta a la"
+" petición"
-#: locale/model_attributes.rb:63
-msgid "IncomingMessage|Cached attachment text clipped"
-msgstr "IncomingMessage|Cached attachment text clipped"
+#: app/views/general/_advanced_search_tips.rhtml:34
+msgid "Received an error message, such as delivery failure."
+msgstr ""
+"Se ha recibido un mensaje de error, como fallo al entregar el mensaje."
-#: locale/model_attributes.rb:64
-msgid "IncomingMessage|Cached main body text folded"
-msgstr "IncomingMessage|Cached main body text folded"
+#: app/views/general/_advanced_search_tips.rhtml:35
+msgid "A strange reponse, required attention by the {{site_name}} team"
+msgstr ""
+"Una respuesta inusual, debe ser revisada por el equipo de {{site_name}}"
-#: locale/model_attributes.rb:65
-msgid "IncomingMessage|Cached main body text unfolded"
-msgstr "IncomingMessage|Cached main body text unfolded"
+#: app/views/general/_advanced_search_tips.rhtml:36
+msgid "The requester has abandoned this request for some reason"
+msgstr "El creador de la petición ha cancelado la petición por algún motivo"
-#: locale/model_attributes.rb:44
-msgid "InfoRequestEvent|Calculated state"
-msgstr "InfoRequestEvent|Calculated state"
+#: app/views/general/_advanced_search_tips.rhtml:39
+msgid "Table of varieties"
+msgstr "Tabla de tipos de objetos"
-#: locale/model_attributes.rb:43
-msgid "InfoRequestEvent|Described state"
-msgstr "InfoRequestEvent|Described state"
+#: app/views/general/_advanced_search_tips.rhtml:40
+msgid ""
+"All the options below can use <strong>variety</strong> or "
+"<strong>latest_variety</strong> before the colon. For example, "
+"<strong>variety:sent</strong> will match requests which have <em>ever</em> "
+"been sent; <strong>latest_variety:sent</strong> will match only requests "
+"that are <em>currently</em> marked as sent."
+msgstr ""
+"All the options below can use <strong>variety</strong> or "
+"<strong>latest_variety</strong> before the colon. For example, "
+"<strong>variety:sent</strong> will match requests which have <em>ever</em> "
+"been sent; <strong>latest_variety:sent</strong> will match only requests "
+"that are <em>currently</em> marked as sent."
-#: locale/model_attributes.rb:41
-msgid "InfoRequestEvent|Event type"
-msgstr "InfoRequestEvent|Event type"
+#: app/views/general/_advanced_search_tips.rhtml:42
+msgid "Original request sent"
+msgstr "Petición original enviada"
-#: locale/model_attributes.rb:45
-msgid "InfoRequestEvent|Last described at"
-msgstr "InfoRequestEvent|Last described at"
+#: app/views/general/_advanced_search_tips.rhtml:43
+msgid "Follow up message sent by requester"
+msgstr "Respuesta enviada por el creador de la petición"
-#: locale/model_attributes.rb:42
-msgid "InfoRequestEvent|Params yaml"
-msgstr "InfoRequestEvent|Params yaml"
+#: app/views/general/_advanced_search_tips.rhtml:44
+msgid "Response from a public authority"
+msgstr "Respuesta de un organismo público"
-#: locale/model_attributes.rb:46
-msgid "InfoRequestEvent|Prominence"
-msgstr "InfoRequestEvent|Prominence"
+#: app/views/general/_advanced_search_tips.rhtml:45
+msgid "Annotation added to request"
+msgstr "Comentario añadido a la petición"
-#: locale/model_attributes.rb:86
-msgid "InfoRequest|Allow new responses from"
-msgstr "InfoRequest|Allow new responses from"
+#: app/views/general/_advanced_search_tips.rhtml:46
+msgid "A public authority"
+msgstr "Un organismo público"
-#: locale/model_attributes.rb:82
-msgid "InfoRequest|Awaiting description"
-msgstr "InfoRequest|Awaiting description"
+#: app/views/general/_advanced_search_tips.rhtml:47
+msgid "A {{site_name}} user"
+msgstr "Un usuario de {{site_name}}"
-#: locale/model_attributes.rb:81
-msgid "InfoRequest|Described state"
-msgstr "InfoRequest|Described state"
+#: app/views/general/_credits.rhtml:1
+msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
+msgstr "Basado en <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
-#: locale/model_attributes.rb:87
-msgid "InfoRequest|Handle rejected responses"
-msgstr "InfoRequest|Handle rejected responses"
+#: app/views/general/_footer.rhtml:2
+msgid "Contact {{site_name}}"
+msgstr "Contacte con {{site_name}}"
-#: locale/model_attributes.rb:85
-msgid "InfoRequest|Law used"
-msgstr "InfoRequest|Law used"
+#: app/views/general/_footer.rhtml:3 app/views/general/blog.rhtml:7
+msgid "Follow us on twitter"
+msgstr "Síguenos en Twitter"
-#: locale/model_attributes.rb:83
-msgid "InfoRequest|Prominence"
-msgstr "InfoRequest|Prominence"
+#: app/views/general/_localised_datepicker.rhtml:4
+msgid "Done"
+msgstr "Ok"
-#: locale/model_attributes.rb:80
-msgid "InfoRequest|Title"
-msgstr "InfoRequest|Title"
+#: app/views/general/_localised_datepicker.rhtml:5
+msgid "Prev"
+msgstr "Anterior"
-#: locale/model_attributes.rb:84
-msgid "InfoRequest|Url title"
-msgstr "InfoRequest|Url title"
+#: app/views/general/_localised_datepicker.rhtml:6
+msgid "Next"
+msgstr "Siguiente"
-#: app/models/info_request_event.rb:303
-msgid "Information not held"
-msgstr "Información no disponible"
+#: app/views/general/_localised_datepicker.rhtml:7
+msgid "Today"
+msgstr "Hoy"
-#: app/models/info_request.rb:791
-msgid "Information not held."
-msgstr "Información no disponible."
+#: app/views/general/_localised_datepicker.rhtml:13
+msgid "Wk"
+msgstr "Wk"
-#: app/views/request/new.rhtml:71
+#: app/views/general/_topnav.rhtml:3
+msgid "Home"
+msgstr "Inicio"
+
+#: app/views/general/_topnav.rhtml:4
+msgid "Make a request"
+msgstr "Enviar solicitud"
+
+#: app/views/general/_topnav.rhtml:5
+msgid "View requests"
+msgstr "Ver solicitudes"
+
+#: app/views/general/_topnav.rhtml:6
+msgid "View authorities"
+msgstr "Ver organismos públicos"
+
+#: app/views/general/_topnav.rhtml:7
+msgid "Read blog"
+msgstr "Leer el blog"
+
+#: app/views/general/_topnav.rhtml:8
+msgid "Help"
+msgstr "Ayuda"
+
+#: app/views/general/blog.rhtml:1
+msgid "{{site_name}} blog and tweets"
+msgstr "{{site_name}} blog y tweets"
+
+#: app/views/general/blog.rhtml:6
+msgid "Stay up to date"
+msgstr "Manténgase al día"
+
+#: app/views/general/blog.rhtml:8
+msgid "Subscribe to blog"
+msgstr "Subscribirse al blog"
+
+#: app/views/general/blog.rhtml:53
+msgid "Posted on {{date}} by {{author}}"
+msgstr "Escrito el {{date}} por {{author}}"
+
+#: app/views/general/blog.rhtml:56
+msgid "{{number_of_comments}} comments"
+msgstr "{{number_of_comments}} comentarios"
+
+#: app/views/general/exception_caught.rhtml:3
+msgid "Sorry, we couldn't find that page"
+msgstr "Lo sentimos, no hemos podido encontrar esa página"
+
+#: app/views/general/exception_caught.rhtml:5
+msgid "The page doesn't exist. Things you can try now:"
+msgstr "La página no existe. Puede intentar:"
+
+#: app/views/general/exception_caught.rhtml:8
+msgid "Check for mistakes if you typed or copied the address."
+msgstr "Busque erratas si ha copiado la dirección."
+
+#: app/views/general/exception_caught.rhtml:9
+msgid "Search the site to find what you were looking for."
+msgstr "Buscar en esta web para encontrar lo que busca."
+
+#: app/views/general/exception_caught.rhtml:12
+#: app/views/general/frontpage.rhtml:23 app/views/general/search.rhtml:17
+#: app/views/general/search.rhtml:32 app/views/general/search.rhtml:45
+#: app/views/public_body/list.rhtml:43
+#: app/views/request/_request_filter_form.rhtml:49
+#: app/views/request/select_authority.rhtml:41
+msgid "Search"
+msgstr "Buscar"
+
+#: app/views/general/exception_caught.rhtml:17
+msgid "Sorry, there was a problem processing this page"
+msgstr "Lo sentimos, hubo un problema procesando esta página"
+
+#: app/views/general/exception_caught.rhtml:18
msgid ""
-"Information on emissions and discharges (e.g. noise, energy,\n"
-" radiation, waste materials)"
+"You have found a bug. Please <a href=\"{{contact_url}}\">contact us</a> to "
+"tell us about the problem"
msgstr ""
-"Información sobre emisiones (por ejemplo ruido, energía,\n"
-" radiación, materiales de desecho...)"
+"Ha encontrado un error. Por favor <a "
+"href=\"{{contact_url}}\">contáctenos</a> para informarnos del problema"
-#: app/models/info_request_event.rb:311
-msgid "Internal review acknowledgement"
-msgstr "Acuse de recibo de revisión interna"
+#: app/views/general/exception_caught.rhtml:21
+msgid "Technical details"
+msgstr "Detalles técnicos"
-#: app/models/info_request_event.rb:328
-msgid "Internal review request"
-msgstr "Petición de revisión interna"
+#: app/views/general/exception_caught.rhtml:22
+msgid "Unknown"
+msgstr "Desconocido"
-#: app/views/outgoing_mailer/initial_request.rhtml:8
+#: app/views/general/frontpage.rhtml:5
msgid ""
-"Is {{email_address}} the wrong address for {{type_of_request}} requests to "
-"{{public_body_name}}? If so, please contact us using this form:"
+"Make a new<br/>\n"
+" <strong>Freedom <span>of</span><br/>\n"
+" Information<br/>\n"
+" request</strong>"
msgstr ""
-"¿Es {{email_address}} la dirección incorrecta para peticiones {{type_of_request}} a "
-"{{public_body_name}}? Si es así, por favor contáctenos usando el siguiente formulario:"
+"Envíe una nueva<br/>\n"
+" <strong>Solicitud <span>de</span><br/>\n"
+" información</strong>"
-#: app/views/user/no_cookies.rhtml:8
+#: app/views/general/frontpage.rhtml:10
+msgid "Start now &raquo;"
+msgstr "Comience ahora &raquo;"
+
+#: app/views/general/frontpage.rhtml:15
msgid ""
-"It may be that your browser is not set to accept a thing called \"cookies\",\n"
-"or cannot do so. If you can, please enable cookies, or try using a different\n"
-"browser. Then press refresh to have another go."
+"Search over<br/>\n"
+" <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\n"
+" <strong>{{number_of_authorities}} authorities</strong>"
msgstr ""
-"Puede que su navegador esté configurado para no aceptar lo que se conoce como \"cookies\",\n"
-"o que no pueda hacerlo. Si sabe cómo, por favor permita las \"cookies\", o use un navegador\n"
-"distinto. Entonces vuelva a visitar la página para volver a intentarlo."
+"Busque entre<br/>\n"
+" <strong>{{number_of_requests}} solicitudes</strong> <span>y</span><br/>\n"
+" <strong>{{number_of_authorities}} organismos</strong>"
-#: app/views/user/_user_listing_single.rhtml:21
-msgid "Joined in"
-msgstr "Registrado el"
+#: app/views/general/frontpage.rhtml:37
+msgid "Who can I request information from?"
+msgstr "¿A quién puedo solicitar información?"
-#: app/views/user/show.rhtml:62
-msgid "Joined {{site_name}} in"
-msgstr "Registrado en {{site_name}} el"
-
-#: app/views/request/new.rhtml:48
+#: app/views/general/frontpage.rhtml:38
msgid ""
-"Keep it <strong>focused</strong>, you'll be more likely to get what you want"
-" (<a href=\"%s\">why?</a>)."
+"{{site_name}} covers requests to {{number_of_authorities}} authorities, "
+"including:"
msgstr ""
-"Sea <strong>específico</strong>, tendrá más probabilidades de conseguir lo "
-"que quiere (<a href=\"%s\">¿por qué?</a>)."
+"{{site_name}} incluye solicitudes a {{number_of_authorities}} organismos "
+"públicos, incluyendo:"
-#: app/views/contact_mailer/message.rhtml:10
-msgid "Last authority viewed: "
-msgstr "Ultimo organismo visitado: "
+#: app/views/general/frontpage.rhtml:43
+msgid "%d request"
+msgid_plural "%d requests"
+msgstr[0] "%d petición"
+msgstr[1] "%d peticiones"
-#: app/views/contact_mailer/message.rhtml:7
-msgid "Last request viewed: "
-msgstr "Última petición vista: "
+#: app/views/general/frontpage.rhtml:48
+msgid "Browse all authorities..."
+msgstr "Explore otros organismos públicos..."
-#: app/views/user/no_cookies.rhtml:17
+#: app/views/general/frontpage.rhtml:54
+msgid "What information has been released?"
+msgstr "¿Qué información se ha solicitado?"
+
+#: app/views/general/frontpage.rhtml:55
msgid ""
-"Let us know what you were doing when this message\n"
-"appeared and your browser and operating system type and version."
+"{{site_name}} users have made {{number_of_requests}} requests, including:"
msgstr ""
-"Háganos saber que estaba haciendo cuando apareció\n"
-"este mensaje, así como el nombre y versión de su navegador y\n"
-"sistema operativo."
-
-#: app/views/request/_correspondence.rhtml:27
-#: app/views/request/_correspondence.rhtml:57
-msgid "Link to this"
-msgstr "Enlace"
+"Los usuarios de {{site_name}} han hecho {{number_of_requests}} solicitudes, "
+"incluyendo:"
-#: app/views/public_body/list.rhtml:32
-msgid "List of all authorities (CSV)"
-msgstr "Lista de todos los organismos (CSV)"
+#: app/views/general/frontpage.rhtml:60
+msgid "answered a request about"
+msgstr "contestó la solicitud"
-#: lib/public_body_categories_en.rb:23
-msgid "Local and regional"
-msgstr "Local y regional"
-
-#: app/models/info_request.rb:789
-msgid "Long overdue."
-msgstr "Muy retrasada."
+#: app/views/general/frontpage.rhtml:62
+msgid "{{length_of_time}} ago"
+msgstr "hace {{length_of_time}}"
-#: app/views/public_body/show.rhtml:47
-msgid "Make a new Environmental Information request"
-msgstr "Haga una nueva petición de información medioambiental"
+#: app/views/general/frontpage.rhtml:67
+msgid "More successful requests..."
+msgstr "Más peticiones realizadas con éxito..."
-#: app/views/request/new.rhtml:1
-msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
-msgstr "Hacer una petición {{law_used_short}} a '{{public_body_name}}'"
+#: app/views/general/search.rhtml:8
+msgid "Search Freedom of Information requests, public authorities and users"
+msgstr "Buscar peticiones de información, organismos públicos y usuarios"
-#: app/views/layouts/default.rhtml:15
-msgid "Make and browse Freedom of Information (FOI) requests"
-msgstr "Realiza una petición de información o mira las ya realizadas"
+#: app/views/general/search.rhtml:10 app/views/public_body/show.rhtml:109
+msgid "There were no requests matching your query."
+msgstr "No se encontraron solicitudes para su búsqueda."
-#: app/views/layouts/default.rhtml:67
-msgid "Make and explore Freedom of Information requests"
-msgstr "Realiza una petición de información o mira las ya realizadas"
+#: app/views/general/search.rhtml:12
+msgid "Results page {{page_number}}"
+msgstr "Página de resultados {{page_number}}"
-#: app/views/general/frontpage.rhtml:4
-msgid "Make or explore Freedom of Information requests"
-msgstr "Realiza una petición de información o mira las ya realizadas"
+#: app/views/general/search.rhtml:19
+msgid "Search results"
+msgstr "Resultados de la búsqueda"
-#: app/views/layouts/default.rhtml:87
-msgid "Make request"
-msgstr "Realizar petición"
+#: app/views/general/search.rhtml:24
+msgid ""
+"To use the advanced search, combine phrases and labels as described in the "
+"search tips below."
+msgstr ""
+"Para usar la búsqueda avanzada, combine frases y etiquetas como se describe "
+"en las instrucciones a continuación."
-#: app/views/public_body/_body_listing_single.rhtml:23
-msgid "Make your own request"
-msgstr "Hacer mi propia petición"
+#: app/views/general/search.rhtml:33
+msgid "Simple search"
+msgstr "Búsqueda básica"
-#: app/views/contact_mailer/message.rhtml:4
-msgid "Message sent using {{site_name}} contact form, "
-msgstr "Mensaje enviado usando {{site_name}}, "
+#: app/views/general/search.rhtml:46
+msgid "Advanced search"
+msgstr "Búsqueda avanzada"
-#: app/views/request/new_bad_contact.rhtml:1
-msgid "Missing contact details for '"
-msgstr "Faltan datos de contacto para '"
+#: app/views/general/search.rhtml:51
+#: app/views/request/_request_filter_form.rhtml:29
+msgid "Showing"
+msgstr "Mostrando"
-#: app/views/public_body/show.rhtml:5
-msgid "More about this authority"
-msgstr "Más información sobre este organismo"
+#: app/views/general/search.rhtml:56
+msgid "everything"
+msgstr "todo"
-#: app/views/general/frontpage.rhtml:41
-msgid "More authorities..."
-msgstr "Más organismos..."
+#: app/views/general/search.rhtml:75
+msgid "Tags (separated by a space):"
+msgstr "Etiquetas (separadas por un espacio):"
-#: app/views/general/frontpage.rhtml:55
-msgid "More successful requests..."
-msgstr "Más peticiones realizadas con éxito..."
+#: app/views/general/search.rhtml:87
+msgid "Restrict to"
+msgstr "Filtrar por"
-#: app/views/request/_describe_state.rhtml:64
-msgid "My request has been <strong>refused</strong>"
-msgstr "Mi petición ha sido <strong>rechazada</strong>"
+#: app/views/general/search.rhtml:88
+#: app/views/request/_request_filter_form.rhtml:31
+msgid "successful requests"
+msgstr "solicitudes exitosas"
-#: app/views/layouts/default.rhtml:91
-msgid "My requests"
-msgstr "Mis peticiones"
+#: app/views/general/search.rhtml:89
+#: app/views/request/_request_filter_form.rhtml:32
+msgid "unsuccessful requests"
+msgstr "solicitudes fallidas"
-#: app/models/public_body.rb:36
-msgid "Name can't be blank"
-msgstr "El nombre no puede estar vacío"
+#: app/views/general/search.rhtml:90
+#: app/views/request/_request_filter_form.rhtml:33
+msgid "unresolved requests"
+msgstr "solicitudes no resueltas"
-#: app/models/public_body.rb:40
-msgid "Name is already taken"
-msgstr "El nombre ya está siendo utilizado"
+#: app/views/general/search.rhtml:91
+msgid "internal reviews"
+msgstr "revisiones internas"
-#: app/models/track_thing.rb:142 app/models/track_thing.rb:143
-msgid "New Freedom of Information requests"
-msgstr "Nuevas peticiones de acceso a información"
+#: app/views/general/search.rhtml:100
+msgid "Search in"
+msgstr "Buscar en"
-#: app/views/user/signchangeemail.rhtml:20
-msgid "New e-mail:"
-msgstr "Nueva dirección:"
+#: app/views/general/search.rhtml:101
+#: app/views/request/_request_filter_form.rhtml:12
+msgid "messages from users"
+msgstr "mensajes de usuarios"
-#: app/models/change_email_validator.rb:53
-msgid "New email doesn't look like a valid address"
-msgstr "La nueva dirección no parece válida"
+#: app/views/general/search.rhtml:102
+#: app/views/request/_request_filter_form.rhtml:13
+msgid "messages from authorities"
+msgstr "mensajes de organismos"
-#: app/views/user/signchangepassword.rhtml:15
-msgid "New password:"
-msgstr "Nueva contraseña:"
+#: app/views/general/search.rhtml:112
+#: app/views/request/_request_filter_form.rhtml:23
+msgid "Made between"
+msgstr "Realizadas entre"
-#: app/views/user/signchangepassword.rhtml:20
-msgid "New password: (again)"
-msgstr "Nueva contraseña: (de nuevo)"
+#: app/views/general/search.rhtml:114
+#: app/views/request/_request_filter_form.rhtml:25
+msgid "and"
+msgstr "y"
-#: app/views/request/show_response.rhtml:62
-msgid "New response to your request"
-msgstr "Nueva respuesta a su petición"
+#: app/views/general/search.rhtml:121
+msgid "Filter"
+msgstr "Filtrar"
-#: app/views/request/show_response.rhtml:68
-msgid "New response to {{law_used_short}} request"
-msgstr "Nueva respuesta a su petición {{law_used_short}}"
+#: app/views/general/search.rhtml:129
+msgid "Show most relevant results first"
+msgstr "Muestra resultados más relevantes primero"
-#: app/views/general/search.rhtml:40
+#: app/views/general/search.rhtml:131
msgid "Newest results first"
msgstr "Resultados recientes primero"
-#: app/views/user/set_draft_profile_photo.rhtml:32
-msgid "Next, crop your photo &gt;&gt;"
-msgstr "Ahora, recorte su foto &gt;&gt;"
+#: app/views/general/search.rhtml:133
+msgid "Recently described results first"
+msgstr "Resultados descritos recientemente primero"
-#: app/views/general/search.rhtml:16
-msgid "Next, select the public authority you'd like to make the request from."
-msgstr "Ahora, elige el organismo al que le quiere enviar su petición."
+#: app/views/general/search.rhtml:141
+msgid "Track this search"
+msgstr "Seguir esta búsqueda"
-#: app/views/general/search.rhtml:48
+#: app/views/general/search.rhtml:156
+msgid "One public authority found"
+msgstr "Un organismo público encontrado"
+
+#: app/views/general/search.rhtml:158
+msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr ""
+"Organismos públicos {{start_count}} a {{end_count}} de {{total_count}}"
+
+#: app/views/general/search.rhtml:169
msgid "No public authorities found"
msgstr "No se han encontrado organismos"
-#: app/views/request/list.rhtml:23
-msgid "No requests of this sort yet."
-msgstr "No existen peticiones de este tipo todavía."
+#: app/views/general/search.rhtml:171
+msgid "Did you mean: {{correction}}"
+msgstr "¿Quiere decir: {{correction}}?"
-#: app/views/request/similar.rhtml:7
-msgid "No similar requests found."
-msgstr "No se han encontrado peticiones similares."
+#: app/views/general/search.rhtml:173
+msgid "<a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add one</a>."
+msgstr "<a href=\"%s\">Ver todas</a> o <a href=\"%s\">pídanos que añadamos una</a>."
-#: app/views/public_body/show.rhtml:73
-msgid ""
-"Nobody has made any Freedom of Information requests to {{public_body_name}} "
-"using this site yet."
-msgstr ""
-"Nadie ha realizado todavía una petición de información a "
-"{{public_body_name}} usando esta web."
+#: app/views/general/search.rhtml:180
+msgid "One person found"
+msgstr "Una persona encontrada"
-#: app/views/public_body/_body_listing.rhtml:2
-#: app/views/request/_request_listing.rhtml:2
-msgid "None found."
-msgstr "No se han encontrado resultados."
+#: app/views/general/search.rhtml:182
+msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr "Personas {{start_count}} a {{end_count}} de {{total_count}}"
-#: app/views/user/signchangeemail_confirm.rhtml:3
-#: app/views/user/signchangepassword_confirm.rhtml:1
-#: app/views/user/signchangepassword_confirm.rhtml:3
-msgid "Now check your email!"
-msgstr "¡Ahora compruebe su correo!"
+#: app/views/general/search.rhtml:196
+msgid "One FOI request found"
+msgstr "Una solicitud encontrada"
-#: app/views/comment/preview.rhtml:5
-msgid "Now preview your annotation"
-msgstr "Ahora revise su comentario"
+#: app/views/general/search.rhtml:198
+msgid "FOI requests {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr "Solicitudes {{start_count}} a {{end_count}} de {{total_count}}"
-#: app/views/request/followup_preview.rhtml:10
-msgid "Now preview your follow up"
-msgstr "Ahora revise su mensaje"
+#: app/views/help/alaveteli.rhtml:6
+msgid "Would you like to see a website like this in your country?"
+msgstr "¿Le gustaría ver una web como esta en su país?"
-#: app/views/request/followup_preview.rhtml:8
-msgid "Now preview your message asking for an internal review"
-msgstr "Ahora revise su mensaje pidiendo una revisión interna"
+#: app/views/layouts/default.rhtml:8 app/views/layouts/no_chrome.rhtml:8
+msgid "Make and browse Freedom of Information (FOI) requests"
+msgstr "Realiza una petición de información o mira las ya realizadas"
-#: app/views/request/preview.rhtml:5
-msgid "Now preview your request"
-msgstr "Ahora revise su petición"
+#: app/views/layouts/default.rhtml:102
+msgid "Hello, {{username}}!"
+msgstr "¡Hola, {{username}}!"
-#: app/views/user/set_draft_profile_photo.rhtml:46
-msgid "OR remove the existing photo"
-msgstr "O borre la foto actual"
+#: app/views/layouts/default.rhtml:105
+msgid "My profile"
+msgstr "Mi perfil"
+
+#: app/views/layouts/default.rhtml:109
+msgid "Sign out"
+msgstr "Cerrar sesión"
+
+#: app/views/layouts/default.rhtml:111
+msgid "Sign in or sign up"
+msgstr "Iniciar sesión o registro"
+
+#: app/views/layouts/default.rhtml:152
+msgid "Paste this link into emails, tweets, and anywhere else:"
+msgstr "Pegue este enlace en correos, tweets, o cualquier otro sitio:"
-#: app/views/general/frontpage.rhtml:25
+#: app/views/outgoing_mailer/_followup_footer.rhtml:1
msgid ""
-"OR, <strong>search</strong> for information others have requested using "
-"{{site_name}}"
+"Disclaimer: This message and any reply that you make will be published on "
+"the internet. Our privacy and copyright policies:"
msgstr ""
-"O, <strong>busca</strong> en la información que otros han solicitado usando "
-"{{site_name}}"
+"Atención: Este mensaje y cualquier respuesta que usted haga serán publicadas"
+" en Internet. Nuestras políticas de privacidad y copyright:"
-#: app/controllers/request_controller.rb:414
+#: app/views/outgoing_mailer/_followup_footer.rhtml:4
msgid ""
-"Oh no! Sorry to hear that your request was refused. Here is what to do now."
+"If you find this service useful as an FOI officer, please ask your web "
+"manager to link to us from your organisation's FOI page."
msgstr ""
-"¡Oh no! Sentimos oir que su petición ha sido rechazada. Esto es lo que puede"
-" hacer ahora."
+"Si encuentra este servicio útil como responsable de Acceso a la Información,"
+" pida al responsable de su web que añada un enlace a nuestra web."
-#: app/views/user/signchangeemail.rhtml:15
-msgid "Old e-mail:"
-msgstr "Correo antiguo:"
+#: app/views/outgoing_mailer/followup.rhtml:6
+#: app/views/outgoing_mailer/initial_request.rhtml:5
+msgid "Please use this email address for all replies to this request:"
+msgstr ""
+"Por favor use la siguiente dirección de correo para todas las respuestas a "
+"esta petición:"
-#: app/models/change_email_validator.rb:44
+#: app/views/outgoing_mailer/initial_request.rhtml:8
msgid ""
-"Old email address isn't the same as the address of the account you are "
-"logged in with"
+"Is {{email_address}} the wrong address for {{type_of_request}} requests to "
+"{{public_body_name}}? If so, please contact us using this form:"
msgstr ""
-"La dirección de correo antiguo no es con la que ha abierto su sesión actual"
+"¿Es {{email_address}} la dirección incorrecta para peticiones "
+"{{type_of_request}} a {{public_body_name}}? Si es así, por favor contáctenos"
+" usando el siguiente formulario:"
-#: app/models/change_email_validator.rb:39
-msgid "Old email doesn't look like a valid address"
-msgstr "La dirección de correo antigua no parece válida"
+#: app/views/public_body/_body_listing.rhtml:3
+#: app/views/request/_request_listing.rhtml:2
+msgid "None found."
+msgstr "No se han encontrado resultados."
-#: app/views/user/show.rhtml:32
-msgid "On this page"
-msgstr "En esta página"
+#: app/views/public_body/_body_listing_single.rhtml:12
+msgid "Also called {{other_name}}."
+msgstr "También conocido como {{other_name}}."
-#: app/views/general/search.rhtml:71
-msgid "One public authority matching &#x2018;{{user_search_query}}&#x2019;"
-msgstr ""
-"Un organismo público coincide con &#x2018;{{user_search_query}}&#x2019;"
+#: app/views/public_body/_body_listing_single.rhtml:21
+msgid "%d request made."
+msgid_plural "%d requests made."
+msgstr[0] "%d petición enviada."
+msgstr[1] "%d peticiones enviadas."
-#: app/views/public_body/show.rhtml:91
-msgid "Only requests made using {{site_name}} are shown."
-msgstr "Sólo se muestran las peticiones realizadas con {{site_name}}."
+#: app/views/public_body/_body_listing_single.rhtml:23
+msgid "Make your own request"
+msgstr "Hacer mi propia petición"
-#: app/models/info_request.rb:405
-msgid ""
-"Only the authority can reply to this request, and I don't recognise the "
-"address this reply was sent from"
-msgstr ""
-"Sólo el organismo puede responder a esta petición, y no reconozco la "
-"dirección desde la que se mandó esta respuesta"
+#: app/views/public_body/_body_listing_single.rhtml:27
+msgid "Added on {{date}}"
+msgstr "Añadido el {{date}}"
-#: app/models/info_request.rb:401
-msgid ""
-"Only the authority can reply to this request, but there is no \"From\" "
-"address to check against"
-msgstr ""
-"Sólo el organismo puede responder a esta petición, pero no hay un campo \"From\" "
-"contra el que comparar"
+#: app/views/public_body/_search_ahead.rhtml:3
+#: app/views/request/select_authority.rhtml:47
+msgid "Top search results:"
+msgstr "Mejores resultados:"
-#: app/views/general/search.rhtml:158
-msgid "Original request sent"
-msgstr "Petición original enviada"
+#: app/views/public_body/_search_ahead.rhtml:5
+#: app/views/request/select_authority.rhtml:49
+msgid "Select one to see more information about the authority."
+msgstr "Elija uno para ver más información sobre el organismo."
-#: locale/model_attributes.rb:26
-msgid "OutgoingMessage|Body"
-msgstr "OutgoingMessage|Body"
+#: app/views/public_body/_search_ahead.rhtml:8
+#: app/views/request/select_authority.rhtml:52
+msgid "No results found."
+msgstr "No se han encontrado resultados."
-#: locale/model_attributes.rb:29
-msgid "OutgoingMessage|Last sent at"
-msgstr "OutgoingMessage|Last sent at"
+#: app/views/public_body/list.rhtml:2
+msgid "Show only..."
+msgstr "Mostrar sólo..."
-#: locale/model_attributes.rb:28
-msgid "OutgoingMessage|Message type"
-msgstr "OutgoingMessage|Message type"
+#: app/views/public_body/list.rhtml:4
+msgid "Beginning with"
+msgstr "Comenzando por"
-#: locale/model_attributes.rb:27
-msgid "OutgoingMessage|Status"
-msgstr "OutgoingMessage|Status"
+#: app/views/public_body/list.rhtml:29
+msgid "<a href=\"%s\">Are we missing a public authority?</a>."
+msgstr "<a href=\"%s\">¿Nos falta algún organismo público?</a>."
-#: locale/model_attributes.rb:30
-msgid "OutgoingMessage|What doing"
-msgstr "OutgoingMessage|What doing"
+#: app/views/public_body/list.rhtml:32
+msgid "List of all authorities (CSV)"
+msgstr "Lista de todos los organismos (CSV)"
-#: app/models/info_request.rb:795
-msgid "Partially successful."
-msgstr "Éxito parcial."
+#: app/views/public_body/list.rhtml:36
+msgid "Public authorities - {{description}}"
+msgstr "Organismos públicos - {{description}}"
-#: app/models/change_email_validator.rb:47
-msgid "Password is not correct"
-msgstr "La contraseña no es correcta"
+#: app/views/public_body/list.rhtml:38
+msgid "Public authorities"
+msgstr "Organismos públicos"
-#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30
-msgid "Password:"
-msgstr "Contraseña:"
+#: app/views/public_body/list.rhtml:47
+msgid "Found {{count}} public bodies {{description}}"
+msgstr "Encontrados {{count}} organismos públicos {{description}}"
-#: app/views/user/_signup.rhtml:35
-msgid "Password: (again)"
-msgstr "Contraseña: (de nuevo)"
+#: app/views/public_body/list.rhtml:51
+msgid "<a href=\"%s\">Can't find the one you want?</a>"
+msgstr "<a href=\"%s\">¿No encuentra el que busca?</a>"
-#: app/views/user/set_draft_profile_photo.rhtml:13
-msgid "Photo of you:"
-msgstr "Foto:"
+#: app/views/public_body/show.rhtml:1
+msgid " - view and make Freedom of Information requests"
+msgstr " - Envía y busca entre solicitudes de acceso a información"
-#: app/views/request/new.rhtml:76
-msgid "Plans and administrative measures that affect these matters"
-msgstr "Planes y medidas administrativas que afecten a estos temas"
+#: app/views/public_body/show.rhtml:4
+msgid "Follow this authority"
+msgstr "Seguir a este organismo"
-#: app/controllers/request_game_controller.rb:42
-msgid "Play the request categorisation game"
-msgstr "Juega al juego de clasificación de peticiones!"
+#: app/views/public_body/show.rhtml:7
+msgid "There is %d person following this authority"
+msgid_plural "There are %d people following this authority"
+msgstr[0] "Hay %d persona siguiendo a este organismo."
+msgstr[1] "Hay %d personas siguiendo a este organismo."
-#: app/views/request_game/play.rhtml:1 app/views/request_game/play.rhtml:30
-msgid "Play the request categorisation game!"
-msgstr "Juega al juego de clasificación de peticiones!"
+#: app/views/public_body/show.rhtml:10
+msgid "More about this authority"
+msgstr "Más información sobre este organismo"
-#: app/views/request/show.rhtml:101
-msgid "Please"
-msgstr "Por favor"
+#: app/views/public_body/show.rhtml:12
+msgid "Home page of authority"
+msgstr "Sitio web del organismo"
-#: app/views/user/no_cookies.rhtml:15
-msgid "Please <a href=\"%s\">get in touch</a> with us so we can fix it."
+#: app/views/public_body/show.rhtml:15
+msgid "Publication scheme"
+msgstr "Esquema de publicación"
+
+#: app/views/public_body/show.rhtml:20 app/views/public_body/show.rhtml:22
+msgid "Charity registration"
+msgstr "Registro de la ONG"
+
+#: app/views/public_body/show.rhtml:26
+msgid "View FOI email address"
+msgstr "Ver dirección de correo"
+
+#: app/views/public_body/show.rhtml:30
+msgid "Freedom of information requests to"
+msgstr "Solicitudes de información a"
+
+#: app/views/public_body/show.rhtml:35
+msgid "also called {{public_body_short_name}}"
+msgstr "también conocido como {{public_body_short_name}}"
+
+#: app/views/public_body/show.rhtml:37
+msgid "admin"
+msgstr "admin"
+
+#: app/views/public_body/show.rhtml:46
+msgid ""
+"You can only request information about the environment from this authority."
+msgstr "Solo puede solicitar información medioambiental a esta institución"
+
+#: app/views/public_body/show.rhtml:52
+msgid "Make a new <strong>Environmental Information</strong> request"
msgstr ""
-"Por favor <a href=\"%s\">contacte</a> con nosotros para que podamos "
-"arreglarlo."
+"Envíe una nueva <strong>solicitud de información medioambiental</strong>"
-#: app/views/request/show.rhtml:52
+#: app/views/public_body/show.rhtml:54
msgid ""
-"Please <strong>answer the question above</strong> so we know whether the "
+"Make a new <strong>Freedom of Information</strong> request to "
+"{{public_body}}"
msgstr ""
-"Por favor <strong>responda la pregunta anterior</strong> para que sepamos si"
-" "
+"Hacer una nueva <strong>solicitud de información</strong> a {{public_body}}"
-#: app/views/user/show.rhtml:12
+#: app/views/public_body/show.rhtml:56
+msgid "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>"
+msgstr "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>"
+
+#: app/views/public_body/show.rhtml:56
+msgid "Start"
+msgstr "Comenzar"
+
+#: app/views/public_body/show.rhtml:60
msgid ""
-"Please <strong>go to the following requests</strong>, and let us\n"
-" know if there was information in the recent responses to them."
+"Freedom of Information law does not apply to this authority, so you cannot make\n"
+" a request to it."
msgstr ""
-"Por favor <strong>vaya a la siguiente petición</strong>, y háganos\n"
-" saber si había información en las últimas respuestas recibidas."
+"La ley de acceso a la información no es aplicable a este organismo, por lo que no puede enviarle\n"
+" una solicitud."
+
+#: app/views/public_body/show.rhtml:63
+msgid "This authority no longer exists, so you cannot make a request to it."
+msgstr ""
+"Este organismo ya no existe, no pueden realizarse peticiones de información."
-#: app/views/request/_followup.rhtml:27
+#: app/views/public_body/show.rhtml:65
msgid ""
-"Please <strong>only</strong> write messages directly relating to your "
-"request {{request_link}}. If you would like to ask for information that was "
-"not in your original request, then <a href=\"{{new_request_link}}\">file a "
-"new request</a>."
+"For an unknown reason, it is not possible to make a request to this "
+"authority."
msgstr ""
-"Por favor escriba <strong>sólo</strong> mensajes directamente relacionados con su "
-"petición {{request_link}}. Si quiere pedir información que no estaba "
-"en su petición original, entonces <a href=\"{{new_request_link}}\">envíe una "
-"nueva petición</a>."
+"No es posible hacer una petición a este organismo, por motivos desconocidos."
-#: app/views/request/new.rhtml:60
-msgid "Please ask for environmental information only"
-msgstr "Por favor pida información medio-ambiental solamente"
+#: app/views/public_body/show.rhtml:73
+msgid "Environmental Information Regulations requests made using this site"
+msgstr "Peticiones medio-ambientales realizadas en esta web"
-#: app/views/user/bad_token.rhtml:2
+#: app/views/public_body/show.rhtml:76
+msgid "Freedom of Information requests made using this site"
+msgstr "Peticiones de acceso a información realizadas por esta web"
+
+#: app/views/public_body/show.rhtml:77
msgid ""
-"Please check the URL (i.e. the long code of letters and numbers) is copied\n"
-"correctly from your email."
+"Nobody has made any Freedom of Information requests to {{public_body_name}} "
+"using this site yet."
msgstr ""
-"Por favor compruebe que ha copiado correctamente la URL (esto es, la secuencia\n"
-"de letras y números) del correo."
+"Nadie ha realizado todavía una petición de información a "
+"{{public_body_name}} usando esta web."
-#: app/models/profile_photo.rb:91
-msgid "Please choose a file containing your photo."
-msgstr "Por favor elige el fichero que contiene tu foto"
+#: app/views/public_body/show.rhtml:85
+msgid "Search within the %d Freedom of Information requests to %s"
+msgid_plural "Search within the %d Freedom of Information requests made to %s"
+msgstr[0] "Busque en la %d solicitud de información hecha a %s"
+msgstr[1] "Busque entre las %d solicitudes de información hechas a %s"
-#: app/models/outgoing_message.rb:162
-msgid "Please choose what sort of reply you are making."
-msgstr "Por favor, elija el tipo de respuesta que está creando."
+#: app/views/public_body/show.rhtml:87
+msgid "%d Freedom of Information request to %s"
+msgid_plural "%d Freedom of Information requests to %s"
+msgstr[0] "%d solicitud de información a %s"
+msgstr[1] "%d solicitudes de información a %s"
+
+#: app/views/public_body/show.rhtml:111
+msgid "Only requests made using {{site_name}} are shown."
+msgstr "Sólo se muestran las peticiones realizadas con {{site_name}}."
-#: app/controllers/request_controller.rb:346
+#: app/views/public_body/show.rhtml:116
+msgid "Environmental Information Regulations requests made"
+msgstr "Peticiones medio-ambientales realizadas"
+
+#: app/views/public_body/show.rhtml:118
+msgid "Freedom of Information requests made"
+msgstr "Peticiones de acceso a información realizadas"
+
+#: app/views/public_body/show.rhtml:120
msgid ""
-"Please choose whether or not you got some of the information that you "
-"wanted."
-msgstr "Por favor indique si ha recibido o no la información que quería."
+"The search index is currently offline, so we can't show the Freedom of "
+"Information requests that have been made to this authority."
+msgstr ""
+"El motor de búsqueda no está accesible en estos momentos: no podemos mostrar"
+" las peticiones de información realizadas a este organismo."
-#: app/views/user_mailer/changeemail_confirm.rhtml:3
+#: app/views/public_body/view_email.rhtml:3
+msgid "FOI email address for {{public_body}}"
+msgstr "Dirección de correo para {{public_body}}"
+
+#: app/views/public_body/view_email.rhtml:7
msgid ""
-"Please click on the link below to confirm that you want to \n"
-"change the email address that you use for {{site_name}}\n"
-"from {{old_email}} to {{new_email}}"
+"{{site_name}} sends new requests to <strong>{{request_email}}</strong> for "
+"this authority."
msgstr ""
-"Por favor pulse en el siguiente enlace para confirmar que quiere \n"
-"cambiar la dirección de correo que utiliza en {{site_name}}\n"
-"de {{old_email}} a {{new_email}}"
+"{{site_name}} envía nuevas peticiones a <strong>{{request_email}}</strong> "
+"para este organismo."
-#: app/views/user_mailer/confirm_login.rhtml:3
-msgid "Please click on the link below to confirm your email address."
+#: app/views/public_body/view_email.rhtml:10
+msgid ""
+"Freedom of Information law no longer applies to this authority.Follow up "
+"messages to existing requests are sent to "
msgstr ""
-"Por favor seleccione el siguiente enlace para confirmar su dirección de "
-"correo."
+"La ley de acceso a la información ya no es aplicable a este organismo. Los "
+"mensajes de seguimiento de peticiones existentes se envían a "
-#: app/models/info_request.rb:126
+#: app/views/public_body/view_email.rhtml:14
+msgid "Follow up messages to existing requests are sent to "
+msgstr "Las respuestas a peticiones existentes se envían a "
+
+#: app/views/public_body/view_email.rhtml:17
+msgid "We do not have a working request email address for this authority."
+msgstr "No tenemos una dirección de correo válida para este organismo."
+
+#: app/views/public_body/view_email.rhtml:28
msgid ""
-"Please describe more what the request is about in the subject. There is no "
-"need to say it is an FOI request, we add that on anyway."
+"If the address is wrong, or you know a better address, please <a "
+"href=\"%s\">contact us</a>."
msgstr ""
-"Por favor, describa mejor el tema de su petición en el asunto. Por cierto, "
-"no hace falta decir que es una petición FOI, ya lo añadimos nosotros."
+"Si la dirección es incorrecta, o conoce una más actualizada, por favor <a "
+"href=\"%s\">contáctenos</a>."
-#: app/views/user/set_draft_profile_photo.rhtml:22
+#: app/views/public_body/view_email.rhtml:30
msgid ""
-"Please don't upload offensive pictures. We will take down images\n"
-" that we consider inappropriate."
+" If you know the address to use, then please <a href=\"%s\">send it to us</a>.\n"
+" You may be able to find the address on their website, or by phoning them up and asking."
msgstr ""
-"Por favor no suba imágenes ofensivas. Eliminaremos cualquier imagen\n"
-" que consideremos inapropiada."
+" Si conoce la dirección a utilizar, entonces por favor <a href=\"%s\">envíenosla</a>.\n"
+" Puede que la encuentre en su página web, o llamándoles por teléfono y preguntando."
-#: app/views/user/no_cookies.rhtml:3
-msgid "Please enable \"cookies\" to carry on"
-msgstr "Por favor active las \"cookies\" para continuar"
+#: app/views/public_body/view_email_captcha.rhtml:1
+msgid "View FOI email address for '{{public_body_name}}'"
+msgstr "Ver dirección de correo para '{{public_body_name}}'"
-#: app/models/user.rb:38
-msgid "Please enter a password"
-msgstr "Por favor, introduzca una contraseña."
+#: app/views/public_body/view_email_captcha.rhtml:3
+msgid "View FOI email address for {{public_body_name}}"
+msgstr "Ver dirección de correo para '{{public_body_name}}'"
-#: app/models/contact_validator.rb:30
-msgid "Please enter a subject"
-msgstr "Por favor, introduzca un asunto"
+#: app/views/public_body/view_email_captcha.rhtml:5
+msgid ""
+"To view the email address that we use to send FOI requests to "
+"{{public_body_name}}, please enter these words."
+msgstr ""
+"Para ver la dirección de correo que usamos para mandar peticiones a "
+"{{public_body_name}}, por favor introduzca estas palabras."
-#: app/models/info_request.rb:34
-msgid "Please enter a summary of your request"
-msgstr "Por favor, introduzca un resumen de su petición"
+#: app/views/public_body/view_email_captcha.rhtml:12
+msgid "View email"
+msgstr "Ver correo"
-#: app/models/user.rb:106
-msgid "Please enter a valid email address"
-msgstr "Por favor, introduzca una dirección de correo válida"
+#: app/views/request/_after_actions.rhtml:3
+msgid "Things to do with this request"
+msgstr "Cosas que hacer con esta petición"
-#: app/models/contact_validator.rb:31
-msgid "Please enter the message you want to send"
-msgstr "Por favor, introduzca el mensaje que quieres enviar"
+#: app/views/request/_after_actions.rhtml:6
+msgid "Anyone:"
+msgstr "Cualquiera:"
-#: app/models/user.rb:49
-msgid "Please enter the same password twice"
-msgstr "Por favor, introduzca la misma contraseña dos veces"
+#: app/views/request/_after_actions.rhtml:9
+msgid "<a href=\"%s\">Add an annotation</a> (to help the requester or others)"
+msgstr ""
+"<a href=\"%s\">Añada un comentario</a> (para ayudar al peticionario o a "
+"otros)"
-#: app/models/comment.rb:59
-msgid "Please enter your annotation"
-msgstr "Por favor, introduzca su comentario"
+#: app/views/request/_after_actions.rhtml:13
+#: app/views/request/_after_actions.rhtml:35
+msgid "Update the status of this request"
+msgstr "Actualizar el estado de esta petición"
-#: app/models/contact_validator.rb:29 app/models/user.rb:34
-msgid "Please enter your email address"
-msgstr "Por favor, introduzca su dirección de correo"
+#: app/views/request/_after_actions.rhtml:17
+msgid "Download a zip file of all correspondence"
+msgstr "Descargar un fichero ZIP con toda la correspondencia"
-#: app/models/outgoing_message.rb:147
-msgid "Please enter your follow up message"
-msgstr "Por favor, introduzca su mensaje"
+#: app/views/request/_after_actions.rhtml:23
+msgid "{{info_request_user_name}} only:"
+msgstr "Sólo {{info_request_user_name}}:"
-#: app/models/outgoing_message.rb:150
-msgid "Please enter your letter requesting information"
-msgstr "Por favor, introduzca su petición de información"
+#: app/views/request/_after_actions.rhtml:28
+msgid "Send a followup"
+msgstr "Mandar una respuesta"
-#: app/models/contact_validator.rb:28 app/models/user.rb:36
-msgid "Please enter your name"
-msgstr "Por favor, introduzca su nombre"
+#: app/views/request/_after_actions.rhtml:30
+msgid "Write a reply"
+msgstr "Escribir una respuesta"
-#: app/models/user.rb:109
-msgid "Please enter your name, not your email address, in the name field."
-msgstr ""
-"Por favor, introduzca su nombre - no su dirección de correo - en el campo "
-"para el nombre"
+#: app/views/request/_after_actions.rhtml:39
+msgid "Request an internal review"
+msgstr "Pida una revisión interna"
-#: app/models/change_email_validator.rb:30
-msgid "Please enter your new email address"
-msgstr "Por favor, introduzca su nueva dirección de correo"
+#: app/views/request/_after_actions.rhtml:45
+msgid "{{public_body_name}} only:"
+msgstr "Sólo {{public_body_name}}:"
-#: app/models/change_email_validator.rb:29
-msgid "Please enter your old email address"
-msgstr "Por favor, introduzca su antigua dirección de correo"
+#: app/views/request/_after_actions.rhtml:48
+msgid "Respond to request"
+msgstr "Contestar la petición"
-#: app/models/change_email_validator.rb:31
-msgid "Please enter your password"
-msgstr "Por favor, introduzca su contraseña"
+#: app/views/request/_correspondence.rhtml:12
+#: app/views/request/_correspondence.rhtml:36
+#: app/views/request/simple_correspondence.rhtml:14
+#: app/views/request/simple_correspondence.rhtml:27
+msgid "From:"
+msgstr "De:"
-#: app/models/outgoing_message.rb:145
-msgid "Please give details explaining why you want a review"
-msgstr "Por favor, explica por qué quiere una revisión"
+#: app/views/request/_correspondence.rhtml:26
+#: app/views/request/_correspondence.rhtml:54
+msgid "Link to this"
+msgstr "Enlace"
-#: app/models/about_me_validator.rb:24
-msgid "Please keep it shorter than 500 characters"
-msgstr "Por favor, limite tu mensaje a 500 carácteres"
+#: app/views/request/_describe_state.rhtml:4
+msgid "What best describes the status of this request now?"
+msgstr "¿Cómo describiría el estado de esta petición ahora?"
-#: app/models/info_request.rb:123
-msgid ""
-"Please keep the summary short, like in the subject of an email. You can use "
-"a phrase, rather than a full sentence."
-msgstr ""
-"Por favor, mantenga el resumen corto, como en el asunto de un correo "
-"electrónico"
+#: app/views/request/_describe_state.rhtml:7
+#: app/views/request/_other_describe_state.rhtml:10
+msgid "This request is still in progress:"
+msgstr "Esta petición está todavía en proceso:"
-#: app/views/request/new.rhtml:79
+#: app/views/request/_describe_state.rhtml:11
msgid ""
-"Please only request information that comes under those categories, <strong>do not waste your\n"
-" time</strong> or the time of the public authority by requesting unrelated information."
+"I'm still <strong>waiting</strong> for my information\n"
+" <small>(maybe you got an acknowledgement)</small>"
msgstr ""
-"Por favor, pida información sólo de estas categorias, <strong>no pierda su tiempo\n"
-" </strong> o el del organismo público pidiendo información no relacionada."
+"Todavía estoy <strong>esperando</strong> por mi información\n"
+" <small>(puede que haya obtenido un acuse de recibo)</small>"
-#: app/views/request/new_please_describe.rhtml:5
-msgid ""
-"Please select each of these requests in turn, and <strong>let everyone know</strong>\n"
-"if they are successful yet or not."
+#: app/views/request/_describe_state.rhtml:18
+msgid "I'm still <strong>waiting</strong> for the internal review"
+msgstr "Todavía estoy <strong>esperando</strong> por la revisión interna"
+
+#: app/views/request/_describe_state.rhtml:25
+msgid "I've been asked to <strong>clarify</strong> my request"
+msgstr "Me han pedido que <strong>aclare</strong> mi petición"
+
+#: app/views/request/_describe_state.rhtml:32
+msgid "I'm waiting for an <strong>internal review</strong> response"
msgstr ""
-"Por favor elija estas peticiones una a una, y <strong>haz que se sepa</strong>\n"
-"si han tenido éxito o no."
+"Estoy esperando por una respuesta de la <strong>revisión interna</strong>"
-#: app/models/outgoing_message.rb:156
+#: app/views/request/_describe_state.rhtml:38
+msgid "They are going to reply <strong>by post</strong>"
+msgstr "Van a responder <strong>por correo ordinario</strong>"
+
+#: app/views/request/_describe_state.rhtml:44
+#: app/views/request/_other_describe_state.rhtml:40
+msgid "This particular request is finished:"
+msgstr "Esta petición está cerrada:"
+
+#: app/views/request/_describe_state.rhtml:47
+#: app/views/request/_other_describe_state.rhtml:43
+msgid "The <strong>review has finished</strong> and overall:"
+msgstr "La <strong>revisión ha finalizado</strong> y en resumen:"
+
+#: app/views/request/_describe_state.rhtml:52
msgid ""
-"Please sign at the bottom with your name, or alter the \"%{signoff}\" "
-"signature"
+"They do <strong>not have</strong> the information <small>(maybe they say who"
+" does)</small>"
msgstr ""
-"Por favor, firme con su nombre en la parte inferior, o cambia la firma "
-"\"%{signoff}\""
+"<strong>No tienen</strong> la información <small>(tal vez dicen quién la "
+"tiene)</small>"
-#: app/views/user/sign.rhtml:8
-msgid "Please sign in as "
-msgstr "Por favor abre una sesión como "
+#: app/views/request/_describe_state.rhtml:56
+msgid "I've received <strong>some of the information</strong>"
+msgstr "He recibido <strong>parte de la información</strong>"
-#: app/controllers/request_controller.rb:730
-msgid "Please type a message and/or choose a file containing your response."
-msgstr ""
-"Por favor escriba un mensaje y/o escoja un fichero conteniendo su respuesta."
+#: app/views/request/_describe_state.rhtml:60
+msgid "I've received <strong>all the information"
+msgstr "He recibido <strong>toda la información"
-#: app/controllers/request_controller.rb:434
-msgid "Please use the form below to tell us more."
-msgstr "Por favor use el formulario a continuación para decirnos más."
+#: app/views/request/_describe_state.rhtml:64
+msgid "My request has been <strong>refused</strong>"
+msgstr "Mi petición ha sido <strong>rechazada</strong>"
-#: app/views/outgoing_mailer/followup.rhtml:6
-#: app/views/outgoing_mailer/initial_request.rhtml:5
-msgid "Please use this email address for all replies to this request:"
+#: app/views/request/_describe_state.rhtml:71
+msgid "Other:"
+msgstr "Otros:"
+
+#: app/views/request/_describe_state.rhtml:76
+msgid "I've received an <strong>error message</strong>"
+msgstr "He recibido un <strong>mensaje de error</strong>"
+
+#: app/views/request/_describe_state.rhtml:84
+msgid "This request <strong>requires administrator attention</strong>"
msgstr ""
-"Por favor use la siguiente dirección de correo para todas las respuestas a "
-"esta petición:"
+"Esta petición <strong>requiere la intervención de un administrador</strong>"
-#: app/models/info_request.rb:35
-msgid "Please write a summary with some text in it"
-msgstr "Por favor, escriba un resumen que no esté vacío"
+#: app/views/request/_describe_state.rhtml:91
+msgid "I would like to <strong>withdraw this request</strong>"
+msgstr "Me gustaría <strong>retirar esta petición</strong>"
-#: app/models/info_request.rb:120
+#: app/views/request/_describe_state.rhtml:101
+msgid "Submit status"
+msgstr "Enviar estado"
+
+#: app/views/request/_describe_state.rhtml:101
+msgid "and we'll suggest <strong>what to do next</strong>"
+msgstr "y le sugeriremos <strong>qué hacer a continuación</strong>"
+
+#: app/views/request/_describe_state.rhtml:107
msgid ""
-"Please write the summary using a mixture of capital and lower case letters. "
-"This makes it easier for others to read."
+"We don't know whether the most recent response to this request contains\n"
+" information or not\n"
+" &ndash;\n"
+"\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
msgstr ""
-"Por favor, escriba el resumen usando letras mayúsculas y minúsculas para "
-"facilitar su lectura"
+"No sabemos si la última respuesta a esta petición contiene\n"
+" información o no\n"
+" &ndash;\n"
+"\tsi es {{user_link}} por favor <a href=\"{{url}}\">abra una sesión</a> y háganoslo saber."
-#: app/models/comment.rb:62
+#: app/views/request/_followup.rhtml:3
+msgid "the main FOI contact at {{public_body}}"
+msgstr "el contacto en {{public_body}}"
+
+#: app/views/request/_followup.rhtml:8
+msgid "Request an internal review from {{person_or_body}}"
+msgstr "Pedir una revisión interna a {{person_or_body}}"
+
+#: app/views/request/_followup.rhtml:11
+msgid "Send a public follow up message to {{person_or_body}}"
+msgstr "Responder públicamente a {{person_or_body}}"
+
+#: app/views/request/_followup.rhtml:14
+msgid "Send a public reply to {{person_or_body}}"
+msgstr "Responder públicamente a {{person_or_body}}"
+
+#: app/views/request/_followup.rhtml:19
msgid ""
-"Please write your annotation using a mixture of capital and lower case "
-"letters. This makes it easier for others to read."
+"Don't want to address your message to {{person_or_body}}? You can also "
+"write to:"
msgstr ""
-"Por favor, escriba su comentario usando letras mayúsculas y minúsculas para "
-"facilitar su lectura"
+"¿Quiere mandar su mensaje a {{person_or_body}}? También puede escribir a:"
-#: app/controllers/request_controller.rb:423
+#: app/views/request/_followup.rhtml:23 app/views/request/_followup.rhtml:28
+#: app/views/request/_followup.rhtml:34
+msgid "the main FOI contact address for {{public_body}}"
+msgstr "la dirección de contacto de {{public_body}}"
+
+#: app/views/request/_followup.rhtml:43
msgid ""
-"Please write your follow up message containing the necessary clarifications "
-"below."
+"Follow ups and new responses to this request have been stopped to prevent "
+"spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and"
+" need to send a follow up."
msgstr ""
-"Por favor escriba su mensaje conteniendo las aclaraciones necesarias a "
-"continuación."
+"Se han bloquedao nuevas respuestas a esta petición para prevenir spam. Por "
+"favor <a href=\"{{url}}\">contáctenos</a> si es usted {{user_link}} y "
+"necesita responder."
-#: app/models/outgoing_message.rb:159
+#: app/views/request/_followup.rhtml:47
msgid ""
-"Please write your message using a mixture of capital and lower case letters."
-" This makes it easier for others to read."
+"If you are dissatisfied by the response you got from\n"
+" the public authority, you have the right to\n"
+" complain (<a href=\"%s\">details</a>)."
msgstr ""
-"Por favor, escriba su mensaje usando letras mayúsculas y minúsculas para "
-"facilitar su lectura"
+"Si no está satisfecho con la respuesta que ha recibido del\n"
+" organismo público, tiene derecho a\n"
+" apelar (<a href=\"%s\">detalles</a>)."
-#: app/views/comment/new.rhtml:41
+#: app/views/request/_followup.rhtml:54
msgid ""
-"Point to <strong>related information</strong>, campaigns or forums which may"
-" be useful."
+"Please <strong>only</strong> write messages directly relating to your "
+"request {{request_link}}. If you would like to ask for information that was "
+"not in your original request, then <a href=\"{{new_request_link}}\">file a "
+"new request</a>."
msgstr ""
-"Haga referencia a <strong>información relacionada</strong>, campañas o foros"
-" que puedan ser útiles."
+"Por favor escriba <strong>sólo</strong> mensajes directamente relacionados "
+"con su petición {{request_link}}. Si quiere pedir información que no estaba "
+"en su petición original, entonces <a href=\"{{new_request_link}}\">envíe una"
+" nueva petición</a>."
-#: app/views/comment/preview.rhtml:21
-msgid "Post annotation"
-msgstr "Enviar comentario"
+#: app/views/request/_followup.rhtml:59
+msgid ""
+"The response to your request has been <strong>delayed</strong>. You can say that, \n"
+" by law, the authority should normally have responded\n"
+" <strong>promptly</strong> and"
+msgstr ""
+"La respuesta a su petición ha sido <strong>retrasada</strong>.\n"
+" Por ley, el organismo debería normalmente haber respondido\n"
+" <strong>rápidamente</strong> y"
-#: locale/model_attributes.rb:55
-msgid "PostRedirect|Circumstance"
-msgstr "PostRedirect|Circumstance"
+#: app/views/request/_followup.rhtml:63 app/views/request/show.rhtml:70
+#: app/views/request/show.rhtml:80
+msgid "in term time"
+msgstr "durante el periodo escolar"
-#: locale/model_attributes.rb:53
-msgid "PostRedirect|Email token"
-msgstr "PostRedirect|Email token"
+#: app/views/request/_followup.rhtml:65
+msgid "by <strong>{{date}}</strong>"
+msgstr "antes de <strong>{{date}}</strong>"
-#: locale/model_attributes.rb:52
-msgid "PostRedirect|Post params yaml"
-msgstr "PostRedirect|Post params yaml"
+#: app/views/request/_followup.rhtml:66 app/views/request/_followup.rhtml:73
+#: app/views/request/show.rhtml:83 app/views/request/show.rhtml:87
+msgid "<a href=\"%s\">details</a>"
+msgstr "<a href=\"%s\">detalles</a>"
-#: locale/model_attributes.rb:54
-msgid "PostRedirect|Reason params yaml"
-msgstr "PostRedirect|Reason params yaml"
+#: app/views/request/_followup.rhtml:71
+msgid ""
+"The response to your request is <strong>long overdue</strong>. You can say that, by \n"
+" law, under all circumstances, the authority should have responded\n"
+" by now"
+msgstr ""
+"La respuesta a su petición ha sido <strong>muy retrasada</strong>.\n"
+" Por ley, bajo cualquier circunstancia, el organismo ya debería\n"
+" haber respondido"
-#: locale/model_attributes.rb:50
-msgid "PostRedirect|Token"
-msgstr "PostRedirect|Token"
+#: app/views/request/_followup.rhtml:85
+msgid "What are you doing?"
+msgstr "¿Qué está haciendo?"
-#: locale/model_attributes.rb:51
-msgid "PostRedirect|Uri"
-msgstr "PostRedirect"
+#: app/views/request/_followup.rhtml:95
+msgid "I am asking for <strong>new information</strong>"
+msgstr "Estoy pidiendo <strong>nueva información</strong>"
-#: app/views/general/_credits.rhtml:1
-msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>."
-msgstr "Basado en <a href=\"http://www.alaveteli.org/\">Alaveteli</a>."
+#: app/views/request/_followup.rhtml:100
+msgid "I am requesting an <strong>internal review</strong>"
+msgstr "Estoy pidiendo una <strong>revisión interna</strong>"
-#: app/views/request/followup_preview.rhtml:1
-msgid "Preview follow up to '"
-msgstr "Revisar mensaje a '"
+#: app/views/request/_followup.rhtml:101
+msgid "<a href=\"%s\">what's that?</a>"
+msgstr "<a href=\"%s\">¿Qué es eso?</a>"
-#: app/views/comment/preview.rhtml:1
-msgid "Preview new annotation on '{{info_request_title}}'"
-msgstr "Revisar nuevo comentario a '{{info_request_title}}'"
+#: app/views/request/_followup.rhtml:106
+msgid ""
+"<strong>Anything else</strong>, such as clarifying, prompting, thanking"
+msgstr ""
+"<strong>Otras cosas</strong>, como aclarar, preguntar, dar las gracias"
-#: app/views/comment/_comment_form.rhtml:15
-msgid "Preview your annotation"
-msgstr "Revise su comentario"
+#: app/views/request/_followup.rhtml:112
+msgid ""
+"Edit and add <strong>more details</strong> to the message above,\n"
+" explaining why you are dissatisfied with their response."
+msgstr ""
+"Edite y añada <strong>más detalles</strong> al mensaje anterior,\n"
+" explicando por qué no esta satisfecho con su respuesta."
-#: app/views/request/_followup.rhtml:96
+#: app/views/request/_followup.rhtml:123
msgid "Preview your message"
msgstr "Revise su mensaje"
-#: app/views/request/new.rhtml:139
-msgid "Preview your public request"
-msgstr "Revise su petición pública"
+#: app/views/request/_hidden_correspondence.rhtml:10
+msgid ""
+"This response has been hidden. See annotations to find out why.\n"
+" If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+msgstr ""
+"Este respuesta está oculta. Revise los comentarios\n"
+" para descubrir por qué. Si es su petición, <a href=\"%s\">abra una sesión</a> para ver la respuesta."
-#: locale/model_attributes.rb:15
-msgid "ProfilePhoto|Data"
-msgstr "ProfilePhoto|Data"
+#: app/views/request/_hidden_correspondence.rhtml:17
+msgid ""
+"This outgoing message has been hidden. See annotations to\n"
+"\t\t\t\t\t\tfind out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+msgstr ""
+"Este mensaje está oculto. Lea los comentarios\n"
+"\t\t\t\t\t\tpara descubrir por qué. Si es su petición, <a href=\"%s\">abra una sesión</a> para ver la respuesta."
-#: locale/model_attributes.rb:16
-msgid "ProfilePhoto|Draft"
-msgstr "ProfilePhoto|Draft"
+#: app/views/request/_hidden_correspondence.rhtml:23
+msgid ""
+"This comment has been hidden. See annotations to\n"
+" find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+msgstr ""
+"Este respuesta está oculta. Revise los comentarios\n"
+" para descubrir por qué. Si es su petición, <a href=\"%s\">abra una sesión</a> para ver la respuesta."
-#: app/views/public_body/list.rhtml:37
-msgid "Public authorities - {{description}}"
-msgstr "Organismos públicos - {{description}}"
+#: app/views/request/_hidden_correspondence.rhtml:32
+msgid "unexpected prominence on request event"
+msgstr "visibilidad inesperada en el evento de la petición"
-#: app/views/general/search.rhtml:73
+#: app/views/request/_other_describe_state.rhtml:4
msgid ""
-"Public authorities {{start_count}} to {{end_count}} of {{total_count}} for "
-"{{user_search_query}}"
+"Hi! We need your help. The person who made the following request\n"
+" hasn't told us whether or not it was successful. Would you mind taking\n"
+" a moment to read it and help us keep the place tidy for everyone?\n"
+" Thanks."
msgstr ""
-"Organismos {{start_count}} a {{end_count}} de {{total_count}} para "
-"{{user_search_query}}"
+"¡Hola! Necesitamos su ayuda. La persona que hizo la siguiente petición\n"
+" no nos ha dicho si tuvo o no éxito. ¿Le importaría invertir unos minutos\n"
+" en leerla y ayudarnos a clasificarla para el beneficio de todos? Gracias."
-#: locale/model_attributes.rb:12
-msgid "PublicBody|First letter"
-msgstr "Primera letra"
+#: app/views/request/_other_describe_state.rhtml:14
+msgid ""
+"<strong>No response</strong> has been received\n"
+" <small>(maybe there's just an acknowledgement)</small>"
+msgstr ""
+"No se ha recibido <strong>ninguna respuesta</strong>\n"
+" <small>(puede que se trate sólo de un acuse de recibo)</small>"
-#: locale/model_attributes.rb:10
-msgid "PublicBody|Home page"
-msgstr "Sitio web"
+#: app/views/request/_other_describe_state.rhtml:21
+msgid "Still awaiting an <strong>internal review</strong>"
+msgstr "Todavía esperando por una <strong>revisión interna</strong>"
-#: locale/model_attributes.rb:8
-msgid "PublicBody|Last edit comment"
-msgstr "PublicBody|Last edit comment"
+#: app/views/request/_other_describe_state.rhtml:28
+msgid "<strong>Clarification</strong> has been requested"
+msgstr "Se ha solicitado una <strong>aclaración</strong>"
-#: locale/model_attributes.rb:7
-msgid "PublicBody|Last edit editor"
-msgstr "PublicBody|Last edit editor"
+#: app/views/request/_other_describe_state.rhtml:34
+msgid "A response will be sent <strong>by post</strong>"
+msgstr "Una respuesta será enviada <strong>por correo ordinario</strong>"
-#: locale/model_attributes.rb:3
-msgid "PublicBody|Name"
-msgstr "Nombre"
+#: app/views/request/_other_describe_state.rhtml:48
+msgid ""
+"The authority do <strong>not have</strong> the information <small>(maybe "
+"they say who does)"
+msgstr ""
+"El organismo <strong>no tiene</strong> la información <small>(tal vez dicen "
+"quién la tiene)"
-#: locale/model_attributes.rb:11
-msgid "PublicBody|Notes"
-msgstr "Notas"
+#: app/views/request/_other_describe_state.rhtml:52
+msgid "<strong>Some of the information</strong> has been sent "
+msgstr "Se ha enviado <strong>parte de la información</strong> "
-#: locale/model_attributes.rb:13
-msgid "PublicBody|Publication scheme"
-msgstr "PublicBody|Publication scheme"
+#: app/views/request/_other_describe_state.rhtml:56
+msgid "<strong>All the information</strong> has been sent"
+msgstr "<strong>Toda la información</strong> ha sido enviada"
-#: locale/model_attributes.rb:5
-msgid "PublicBody|Request email"
-msgstr "PublicBody|Request email"
+#: app/views/request/_other_describe_state.rhtml:60
+msgid "The request has been <strong>refused</strong>"
+msgstr "La petición ha sido <strong>rechazada</strong>"
-#: locale/model_attributes.rb:4
-msgid "PublicBody|Short name"
-msgstr "Nombre corto"
+#: app/views/request/_other_describe_state.rhtml:70
+msgid "An <strong>error message</strong> has been received"
+msgstr "Se ha recibido <strong>un mensaje de error</strong>"
-#: locale/model_attributes.rb:9
-msgid "PublicBody|Url name"
-msgstr "Dirección web"
+#: app/views/request/_request_filter_form.rhtml:6
+msgid "Keywords"
+msgstr "Términos"
-#: locale/model_attributes.rb:6
-msgid "PublicBody|Version"
-msgstr "Versión"
+#: app/views/request/_request_filter_form.rhtml:11
+msgid "Search for words in:"
+msgstr "Buscar palabras en:"
-#: app/views/public_body/show.rhtml:10
-msgid "Publication scheme"
-msgstr "Esquema de publicación"
+#: app/views/request/_request_filter_form.rhtml:30
+msgid "all requests"
+msgstr "todas las solicitudes"
-#: locale/model_attributes.rb:48
-msgid "RawEmail|Data binary"
-msgstr "RawEmail|Data binary"
+#: app/views/request/_request_listing_short_via_event.rhtml:9
+msgid "To {{public_body_link_absolute}}"
+msgstr "Para {{public_body_link_absolute}}"
-#: app/views/comment/preview.rhtml:20
-msgid "Re-edit this annotation"
-msgstr "Editar este comentario"
+#: app/views/request/_request_listing_short_via_event.rhtml:10
+msgid "by {{user_link_absolute}}"
+msgstr "por {{user_link_absolute}}"
-#: app/views/request/followup_preview.rhtml:49
-msgid "Re-edit this message"
-msgstr "Editar este mensaje"
+#: app/views/request/_request_listing_single.rhtml:12
+msgid ""
+"Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
+msgstr "Petición a {{public_body_name}} de {{info_request_user}} el {{date}}"
-#: app/views/request/preview.rhtml:40
-msgid "Re-edit this request"
-msgstr "Editar esta petición"
+#: app/views/request/_request_listing_via_event.rhtml:20
+msgid ""
+"Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+msgstr ""
+"Petición enviada a {{public_body_name}} por {{info_request_user}} el "
+"{{date}}."
+
+#: app/views/request/_request_listing_via_event.rhtml:23
+msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+msgstr "enviada a {{public_body_name}} por {{info_request_user}} el {{date}}."
-#: app/views/general/search.rhtml:137
+#: app/views/request/_request_listing_via_event.rhtml:26
+msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
+msgstr "por {{public_body_name}} a {{info_request_user}} el {{date}}."
+
+#: app/views/request/_request_listing_via_event.rhtml:28
msgid ""
-"Read about <a href=\"{{advanced_search_url}}\">advanced search "
-"operators</a>, such as proximity and wildcards."
+"Request to {{public_body_name}} by {{info_request_user}}. Annotated by "
+"{{event_comment_user}} on {{date}}."
msgstr ""
-"Lea más sobre <a href=\"{{advanced_search_url}}\">operadores avanzados "
-"de búsqueda</a>, como indicadores de proximidad y comodines."
+"Petición a {{public_body_name}} por {{info_request_user}}. Comentada por "
+"{{event_comment_user}} el {{date}}."
-#: app/views/layouts/default.rhtml:93
-msgid "Read blog"
-msgstr "Leer el blog"
+#: app/views/request/_request_listing_via_event.rhtml:30
+msgid "unknown event type indexed "
+msgstr "indexado tipo de evento desconocido "
-#: app/views/request/new.rhtml:16
-msgid "Read this before writing your {{info_request_law_used_full}} request"
-msgstr "Lea esto antes de escribir su petición {{info_request_law_used_full}}"
+#: app/views/request/_search_ahead.rhtml:3
+msgid "Possibly related requests:"
+msgstr "Posibles solicitudes relacionadas:"
-#: app/views/general/search.rhtml:150
-msgid "Received an error message, such as delivery failure."
-msgstr "Se ha recibido un mensaje de error, como fallo al entregar el mensaje."
+#: app/views/request/_search_ahead.rhtml:10
+msgid "Or search in their website for this information."
+msgstr "O busque esta información en su web."
-#: app/views/general/search.rhtml:42
-msgid "Recently described results first"
-msgstr "Resultados descritos recientemente primero"
+#: app/views/request/_sidebar.rhtml:2
+msgid "Follow this request"
+msgstr "Seguir esta solicitud"
-#: app/controllers/request_controller.rb:139
-msgid "Recently sent Freedom of Information requests"
-msgstr "Peticiones de acceso a la información enviadas recientemente"
+#: app/views/request/_sidebar.rhtml:5
+msgid "There is %d person following this request"
+msgid_plural "There are %d people following this request"
+msgstr[0] "Hay %d persona siguiendo esta solicitud."
+msgstr[1] "Hay %d personas siguiendo esta solicitud."
-#: app/views/request/list.rhtml:6
-msgid "Recently sent requests"
-msgstr "Peticiones enviadas recientemente"
+#: app/views/request/_sidebar.rhtml:8
+msgid "Act on what you've learnt"
+msgstr "Utilice esta información"
-#: app/controllers/request_controller.rb:144
-msgid "Recently successful responses"
-msgstr "Respuestas exitosas recientes"
+#: app/views/request/_sidebar.rhtml:13
+msgid "Tweet this request"
+msgstr "Tuitear esta solicitud"
-#: app/models/info_request_event.rb:305
-msgid "Refused"
-msgstr "Rechazada"
+#: app/views/request/_sidebar.rhtml:17
+msgid "Start your own blog"
+msgstr "Comience su propio blog"
-#: app/models/info_request.rb:793
-msgid "Refused."
-msgstr "Rechazada."
+#: app/views/request/_sidebar.rhtml:24
+msgid "Similar requests"
+msgstr "Peticiones similares"
-#: app/views/user/_signin.rhtml:26
+#: app/views/request/_sidebar.rhtml:29
+msgid "More similar requests"
+msgstr "Más solicitudes similares"
+
+#: app/views/request/_sidebar.rhtml:35
+msgid "Event history details"
+msgstr "Historial de eventos"
+
+#: app/views/request/_sidebar.rhtml:39
msgid ""
-"Remember me</label> (keeps you signed in longer;\n"
-" do not use on a public computer) "
+"<a href=\"%s\">Are you the owner of\n"
+" any commercial copyright on this page?</a>"
msgstr ""
-"Recuérdame</label> (mantiene la sesión abierta;\n"
-" no lo use en un ordenador público) "
+"<a href=\"%s\">¿Posee el copyright\n"
+" de alguna información de esta página?</a>"
-#: app/views/request/_correspondence.rhtml:28
-msgid "Reply to this message"
-msgstr "Conteste a este mensaje"
+#: app/views/request/_sidebar_request_listing.rhtml:13
+msgid "Requested on {{date}}"
+msgstr "Pedida el {{date}}"
-#: app/views/comment/_single_comment.rhtml:24
-msgid "Report abuse"
-msgstr "Denuncie abuso"
+#: app/views/request/_view_html_prefix.rhtml:6
+msgid "Download original attachment"
+msgstr "Descargar ficheros adjuntos"
-#: app/views/request/_after_actions.rhtml:37
-msgid "Request an internal review"
-msgstr "Pida una revisión interna"
+#: app/views/request/_view_html_prefix.rhtml:9
+msgid ""
+"This is an HTML version of an attachment to the Freedom of Information "
+"request"
+msgstr ""
+"Esta es la versión HTML de un fichero adjunto a una petición de acceso a la "
+"información"
-#: app/views/request/_followup.rhtml:4
-msgid "Request an internal review from"
-msgstr "Pida una revisión interna de"
+#: app/views/request/details.rhtml:1 app/views/request/details.rhtml:2
+msgid "Details of request '"
+msgstr "Detalles de la petición '"
-#: app/views/request/hidden.rhtml:1
-msgid "Request has been removed"
-msgstr "La petición ha sido eliminada"
+#: app/views/request/details.rhtml:4
+msgid "Event history"
+msgstr "Historial de eventos"
-#: app/views/request/_request_listing_via_event.rhtml:28
+#: app/views/request/details.rhtml:6
msgid ""
-"Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+"This table shows the technical details of the internal events that happened\n"
+"to this request on {{site_name}}. This could be used to generate information about\n"
+"the speed with which authorities respond to requests, the number of requests\n"
+"which require a postal response and much more."
msgstr ""
-"Petición enviada a {{public_body_name}} por {{info_request_user}} el "
-"{{date}}."
+"La siguiente tabla muestra datos técnicos sobre los eventos internos relacionados \n"
+"con la petición {{site_name}}. Estos datos pueden ser utilizados para generar\n"
+"estadísticas sobre por ejemplo la velocidad de respuesta de los organismos o\n"
+"el número de peticiones que piden usar correo ordinario."
-#: app/views/request/_request_listing_via_event.rhtml:36
+#: app/views/request/details.rhtml:12
msgid ""
-"Request to {{public_body_name}} by {{info_request_user}}. Annotated by "
-"{{event_comment_user}} on {{date}}."
+"<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \n"
+"a good internal knowledge of user behaviour on {{site_name}}. How, \n"
+"why and by whom requests are categorised is not straightforward, and there will\n"
+"be user error and ambiguity. You will also need to understand FOI law, and the\n"
+"way authorities use it. Plus you'll need to be an elite statistician. Please\n"
+"<a href=\"{{contact_path}}\">contact us</a> with questions."
msgstr ""
-"Petición a {{public_body_name}} por {{info_request_user}}. Comentada por "
-"{{event_comment_user}} el {{date}}."
+"<strong>¡Cuidado!</strong> Para utilizar estos datos de forma fiable necesita \n"
+"un conocimiento profundo del comportamiento de los usuarios de {{site_name}}. El cómo, \n"
+"por qué y por quién se clasifican las peticiones no es trivial, y se producen fallos\n"
+"humanos y decisiones discutibles. Necesita también comprender las leyes de acceso a la\n"
+"información, y cómo son utilizadas por los organismos públicos. Necesita por último ser\n"
+"un buen estadista. Por favor <a href=\"{{contact_path}}\">contacte con nosotros</a>\n"
+"si tiene cualquier duda."
-#: app/views/request/_request_listing_single.rhtml:12
+#: app/views/request/details.rhtml:50
msgid ""
-"Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
-msgstr "Petición a {{public_body_name}} de {{info_request_user}} el {{date}}"
-
-#: app/views/request/_sidebar_request_listing.rhtml:13
-msgid "Requested on {{date}}"
-msgstr "Pedida el {{date}}"
-
-#: app/models/track_thing.rb:209 app/models/track_thing.rb:210
-msgid "Requests or responses matching '{{query}}'"
-msgstr "Peticiones o respuestas coincidiendo con '{{query}}'"
+"Here <strong>described</strong> means when a user selected a status for the request, and\n"
+"the most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\n"
+"{{site_name}} for intermediate events, which weren't given an explicit\n"
+"description by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
+msgstr ""
+"Donde <strong>described</strong> significa que un usuario asignó el estado a la petición, y\n"
+"el evento más reciente ha sido actualizado con ese estado. <strong>calculated</strong> es inferido por\n"
+"{{site_name}} para los eventos intermedios, que no fueron descritos explícitamente por un usuario.\n"
+"Consulte los <a href=\"{{search_path}}\">consejos para búsquedas</a> para ver una descripción de los estados."
-#: app/views/request/upload_response.rhtml:11
-msgid "Respond by email"
-msgstr "Contestar por correo"
+#: app/views/request/details.rhtml:58
+msgid ""
+"You can get this page in computer-readable format as part of the main JSON\n"
+"page for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
+msgstr ""
+"Puede obtener esta página en un formato procesable como parte de la página JSON\n"
+"de la petición. Consulte <a href=\"{{api_path}}\">la documentación de nuestro API</a>."
-#: app/views/request/_after_actions.rhtml:46
-msgid "Respond to request"
-msgstr "Contestar la petición"
+#: app/views/request/followup_bad.rhtml:2
+msgid "Unable to send follow up message to {{username}}"
+msgstr "No se pudo enviar la respuesta a {{username}}"
-#: app/views/request/upload_response.rhtml:5
-msgid "Respond to the FOI request"
-msgstr "Contestar la petición"
+#: app/views/request/followup_bad.rhtml:4
+msgid "Unable to send a reply to {{username}}"
+msgstr "No se pudo enviar la respuesta a {{username}}"
-#: app/views/request/upload_response.rhtml:21
-msgid "Respond using the web"
-msgstr "Contestar vía web"
+#: app/views/request/followup_bad.rhtml:11
+msgid "Freedom of Information law no longer applies to"
+msgstr "La ley de acceso a la información ya no es aplicable a"
-#: app/views/general/search.rhtml:160
-msgid "Response from a public authority"
-msgstr "Respuesta de un organismo público"
+#: app/views/request/followup_bad.rhtml:12
+msgid ""
+"From the request page, try replying to a particular message, rather than sending\n"
+" a general followup. If you need to make a general followup, and know\n"
+" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
+msgstr ""
+"Desde la página de la petición, intente responder a un mensaje en concreto, en vez de\n"
+" responder a la petición en general. Si necesita hacerlo y tiene una dirección de\n"
+" correo válida, por favor <a href=\"%s\">mándenosla</a>."
-#: app/views/request/show.rhtml:77
-msgid "Response to this request is <strong>delayed</strong>."
-msgstr "La respuesta a esta petición está <strong>retrasada</strong>."
+#: app/views/request/followup_bad.rhtml:18
+msgid ""
+"no longer exists. If you are trying to make\n"
+" From the request page, try replying to a particular message, rather than sending\n"
+" a general followup. If you need to make a general followup, and know\n"
+" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
+msgstr ""
+"ya no existe. \n"
+"Desde la página de la petición, intente responder a un mensaje en concreto, en vez de\n"
+" responder a la petición en general. Si necesita hacerlo y tiene una dirección de\n"
+" correo válida, por favor <a href=\"%s\">mándenosla</a>."
-#: app/views/request/show.rhtml:85
-msgid "Response to this request is <strong>long overdue</strong>."
-msgstr "La respuesta a esta petición está <strong>muy retrasada</strong>."
+#: app/views/request/followup_bad.rhtml:24
+msgid ""
+"We do not have a working {{law_used_full}} address for {{public_body_name}}."
+msgstr ""
+"No tenemos una dirección de correo válida para este {{public_body_name}}."
-#: app/views/request/show_response.rhtml:64
-msgid "Response to your request"
-msgstr "Respuesta a su petición"
+#: app/views/request/followup_bad.rhtml:24
+msgid ""
+"You may be able to find\n"
+" one on their website, or by phoning them up and asking. If you manage\n"
+" to find one, then please <a href=\"%s\">send it to us</a>."
+msgstr ""
+"Puede que encuentre una\n"
+" en su página web, o preguntando por teléfono. Si la consigue\n"
+" por favor <a href=\"%s\">envíenosla</a>."
-#: app/views/request/upload_response.rhtml:28
-msgid "Response:"
-msgstr "Respuesta:"
+#: app/views/request/followup_bad.rhtml:29
+msgid "unknown reason "
+msgstr "motivo desconocido "
-#: app/views/general/search.rhtml:9
-msgid "Results page {{page_number}}"
-msgstr "Página de resultados {{page_number}}"
+#: app/views/request/followup_preview.rhtml:1
+msgid "Preview follow up to '"
+msgstr "Revisar mensaje a '"
-#: app/views/user/set_profile_about_me.rhtml:35
-msgid "Save"
-msgstr "Guardar"
+#: app/views/request/followup_preview.rhtml:8
+msgid "Now preview your message asking for an internal review"
+msgstr "Ahora revise su mensaje pidiendo una revisión interna"
-#: app/views/general/exception_caught.rhtml:10
-#: app/views/general/frontpage.rhtml:16 app/views/general/search.rhtml:29
-#: app/views/layouts/default.rhtml:80 app/views/request/new.rhtml:31
-msgid "Search"
-msgstr "Buscar"
+#: app/views/request/followup_preview.rhtml:10
+msgid "Now preview your follow up"
+msgstr "Ahora revise su mensaje"
-#: app/views/general/search.rhtml:4
-msgid "Search Freedom of Information requests, public authorities and users"
-msgstr "Buscar peticiones de información, organismos públicos y usuarios"
+#: app/views/request/followup_preview.rhtml:14
+#: app/views/request/preview.rhtml:7
+msgid "Check you haven't included any <strong>personal information</strong>."
+msgstr ""
+"Compruebe que no ha incluído <strong>ninguna información personal</strong>."
-#: app/views/general/exception_caught.rhtml:7
-msgid "Search the site to find what you were looking for."
-msgstr "Buscar en esta web para encontrar lo que busca."
+#: app/views/request/followup_preview.rhtml:15
+msgid "Your message will appear in <strong>search engines</strong>"
+msgstr "Su mensaje aparecerá en <strong>los motores de búsqueda</strong>"
-#: app/controllers/user_controller.rb:331
-msgid "Send a message to "
-msgstr "Enviar un mensaje a "
+#: app/views/request/followup_preview.rhtml:22 app/views/request/new.rhtml:40
+#: app/views/request/preview.rhtml:17
+#: app/views/request/simple_correspondence.rhtml:16
+#: app/views/request/simple_correspondence.rhtml:28
+msgid "To:"
+msgstr "Para:"
-#: app/views/request/_followup.rhtml:7
-msgid "Send a public follow up message to"
-msgstr "Enviar un mensaje público a"
+#: app/views/request/followup_preview.rhtml:23
+#: app/views/request/preview.rhtml:18
+msgid "Subject:"
+msgstr "Tema:"
-#: app/views/request/_followup.rhtml:10
-msgid "Send a public reply to"
-msgstr "Enviar una respuesta pública a"
+#: app/views/request/followup_preview.rhtml:37
+msgid ""
+"<strong>Privacy warning:</strong> Your message, and any response\n"
+" to it, will be displayed publicly on this website."
+msgstr ""
+"<strong>Nota sobre privacidad:</strong> Su mensaje, y cualquier respuesta,\n"
+" estarán disponibles públicamente en esta web."
-#: app/views/request/_correspondence.rhtml:58
-msgid "Send follow up"
-msgstr "Enviar un mensaje"
+#: app/views/request/followup_preview.rhtml:49
+msgid "Re-edit this message"
+msgstr "Editar este mensaje"
#: app/views/request/followup_preview.rhtml:50
msgid "Send message"
msgstr "Enviar un mensaje"
-#: app/views/user/show.rhtml:69
-msgid "Send message to "
-msgstr "Enviar un mensaje a "
-
-#: app/views/request/preview.rhtml:41
-msgid "Send public "
-msgstr "Enviar público "
-
-#: app/views/user/show.rhtml:53
-msgid "Set your profile photo"
-msgstr "Cambiar foto de perfil"
-
-#: app/models/public_body.rb:39
-msgid "Short name is already taken"
-msgstr "Nombre de usuario ya en uso"
-
-#: app/views/general/search.rhtml:38
-msgid "Show most relevant results first"
-msgstr "Muestra resultados más relevantes primero"
-
-#: app/views/public_body/list.rhtml:3 app/views/request/list.rhtml:2
-msgid "Show only..."
-msgstr "Mostrar sólo..."
+#: app/views/request/hidden.rhtml:1
+msgid "Request has been removed"
+msgstr "La petición ha sido eliminada"
-#: app/views/user/_signin.rhtml:31 app/views/user/show.rhtml:113
-msgid "Sign in"
-msgstr "Abrir sesión"
+#: app/views/request/hidden.rhtml:9
+msgid ""
+"The request you have tried to view has been removed. There are\n"
+"various reasons why we might have done this, sorry we can't be more specific here. Please <a\n"
+" href=\"%s\">contact us</a> if you have any questions."
+msgstr ""
+"La petición que ha intentado ver ha sido eliminada. Hay\n"
+"varios posibles motivos para esto, pero no podemos ser más específicos aquí. Por favor <a\n"
+" href=\"%s\">contáctenos</a> si tiene cualquier pregunta."
-#: app/views/user/sign.rhtml:20
-msgid "Sign in or make a new account"
-msgstr "Abrir sesión o crear nueva cuenta"
+#: app/views/request/hidden.rhtml:15
+msgid ""
+"If you are the requester, then you may <a href=\"%s\">sign in</a> to view "
+"the request."
+msgstr ""
+"Si la petición es suya, puede <a href=\"%s\">abrir una sesión</a> para "
+"verla."
-#: app/views/layouts/default.rhtml:103
-msgid "Sign in or sign up"
-msgstr "Iniciar sesión o registro"
+#: app/views/request/list.rhtml:8
+msgid "Follow these requests"
+msgstr "Seguir estas solicitudes"
-#: app/views/layouts/default.rhtml:100
-msgid "Sign out"
-msgstr "Cerrar sesión"
+#: app/views/request/list.rhtml:19
+msgid "No requests of this sort yet."
+msgstr "No existen peticiones de este tipo todavía."
-#: app/views/user/_signup.rhtml:41
-msgid "Sign up"
-msgstr "Registrarse"
+#: app/views/request/list.rhtml:21
+msgid "{{count}} FOI requests found"
+msgstr "{{count}} solicitudes de información encontradas"
-#: app/views/request/_sidebar.rhtml:30
-msgid "Similar requests"
-msgstr "Peticiones similares"
+#: app/views/request/list.rhtml:27
+msgid "Unexpected search result type"
+msgstr "Se encontró un tipo de resultado inesperado"
-#: app/models/info_request_event.rb:307
-msgid "Some information sent"
-msgstr "Enviada parte de la información"
+#: app/views/request/new.rhtml:20
+msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
+msgstr "Hacer una petición {{law_used_short}} a '{{public_body_name}}'"
-#: app/views/general/search.rhtml:145
-msgid "Some of the information requested has been received"
-msgstr "Parte de la información solicitada ha sido recibida"
+#: app/views/request/new.rhtml:22
+msgid "2. Ask for Information"
+msgstr "2. Solicite información"
-#: app/views/request_game/play.rhtml:31
+#: app/views/request/new.rhtml:27
msgid ""
-"Some people who've made requests haven't let us know whether they were\n"
-"successful or not. We need <strong>your</strong> help &ndash;\n"
-"choose one of these requests, read it, and let everyone know whether or not the\n"
-"information has been provided. Everyone'll be exceedingly grateful."
+"{{existing_request_user}} already\n"
+" created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n"
+" or edit the details below to make a new but similar request."
msgstr ""
-"Algunas personas que hicieron peticiones no nos han hecho saber si tuvieron\n"
-"éxito o no. Necesitamos <strong>su</strong> ayuda &ndash;\n"
-"elija una de las peticiones, léala, y háganos saber si se ha obtenido o no\n"
-"la información. Todos le estaremos agradecidos.."
+"{{existing_request_user}} ya\n"
+" envió la misma solicitud el {{date}}. Puede ver <a href=\"{{existing_request}}\">la solicitud existente</a>,\n"
+" o editar la suya a continuación para enviar una nueva petición similar a la anterior."
-#: app/views/user_mailer/changeemail_already_used.rhtml:1
+#: app/views/request/new.rhtml:44
msgid ""
-"Someone, perhaps you, just tried to change their email address on\n"
-"{{site_name}} from {{old_email}} to {{new_email}}."
+"Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for "
+"examples of how to word your request."
msgstr ""
-"Alguien, tal vez usted, acaba de intentar cambiar su dirección de correo en\n"
-"{{site_name}} de {{old_email}} a {{new_email}}."
+"Explore <a href='{{url}}'>otras peticiones</a> a '{{public_body_name}}' para"
+" ver ejemplos de cómo redactar su petición."
-#: app/views/general/exception_caught.rhtml:1
-msgid "Sorry, we couldn't find that page"
-msgstr "Lo sentimos, no hemos podido encontrar esa página"
+#: app/views/request/new.rhtml:46
+msgid ""
+"Browse <a href='{{url}}'>other requests</a> for examples of how to word your"
+" request."
+msgstr ""
+"Consulte <a href='{{url}}'>otras solicitudes</a> para ver cómo puede "
+"redactar su solicitud."
-#: app/views/request/new.rhtml:53
+#: app/views/request/new.rhtml:52
msgid "Special note for this authority!"
msgstr "¡Notas especiales sobre este organismo!"
-#: app/views/request/_other_describe_state.rhtml:21
-msgid "Still awaiting an <strong>internal review</strong>"
-msgstr "Todavía esperando por una <strong>revisión interna</strong>"
+#: app/views/request/new.rhtml:58
+msgid "Please ask for environmental information only"
+msgstr "Por favor pida información medio-ambiental solamente"
-#: app/views/request/followup_preview.rhtml:23
-#: app/views/request/preview.rhtml:18
-msgid "Subject:"
-msgstr "Tema:"
+#: app/views/request/new.rhtml:60
+msgid "The Freedom of Information Act <strong>does not apply</strong> to"
+msgstr "La ley de acceso a la información <strong>no es aplicable</strong> a"
-#: app/views/user/signchangepassword_send_confirm.rhtml:26
-msgid "Submit"
-msgstr "Enviar"
+#: app/views/request/new.rhtml:61
+msgid ""
+"However, you have the right to request environmental\n"
+" information under a different law"
+msgstr ""
+"En cambio, tiene derecho a solicitar información\n"
+" medioambiental bajo otra ley"
-#: app/views/request/_describe_state.rhtml:101
-msgid "Submit status"
-msgstr "Enviar estado"
+#: app/views/request/new.rhtml:63
+msgid ""
+"This covers a very wide spectrum of information about the state of\n"
+" the <strong>natural and built environment</strong>, such as:"
+msgstr ""
+"Esto incluye un amplio espectro de información sobre el estado de\n"
+" el <strong>entorno natural y urbanizado</strong>, como:"
-#: app/models/track_thing.rb:158 app/models/track_thing.rb:159
-msgid "Successful Freedom of Information requests"
-msgstr "Peticiones de acceso a la información con éxito"
+#: app/views/request/new.rhtml:67
+msgid ""
+"Air, water, soil, land, flora and fauna (including how these effect\n"
+" human beings)"
+msgstr ""
+"Aire, agua, tierra, flora y fauna (incluyendo sus efectos en los\n"
+" seres humanos)"
-#: app/views/request/list.rhtml:5
-msgid "Successful responses"
-msgstr "Respuestas con exito"
+#: app/views/request/new.rhtml:69
+msgid ""
+"Information on emissions and discharges (e.g. noise, energy,\n"
+" radiation, waste materials)"
+msgstr ""
+"Información sobre emisiones (por ejemplo ruido, energía,\n"
+" radiación, materiales de desecho...)"
-#: app/models/info_request.rb:797
-msgid "Successful."
-msgstr "Exitosa."
+#: app/views/request/new.rhtml:71
+msgid "Human health and safety"
+msgstr "Salud y seguridad"
-#: app/views/comment/new.rhtml:38
+#: app/views/request/new.rhtml:72
msgid ""
-"Suggest how the requester can find the <strong>rest of the "
-"information</strong>."
+"Cultural sites and built structures (as they may be affected by the\n"
+" environmental factors listed above)"
msgstr ""
-"Sugerir al creador de la petición cómo puede encontrar el <strong>resto de la "
-"información</strong>."
+"Enclaves culturales y edificios (ya que pueden estar afectados por\n"
+" los factores medioambientales mencionados anteriormente)"
-#: app/views/request/new.rhtml:93
+#: app/views/request/new.rhtml:74
+msgid "Plans and administrative measures that affect these matters"
+msgstr "Planes y medidas administrativas que afecten a estos temas"
+
+#: app/views/request/new.rhtml:77
+msgid ""
+"Please only request information that comes under those categories, <strong>do not waste your\n"
+" time</strong> or the time of the public authority by requesting unrelated information."
+msgstr ""
+"Por favor, pida información sólo de estas categorias, <strong>no pierda su "
+"tiempo </strong> o el del organismo público pidiendo información no "
+"relacionada."
+
+#: app/views/request/new.rhtml:84
msgid "Summary:"
msgstr "Resumen:"
-#: app/views/general/search.rhtml:140
-msgid "Table of statuses"
-msgstr "Tabla de estados"
+#: app/views/request/new.rhtml:88
+msgid ""
+"a one line summary of the information you are requesting, \n"
+"\t\t\te.g."
+msgstr ""
+"un resumen de una línea de la información que solicita, \n"
+"\t\t\tpor ejemplo"
-#: app/views/request/preview.rhtml:45
-msgid "Tags:"
-msgstr "Etiquetas:"
+#: app/views/request/new.rhtml:90
+msgid "'Pollution levels over time for the River Tyne'"
+msgstr "'Niveles históricos de contaminación en el río Ebro'"
-#: app/controllers/request_game_controller.rb:52
-msgid "Thank you for helping us keep the site tidy!"
-msgstr "¡Gracias por ayudarnos a mantener la web en orden!"
+#: app/views/request/new.rhtml:92
+msgid "'Crime statistics by ward level for Wales'"
+msgstr "'Estadísticas de crímenes por región en España'"
-#: app/controllers/comment_controller.rb:62
-msgid "Thank you for making an annotation!"
-msgstr "¡Gracias por hacer un comentario!"
+#: app/views/request/new.rhtml:104
+msgid "Write your request in <strong>simple, precise language</strong>."
+msgstr ""
+"Escriba su petición en un <strong>lenguaje sencillo y preciso</strong>."
-#: app/controllers/request_controller.rb:736
+#: app/views/request/new.rhtml:105
msgid ""
-"Thank you for responding to this FOI request! Your response has been "
-"published below, and a link to your response has been emailed to "
+"Ask for <strong>specific</strong> documents or information, this site is not"
+" suitable for general enquiries."
msgstr ""
-"¡Gracias por responder a esta petición de información! Su respuesta ha sido "
-"publicada a continuación, y un enlace a su respuesta ha sido enviada a "
+"Pida documentos o información <strong>específica</strong>, esta web no está "
+"pensada para resolver dudas generales."
-#: app/controllers/request_controller.rb:378
+#: app/views/request/new.rhtml:106
msgid ""
-"Thank you for updating the status of the request '<a "
-"href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests "
-"below for you to classify."
+"Keep it <strong>focused</strong>, you'll be more likely to get what you want"
+" (<a href=\"%s\">why?</a>)."
msgstr ""
-"Gracias por actualizar el estado de la petición '<a "
-"href=\"{{url}}\">{{info_request_title}}</a>'. A continuación le mostramos "
-"algunas peticiones más que puede clasificar."
-
-#: app/controllers/request_controller.rb:381
-msgid "Thank you for updating this request!"
-msgstr "¡Gracias por actualizar esta petición!"
+"Sea <strong>específico</strong>, tendrá más probabilidades de conseguir lo "
+"que quiere (<a href=\"%s\">¿por qué?</a>)."
-#: app/controllers/user_controller.rb:398
-#: app/controllers/user_controller.rb:414
-msgid "Thank you for updating your profile photo"
-msgstr "Gracias por actualizar su foto de perfil"
+#: app/views/request/new.rhtml:113
+msgid "Your request:"
+msgstr "Su petición:"
-#: app/views/request_game/play.rhtml:42
+#: app/views/request/new.rhtml:120
msgid ""
-"Thanks for helping - your work will make it easier for everyone to find successful\n"
-"responses, and maybe even let us make league tables..."
+"Everything that you enter on this page, including <strong>your name</strong>, \n"
+" will be <strong>displayed publicly</strong> on\n"
+" this website forever (<a href=\"%s\">why?</a>)."
msgstr ""
-"Gracias por ayudar - su trabajo hace más sencillo que otros encuentren peticiones\n"
-"que han tenido éxito, e incluso nos permitirá hacer clasificaciones..."
+"Todo lo que escriba en esta página, incluyendo <strong>su nombre</strong>, \n"
+" estará <strong>disponible públicamente</strong> en\n"
+" está web para siempre (<a href=\"%s\">¿por qué?</a>)."
-#: app/views/user/show.rhtml:20
+#: app/views/request/new.rhtml:123
msgid ""
-"Thanks very much - this will help others find useful stuff. We'll\n"
-" also, if you need it, give advice on what to do next about your\n"
-" requests."
+"If you are thinking of using a pseudonym,\n"
+" please <a href=\"%s\">read this first</a>."
msgstr ""
-"Muchas gracias - esto ayudará a otros a encontrar información útil.\n"
-" Nosotros también, si lo necesita, ofrecemos consejos sobre qué\n"
-" hacer a continuación con sus peticiones."
+"Si está pensando en utilizar un pseudónimo,\n"
+" por favor <a href=\"%s\">lea esto primero</a>."
-#: app/views/request/new_please_describe.rhtml:20
+#: app/views/request/new.rhtml:128
msgid ""
-"Thanks very much for helping keep everything <strong>neat and organised</strong>.\n"
-" We'll also, if you need it, give you advice on what to do next about each of your\n"
-" requests."
+"Everything that you enter on this page \n"
+" will be <strong>displayed publicly</strong> on\n"
+" this website forever (<a href=\"%s\">why?</a>)."
msgstr ""
-"Muchas gracias por ayudar a mantenerlo todo <strong>limpio y organizado</strong>.\n"
-" Nosotros también, si lo necesita, ofrecemos consejos sobre qué\n"
-" hacer a continuación con sus peticiones."
+"Todo lo que escriba en esta página \n"
+" estará <strong>disponible públicamente</strong> en\n"
+" está web para siempre (<a href=\"%s\">¿por qué?</a>)."
-#: app/controllers/user_controller.rb:189
+#: app/views/request/new.rhtml:135
msgid ""
-"That doesn't look like a valid email address. Please check you have typed it"
-" correctly."
+"<strong> Can I request information about myself?</strong>\n"
+"\t\t\t<a href=\"%s\">No! (Click here for details)</a>"
msgstr ""
-"No parece ser una dirección de correo válida. Por favor comprueba que la ha "
-"escrito correctamente."
+"<strong> ¿Puedo pedir información sobre mí?</strong>\n"
+"\t\t\t<a href=\"%s\">¡No! (Pulse aquí para más detalles)</a>"
-#: app/views/request/_describe_state.rhtml:47
-#: app/views/request/_other_describe_state.rhtml:43
-msgid "The <strong>review has finished</strong> and overall:"
-msgstr "La <strong>revisión ha finalizado</strong> y en resumen:"
+#: app/views/request/new.rhtml:143
+msgid "Preview your public request"
+msgstr "Revise su petición pública"
-#: app/views/request/new.rhtml:62
-msgid "The Freedom of Information Act <strong>does not apply</strong> to"
-msgstr "La ley de acceso a la información <strong>no es aplicable</strong> a"
+#: app/views/request/new_bad_contact.rhtml:1
+msgid "Missing contact details for '"
+msgstr "Faltan datos de contacto para '"
-#: app/views/user_mailer/changeemail_already_used.rhtml:8
-msgid "The accounts have been left as they previously were."
-msgstr "Las cuentas se han dejado tal y como estaban anteriormente."
+#: app/views/request/new_bad_contact.rhtml:5
+msgid ""
+"Unfortunately, we do not have a working {{info_request_law_used_full}}\n"
+"address for"
+msgstr "Desgraciadamente, no tenemos una dirección de correo válida para"
-#: app/views/request/_other_describe_state.rhtml:48
+#: app/views/request/new_bad_contact.rhtml:6
msgid ""
-"The authority do <strong>not have</strong> the information <small>(maybe "
-"they say who does)"
+"You may be able to find\n"
+"one on their website, or by phoning them up and asking. If you manage\n"
+"to find one, then please <a href=\"{{help_url}}\">send it to us</a>."
msgstr ""
-"El organismo <strong>no tiene</strong> la información <small>(tal vez dicen "
-"quién la tiene)"
+"Puede que encuentre una\n"
+"en su página web, o llamándoles pare preguntar. Si\n"
+"consigue una, por favor <a href=\"{{help_url}}\">mándenosla</a>."
-#: app/views/request/show_response.rhtml:28
+#: app/views/request/new_please_describe.rhtml:5
msgid ""
-"The authority only has a <strong>paper copy</strong> of the information."
+"Please select each of these requests in turn, and <strong>let everyone know</strong>\n"
+"if they are successful yet or not."
msgstr ""
-"El organismo sólo tiene una <strong>copia en papel</strong> de la "
-"información."
+"Por favor elija estas peticiones una a una, y <strong>haz que se sepa</strong>\n"
+"si han tenido éxito o no."
-#: app/views/request/show_response.rhtml:18
+#: app/views/request/new_please_describe.rhtml:16
msgid ""
-"The authority say that they <strong>need a postal\n"
-" address</strong>, not just an email, for it to be a valid FOI request"
+"When you're done, <strong>come back here</strong>, <a href=\"%s\">reload "
+"this page</a> and file your new request."
msgstr ""
-"El organismo dice que necesita <strong>una dirección\n"
-" postal</strong>, no sólo un correo electrónico, para que la petición sea válida"
+"Cuando esté listo, <strong>vuelva aquí</strong>, <a href=\"%s\">recargue "
+"esta página</a> y cree una nueva petición."
-#: app/views/request/show.rhtml:109
+#: app/views/request/new_please_describe.rhtml:20
msgid ""
-"The authority would like to / has <strong>responded by post</strong> to this"
-" request."
+"Thanks very much for helping keep everything <strong>neat and organised</strong>.\n"
+" We'll also, if you need it, give you advice on what to do next about each of your\n"
+" requests."
msgstr ""
-"El organismo querría / ha respondido <strong>por correo ordinario</strong> a"
-" esta petición."
+"Muchas gracias por ayudar a mantenerlo todo <strong>limpio y organizado</strong>.\n"
+" Nosotros también, si lo necesita, ofrecemos consejos sobre qué\n"
+" hacer a continuación con sus peticiones."
-#: app/views/request_mailer/stopped_responses.rhtml:1
+#: app/views/request/preview.rhtml:5
+msgid "3. Now check your request"
+msgstr "3. Revise su solicitud"
+
+#: app/views/request/preview.rhtml:8
msgid ""
-"The email that you, on behalf of {{public_body}}, sent to\n"
-"{{user}} to reply to an {{law_used_short}}\n"
-"request has not been delivered."
+"Your name, request and any responses will appear in <strong>search engines</strong>\n"
+" (<a href=\"%s\">details</a>)."
msgstr ""
-"El correo envíado por usted, en nombre de {{public_body}}, enviado a\n"
-"{{user}} como respuesta a la petición {{law_used_short}}\n"
-"no ha sido entregado."
+"Su nombre, su petición y cualquier respuesta aparecerán en los <strong>motoros de búsqueda</strong>\n"
+" (<a href=\"%s\">detalles</a>)."
-#: app/views/request/show_response.rhtml:22
+#: app/views/request/preview.rhtml:31
msgid ""
-"The law, the Ministry of Justice and the Information Commissioner\n"
-" all say that an email is sufficient (<a href=\"%s\">more details</a>).\n"
-" At the bottom of this page, write a reply to the authority explaining this to them."
+"<strong>Privacy note:</strong> If you want to request private information about\n"
+" yourself then <a href=\"%s\">click here</a>."
msgstr ""
+"<strong>Nota sobre privacidad:</strong> Si quiere solicitar información privada\n"
+" sobre sí mismo entonces <a href=\"%s\">siga este enlace</a>."
-#: app/views/general/exception_caught.rhtml:3
-msgid "The page either doesn't exist, or is broken. Things you can try now:"
-msgstr "La página no existe, o está rota. Cosas que puede probar ahora:"
+#: app/views/request/preview.rhtml:40
+msgid "Edit this request"
+msgstr "Editar esta solicitud"
-#: app/views/general/search.rhtml:143
-msgid "The public authority does not have the information requested"
-msgstr "El organismo no tiene la información solicitada"
+#: app/views/request/preview.rhtml:41
+msgid "Send request"
+msgstr "Enviar solicitud"
-#: app/views/general/search.rhtml:147
-msgid "The public authority would like part of the request explained"
-msgstr "El organismo ha pedido una aclaración a parte de la petición"
+#: app/views/request/preview.rhtml:45
+msgid "Tags:"
+msgstr "Etiquetas:"
-#: app/views/general/search.rhtml:148
-msgid "The public authority would like to / has responded by post"
-msgstr "El organismo quiere responder (o ha respondido) por correo ordinario"
+#: app/views/request/select_authority.rhtml:27
+msgid "Select the authority to write to"
+msgstr "Elija el organismo al que escribir"
-#: app/views/request/_other_describe_state.rhtml:60
-msgid "The request has been <strong>refused</strong>"
-msgstr "La petición ha sido <strong>rechazada</strong>"
+#: app/views/request/select_authority.rhtml:29
+msgid "1. Select an authority"
+msgstr "1. Elija un organismo público"
-#: app/controllers/request_controller.rb:352
+#: app/views/request/select_authority.rhtml:35
msgid ""
-"The request has been updated since you originally loaded this page. Please "
-"check for any new incoming messages below, and try again."
+"First, type in the <strong>name of the UK public authority</strong> you'd \n"
+" <br>like information from. <strong>By law, they have to respond</strong>\n"
+" (<a href=\"%s\">why?</a>)."
msgstr ""
-"La petición ha sido actualizada desde que llegó inicialmente a esta página. "
-"Por favor revise si ha llegado un nuevo mensaje a continuación, y vuelva a "
-"intentarlo."
+"Primero, escriba el <strong>nombre del organismo público</strong> al \n"
+" <br>que quiera solicitar información. <strong>Por ley, tienen que responder</strong>\n"
+" (<a href=\"%s\">¿por qué?</a>)."
-#: app/views/request/show.rhtml:104
-msgid "The request is <strong>waiting for clarification</strong>."
-msgstr "La petición está <strong>esperando aclaración</strong>."
+#: app/views/request/show.rhtml:5
+msgid ""
+"This request has prominence 'hidden'. You can only see it because you are logged\n"
+" in as a super user."
+msgstr ""
+"Esta petición tiene visibilidad 'oculta'. Puede verla sólo porque esta identificado\n"
+" como super-usuario."
-#: app/views/request/show.rhtml:97
-msgid "The request was <strong>partially successful</strong>."
-msgstr "La petición fue <strong>exitosa parcialmente</strong>."
+#: app/views/request/show.rhtml:11
+msgid ""
+"This request is hidden, so that only you the requester can see it. Please\n"
+" <a href=\"%s\">contact us</a> if you are not sure why."
+msgstr ""
+"Esta petición está oculta, por lo que sólo usted como creador puede verla. Por favor\n"
+" <a href=\"%s\">contáctenos</a> si no está seguro de por qué."
-#: app/views/request/show.rhtml:93
-msgid "The request was <strong>refused</strong> by"
-msgstr "La petición fue <strong>rechazada</strong> por"
+#: app/views/request/show.rhtml:36
+msgid ""
+"{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) made this "
+"{{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to "
+"{{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
+msgstr ""
+"{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) hizo esta petición "
+"{{law_used_full}} (<a href=\"{{request_admin_url}}\">admin</a>) a "
+"{{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
-#: app/views/request/show.rhtml:95
-msgid "The request was <strong>successful</strong>."
-msgstr "La petición fue <strong>exitosa</strong>."
+#: app/views/request/show.rhtml:44
+msgid "{{user}} made this {{law_used_full}} request"
+msgstr "{{user}} hizo esta petición {{law_used_full}}"
-#: app/views/general/search.rhtml:144
-msgid "The request was refused by the public authority"
-msgstr "La petición ha sido rechazada por el organismo"
+#: app/views/request/show.rhtml:45
+msgid "to {{public_body}}"
+msgstr "a {{public_body}}"
-#: app/views/request/hidden.rhtml:9
+#: app/views/request/show.rhtml:52
msgid ""
-"The request you have tried to view has been removed. There are\n"
-"various reasons why we might have done this, sorry we can't be more specific here. Please <a\n"
-" href=\"%s\">contact us</a> if you have any questions."
+"Please <strong>answer the question above</strong> so we know whether the "
msgstr ""
-"La petición que ha intentado ver ha sido eliminada. Hay\n"
-"varios posibles motivos para esto, pero no podemos ser más específicos aquí. Por favor <a\n"
-" href=\"%s\">contáctenos</a> si tiene cualquier pregunta."
+"Por favor <strong>responda la pregunta anterior</strong> para que sepamos si"
+" "
-#: app/views/general/search.rhtml:152
-msgid "The requester has abandoned this request for some reason"
-msgstr "El creador de la petición ha cancelado la petición por algún motivo"
+#: app/views/request/show.rhtml:53
+msgid "useful information."
+msgstr "información útil."
-#: app/views/request/_followup.rhtml:32
-msgid ""
-"The response to your request has been <strong>delayed</strong>. You can say that, \n"
-" by law, the authority should normally have responded\n"
-" <strong>promptly</strong> and"
-msgstr ""
-"La respuesta a su petición ha sido <strong>retrasada</strong>.\n"
-" Por ley, el organismo debería normalmente haber respondido\n"
-" <strong>rápidamente</strong> y"
+#: app/views/request/show.rhtml:55
+msgid "This request has an <strong>unknown status</strong>."
+msgstr "Esta petición tiene un <strong>estado desconocido</strong>."
-#: app/views/request/_followup.rhtml:44
-msgid ""
-"The response to your request is <strong>long overdue</strong>. You can say that, by \n"
-" law, under all circumstances, the authority should have responded\n"
-" by now"
-msgstr ""
-"La respuesta a su petición ha sido <strong>muy retrasada</strong>.\n"
-" Por ley, bajo cualquier circunstancia, el organismo ya debería\n"
-" haber respondido"
+#: app/views/request/show.rhtml:57
+msgid "We're waiting for someone to read"
+msgstr "Estamos esperando que alguien lea"
-#: app/views/public_body/show.rhtml:100
+#: app/views/request/show.rhtml:59
msgid ""
-"The search index is currently offline, so we can't show the Freedom of "
-"Information requests that have been made to this authority."
+"and update the status accordingly. Perhaps <strong>you</strong> might like "
+"to help out by doing that?"
msgstr ""
-"El motor de búsqueda no está accesible en estos momentos: no podemos mostrar"
-" las peticiones de información realizadas a este organismo."
+"y actualice su estado. ¿Tal vez <strong>usted</strong> quiera ayudarnos a "
+"hacerlo?"
-#: app/views/user/show.rhtml:141
+#: app/views/request/show.rhtml:61
+msgid "We're waiting for"
+msgstr "Estamos esperando a"
+
+#: app/views/request/show.rhtml:62
+msgid "to read"
+msgstr "leer"
+
+#: app/views/request/show.rhtml:64
+msgid "and update the status."
+msgstr "y actualizar su estado."
+
+#: app/views/request/show.rhtml:68
msgid ""
-"The search index is currently offline, so we can't show the Freedom of "
-"Information requests this person has made."
+"Currently <strong>waiting for a response</strong> from {{public_body_link}},"
+" they must respond promptly and"
msgstr ""
-"El motor de búsqueda no está accesible en estos momentos: no podemos mostrar"
-" las peticiones de información que ha hecho esta persona"
+"Actualmente <strong>esperando la respuesta</strong> de {{public_body_link}},"
+" que debe responder pronto y"
-#: app/controllers/track_controller.rb:144
-msgid "Then you can cancel the alert."
-msgstr "Entonces podrá cancelar su alerta."
+#: app/views/request/show.rhtml:72
+msgid "normally"
+msgstr "normalmente"
-#: app/controllers/track_controller.rb:174
-msgid "Then you can cancel the alerts."
-msgstr "Entonces podrá cancelar las alertas."
+#: app/views/request/show.rhtml:74
+msgid "no later than"
+msgstr "no más tarde de"
-#: app/controllers/user_controller.rb:249
-msgid "Then you can change your email address used on {{site_name}}"
-msgstr "Entonces podrá cambiar el correo utilizado en {{site_name}}"
+#: app/views/request/show.rhtml:77
+msgid "Response to this request is <strong>delayed</strong>."
+msgstr "La respuesta a esta petición está <strong>retrasada</strong>."
-#: app/controllers/user_controller.rb:203
-msgid "Then you can change your password on {{site_name}}"
-msgstr "Entonces podrá cambiar su contraseña en {{site_name}}"
+#: app/views/request/show.rhtml:78
+msgid ""
+"By law, {{public_body_link}} should normally have responded "
+"<strong>promptly</strong> and"
+msgstr ""
+"Por ley, {{public_body_link}} debería haber respondido "
+"<strong>pronto</strong> y"
-#: app/controllers/request_controller.rb:338
-msgid "Then you can classify the FOI response you have got from "
-msgstr "Entonces podrá clasificar la respuesta que ha obtenido "
+#: app/views/request/show.rhtml:82
+msgid "by"
+msgstr "por"
-#: app/controllers/request_game_controller.rb:41
-msgid "Then you can play the request categorisation game."
-msgstr "Entonces podrá jugar al juego de clasificar peticiones"
+#: app/views/request/show.rhtml:85
+msgid "Response to this request is <strong>long overdue</strong>."
+msgstr "La respuesta a esta petición está <strong>muy retrasada</strong>."
-#: app/controllers/user_controller.rb:330
-msgid "Then you can send a message to "
-msgstr "Entonces podrá mandar un mensaje a"
+#: app/views/request/show.rhtml:86
+msgid ""
+"By law, under all circumstances, {{public_body_link}} should have responded "
+"by now"
+msgstr ""
+"Por ley, bajo cualquier circunstancia, {{public_body_link}} ya debería haber"
+" respondido"
-#: app/controllers/user_controller.rb:514
-msgid "Then you can sign in to {{site_name}}"
-msgstr "Entonces podrá entrar a {{site_name}}"
+#: app/views/request/show.rhtml:88
+msgid "You can <strong>complain</strong> by"
+msgstr "Puede <strong>apelar</strong>"
-#: app/controllers/request_controller.rb:61
-msgid "Then you can update the status of your request to "
-msgstr "Entonces podrá actualizar el estado de su petición a "
+#: app/views/request/show.rhtml:89
+msgid "requesting an internal review"
+msgstr "pidiendo una revisión interna"
-#: app/controllers/request_controller.rb:702
-msgid "Then you can upload an FOI response. "
-msgstr "Entonces podrá subir una respuesta. "
+#: app/views/request/show.rhtml:91
+msgid "<strong>did not have</strong> the information requested."
+msgstr "<strong>no tenía</strong> la información solicitada."
-#: app/controllers/request_controller.rb:545
-msgid "Then you can write follow up message to "
-msgstr "Entonces podrá escribir un mensaje a "
+#: app/views/request/show.rhtml:93
+msgid "The request was <strong>refused</strong> by"
+msgstr "La petición fue <strong>rechazada</strong> por"
-#: app/controllers/request_controller.rb:546
-msgid "Then you can write your reply to "
-msgstr "Entonces podrá escribir su respuesta a "
+#: app/views/request/show.rhtml:95
+msgid "The request was <strong>successful</strong>."
+msgstr "La petición fue <strong>exitosa</strong>."
-#: app/models/track_thing.rb:197
-msgid ""
-"Then you will be emailed whenever '{{user_name}}' requests something or gets"
-" a response."
-msgstr ""
-"Entonces recibirá un correo cada vez que '{{user_name}}' solicite algo o reciba"
-" una respuesta."
+#: app/views/request/show.rhtml:97
+msgid "The request was <strong>partially successful</strong>."
+msgstr "La petición fue <strong>exitosa parcialmente</strong>."
-#: app/models/track_thing.rb:213
-msgid ""
-"Then you will be emailed whenever a new request or response matches "
-"'{{query}}'."
-msgstr ""
-"Entonces recibirá un correo cada vez que una nueva petición o respuesta coincida con "
-"'{{query}}'."
+#: app/views/request/show.rhtml:100
+msgid "is <strong>waiting for your clarification</strong>."
+msgstr "está <strong>esperando su aclaración</strong>."
-#: app/models/track_thing.rb:162
-msgid "Then you will be emailed whenever an FOI request succeeds."
-msgstr "Entonces recibirá un correo cada vez que una petición tenga éxito."
+#: app/views/request/show.rhtml:101
+msgid "Please"
+msgstr "Por favor"
-#: app/models/track_thing.rb:146
-msgid "Then you will be emailed whenever anyone makes a new FOI request."
-msgstr "Entonces recibirá un correo cada vez que alguien haga una nueva petición de información."
+#: app/views/request/show.rhtml:102
+msgid "send a follow up message"
+msgstr "envíe un mensaje de seguimiento"
-#: app/models/track_thing.rb:181
-msgid ""
-"Then you will be emailed whenever someone requests something or gets a "
-"response from '{{public_body_name}}'."
-msgstr ""
-"Entonces recibirá un correo cada vez que alguien haga una petición o reciba una "
-"respuesta de '{{public_body_name}}'."
+#: app/views/request/show.rhtml:104
+msgid "The request is <strong>waiting for clarification</strong>."
+msgstr "La petición está <strong>esperando aclaración</strong>."
-#: app/controllers/request_controller.rb:299
-msgid "Then your FOI request to {{public_body_name}} will be sent."
-msgstr "Entonces su petición a {{public_body_name}} será enviada."
+#: app/views/request/show.rhtml:105
+msgid "If you are {{user_link}}, please"
+msgstr "Si es {{user_link}}, por favor"
-#: app/controllers/comment_controller.rb:56
-msgid "Then your annotation to {{info_request_title}} will be posted."
-msgstr "Entonces se enviará su comentario a {{info_request_title}}."
+#: app/views/request/show.rhtml:106
+msgid "sign in"
+msgstr "abrir sesión"
-#: app/views/request_mailer/comment_on_alert_plural.rhtml:1
+#: app/views/request/show.rhtml:106
+msgid "to send a follow up message."
+msgstr "mandar un mensaje de seguimiento."
+
+#: app/views/request/show.rhtml:109
msgid ""
-"There are {{count}} new annotations on your {{info_request}} request. Follow"
-" this link to see what they wrote."
+"The authority would like to / has <strong>responded by post</strong> to this"
+" request."
msgstr ""
-"Hay {{count}} comentarios en su petición {{info_request}}. Siga este enlace "
-"para leer lo que dicen."
+"El organismo querría / ha respondido <strong>por correo ordinario</strong> a"
+" esta petición."
-#: app/views/user/show.rhtml:4
+#: app/views/request/show.rhtml:111
msgid ""
-"There is <strong>more than one person</strong> who uses this site and has this name. \n"
-" One of them is shown below, you may mean a different one:"
+"Waiting for an <strong>internal review</strong> by {{public_body_link}} of "
+"their handling of this request."
msgstr ""
-"Hay <strong>más de una persona</strong> que utiliza esta web y tiene este nombre. \n"
-" Una de ellas se muestra a continuación, puede que se refiera a una distinta:"
+"Esperando una <strong>revisión interna</strong> por parte de "
+"{{public_body_link}} de cómo han respondido a esta petición."
#: app/views/request/show.rhtml:113
msgid ""
"There was a <strong>delivery error</strong> or similar, which needs fixing "
"by the {{site_name}} team."
msgstr ""
-"Se ha producido un <strong>error en la entrega</strong> o similar, y necesita ser "
-"arreglado por el equipo de {{site_name}}."
+"Se ha producido un <strong>error en la entrega</strong> o similar, y "
+"necesita ser arreglado por el equipo de {{site_name}}."
-#: app/controllers/public_body_controller.rb:77
-msgid "There was an error with the words you entered, please try again."
+#: app/views/request/show.rhtml:115
+msgid ""
+"This request has had an unusual response, and <strong>requires "
+"attention</strong> from the {{site_name}} team."
msgstr ""
-"Ha habido un error con las palabras introducidas, por favor pruebe otra vez."
+"Esta petición ha recibido una respuesta inusual, y <strong>requiere la "
+"intervención</strong> del equipo de {{site_name}}."
-#: app/views/request/_describe_state.rhtml:38
-msgid "They are going to reply <strong>by post</strong>"
-msgstr "Van a responder <strong>por correo ordinario</strong>"
-
-#: app/views/request/_describe_state.rhtml:52
+#: app/views/request/show.rhtml:117
msgid ""
-"They do <strong>not have</strong> the information <small>(maybe they say who"
-" does)</small>"
+"This request has been <strong>withdrawn</strong> by the person who made it. \n"
+" \t There may be an explanation in the correspondence below."
msgstr ""
-"<strong>No tienen</strong> la información <small>(tal vez dicen quién la "
-"tiene)</small>"
+"Esta petición ha sido <strong>retirada</strong> por la persona que la realizó. \n"
+" \t Puede que haya una explicación en los mensajes a continuación."
-#: app/views/user/show.rhtml:83
-msgid "They have been given the following explanation:"
-msgstr "Han recibido la siguiente explicación:"
+#: app/views/request/show_response.rhtml:13
+msgid "Which of these is happening?"
+msgstr "¿Qué está pasando?"
-#: app/views/request_mailer/overdue_alert.rhtml:3
+#: app/views/request/show_response.rhtml:18
msgid ""
-"They have not replied to your {{law_used_short}} request {{title}} promptly,"
-" as normally required by law"
+"The authority say that they <strong>need a postal\n"
+" address</strong>, not just an email, for it to be a valid FOI request"
msgstr ""
-"No han respondido a su petición {{law_used_short}} {{title}} rápidamente, "
-"como require generalmente la ley"
+"El organismo dice que necesita <strong>una dirección\n"
+" postal</strong>, no sólo un correo electrónico, para que la petición sea válida"
-#: app/views/request_mailer/very_overdue_alert.rhtml:3
+#: app/views/request/show_response.rhtml:26
msgid ""
-"They have not replied to your {{law_used_short}} request {{title}}, \n"
-"as required by law"
+"The authority only has a <strong>paper copy</strong> of the information."
msgstr ""
-"No han respondido a su petición {{law_used_short}} {{title}}, \n"
-" como require la ley"
-
-#: app/views/request/_after_actions.rhtml:3
-msgid "Things to do with this request"
-msgstr "Cosas que hacer con esta petición"
+"El organismo sólo tiene una <strong>copia en papel</strong> de la "
+"información."
-#: app/views/public_body/show.rhtml:59
-msgid "This authority no longer exists, so you cannot make a request to it."
+#: app/views/request/show_response.rhtml:29
+msgid ""
+"At the bottom of this page, write a reply to them trying to persuade them to scan it in\n"
+" (<a href=\"%s\">more details</a>)."
msgstr ""
-"Este organismo ya no existe, no pueden realizarse peticiones de información."
+"Al final de esta página, escriba una respuesta intentando convencerles de que lo escaneen\n"
+" (<a href=\"%s\">más detalles</a>)."
-#: app/views/request/_hidden_correspondence.rhtml:23
+#: app/views/request/show_response.rhtml:34
msgid ""
-"This comment has been hidden. See annotations to\n"
-" find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+"You want to <strong>give your postal address</strong> to the authority in "
+"private."
msgstr ""
-"Este respuesta está oculta. Revise los comentarios\n"
-" para descubrir por qué. Si es su petición, <a href=\"%s\">abra una sesión</a> para ver la respuesta."
+"Quiere <strong>darle su dirección postal</strong> al organismo en privado."
+
+#: app/views/request/show_response.rhtml:37
+msgid "To do that please send a private email to "
+msgstr "Para hacerlo, por favor mande un correo privado a "
-#: app/views/request/new.rhtml:65
+#: app/views/request/show_response.rhtml:39
msgid ""
-"This covers a very wide spectrum of information about the state of\n"
-" the <strong>natural and built environment</strong>, such as:"
+"containing your postal address, and asking them to reply to this request.\n"
+" Or you could phone them."
msgstr ""
-"Esto incluye un amplio espectro de información sobre el estado de\n"
-" el <strong>entorno natural y urbanizado</strong>, como:"
+"incluyendo su dirección postal, y pidiéndoles que contesten a su petición.\n"
+" O pruebe a llamarles por teléfono."
-#: app/views/request/_view_html_prefix.rhtml:9
+#: app/views/request/show_response.rhtml:42
msgid ""
-"This is an HTML version of an attachment to the Freedom of Information "
-"request"
+"When you receive the paper response, please help\n"
+" others find out what it says:"
msgstr ""
-"Esta es la versión HTML de un fichero adjunto a una petición de acceso a la "
-"información"
+"Cuando reciba la respuesta en papel, por favor ayude\n"
+" a que otros sepan lo que dice:"
-#: app/views/request_mailer/stopped_responses.rhtml:5
+#: app/views/request/show_response.rhtml:45
msgid ""
-"This is because {{title}} is an old request that has been\n"
-"marked to no longer receive responses."
+"Add an annotation to your request with choice quotes, or\n"
+" a <strong>summary of the response</strong>."
msgstr ""
-"Esto es porque {{title}} es una petición antigua\n"
-"marcada para ya no recibir más respuestas."
+"Añada un comentario a su petición con citas seleccionadas, o\n"
+" un <strong>resumen de la respuesta</strong>."
-#: app/views/track/_tracking_links.rhtml:9
+#: app/views/request/show_response.rhtml:47
msgid ""
-"This is your own request, so you will be automatically emailed when new "
-"responses arrive."
+"If you can, scan in or photograph the response, and <strong>send us\n"
+" a copy to upload</strong>."
msgstr ""
-"Esta es su petición, por lo que recibirá correos automáticamente cuando "
-"lleguen nuevas respuestas."
+"Si puede, escanee o haga una foto de la respuesta, y <strong>mándenos\n"
+" una copia para que la subamos</strong>."
-#: app/views/request/_hidden_correspondence.rhtml:17
+#: app/views/request/show_response.rhtml:60
+msgid "New response to your request"
+msgstr "Nueva respuesta a su petición"
+
+#: app/views/request/show_response.rhtml:62
+msgid "Response to your request"
+msgstr "Respuesta a su petición"
+
+#: app/views/request/show_response.rhtml:66
+msgid "New response to {{law_used_short}} request"
+msgstr "Nueva respuesta a su petición {{law_used_short}}"
+
+#: app/views/request/similar.rhtml:7
+msgid "No similar requests found."
+msgstr "No se han encontrado peticiones similares."
+
+#: app/views/request/similar.rhtml:18
+msgid "Unexpected search result type "
+msgstr "Se encontró un tipo de resultado inesperado "
+
+#: app/views/request/simple_correspondence.rhtml:1
msgid ""
-"This outgoing message has been hidden. See annotations to\n"
-"\t\t\t\t\t\tfind out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+"This is a plain-text version of the Freedom of Information request "
+"\"{{request_title}}\". The latest, full version is available online at "
+"{{full_url}}"
msgstr ""
-"Este mensaje está oculto. Lea los comentarios\n"
-"\t\t\t\t\t\tpara descubrir por qué. Si es su petición, <a href=\"%s\">abra una sesión</a> para ver la respuesta."
+"Esta es la versión sólo-texto de la solicitud de información "
+"\"{{request_title}}\". La versión más actualizada y completa está "
+"disponible en {{full_url}}"
-#: app/views/user/show.rhtml:122
-msgid "This person has"
-msgstr "Esta persona ha"
+#: app/views/request/simple_correspondence.rhtml:17
+#: app/views/request/simple_correspondence.rhtml:29
+#: app/views/request/simple_correspondence.rhtml:36
+msgid "Date:"
+msgstr "Fecha:"
-#: app/views/user/show.rhtml:152
-msgid "This person's"
-msgstr "Esta persona"
+#: app/views/request/simple_correspondence.rhtml:21
+msgid "Attachment:"
+msgstr "Adjunto:"
-#: app/views/request/_describe_state.rhtml:84
-msgid "This request <strong>requires administrator attention</strong>"
-msgstr ""
-"Esta petición <strong>requiere la intervención de un administrador</strong>"
+#: app/views/request/simple_correspondence.rhtml:42
+msgid "{{username}} left an annotation:"
+msgstr "{{username}} dejó un comentario:"
-#: app/views/request/show.rhtml:55
-msgid "This request has an <strong>unknown status</strong>."
-msgstr "Esta petición tiene un <strong>estado desconocido</strong>."
+#: app/views/request/upload_response.rhtml:5
+msgid "Respond to the FOI request"
+msgstr "Contestar la petición"
-#: app/views/request/show.rhtml:117
+#: app/views/request/upload_response.rhtml:5
+msgid " made by "
+msgstr " hecha por "
+
+#: app/views/request/upload_response.rhtml:8
msgid ""
-"This request has been <strong>withdrawn</strong> by the person who made it. \n"
-" \t There may be an explanation in the correspondence below."
+"Your response will <strong>appear on the Internet</strong>, <a "
+"href=\"%s\">read why</a> and answers to other questions."
msgstr ""
-"Esta petición ha sido <strong>retirada</strong> por la persona que la realizó. \n"
-" \t Puede que haya una explicación en los mensajes a continuación."
+"Su respuesta <strong>aparecerá en Internet</strong>, <a href=\"%s\">lea por "
+"qué</a> y respuestas a otras preguntas."
-#: app/models/info_request.rb:395
+#: app/views/request/upload_response.rhtml:11
+msgid "Respond by email"
+msgstr "Contestar por correo"
+
+#: app/views/request/upload_response.rhtml:13
msgid ""
-"This request has been set by an administrator to \"allow new responses from "
-"nobody\""
+"You should have received a copy of the request by email, and you can respond\n"
+"by <strong>simply replying</strong> to that email. For your convenience, here is the address:"
msgstr ""
-"Esta petición ha sido configurada por el administrador a \"no permitir respuestas de "
-"nadie\""
+"Debería de haber recibido una copia de la petición por correo, y puede contestar\n"
+"<strong>simplemente respondiendo</strong> a ese correo. Para su comodidad, esta es la dirección:"
-#: app/views/request/show.rhtml:115
+#: app/views/request/upload_response.rhtml:16
msgid ""
-"This request has had an unusual response, and <strong>requires "
-"attention</strong> from the {{site_name}} team."
+"You may <strong>include attachments</strong>. If you would like to attach a\n"
+"file too large for email, use the form below."
msgstr ""
-"Esta petición ha recibido una respuesta inusual, y <strong>requiere "
-"la intervención</strong> del equipo de {{site_name}}."
+"Puede <strong>adjuntar ficheros</strong>. Si quiere adjuntar un fichero\n"
+"demasiado grande para el correo, puede utilizar el siguiente formulario."
-#: app/views/request/show.rhtml:5
+#: app/views/request/upload_response.rhtml:21
+msgid "Respond using the web"
+msgstr "Contestar vía web"
+
+#: app/views/request/upload_response.rhtml:23
msgid ""
-"This request has prominence 'hidden'. You can only see it because you are logged\n"
-" in as a super user."
+"Enter your response below. You may attach one file (use email, or \n"
+"<a href=\"%s\">contact us</a> if you need more)."
msgstr ""
-"Esta petición tiene visibilidad 'oculta'. Puede verla sólo porque esta identificado\n"
-" como super-usuario."
+"Escriba su petición a continuación. Puede adjuntar un fichero (mande un correo,\n"
+" o <a href=\"%s\">contáctenos</a>, si necesita más)."
-#: app/views/request/show.rhtml:11
+#: app/views/request/upload_response.rhtml:28
+msgid "Response:"
+msgstr "Respuesta:"
+
+#: app/views/request/upload_response.rhtml:33
+msgid "Attachment (optional):"
+msgstr "Adjuntos (opcional):"
+
+#: app/views/request/upload_response.rhtml:40
msgid ""
-"This request is hidden, so that only you the requester can see it. Please\n"
-" <a href=\"%s\">contact us</a> if you are not sure why."
+" (<strong>patience</strong>, especially for large files, it may take a "
+"while!)"
msgstr ""
-"Esta petición está oculta, por lo que sólo usted como creador puede verla. Por favor\n"
-" <a href=\"%s\">contáctenos</a> si no está seguro de por qué."
+" (<strong>paciencia</strong>, especialmente con ficheros grandes, puede "
+"tardar unos minutos!)"
-#: app/views/request/_hidden_correspondence.rhtml:10
+#: app/views/request_game/play.rhtml:1 app/views/request_game/play.rhtml:30
+msgid "Play the request categorisation game!"
+msgstr "Juega al juego de clasificación de peticiones!"
+
+#: app/views/request_game/play.rhtml:31
msgid ""
-"This response has been hidden. See annotations to find out why.\n"
-" If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+"Some people who've made requests haven't let us know whether they were\n"
+"successful or not. We need <strong>your</strong> help &ndash;\n"
+"choose one of these requests, read it, and let everyone know whether or not the\n"
+"information has been provided. Everyone'll be exceedingly grateful."
msgstr ""
-"Este respuesta está oculta. Revise los comentarios\n"
-" para descubrir por qué. Si es su petición, <a href=\"%s\">abra una sesión</a> para ver la respuesta."
+"Algunas personas que hicieron peticiones no nos han hecho saber si tuvieron\n"
+"éxito o no. Necesitamos <strong>su</strong> ayuda &ndash;\n"
+"elija una de las peticiones, léala, y háganos saber si se ha obtenido o no\n"
+"la información. Todos le estaremos agradecidos.."
+
+#: app/views/request_game/play.rhtml:39
+msgid "I don't like these ones &mdash; give me some more!"
+msgstr "Estas no me gustan &mdash; ¡dame más!"
-#: app/views/request/new.rhtml:49
+#: app/views/request_game/play.rhtml:40
+msgid "I don't want to do any more tidying now!"
+msgstr "Ya no quiero seguir clasificando"
+
+#: app/views/request_game/play.rhtml:42
msgid ""
-"This site is <strong>public</strong>. Everything you type and any response "
-"will be published."
+"Thanks for helping - your work will make it easier for everyone to find successful\n"
+"responses, and maybe even let us make league tables..."
msgstr ""
-"Esta web es <strong>pública</strong>. Todo lo que escriba y cualquier "
-"respuesta será publicada."
+"Gracias por ayudar - su trabajo hace más sencillo que otros encuentren peticiones\n"
+"que han tenido éxito, e incluso nos permitirá hacer clasificaciones..."
-#: app/views/request/details.rhtml:6
+#: app/views/request_mailer/comment_on_alert.rhtml:1
msgid ""
-"This table shows the technical details of the internal events that happened\n"
-"to this request on {{site_name}}. This could be used to generate information about\n"
-"the speed with which authorities respond to requests, the number of requests\n"
-"which require a postal response and much more."
+"{{user_name}} has annotated your {{law_used_short}} \n"
+"request. Follow this link to see what they wrote."
msgstr ""
-"La siguiente tabla muestra datos técnicos sobre los eventos internos relacionados \n"
-"con la petición {{site_name}}. Estos datos pueden ser utilizados para generar\n"
-"estadísticas sobre por ejemplo la velocidad de respuesta de los organismos o\n"
-"el número de peticiones que piden usar correo ordinario."
+"{{user_name}} ha comentado su petición {{law_used_short}}. \n"
+"Siga este enlace para ver lo que ha escrito."
-#: app/views/user/show.rhtml:79
-msgid "This user has been banned from {{site_name}} "
-msgstr "Este usuario ha sido expulsado from {{site_name}} "
+#: app/views/request_mailer/comment_on_alert.rhtml:6
+#: app/views/request_mailer/comment_on_alert_plural.rhtml:5
+#: app/views/request_mailer/new_response.rhtml:15
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:8
+#: app/views/request_mailer/not_clarified_alert.rhtml:9
+#: app/views/request_mailer/old_unclassified_updated.rhtml:8
+#: app/views/request_mailer/overdue_alert.rhtml:9
+#: app/views/request_mailer/stopped_responses.rhtml:16
+#: app/views/request_mailer/very_overdue_alert.rhtml:11
+#: app/views/track_mailer/event_digest.rhtml:66
+#: app/views/user_mailer/already_registered.rhtml:11
+#: app/views/user_mailer/changeemail_already_used.rhtml:10
+#: app/views/user_mailer/changeemail_confirm.rhtml:13
+#: app/views/user_mailer/confirm_login.rhtml:11
+msgid "the {{site_name}} team"
+msgstr "el equipo de {{site_name}}"
-#: app/views/user_mailer/changeemail_already_used.rhtml:5
+#: app/views/request_mailer/comment_on_alert_plural.rhtml:1
msgid ""
-"This was not possible because there is already an account using \n"
-"the email address {{email}}."
+"There are {{count}} new annotations on your {{info_request}} request. Follow"
+" this link to see what they wrote."
msgstr ""
-"No es posible porque ya existe una cuenta usando la dirección \n"
-"de correo {{email}}."
+"Hay {{count}} comentarios en su petición {{info_request}}. Siga este enlace "
+"para leer lo que dicen."
-#: app/models/track_thing.rb:145
-msgid "To be emailed about any new requests"
-msgstr "Para recibir correos sobre nuevas peticiones"
+#: app/views/request_mailer/new_response.rhtml:1
+msgid "You have a new response to the {{law_used_full}} request "
+msgstr "Tiene una nueva respuesta a la petición {{law_used_full}} "
-#: app/models/track_thing.rb:161
-msgid "To be emailed about any successful requests"
-msgstr "Para recibir correos sobre cualquier petición exitosa"
+#: app/views/request_mailer/new_response.rhtml:2
+msgid "that you made to"
+msgstr "que hizo a"
-#: app/models/track_thing.rb:196
-msgid "To be emailed about requests by '{{user_name}}'"
-msgstr "Para recibir correos sobre peticiones de '{{user_name}}'"
+#: app/views/request_mailer/new_response.rhtml:5
+msgid "To view the response, click on the link below."
+msgstr "Para ver la respuesta, use el siguiente enlace."
-#: app/models/track_thing.rb:180
+#: app/views/request_mailer/new_response.rhtml:9
msgid ""
-"To be emailed about requests made using {{site_name}} to the public "
-"authority '{{public_body_name}}'"
+"When you get there, please update the status to say if the response \n"
+"contains any useful information."
msgstr ""
-"Para recibir correos sobre peticiones hechas en {{site_name}} al "
-"organismo '{{public_body_name}}'"
-
-#: app/controllers/track_controller.rb:173
-msgid "To cancel these alerts"
-msgstr "Cancelar estas alertas"
-
-#: app/controllers/track_controller.rb:143
-msgid "To cancel this alert"
-msgstr "Cancelar esta alerta"
+"Por favor actualice el estado para indicar si la respuesta \n"
+"contiene información útil."
-#: app/views/user/no_cookies.rhtml:5
+#: app/views/request_mailer/new_response.rhtml:12
msgid ""
-"To carry on, you need to sign in or make an account. Unfortunately, there\n"
-"was a technical problem trying to do this."
+"Although all responses are automatically published, we depend on\n"
+"you, the original requester, to evaluate them."
msgstr ""
-"Para continuar, necesita abrir una sesión o crear una cuenta. Desgraciadamente,\n"
-"ha habido un problema técnico al intentar hacerlo."
+"Aunque todas las respuestas se publican automáticamente, dependemos\n"
+"de usted, el creador de la petición, para evaluarlas."
-#: app/controllers/user_controller.rb:248
-msgid "To change your email address used on {{site_name}}"
-msgstr "Cambiar la dirección de correo usada en {{site_name}}"
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:1
+msgid "To let us know, follow this link and then select the appropriate box."
+msgstr "Para hacérnoslo saber, siga este enlace y elija la caja apropiada."
-#: app/controllers/request_controller.rb:337
-msgid "To classify the response to this FOI request"
-msgstr "Reclasificar la respuesta a esta petición"
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:5
+msgid ""
+"Your request was called {{info_request}}. Letting everyone know whether you "
+"got the information will help us keep tabs on"
+msgstr ""
+"Su petición se llamaba {{info_request}}. Háganos saber si ha recibido la "
+"información para ayudarnos a controlar a"
-#: app/views/request/show_response.rhtml:39
-msgid "To do that please send a private email to "
-msgstr "Para hacerlo, por favor mande un correo privado a "
+#: app/views/request_mailer/not_clarified_alert.rhtml:1
+msgid "request."
+msgstr "petición."
#: app/views/request_mailer/not_clarified_alert.rhtml:2
msgid "To do this, first click on the link below."
msgstr "Para hacerlo, elija primero el siguiente enlace."
-#: app/models/track_thing.rb:212
-msgid "To follow requests and responses matching '{{query}}'"
-msgstr "Para seguir peticiones y respuestas que coincidan con '{{query}}'"
+#: app/views/request_mailer/not_clarified_alert.rhtml:6
+msgid ""
+"You will only get an answer to your request if you follow up\n"
+"with the clarification."
+msgstr ""
+"Sólo recibirá una respuesta a su petición si continúa\n"
+"con la aclaración."
#: app/views/request_mailer/old_unclassified_updated.rhtml:1
msgid ""
@@ -3332,340 +3843,272 @@ msgstr ""
"Para ayudarnos a mantener la web ordenada, alguien ha actualizado el estado de \n"
"la petición {{law_used_full}} {{title}} que hizo a {{public_body}}, a \"{{display_status}}\". Si no está de acuerdo con esta clasificación, por favor actualice el estado usted mismo a lo que considere correcto."
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:1
-msgid "To let us know, follow this link and then select the appropriate box."
-msgstr "Para hacérnoslo saber, siga este enlace y elija la caja apropiada."
-
-#: app/controllers/request_game_controller.rb:40
-msgid "To play the request categorisation game"
-msgstr "Jugar al juego de recategorización de peticiones"
-
-#: app/controllers/comment_controller.rb:55
-msgid "To post your annotation"
-msgstr "Añadir su comentario"
-
-#: app/controllers/request_controller.rb:543
-msgid "To reply to "
-msgstr "Contestar a "
-
-#: app/controllers/request_controller.rb:542
-msgid "To send a follow up message to "
-msgstr "Enviar una respuesta a "
-
-#: app/controllers/user_controller.rb:329
-msgid "To send a message to "
-msgstr "Para enviar un mensaje a"
-
-#: app/controllers/request_controller.rb:298
-msgid "To send your FOI request"
-msgstr "Para enviar su petición de información"
+#: app/views/request_mailer/old_unclassified_updated.rhtml:4
+msgid "Follow this link to see the request:"
+msgstr "Siga este enlace para ver la petición:"
-#: app/controllers/request_controller.rb:60
-msgid "To update the status of this FOI request"
-msgstr "Para actualizar el estado de su petición de información"
+#: app/views/request_mailer/overdue_alert.rhtml:1
+msgid "have delayed."
+msgstr "han retrasado."
-#: app/controllers/request_controller.rb:701
+#: app/views/request_mailer/overdue_alert.rhtml:3
msgid ""
-"To upload a response, you must be logged in using an email address from "
+"They have not replied to your {{law_used_short}} request {{title}} promptly,"
+" as normally required by law"
msgstr ""
-"Para cargar una respuesta, debe estar registrado con una dirección de correo"
-" electrónico de"
+"No han respondido a su petición {{law_used_short}} {{title}} rápidamente, "
+"como require generalmente la ley"
-#: app/views/public_body/view_email_captcha.rhtml:5
+#: app/views/request_mailer/overdue_alert.rhtml:3
+msgid "during term time"
+msgstr "durante el periodo escolar"
+
+#: app/views/request_mailer/overdue_alert.rhtml:5
msgid ""
-"To view the email address that we use to send FOI requests to "
-"{{public_body_name}}, please enter these words."
+"Click on the link below to send a message to {{public_body}} reminding them "
+"to reply to your request."
msgstr ""
-"Para ver la dirección de correo que usamos para mandar peticiones a "
-"{{public_body_name}}, por favor introduzca estas palabras."
-
-#: app/views/request_mailer/new_response.rhtml:5
-msgid "To view the response, click on the link below."
-msgstr "Para ver la respuesta, use el siguiente enlace."
-
-#: app/views/request/_request_listing_short_via_event.rhtml:9
-msgid "To {{public_body_link_absolute}}"
-msgstr "Para {{public_body_link_absolute}}"
-
-#: app/views/request/followup_preview.rhtml:22 app/views/request/new.rhtml:88
-#: app/views/request/preview.rhtml:17
-msgid "To:"
-msgstr "Para:"
-
-#: app/models/track_thing.rb:174
-msgid "Track requests to {{public_body_name}} by email"
-msgstr "Seguir peticiones a {{public_body_name}} por correo"
-
-#: app/models/track_thing.rb:206
-msgid "Track things matching '{{query}}' by email"
-msgstr "Seguir resultados de '{{query}}' por correo"
-
-#: app/views/public_body/show.rhtml:3
-msgid "Track this authority"
-msgstr "Seguir a este organismo"
-
-#: app/views/user/show.rhtml:29
-msgid "Track this person"
-msgstr "Seguir a esta persona"
-
-#: app/models/track_thing.rb:190
-msgid "Track this person by email"
-msgstr "Seguir a esta persona por correo"
-
-#: app/views/request/_sidebar.rhtml:2
-msgid "Track this request"
-msgstr "Seguir esta petición"
-
-#: app/models/track_thing.rb:123
-msgid "Track this request by email"
-msgstr "Seguir esta petición por correo"
-
-#: locale/model_attributes.rb:33
-msgid "TrackThing|Track medium"
-msgstr "TrackThing|Track medium"
-
-#: locale/model_attributes.rb:32
-msgid "TrackThing|Track query"
-msgstr "TrackThing|Track query"
+"Haga click en el siguiente enlace para enviar un mensaje a {{public_body}} "
+"recordándoles que deben responder a su petición."
-#: locale/model_attributes.rb:34
-msgid "TrackThing|Track type"
-msgstr "TrackThing|Track type"
+#: app/views/request_mailer/requires_admin.rhtml:2
+msgid "has reported an"
+msgstr "ha denunciado un"
-#: app/views/general/search.rhtml:133
+#: app/views/request_mailer/requires_admin.rhtml:3
msgid ""
-"Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show "
-"things that happened in the first two weeks of January."
+"response as needing administrator attention. Take a look, and reply to this\n"
+"email to let them know what you are going to do about it."
msgstr ""
-"Introduzca <code><strong>01/01/2008..14/01/2008</strong></code> para mostrar"
-" sólo las cosas que sucedieron en las dos primeras semanas de enero."
-
-#: app/models/public_body.rb:37
-msgid "URL name can't be blank"
-msgstr "La URL no puede estar vacía."
-
-#: app/models/user_mailer.rb:45
-msgid "Unable to change email address on {{site_name}}"
-msgstr "No se ha podido cambiar la dirección de correo en {{site_name}}"
-
-#: app/views/request/followup_bad.rhtml:4
-msgid "Unable to send a reply to {{username}}"
-msgstr "No se pudo enviar la respuesta a {{username}}"
-
-#: app/views/request/followup_bad.rhtml:2
-msgid "Unable to send follow up message to {{username}}"
-msgstr "No se pudo enviar la respuesta a {{username}}"
-
-#: app/views/request/list.rhtml:29
-msgid "Unexpected search result type"
-msgstr "Se encontró un tipo de resultado inesperado"
+"respuesta necesita intervención del administrador. Revísela, y conteste a este\n"
+"correo para indicarles qué va a hacer al respecto."
-#: app/views/request/similar.rhtml:18
-msgid "Unexpected search result type "
-msgstr "Se encontró un tipo de resultado inesperado "
+#: app/views/request_mailer/requires_admin.rhtml:9
+msgid "Administration URL:"
+msgstr "URL de Administración:"
-#: app/views/user/wrong_user_unknown_email.rhtml:3
+#: app/views/request_mailer/stopped_responses.rhtml:1
msgid ""
-"Unfortunately we don't know the FOI\n"
-"email address for that authority, so we can't validate this.\n"
-"Please <a href=\"%s\">contact us</a> to sort it out."
+"The email that you, on behalf of {{public_body}}, sent to\n"
+"{{user}} to reply to an {{law_used_short}}\n"
+"request has not been delivered."
msgstr ""
-"Desgraciadamente no tenemos la dirección\n"
-"de correo para este organismo, así que no podemos validarlo.\n"
-"Por favor <a href=\"%s\">contáctenos</a> para arreglarlo."
+"El correo envíado por usted, en nombre de {{public_body}}, enviado a\n"
+"{{user}} como respuesta a la petición {{law_used_short}}\n"
+"no ha sido entregado."
-#: app/views/request/new_bad_contact.rhtml:5
+#: app/views/request_mailer/stopped_responses.rhtml:5
msgid ""
-"Unfortunately, we do not have a working {{info_request_law_used_full}}\n"
-"address for"
-msgstr "Desgraciadamente, no tenemos una dirección de correo válida para"
+"This is because {{title}} is an old request that has been\n"
+"marked to no longer receive responses."
+msgstr ""
+"Esto es porque {{title}} es una petición antigua\n"
+"marcada para ya no recibir más respuestas."
-#: app/views/general/exception_caught.rhtml:17
-msgid "Unknown"
-msgstr "Desconocido"
+#: app/views/request_mailer/stopped_responses.rhtml:10
+msgid ""
+"If this is incorrect, or you would like to send a late response to the request\n"
+"or an email on another subject to {{user}}, then please\n"
+"email {{contact_email}} for help."
+msgstr ""
+"Si no es correcto, o le gustaría enviar una respuesta a la petición\n"
+"o un correo sobre otro tema a {{user}}, entonces por favor\n"
+"escriba a {{contact_email}} solicitando ayuda."
-#: app/models/info_request_event.rb:317
-msgid "Unusual response"
-msgstr "Respuesta no habitual"
+#: app/views/request_mailer/stopped_responses.rhtml:14
+msgid "Your original message is attached."
+msgstr "Su mensaje original está adjunto."
-#: app/models/info_request.rb:807
-msgid "Unusual response."
-msgstr "Respuesta no habitual."
+#: app/views/request_mailer/very_overdue_alert.rhtml:1
+msgid "are long overdue."
+msgstr "están muy retrasados."
-#: app/views/request/_after_actions.rhtml:13
-#: app/views/request/_after_actions.rhtml:33
-msgid "Update the status of this request"
-msgstr "Actualizar el estado de esta petición"
+#: app/views/request_mailer/very_overdue_alert.rhtml:3
+msgid ""
+"They have not replied to your {{law_used_short}} request {{title}}, \n"
+"as required by law"
+msgstr ""
+"No han respondido a su petición {{law_used_short}} {{title}}, \n"
+" como require la ley"
-#: app/controllers/request_controller.rb:62
-msgid "Update the status of your request to "
-msgstr "Actualizar el estado de la petición a "
+#: app/views/request_mailer/very_overdue_alert.rhtml:4
+msgid "even during holidays"
+msgstr "incluso durante las vacaciones"
-#: app/views/general/search.rhtml:124
+#: app/views/request_mailer/very_overdue_alert.rhtml:6
msgid ""
-"Use OR (in capital letters) where you don't mind which word, e.g. "
-"<strong><code>commons OR lords</code></strong>"
+"Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\n"
+"review, asking them to find out why response to the request has been so slow."
msgstr ""
-"Escriba OR (en mayúsculas) cuando no le importe qué palabra, e.g. "
-"<strong><code>diputado OR parlamento</code></strong>"
+"Haga click en el siguiente enlace para mandar un mensaje a {{public_body_name}} solicitando que respondan a su petición. Puede pedir una revisión\n"
+"interna, preguntándoles por qué se ha demorado tanto la respuesta a su petición."
-#: app/views/general/search.rhtml:125
+#: app/views/track/_tracking_links.rhtml:8
msgid ""
-"Use quotes when you want to find an exact phrase, e.g. "
-"<strong><code>\"Liverpool City Council\"</code></strong>"
+"This is your own request, so you will be automatically emailed when new "
+"responses arrive."
msgstr ""
-"Utilice comillas cuando quiera buscar una frase exacta, por ejemplo "
-"<strong><code>\"Consejo de Europa\"</code></strong>"
+"Esta es su petición, por lo que recibirá correos automáticamente cuando "
+"lleguen nuevas respuestas."
-#: locale/model_attributes.rb:67
-msgid "UserInfoRequestSentAlert|Alert type"
-msgstr "UserInfoRequestSentAlert|Alert type"
+#: app/views/track/_tracking_links.rhtml:21
+msgid "Follow by email"
+msgstr "Seguir por correo"
-#: locale/model_attributes.rb:78
-msgid "User|About me"
-msgstr "User|About me"
+#: app/views/track/_tracking_links.rhtml:26
+msgid "RSS feed of updates"
+msgstr "Actualizaciones RSS"
-#: locale/model_attributes.rb:76
-msgid "User|Admin level"
-msgstr "User|Admin level"
+#: app/views/track/_tracking_links.rhtml:26
+msgid "RSS feed"
+msgstr "RSS"
-#: locale/model_attributes.rb:77
-msgid "User|Ban text"
-msgstr "User|Ban text"
+#: app/views/track_mailer/event_digest.rhtml:21
+msgid "{{public_body}} sent a response to {{user_name}}"
+msgstr "{{public_body}} respondió a {{user_name}}"
-#: locale/model_attributes.rb:69
-msgid "User|Email"
-msgstr "User|Email"
+#: app/views/track_mailer/event_digest.rhtml:24
+msgid "{{user_name}} sent a follow up message to {{public_body}}"
+msgstr "{{user_name}} envió un mensaje a {{public_body}}"
-#: locale/model_attributes.rb:73
-msgid "User|Email confirmed"
-msgstr "User|Email confirmed"
+#: app/views/track_mailer/event_digest.rhtml:28
+msgid "{{user_name}} sent a request to {{public_body}}"
+msgstr "{{user_name}} envió una solicitud a {{public_body}}"
-#: locale/model_attributes.rb:71
-msgid "User|Hashed password"
-msgstr "User|Hashed password"
+#: app/views/track_mailer/event_digest.rhtml:31
+msgid "{{user_name}} added an annotation"
+msgstr "{{user_name}} añadió un comentario"
-#: locale/model_attributes.rb:75
-msgid "User|Last daily track email"
-msgstr "User|Last daily track email"
+#: app/views/track_mailer/event_digest.rhtml:60
+msgid "Alter your subscription"
+msgstr "Modifique su suscripción"
-#: locale/model_attributes.rb:70
-msgid "User|Name"
-msgstr "User|Name"
-
-#: locale/model_attributes.rb:72
-msgid "User|Salt"
-msgstr "User|Salt"
-
-#: locale/model_attributes.rb:74
-msgid "User|Url name"
-msgstr "User|Url name"
-
-#: app/views/public_body/show.rhtml:21
-msgid "View FOI email address"
-msgstr "Ver dirección de correo"
+#: app/views/track_mailer/event_digest.rhtml:63
+msgid "Please click on the link below to cancel or alter these emails."
+msgstr ""
+"Por favor use el siguiente enlace para cancelar o editar estos correos."
-#: app/views/public_body/view_email_captcha.rhtml:1
-msgid "View FOI email address for '{{public_body_name}}'"
-msgstr "Ver dirección de correo para '{{public_body_name}}'"
+#: app/views/user/_signin.rhtml:7
+msgid "If you've used {{site_name}} before"
+msgstr "Si ha usado {{site_name}} antes"
-#: app/views/public_body/view_email_captcha.rhtml:3
-msgid "View FOI email address for {{public_body_name}}"
-msgstr "Ver dirección de correo para '{{public_body_name}}'"
+#: app/views/user/_signin.rhtml:11 app/views/user/_signup.rhtml:9
+#: app/views/user/signchangepassword_send_confirm.rhtml:13
+msgid "Your e-mail:"
+msgstr "Su correo:"
-#: app/views/contact_mailer/user_message.rhtml:10
-msgid "View Freedom of Information requests made by {{user_name}}:"
-msgstr "Ver peticiones de acceso a información hechas por {{user_name}}:"
+#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30
+msgid "Password:"
+msgstr "Contraseña:"
-#: app/views/layouts/default.rhtml:89
-msgid "View authorities"
-msgstr "Ver organismos públicos"
+#: app/views/user/_signin.rhtml:21
+msgid "Forgotten your password?"
+msgstr "¿Ha olvidado su contraseña?"
-#: app/views/public_body/view_email_captcha.rhtml:12
-msgid "View email"
-msgstr "Ver correo"
+#: app/views/user/_signin.rhtml:26
+msgid ""
+"Remember me</label> (keeps you signed in longer;\n"
+" do not use on a public computer) "
+msgstr ""
+"Recuérdame</label> (mantiene la sesión abierta;\n"
+" no lo use en un ordenador público) "
-#: app/views/layouts/default.rhtml:88
-msgid "View requests"
-msgstr "Ver solicitudes"
+#: app/views/user/_signin.rhtml:32 app/views/user/sign.rhtml:2
+#: app/views/user/sign.rhtml:33
+msgid "Sign in"
+msgstr "Abrir sesión"
-#: app/models/info_request.rb:799
-msgid "Waiting clarification."
-msgstr "Esperando aclaración."
+#: app/views/user/_signup.rhtml:6
+msgid "If you're new to {{site_name}}"
+msgstr "Si es nuevo en {{site_name}}"
-#: app/views/request/show.rhtml:111
+#: app/views/user/_signup.rhtml:13
msgid ""
-"Waiting for an <strong>internal review</strong> by {{public_body_link}} of "
-"their handling of this request."
+"We will not reveal your email address to anybody unless you or\n"
+" the law tell us to (<a href=\"%s\">details</a>). "
msgstr ""
-"Esperando una <strong>revisión interna</strong> por parte de "
-"{{public_body_link}} de cómo han respondido a esta petición."
+"No revelaremos su dirección de correo a nadie salvo que usted nos lo diga\n"
+" o la ley nos obligue (<a href=\"%s\">más información</a>). "
-#: app/views/general/search.rhtml:149
+#: app/views/user/_signup.rhtml:18
+msgid "Your name:"
+msgstr "Su nombre:"
+
+#: app/views/user/_signup.rhtml:22
msgid ""
-"Waiting for the public authority to complete an internal review of their "
-"handling of the request"
+"Your <strong>name will appear publicly</strong> \n"
+" (<a href=\"%s\">why?</a>)\n"
+" on this website and in search engines. If you\n"
+" are thinking of using a pseudonym, please \n"
+" <a href=\"%s\">read this first</a>."
msgstr ""
-"Esperando que el organismo termine una revisión interna de su respuesta "
-"a la petición"
+"<strong>Su nombre aparecerá públicamente</strong> \n"
+" (<a href=\"%s\">¿por qué?</a>)\n"
+" en esta web y en motores de búsqueda. Si está\n"
+" pensando en utilizar un seudónimo, por favor \n"
+" <a href=\"%s\">lea esto primero</a>."
-#: app/views/general/search.rhtml:142
-msgid "Waiting for the public authority to reply"
-msgstr "Esperando que el organismo responda"
+#: app/views/user/_signup.rhtml:35
+msgid "Password: (again)"
+msgstr "Contraseña: (de nuevo)"
-#: app/views/public_body/view_email.rhtml:17
-msgid "We do not have a working request email address for this authority."
-msgstr "No tenemos una dirección de correo válida para este organismo."
+#: app/views/user/_signup.rhtml:46 app/views/user/sign.rhtml:40
+msgid "Sign up"
+msgstr "Registrarse"
-#: app/views/request/followup_bad.rhtml:24
+#: app/views/user/_user_listing_single.rhtml:19
+#: app/views/user/_user_listing_single.rhtml:20
+msgid "made."
+msgstr "hecho."
+
+#: app/views/user/_user_listing_single.rhtml:21
+msgid "Joined in"
+msgstr "Registrado el"
+
+#: app/views/user/bad_token.rhtml:2
msgid ""
-"We do not have a working {{law_used_full}} address for {{public_body_name}}."
+"Please check the URL (i.e. the long code of letters and numbers) is copied\n"
+"correctly from your email."
msgstr ""
-"No tenemos una dirección de correo válida para este {{public_body_name}}."
+"Por favor compruebe que ha copiado correctamente la URL (esto es, la secuencia\n"
+"de letras y números) del correo."
-#: app/views/request/_describe_state.rhtml:107
+#: app/views/user/bad_token.rhtml:7
msgid ""
-"We don't know whether the most recent response to this request contains\n"
-" information or not\n"
-" &ndash;\n"
-"\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
+"If you can't click on it in the email, you'll have to <strong>select and copy\n"
+"it</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\n"
+"you would type the address of any other webpage."
msgstr ""
-"No sabemos si la última respuesta a esta petición contiene\n"
-" información o no\n"
-" &ndash;\n"
-"\tsi es {{user_link}} por favor <a href=\"{{url}}\">abra una sesión</a> y háganoslo saber."
+"Si no puede hacer click en el enlace del correo, tendrá que <strong>seleccionarlo y copiarlo\n"
+"</strong> en el correo. A continuación, <strong>péguelo en su navegador</strong>, en el lugar\n"
+"dónde escribe la dirección de cualquier otra página web."
-#: app/views/user_mailer/confirm_login.rhtml:8
+#: app/views/user/bad_token.rhtml:13
msgid ""
-"We will not reveal your email address to anybody unless you\n"
-"or the law tell us to."
+"If you got the email <strong>more than six months ago</strong>, then this login link won't work any\n"
+"more. Please try doing what you were doing from the beginning."
msgstr ""
-"No revelaremos su dirección de correo a nadie salvo que usted\n"
-"nos lo diga, o la ley nos obligue."
+"Si recibió el correo <strong>hace más de seis meses</strong>, entonces el enlace ya no funcionará.\n"
+"Por favor intente hacer lo que estaba haciendo inicialmente."
-#: app/views/user_mailer/changeemail_confirm.rhtml:10
+#: app/views/user/banned.rhtml:9
msgid ""
-"We will not reveal your email addresses to anybody unless you\n"
-"or the law tell us to."
+"You will be unable to make new requests, send follow ups, add annotations or\n"
+"send messages to other users. You may continue to view other requests, and set\n"
+"up\n"
+"email alerts."
msgstr ""
-"No revelaremos su dirección de correo a nadie salvo que usted\n"
-"nos lo diga, o la ley nos obligue."
-
-#: app/views/request/show.rhtml:61
-msgid "We're waiting for"
-msgstr "Estamos esperando a"
-
-#: app/views/request/show.rhtml:57
-msgid "We're waiting for someone to read"
-msgstr "Estamos esperando que alguien lea"
+"No podrá realizar nuevas peticiones, enviar respuestas, añadir comentarios o\n"
+"contactar con otros usuarios. Podrá continuar viendo otras peticiones y\n"
+"configurando nuevas alertas de correo."
-#: app/views/user/signchangeemail_confirm.rhtml:6
+#: app/views/user/banned.rhtml:15
msgid ""
-"We've sent an email to your new email address. You'll need to click the link in\n"
-"it before your email address will be changed."
+"If you would like us to lift this ban, then you may politely\n"
+"<a href=\"/help/contact\">contact us</a> giving reasons.\n"
msgstr ""
-"Hemos enviado un correo a su nueva dirección de correo. Necesitará seguir el enlace\n"
-"incluido en él para que se actualice su dirección de correo."
+"Si quiere eliminar el bloqueo, entonces puede <a href=\"/help/contact\">contactarnos</a>\n"
+" explicándonos sus razones.\n"
#: app/views/user/confirm.rhtml:6
msgid ""
@@ -3675,821 +4118,937 @@ msgstr ""
"Le hemos enviado un correo, necesitará seguir el enlace incluído en él antes\n"
"de continuar."
-#: app/views/user/signchangepassword_confirm.rhtml:6
+#: app/views/user/confirm.rhtml:11
msgid ""
-"We've sent you an email, click the link in it, then you can change your "
-"password."
+"<small>If you use web-based email or have \"junk mail\" filters, also check your\n"
+"bulk/spam mail folders. Sometimes, our messages are marked that way.</small>\n"
+"</p>"
msgstr ""
-"Le hemos enviado un correo, siga el enlace incluído en él, y podrá cambiar "
-"su contraseña."
+"<small>Si usa correo web o tiene filtros \"anti spam\", por favor compruebe\n"
+"sus carpetas de spam. A veces, nuestros mensajes se marcan así por error.</small>\n"
+"</p>"
-#: app/views/request/_followup.rhtml:58
-msgid "What are you doing?"
-msgstr "¿Qué está haciendo?"
+#: app/views/user/contact.rhtml:32
+msgid ""
+"<strong>Note:</strong> You're sending a message to yourself, presumably\n"
+" to try out how it works."
+msgstr ""
+"<strong>Nota:</strong> Se está enviando un mensaje a sí mismo, suponemos\n"
+" que para probar cómo funciona."
-#: app/views/request/_describe_state.rhtml:4
-msgid "What best describes the status of this request now?"
-msgstr "¿Cómo describiría el estado de esta petición ahora?"
+#: app/views/user/contact.rhtml:35
+msgid " <strong>Privacy note:</strong> Your email address will be given to"
+msgstr ""
+" <strong>Nota sobre privacidad:</strong> Su dirección de correo será dada a"
-#: app/views/request_mailer/new_response.rhtml:9
+#: app/views/user/contact.rhtml:36
+msgid " when you send this message."
+msgstr " cuando envió este mensaje."
+
+#: app/views/user/no_cookies.rhtml:3
+msgid "Please enable \"cookies\" to carry on"
+msgstr "Por favor active las \"cookies\" para continuar"
+
+#: app/views/user/no_cookies.rhtml:5
msgid ""
-"When you get there, please update the status to say if the response \n"
-"contains any useful information."
+"To carry on, you need to sign in or make an account. Unfortunately, there\n"
+"was a technical problem trying to do this."
msgstr ""
-"Por favor actualice el estado para indicar si la respuesta \n"
-"contiene información útil."
+"Para continuar, necesita abrir una sesión o crear una cuenta. Desgraciadamente,\n"
+"ha habido un problema técnico al intentar hacerlo."
-#: app/views/request/show_response.rhtml:44
+#: app/views/user/no_cookies.rhtml:8
msgid ""
-"When you receive the paper response, please help\n"
-" others find out what it says:"
+"It may be that your browser is not set to accept a thing called \"cookies\",\n"
+"or cannot do so. If you can, please enable cookies, or try using a different\n"
+"browser. Then press refresh to have another go."
msgstr ""
-"Cuando reciba la respuesta en papel, por favor ayude\n"
-" a que otros sepan lo que dice:"
+"Puede que su navegador esté configurado para no aceptar lo que se conoce como \"cookies\",\n"
+"o que no pueda hacerlo. Si sabe cómo, por favor permita las \"cookies\", o use un navegador\n"
+"distinto. Entonces vuelva a visitar la página para volver a intentarlo."
-#: app/views/request/new_please_describe.rhtml:16
+#: app/views/user/no_cookies.rhtml:12
msgid ""
-"When you're done, <strong>come back here</strong>, <a href=\"%s\">reload "
-"this page</a> and file your new request."
+"If your browser is set to accept cookies and you are seeing this message,\n"
+"then there is probably a fault with our server."
msgstr ""
-"Cuando esté listo, <strong>vuelva aquí</strong>, <a href=\"%s\">recargue "
-"esta página</a> y cree una nueva petición."
+"Si su navegador acepta cookies y está viendo este mensaje,\n"
+"puede que haya un problema en nuestro servidor."
-#: app/views/request/show_response.rhtml:13
-msgid "Which of these is happening?"
-msgstr "¿Qué está pasando?"
+#: app/views/user/no_cookies.rhtml:15
+msgid "Please <a href=\"%s\">get in touch</a> with us so we can fix it."
+msgstr ""
+"Por favor <a href=\"%s\">contacte</a> con nosotros para que podamos "
+"arreglarlo."
-#: app/models/info_request_event.rb:313
-msgid "Withdrawn by requester"
-msgstr "Retirada por el autor"
+#: app/views/user/no_cookies.rhtml:17
+msgid ""
+"Let us know what you were doing when this message\n"
+"appeared and your browser and operating system type and version."
+msgstr ""
+"Háganos saber que estaba haciendo cuando apareció\n"
+"este mensaje, así como el nombre y versión de su navegador y\n"
+"sistema operativo."
-#: app/models/info_request.rb:809
-msgid "Withdrawn by the requester."
-msgstr "Retirada por el autor."
+#: app/views/user/no_cookies.rhtml:20
+msgid "If you are still having trouble, please <a href=\"%s\">contact us</a>."
+msgstr "Si aún tiene problemas, por favor <a href=\"%s\">contáctenos</a>."
-#: app/controllers/request_controller.rb:549
-msgid "Write a reply to "
-msgstr "Escribir una respuesta a "
+#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104
+msgid "Change profile photo"
+msgstr "Cambie la foto de perfil"
-#: app/controllers/request_controller.rb:548
-msgid "Write your FOI follow up message to "
-msgstr "Escriba su respuesta a "
+#: app/views/user/set_crop_profile_photo.rhtml:6
+msgid "Crop your profile photo"
+msgstr "Recorte su foto de perfil"
-#: app/views/request/new.rhtml:46
-msgid "Write your request in <strong>simple, precise language</strong>."
+#: app/views/user/set_crop_profile_photo.rhtml:35
+msgid ""
+"<strong>Privacy note:</strong> Your photo will be shown in public on the Internet, \n"
+" wherever you do something on {{site_name}}."
msgstr ""
-"Escriba su petición en un <strong>lenguaje sencillo y preciso</strong>."
+"<strong>Nota sobre privacidad:</strong> Su foto será mostrada públicamente en Internet, \n"
+" junto a cada una de sus acciones en {{site_name}}."
-#: app/models/info_request_event.rb:301
-msgid "Wrong Response"
-msgstr "Respuesta incorrecta"
+#: app/views/user/set_draft_profile_photo.rhtml:5
+msgid "Choose your profile photo"
+msgstr "Elegir mi foto de perfil"
-#: app/views/comment/_single_comment.rhtml:10
-msgid "You"
-msgstr "Usted"
+#: app/views/user/set_draft_profile_photo.rhtml:13
+msgid "Photo of you:"
+msgstr "Foto:"
-#: app/controllers/track_controller.rb:98
-msgid "You are already being emailed updates about "
-msgstr "Ya está recibiendo actualizaciones por correo sobre "
+#: app/views/user/set_draft_profile_photo.rhtml:18
+msgid ""
+"Your photo will be shown in public <strong>on the Internet</strong>, \n"
+" wherever you do something on {{site_name}}."
+msgstr ""
+"Su foto será visible públicamente <strong>en Internet</strong>, \n"
+" cada vez que haga algo en {{site_name}}."
-#: app/models/track_thing.rb:175
-msgid "You are already tracking requests to {{public_body_name}} by email"
-msgstr "Ya está siguiendo las peticiones a {{public_body_name}} por correo"
+#: app/views/user/set_draft_profile_photo.rhtml:22
+msgid ""
+"Please don't upload offensive pictures. We will take down images\n"
+" that we consider inappropriate."
+msgstr ""
+"Por favor no suba imágenes ofensivas. Eliminaremos cualquier imagen\n"
+" que consideremos inapropiada."
-#: app/models/track_thing.rb:207
-msgid "You are already tracking things matching '{{query}}' by email"
-msgstr "Ya está siguiendo los resultados de '{{query}}' por correo"
+#: app/views/user/set_draft_profile_photo.rhtml:32
+msgid "Next, crop your photo &gt;&gt;"
+msgstr "Ahora, recorte su foto &gt;&gt;"
-#: app/models/track_thing.rb:191
-msgid "You are already tracking this person by email"
-msgstr "Ya está siguiendo a esta persona por correo"
+#: app/views/user/set_draft_profile_photo.rhtml:46
+msgid "OR remove the existing photo"
+msgstr "O borre la foto actual"
-#: app/models/track_thing.rb:124
-msgid "You are already tracking this request by email"
-msgstr "Ya está siguiendo esta petición por correo"
+#: app/views/user/set_draft_profile_photo.rhtml:55
+msgid "Cancel, return to your profile page"
+msgstr "Cancelar, volver a mi perfil"
-#: app/models/track_thing.rb:156
-msgid "You are being emailed about any new successful responses"
-msgstr "Está recibiendo correos sobre cualquier nueva respuesta exitosa"
+#: app/views/user/set_profile_about_me.rhtml:1
+msgid "Change the text about you on your profile at {{site_name}}"
+msgstr "Cambiar el texto de su perfil en {{site_name}}"
-#: app/models/track_thing.rb:140
-msgid "You are being emailed when there are new requests"
-msgstr "Usted está recibiendo correos cuando hay nuevas peticiones"
+#: app/views/user/set_profile_about_me.rhtml:3
+#: app/views/user/signchangeemail.rhtml:3
+msgid "internal error"
+msgstr "error interno"
-#: app/views/request/show.rhtml:88
-msgid "You can <strong>complain</strong> by"
-msgstr "Puede <strong>apelar</strong>"
+#: app/views/user/set_profile_about_me.rhtml:9
+msgid "Edit text about you"
+msgstr "Edite el texto sobre usted"
-#: app/views/request/details.rhtml:58
-msgid ""
-"You can get this page in computer-readable format as part of the main JSON\n"
-"page for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
-msgstr ""
-"Puede obtener esta página en un formato procesable como parte de la página JSON\n"
-"de la petición. Consulte <a href=\"{{api_path}}\">la documentación de nuestro API</a>."
+#: app/views/user/set_profile_about_me.rhtml:11
+msgid " What are you investigating using Freedom of Information? "
+msgstr " ¿Qué está investigando usando Acceso a la Información? "
-#: app/views/public_body/show.rhtml:40
+#: app/views/user/set_profile_about_me.rhtml:14
msgid ""
-"You can only request information about the environment from this authority."
-msgstr "Solo puede solicitar información medioambiental a esta institución"
-
-#: app/views/user/show.rhtml:122
-msgid "You have"
-msgstr "Tiene"
-
-#: app/views/request_mailer/new_response.rhtml:1
-msgid "You have a new response to the {{law_used_full}} request "
-msgstr "Tiene una nueva respuesta a la petición {{law_used_full}} "
-
-#: app/controllers/user_controller.rb:492
-msgid "You have now changed the text about you on your profile."
-msgstr "Ha cambiado el texto sobre usted en su perfil."
+" This will appear on your {{site_name}} profile, to make it\n"
+" easier for others to get involved with what you're doing."
+msgstr ""
+" Esto aparecerá en su perfil de {{site_name}}, para facilitar\n"
+" que otras personas entiendan y participen sus peticiones."
-#: app/controllers/user_controller.rb:310
-msgid "You have now changed your email address used on {{site_name}}"
-msgstr "Ha cambiado la dirección de correo que usa en {{site_name}}"
+#: app/views/user/set_profile_about_me.rhtml:20
+msgid "About you:"
+msgstr "Sobre mí:"
-#: app/views/user_mailer/already_registered.rhtml:3
+#: app/views/user/set_profile_about_me.rhtml:26
msgid ""
-"You just tried to sign up to {{site_name}}, when you\n"
-"already have an account. Your name and password have been\n"
-"left as they previously were.\n"
-"\n"
-"Please click on the link below."
+" Include relevant links, such as to a campaign page, your blog or a\n"
+" twitter account. They will be made clickable. \n"
+" e.g."
msgstr ""
-"Ha intentado registrarse en {{site_name}}, cuando\n"
-"ya tiene una cuenta. Su nombre y contraseña no se han\n"
-"modificado.\n"
-"\n"
-"Por favor pulse en el siguiente enlace para continuar."
+" Incluya enlaces relevantes, como a una página informativa, su blog o\n"
+" cuenta de Twitter. Se convertirán en enlaces automáticamente. \n"
+" Por ejemplo:"
-#: app/views/comment/new.rhtml:59
-msgid ""
-"You know what caused the error, and can <strong>suggest a solution</strong>,"
-" such as a working email address."
-msgstr ""
-"Sabe lo que ha causado el error, y puede <strong>sugerir una solución</a>, "
-"como una dirección de correo válida."
+#: app/views/user/set_profile_about_me.rhtml:35
+msgid "Save"
+msgstr "Guardar"
-#: app/views/request/upload_response.rhtml:16
+#: app/views/user/show.rhtml:4
msgid ""
-"You may <strong>include attachments</strong>. If you would like to attach a\n"
-"file too large for email, use the form below."
+"There is <strong>more than one person</strong> who uses this site and has this name. \n"
+" One of them is shown below, you may mean a different one:"
msgstr ""
-"Puede <strong>adjuntar ficheros</strong>. Si quiere adjuntar un fichero\n"
-"demasiado grande para el correo, puede utilizar el siguiente formulario."
+"Hay <strong>más de una persona</strong> que utiliza esta web y tiene este nombre. \n"
+" Una de ellas se muestra a continuación, puede que se refiera a una distinta:"
-#: app/views/request/followup_bad.rhtml:24
+#: app/views/user/show.rhtml:12
msgid ""
-"You may be able to find\n"
-" one on their website, or by phoning them up and asking. If you manage\n"
-" to find one, then please <a href=\"%s\">send it to us</a>."
+"Please <strong>go to the following requests</strong>, and let us\n"
+" know if there was information in the recent responses to them."
msgstr ""
-"Puede que encuentre una\n"
-" en su página web, o preguntando por teléfono. Si la consigue\n"
-" por favor <a href=\"%s\">envíenosla</a>."
+"Por favor <strong>vaya a la siguiente petición</strong>, y háganos\n"
+" saber si había información en las últimas respuestas recibidas."
-#: app/views/request/new_bad_contact.rhtml:6
+#: app/views/user/show.rhtml:20
msgid ""
-"You may be able to find\n"
-"one on their website, or by phoning them up and asking. If you manage\n"
-"to find one, then please <a href=\"%s\">send it to us</a>."
+"Thanks very much - this will help others find useful stuff. We'll\n"
+" also, if you need it, give advice on what to do next about your\n"
+" requests."
msgstr ""
-"Puede que encuentre una\n"
-"en su página web, o preguntando por teléfono. Si la consigue\n"
-"por favor <a href=\"%s\">envíenosla</a>."
+"Muchas gracias - esto ayudará a otros a encontrar información útil.\n"
+" Nosotros también, si lo necesita, ofrecemos consejos sobre qué\n"
+" hacer a continuación con sus peticiones."
-#: app/controllers/user_controller.rb:470
-msgid "You need to be logged in to change the text about you on your profile."
-msgstr "Necesita identificarse para cambiar el texto de su perfil."
+#: app/views/user/show.rhtml:29
+msgid "Track this person"
+msgstr "Seguir a esta persona"
-#: app/controllers/user_controller.rb:371
-msgid "You need to be logged in to change your profile photo."
-msgstr "Necesita identificarse para cambiar la foto de su perfil."
+#: app/views/user/show.rhtml:32
+msgid "On this page"
+msgstr "En esta página"
-#: app/controllers/user_controller.rb:433
-msgid "You need to be logged in to clear your profile photo."
-msgstr "Necesita identificarse para borrar la foto de su perfil."
+#: app/views/user/show.rhtml:33
+msgid "FOI requests"
+msgstr "Peticiones de información"
-#: app/controllers/request_controller.rb:559
-msgid ""
-"You previously submitted that exact follow up message for this request."
-msgstr ""
-"Ya ha enviado esa misma respuesta a esta petición."
+#: app/views/user/show.rhtml:34
+msgid "Annotations"
+msgstr "Comentarios"
-#: app/views/request/upload_response.rhtml:13
-msgid ""
-"You should have received a copy of the request by email, and you can respond\n"
-"by <strong>simply replying</strong> to that email. For your convenience, here is the address:"
-msgstr ""
-"Debería de haber recibido una copia de la petición por correo, y puede contestar\n"
-"<strong>simplemente respondiendo</strong> a ese correo. Para su comodidad, esta es la dirección:"
+#: app/views/user/show.rhtml:36
+msgid "Email subscriptions"
+msgstr "Suscripciones de correo"
-#: app/views/request/show_response.rhtml:36
-msgid ""
-"You want to <strong>give your postal address</strong> to the authority in "
-"private."
-msgstr ""
-"Quiere <strong>darle su dirección postal</strong> al organismo "
-"en privado."
+#: app/views/user/show.rhtml:53
+msgid "Set your profile photo"
+msgstr "Cambiar foto de perfil"
-#: app/views/user/banned.rhtml:9
-msgid ""
-"You will be unable to make new requests, send follow ups, add annotations or\n"
-"send messages to other users. You may continue to view other requests, and set\n"
-"up\n"
-"email alerts."
-msgstr ""
-"No podrá realizar nuevas peticiones, enviar respuestas, añadir comentarios o\n"
-"contactar con otros usuarios. Podrá continuar viendo otras peticiones y\n"
-"configurando nuevas alertas de correo."
+#: app/views/user/show.rhtml:59
+msgid " (you)"
+msgstr " (usted)"
-#: app/controllers/track_controller.rb:154
-msgid "You will no longer be emailed updates about "
-msgstr "Ya no recibirá actualizaciones por correo sobre "
+#: app/views/user/show.rhtml:62
+msgid "Joined {{site_name}} in"
+msgstr "Registrado en {{site_name}} el"
-#: app/controllers/track_controller.rb:183
-msgid "You will no longer be emailed updates for those alerts"
-msgstr "Ya no recibirá correos para esas alertas"
+#: app/views/user/show.rhtml:69
+msgid "Send message to "
+msgstr "Enviar un mensaje a "
-#: app/controllers/track_controller.rb:111
-msgid "You will now be emailed updates about "
-msgstr "Ahora recibirá actualizaciones por correo sobre "
+#: app/views/user/show.rhtml:71
+msgid "just to see how it works"
+msgstr "sólo para ver cómo funciona"
-#: app/views/request_mailer/not_clarified_alert.rhtml:6
+#: app/views/user/show.rhtml:79
+msgid "This user has been banned from {{site_name}} "
+msgstr "Este usuario ha sido expulsado from {{site_name}} "
+
+#: app/views/user/show.rhtml:83
+msgid "They have been given the following explanation:"
+msgstr "Han recibido la siguiente explicación:"
+
+#: app/views/user/show.rhtml:96
+msgid "edit text about you"
+msgstr "edite el texto sobre usted"
+
+#: app/views/user/show.rhtml:106
+msgid "Change your password"
+msgstr "Cambie su contraseña"
+
+#: app/views/user/show.rhtml:107
+msgid "Change your email"
+msgstr "Cambie su correo"
+
+#: app/views/user/show.rhtml:113
msgid ""
-"You will only get an answer to your request if you follow up\n"
-"with the clarification."
+"<a href=\"%s\">Sign in</a> to change password, subscriptions and more "
+"({{user_name}} only)"
msgstr ""
-"Sólo recibirá una respuesta a su petición si continúa\n"
-"con la aclaración."
+"<a href=\"%s\">Abra una sesión</a> para cambiar su contraseña, "
+"suscripciones... (sólo {{user_name}})"
-#: app/controllers/user_controller.rb:442
-msgid "You've now cleared your profile photo"
-msgstr "Ha borrado la foto de su perfil"
+#: app/views/user/show.rhtml:123
+msgid "Search your contributions"
+msgstr "Busque sus aportaciones"
-#: app/views/user/show.rhtml:152
-msgid "Your "
-msgstr "Su "
+#: app/views/user/show.rhtml:125
+msgid "Search contributions by this person"
+msgstr "Buscar aportaciones de esta persona"
-#: app/views/user/_signup.rhtml:22
+#: app/views/user/show.rhtml:136
+msgid "You have made no Freedom of Information requests using this site."
+msgstr "No ha realizado solicitudes de información usando esta web."
+
+#: app/views/user/show.rhtml:136
msgid ""
-"Your <strong>name will appear publicly</strong> \n"
-" (<a href=\"%s\">why?</a>)\n"
-" on this website and in search engines. If you\n"
-" are thinking of using a pseudonym, please \n"
-" <a href=\"%s\">read this first</a>."
+"This person has made no Freedom of Information requests using this site."
msgstr ""
-"<strong>Su nombre aparecerá públicamente</strong> \n"
-" (<a href=\"%s\">¿por qué?</a>)\n"
-" en esta web y en motores de búsqueda. Si está\n"
-" pensando en utilizar un seudónimo, por favor \n"
-" <a href=\"%s\">lea esto primero</a>."
+"Esta persona no ha realizado solicitudes de información usando esta web."
-#: app/views/contact_mailer/user_message.rhtml:3
+#: app/views/user/show.rhtml:141
+msgid "Your %d Freedom of Information request"
+msgid_plural "Your %d Freedom of Information requests"
+msgstr[0] "Su %d solicitud de información"
+msgstr[1] "Sus %d solicitudes de información"
+
+#: app/views/user/show.rhtml:141
+msgid "This person's %d Freedom of Information request"
+msgid_plural "This person's %d Freedom of Information requests"
+msgstr[0] "Su %d solicitud de información"
+msgstr[1] "Sus %d solicitudes de información"
+
+#: app/views/user/show.rhtml:155
+msgid "Freedom of Information requests made by you"
+msgstr "Solicitudes de información realizadas por usted"
+
+#: app/views/user/show.rhtml:155
+msgid "Freedom of Information requests made by this person"
+msgstr "Solicitudes de información realizadas por esta persona"
+
+#: app/views/user/show.rhtml:156
msgid ""
-"Your details have not been given to anyone, unless you choose to reply to this\n"
-"message, which will then go directly to the person who wrote the message."
+"The search index is currently offline, so we can't show the Freedom of "
+"Information requests this person has made."
msgstr ""
-"Sus detalles no han sido compartidos con nadie, salve que elija contestar a este\n"
-"mensaje, que irá directamente a la persona que escribió el mensaje."
+"El motor de búsqueda no está accesible en estos momentos: no podemos mostrar"
+" las peticiones de información que ha hecho esta persona"
-#: app/views/user/_signin.rhtml:11 app/views/user/_signup.rhtml:9
-#: app/views/user/signchangepassword_send_confirm.rhtml:13
-msgid "Your e-mail:"
-msgstr "Su correo:"
+#: app/views/user/show.rhtml:162
+msgid "Your annotations"
+msgstr "Sus comentarios"
+
+#: app/views/user/show.rhtml:162
+msgid "This person's annotations"
+msgstr "Sus comentarios"
-#: app/views/user/show.rhtml:168
+#: app/views/user/show.rhtml:165 app/views/user/show.rhtml:185
+msgid "None made."
+msgstr "Ninguno/a."
+
+#: app/views/user/show.rhtml:169
+msgid "Your %d annotation"
+msgid_plural "Your %d annotations"
+msgstr[0] "Su %d comentario"
+msgstr[1] "Sus %d comentarios"
+
+#: app/views/user/show.rhtml:169
+msgid "This person's %d annotation"
+msgid_plural "This person's %d annotations"
+msgstr[0] "Su %d comentario"
+msgstr[1] "Sus %d comentarios"
+
+#: app/views/user/show.rhtml:184
msgid "Your email subscriptions"
msgstr "Sus suscripciones de correo"
-#: app/controllers/request_controller.rb:556
-msgid ""
-"Your follow up has not been sent because this request has been stopped to "
-"prevent spam. Please <a href=\"%s\">contact us</a> if you really want to "
-"send a follow up message."
-msgstr ""
-"Su respuesta no ha sido enviada porque esta petición ha sido bloqueada para "
-"evitar spam. Por favor <a href=\"%s\">contáctenos</a> si realmente quiere "
-"enviar una respuesta."
+#: app/views/user/show.rhtml:187
+msgid "email subscription"
+msgstr "suscripción de correo"
-#: app/controllers/request_controller.rb:584
-msgid "Your follow up message has been sent on its way."
-msgstr "Su mensaje de seguimiento está en camino."
+#: app/views/user/show.rhtml:196 app/views/user/show.rhtml:210
+msgid "unsubscribe all"
+msgstr "cancelar todas las suscripciones"
-#: app/controllers/request_controller.rb:582
-msgid "Your internal review request has been sent on its way."
-msgstr "Su petición para una revisión interna está en camino."
+#: app/views/user/show.rhtml:224
+msgid "unsubscribe"
+msgstr "cancelar suscripción"
-#: app/controllers/help_controller.rb:63
+#: app/views/user/sign.rhtml:8
+msgid "Please sign in as "
+msgstr "Por favor abre una sesión como "
+
+#: app/views/user/sign.rhtml:11
+msgid "please sign in as "
+msgstr "por favor abra una sesión como "
+
+#: app/views/user/sign.rhtml:20
+msgid "Sign in or make a new account"
+msgstr "Abrir sesión o crear nueva cuenta"
+
+#: app/views/user/sign.rhtml:26
+msgid " Please sign in or make a new account."
+msgstr " Por favor abra una sesión o cree una nueva cuenta"
+
+#: app/views/user/sign.rhtml:28
+msgid "please sign in or make a new account."
+msgstr "por favor abra una sesión o cree una nueva cuenta."
+
+#: app/views/user/sign.rhtml:37
+msgid "- or -"
+msgstr "- o -"
+
+#: app/views/user/signchangeemail.rhtml:15
+msgid "Old e-mail:"
+msgstr "Correo antiguo:"
+
+#: app/views/user/signchangeemail.rhtml:20
+msgid "New e-mail:"
+msgstr "Nueva dirección:"
+
+#: app/views/user/signchangeemail.rhtml:25
+msgid "Your password:"
+msgstr "Su contraseña:"
+
+#: app/views/user/signchangeemail.rhtml:30
msgid ""
-"Your message has been sent. Thank you for getting in touch! We'll get back "
-"to you soon."
+"<strong>Note:</strong>\n"
+" We will send an email to your new email address. Follow the\n"
+" instructions in it to confirm changing your email."
msgstr ""
-"Su mensaje ha sido enviado. Gracias por escribir, nos pondremos en contacto "
-"con usted pronto."
+"<strong>Nota:</strong>\n"
+" Enviaremos un correo a la nueva dirección de correo. Siga\n"
+" sus instrucciones para confirmar la nueva dirección."
-#: app/controllers/user_controller.rb:349
-msgid "Your message to {{recipient_user_name}} has been sent!"
-msgstr "Su mensaje a {{recipient_user_name}} ha sido enviado."
+#: app/views/user/signchangeemail.rhtml:37
+msgid "Change email on {{site_name}}"
+msgstr "Cambiar correo en {{site_name}}"
-#: app/views/request/followup_preview.rhtml:15
-msgid "Your message will appear in <strong>search engines</strong>"
-msgstr "Su mensaje aparecerá en <strong>los motores de búsqueda</strong>"
+#: app/views/user/signchangeemail_confirm.rhtml:3
+#: app/views/user/signchangepassword_confirm.rhtml:1
+#: app/views/user/signchangepassword_confirm.rhtml:3
+msgid "Now check your email!"
+msgstr "¡Ahora compruebe su correo!"
-#: app/views/comment/preview.rhtml:10
+#: app/views/user/signchangeemail_confirm.rhtml:6
msgid ""
-"Your name and annotation will appear in <strong>search engines</strong>."
+"We've sent an email to your new email address. You'll need to click the link in\n"
+"it before your email address will be changed."
msgstr ""
-"Su nombre y su comentario aparecerán en los <strong>motores de búsqueda</strong>."
+"Hemos enviado un correo a su nueva dirección de correo. Necesitará seguir el enlace\n"
+"incluido en él para que se actualice su dirección de correo."
-#: app/views/request/preview.rhtml:8
+#: app/views/user/signchangeemail_confirm.rhtml:11
+#: app/views/user/signchangepassword_confirm.rhtml:10
msgid ""
-"Your name, request and any responses will appear in <strong>search engines</strong>\n"
-" (<a href=\"%s\">details</a>)."
+"If you use web-based email or have \"junk mail\" filters, also check your\n"
+"bulk/spam mail folders. Sometimes, our messages are marked that way."
msgstr ""
-"Su nombre, su petición y cualquier respuesta aparecerán en los <strong>motoros de búsqueda</strong>\n"
-" (<a href=\"%s\">detalles</a>)."
+"Si usa correo web o tiene filtros \"anti spam\", por favor compruebe\n"
+"sus carpetas de spam. A veces, nuestros mensajes se marcan así por error."
-#: app/views/user/_signup.rhtml:18
-msgid "Your name:"
-msgstr "Su nombre:"
+#: app/views/user/signchangepassword.rhtml:1
+#: app/views/user/signchangepassword.rhtml:11
+#: app/views/user/signchangepassword_send_confirm.rhtml:1
+#: app/views/user/signchangepassword_send_confirm.rhtml:9
+msgid "Change your password on {{site_name}}"
+msgstr "Cambie su contraseña en {{site_name}}"
-#: app/views/request_mailer/stopped_responses.rhtml:14
-msgid "Your original message is attached."
-msgstr "Su mensaje original está adjunto."
+#: app/views/user/signchangepassword.rhtml:15
+msgid "New password:"
+msgstr "Nueva contraseña:"
-#: app/controllers/user_controller.rb:231
-msgid "Your password has been changed."
-msgstr "Su contraseña ha sido cambiada."
+#: app/views/user/signchangepassword.rhtml:20
+msgid "New password: (again)"
+msgstr "Nueva contraseña: (de nuevo)"
-#: app/views/user/signchangeemail.rhtml:25
-msgid "Your password:"
-msgstr "Su contraseña:"
+#: app/views/user/signchangepassword.rhtml:27
+msgid "Change password on {{site_name}}"
+msgstr "Cambiar la contraseña en {{site_name}}"
-#: app/views/user/set_draft_profile_photo.rhtml:18
+#: app/views/user/signchangepassword_confirm.rhtml:6
msgid ""
-"Your photo will be shown in public <strong>on the Internet</strong>, \n"
-" wherever you do something on {{site_name}}."
+"We've sent you an email, click the link in it, then you can change your "
+"password."
msgstr ""
-"Su foto será visible públicamente <strong>en Internet</strong>, \n"
-" cada vez que haga algo en {{site_name}}."
+"Le hemos enviado un correo, siga el enlace incluído en él, y podrá cambiar "
+"su contraseña."
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:5
+#: app/views/user/signchangepassword_send_confirm.rhtml:18
msgid ""
-"Your request was called {{info_request}}. Letting everyone know whether you "
-"got the information will help us keep tabs on"
+" <strong>Note:</strong>\n"
+" We will send you an email. Follow the instructions in it to change\n"
+" your password."
msgstr ""
-"Su petición se llamaba {{info_request}}. Háganos saber si ha recibido "
-"la información para ayudarnos a controlar a"
+" <strong>Nota::</strong>\n"
+" Le enviaremos un correo. Siga sus instrucciones para cambiar\n"
+" su contraseña."
-#: app/views/request/new.rhtml:109
-msgid "Your request:"
-msgstr "Su petición:"
+#: app/views/user/signchangepassword_send_confirm.rhtml:26
+msgid "Submit"
+msgstr "Enviar"
-#: app/views/request/upload_response.rhtml:8
+#: app/views/user/wrong_user.rhtml:2
+msgid "Sorry, but only {{user_name}} is allowed to do that."
+msgstr "Lo sentimos, pero sólo {{user_name}} puede hacer eso."
+
+#: app/views/user/wrong_user_unknown_email.rhtml:3
msgid ""
-"Your response will <strong>appear on the Internet</strong>, <a "
-"href=\"%s\">read why</a> and answers to other questions."
+"Unfortunately we don't know the FOI\n"
+"email address for that authority, so we can't validate this.\n"
+"Please <a href=\"%s\">contact us</a> to sort it out."
msgstr ""
-"Su respuesta <strong>aparecerá en Internet</strong>, <a "
-"href=\"%s\">lea por qué</a> y respuestas a otras preguntas."
+"Desgraciadamente no tenemos la dirección\n"
+"de correo para este organismo, así que no podemos validarlo.\n"
+"Por favor <a href=\"%s\">contáctenos</a> para arreglarlo."
-#: app/views/comment/new.rhtml:62
+#: app/views/user_mailer/already_registered.rhtml:3
msgid ""
-"Your thoughts on what the {{site_name}} <strong>administrators</strong> "
-"should do about the request."
+"You just tried to sign up to {{site_name}}, when you\n"
+"already have an account. Your name and password have been\n"
+"left as they previously were.\n"
+"\n"
+"Please click on the link below."
msgstr ""
-"Opine sobre lo que los <strong>administradores</strong> de {{site_name}} "
-"deberían hacer con la petición."
+"Ha intentado registrarse en {{site_name}}, cuando\n"
+"ya tiene una cuenta. Su nombre y contraseña no se han\n"
+"modificado.\n"
+"\n"
+"Por favor pulse en el siguiente enlace para continuar."
-#: app/models/track_mailer.rb:25
-msgid "Your {{site_name}} email alert"
-msgstr "Su alerta en {{site_name}}"
+#: app/views/user_mailer/changeemail_already_used.rhtml:1
+msgid ""
+"Someone, perhaps you, just tried to change their email address on\n"
+"{{site_name}} from {{old_email}} to {{new_email}}."
+msgstr ""
+"Alguien, tal vez usted, acaba de intentar cambiar su dirección de correo en\n"
+"{{site_name}} de {{old_email}} a {{new_email}}."
-#: app/models/outgoing_message.rb:69
-msgid "Yours faithfully,"
-msgstr "Un saludo,"
+#: app/views/user_mailer/changeemail_already_used.rhtml:5
+msgid ""
+"This was not possible because there is already an account using \n"
+"the email address {{email}}."
+msgstr ""
+"No es posible porque ya existe una cuenta usando la dirección \n"
+"de correo {{email}}."
-#: app/models/outgoing_message.rb:67
-msgid "Yours sincerely,"
-msgstr "Un saludo,"
+#: app/views/user_mailer/changeemail_already_used.rhtml:8
+msgid "The accounts have been left as they previously were."
+msgstr "Las cuentas se han dejado tal y como estaban anteriormente."
-#: app/views/request/new.rhtml:97
+#: app/views/user_mailer/changeemail_confirm.rhtml:3
msgid ""
-"a one line summary of the information you are requesting, \n"
-"\t\t\te.g."
+"Please click on the link below to confirm that you want to \n"
+"change the email address that you use for {{site_name}}\n"
+"from {{old_email}} to {{new_email}}"
msgstr ""
-"un resumen de una línea de la información que solicita, \n"
-"\t\t\tpor ejemplo"
-
-#: app/views/public_body/show.rhtml:31
-msgid "admin"
-msgstr "admin"
+"Por favor pulse en el siguiente enlace para confirmar que quiere \n"
+"cambiar la dirección de correo que utiliza en {{site_name}}\n"
+"de {{old_email}} a {{new_email}}"
-#: app/views/public_body/show.rhtml:29
-msgid "also called {{public_body_short_name}}"
-msgstr "también conocido como {{public_body_short_name}}"
+#: app/views/user_mailer/changeemail_confirm.rhtml:10
+msgid ""
+"We will not reveal your email addresses to anybody unless you\n"
+"or the law tell us to."
+msgstr ""
+"No revelaremos su dirección de correo a nadie salvo que usted\n"
+"nos lo diga, o la ley nos obligue."
-#: app/views/user/wrong_user.rhtml:5
-msgid "and sign in as "
-msgstr "y abra una sesión como "
+#: app/views/user_mailer/confirm_login.rhtml:3
+msgid "Please click on the link below to confirm your email address."
+msgstr ""
+"Por favor seleccione el siguiente enlace para confirmar su dirección de "
+"correo."
-#: app/views/request/show.rhtml:59
+#: app/views/user_mailer/confirm_login.rhtml:8
msgid ""
-"and update the status accordingly. Perhaps <strong>you</strong> might like "
-"to help out by doing that?"
+"We will not reveal your email address to anybody unless you\n"
+"or the law tell us to."
msgstr ""
-"y actualice su estado. ¿Tal vez <strong>usted</strong> quiera ayudarnos "
-"a hacerlo?"
+"No revelaremos su dirección de correo a nadie salvo que usted\n"
+"nos lo diga, o la ley nos obligue."
-#: app/views/request/show.rhtml:64
-msgid "and update the status."
-msgstr "y actualizar su estado."
+#: lib/world_foi_websites.rb:5
+msgid "United Kingdom"
+msgstr "Reino Unido"
-#: app/views/request/_describe_state.rhtml:101
-msgid "and we'll suggest <strong>what to do next</strong>"
-msgstr "y le sugeriremos <strong>qué hacer a continuación</strong>"
+#: lib/world_foi_websites.rb:9
+msgid "Kosovo"
+msgstr "Kosovo"
-#: app/views/user/show.rhtml:153
-msgid "annotation"
-msgstr "comentario"
+#: lib/world_foi_websites.rb:13
+msgid "European Union"
+msgstr "Unión Europea"
-#: app/views/user/show.rhtml:147
-msgid "annotations"
-msgstr "comentarios"
+#: lib/world_foi_websites.rb:17
+msgid "United States of America"
+msgstr "Estados Unidos de América"
-#: app/models/track_thing.rb:138
-msgid "any <a href=\"/list\">new requests</a>"
-msgstr "cualquier <a href=\"/list\">petición nueva</a>"
+#: lib/world_foi_websites.rb:21
+msgid "New Zealand"
+msgstr "Nueva Zelanda"
-#: app/models/track_thing.rb:154
-msgid "any <a href=\"/list/successful\">successful requests</a>"
-msgstr "cualquier <a href=\"/list/successful\">petición con éxito</a>"
+#: lib/world_foi_websites.rb:25
+msgid "Germany"
+msgstr "Alemania"
-#: app/views/request_mailer/very_overdue_alert.rhtml:1
-msgid "are long overdue."
-msgstr "están muy retrasados."
+#: lib/world_foi_websites.rb:29
+msgid "Chile"
+msgstr "Chile"
-#: app/controllers/public_body_controller.rb:111
-msgid "beginning with"
-msgstr "empezando con"
+#: locale/model_attributes.rb:2
+msgid "public body"
+msgstr "organismo público"
-#: app/views/request/show.rhtml:82
-msgid "by"
-msgstr "por"
+#: locale/model_attributes.rb:3
+msgid "PublicBody|Name"
+msgstr "Nombre"
-#: app/views/request/_followup.rhtml:38
-msgid "by <strong>{{date}}</strong>"
-msgstr "antes de <strong>{{date}}</strong>"
+#: locale/model_attributes.rb:4
+msgid "PublicBody|Short name"
+msgstr "Nombre corto"
-#: app/views/request/_request_listing_via_event.rhtml:34
-msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
-msgstr "por {{public_body_name}} a {{info_request_user}} el {{date}}."
+#: locale/model_attributes.rb:5
+msgid "PublicBody|Request email"
+msgstr "PublicBody|Request email"
-#: app/views/request/_request_listing_short_via_event.rhtml:10
-msgid "by {{user_link_absolute}}"
-msgstr "por {{user_link_absolute}}"
+#: locale/model_attributes.rb:6
+msgid "PublicBody|Version"
+msgstr "Versión"
-#: locale/model_attributes.rb:35
-msgid "censor rule"
-msgstr "regla de censura"
+#: locale/model_attributes.rb:7
+msgid "PublicBody|Last edit editor"
+msgstr "PublicBody|Last edit editor"
-#: locale/model_attributes.rb:20
-msgid "comment"
-msgstr "comentario"
+#: locale/model_attributes.rb:8
+msgid "PublicBody|Last edit comment"
+msgstr "PublicBody|Last edit comment"
-#: app/views/request/show_response.rhtml:41
-msgid ""
-"containing your postal address, and asking them to reply to this request.\n"
-" Or you could phone them."
-msgstr ""
-"incluyendo su dirección postal, y pidiéndoles que contesten a su petición.\n"
-" O pruebe a llamarles por teléfono."
+#: locale/model_attributes.rb:9
+msgid "PublicBody|Url name"
+msgstr "Dirección web"
-#: app/models/info_request_event.rb:338
-msgid "display_status only works for incoming and outgoing messages right now"
-msgstr ""
-"display_status sólo funciona para mensajes de entrada y salida ahora mismo"
+#: locale/model_attributes.rb:10
+msgid "PublicBody|Home page"
+msgstr "Sitio web"
-#: app/views/request_mailer/overdue_alert.rhtml:3
-msgid "during term time"
-msgstr "durante el periodo escolar"
+#: locale/model_attributes.rb:11
+msgid "PublicBody|Notes"
+msgstr "Notas"
+
+#: locale/model_attributes.rb:12
+msgid "PublicBody|First letter"
+msgstr "Primera letra"
-#: app/views/general/frontpage.rhtml:18
-msgid "e.g."
-msgstr "por ejemplo"
+#: locale/model_attributes.rb:13
+msgid "PublicBody|Publication scheme"
+msgstr "PublicBody|Publication scheme"
-#: app/views/user/show.rhtml:96
-msgid "edit text about you"
-msgstr "edite el texto sobre usted"
+#: locale/model_attributes.rb:14
+msgid "profile photo"
+msgstr "foto de perfil"
-#: app/views/user/show.rhtml:171
-msgid "email subscription"
-msgstr "suscripción de correo"
+#: locale/model_attributes.rb:15
+msgid "ProfilePhoto|Data"
+msgstr "ProfilePhoto|Data"
-#: app/views/request_mailer/very_overdue_alert.rhtml:4
-msgid "even during holidays"
-msgstr "incluso durante las vacaciones"
+#: locale/model_attributes.rb:16
+msgid "ProfilePhoto|Draft"
+msgstr "ProfilePhoto|Draft"
#: locale/model_attributes.rb:17
msgid "exim log"
msgstr "log exim"
-#: locale/model_attributes.rb:59
-msgid "exim log done"
-msgstr "log exim completado"
+#: locale/model_attributes.rb:18
+msgid "EximLog|Order"
+msgstr "EximLog|Order"
-#: app/views/request_mailer/requires_admin.rhtml:2
-msgid "has reported an"
-msgstr "ha denunciado un"
+#: locale/model_attributes.rb:19
+msgid "EximLog|Line"
+msgstr "EximLog|Line"
-#: app/views/request_mailer/overdue_alert.rhtml:1
-msgid "have delayed."
-msgstr "han retrasado."
+#: locale/model_attributes.rb:20
+msgid "comment"
+msgstr "comentario"
-#: locale/model_attributes.rb:56
-msgid "holiday"
-msgstr "vacaciones"
+#: locale/model_attributes.rb:21
+msgid "Comment|Comment type"
+msgstr "Comment|Comment type"
-#: app/views/request/_followup.rhtml:36 app/views/request/show.rhtml:70
-#: app/views/request/show.rhtml:80
-msgid "in term time"
-msgstr "durante el periodo escolar"
+#: locale/model_attributes.rb:22
+msgid "Comment|Body"
+msgstr "Comment|Body"
-#: app/views/public_body/list.rhtml:42
-msgid "in total"
-msgstr "en total"
+#: locale/model_attributes.rb:23
+msgid "Comment|Visible"
+msgstr "Comment|Visible"
-#: locale/model_attributes.rb:62
-msgid "incoming message"
-msgstr "incoming message"
+#: locale/model_attributes.rb:24
+msgid "Comment|Locale"
+msgstr "Comment|Locale"
-#: locale/model_attributes.rb:79
-msgid "info request"
-msgstr "info request"
+#: locale/model_attributes.rb:25
+msgid "outgoing message"
+msgstr "mensaje de salida"
-#: locale/model_attributes.rb:40
-msgid "info request event"
-msgstr "info request event"
+#: locale/model_attributes.rb:26
+msgid "OutgoingMessage|Body"
+msgstr "OutgoingMessage|Body"
-#: app/views/user/set_profile_about_me.rhtml:3
-#: app/views/user/signchangeemail.rhtml:3
-msgid "internal error"
-msgstr "error interno"
+#: locale/model_attributes.rb:27
+msgid "OutgoingMessage|Status"
+msgstr "OutgoingMessage|Status"
-#: app/views/request/show.rhtml:100
-msgid "is <strong>waiting for your clarification</strong>."
-msgstr "está <strong>esperando su aclaración</strong>."
+#: locale/model_attributes.rb:28
+msgid "OutgoingMessage|Message type"
+msgstr "OutgoingMessage|Message type"
-#: app/views/user/show.rhtml:71
-msgid "just to see how it works"
-msgstr "sólo para ver cómo funciona"
+#: locale/model_attributes.rb:29
+msgid "OutgoingMessage|Last sent at"
+msgstr "OutgoingMessage|Last sent at"
-#: app/views/comment/_single_comment.rhtml:10
-msgid "left an annotation"
-msgstr "dejó un comentario"
+#: locale/model_attributes.rb:30
+msgid "OutgoingMessage|What doing"
+msgstr "OutgoingMessage|What doing"
-#: app/views/user/_user_listing_single.rhtml:19
-#: app/views/user/_user_listing_single.rhtml:20
-msgid "made."
-msgstr "hecho."
+#: locale/model_attributes.rb:31
+msgid "track thing"
+msgstr "track thing"
-#: app/views/request/show.rhtml:74
-msgid "no later than"
-msgstr "no más tarde de"
+#: locale/model_attributes.rb:32
+msgid "TrackThing|Track query"
+msgstr "TrackThing|Track query"
-#: app/views/request/followup_bad.rhtml:18
-msgid ""
-"no longer exists. If you are trying to make\n"
-" From the request page, try replying to a particular message, rather than sending\n"
-" a general followup. If you need to make a general followup, and know\n"
-" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
-msgstr ""
-"ya no existe. \n"
-"Desde la página de la petición, intente responder a un mensaje en concreto, en vez de\n"
-" responder a la petición en general. Si necesita hacerlo y tiene una dirección de\n"
-" correo válida, por favor <a href=\"%s\">mándenosla</a>."
+#: locale/model_attributes.rb:33
+msgid "TrackThing|Track medium"
+msgstr "TrackThing|Track medium"
-#: app/views/request/show.rhtml:72
-msgid "normally"
-msgstr "normalmente"
+#: locale/model_attributes.rb:34
+msgid "TrackThing|Track type"
+msgstr "TrackThing|Track type"
-#: app/views/user/show.rhtml:114
-msgid "only"
-msgstr "sólo"
+#: locale/model_attributes.rb:35
+msgid "censor rule"
+msgstr "regla de censura"
-#: locale/model_attributes.rb:25
-msgid "outgoing message"
-msgstr "mensaje de salida"
+#: locale/model_attributes.rb:36
+msgid "CensorRule|Text"
+msgstr "CensorRule|Text"
-#: app/views/user/sign.rhtml:11
-msgid "please sign in as "
-msgstr "por favor abra una sesión como "
+#: locale/model_attributes.rb:37
+msgid "CensorRule|Replacement"
+msgstr "CensorRule|Replacement"
-#: app/views/user/sign.rhtml:28
-msgid "please sign in or make a new account."
-msgstr "por favor abra una sesión o cree una nueva cuenta."
+#: locale/model_attributes.rb:38
+msgid "CensorRule|Last edit editor"
+msgstr "CensorRule|Last edit editor"
-#: locale/model_attributes.rb:49
-msgid "post redirect"
-msgstr "post redirect"
+#: locale/model_attributes.rb:39
+msgid "CensorRule|Last edit comment"
+msgstr "CensorRule|Last edit comment"
-#: locale/model_attributes.rb:14
-msgid "profile photo"
-msgstr "foto de perfil"
+#: locale/model_attributes.rb:40
+msgid "info request event"
+msgstr "info request event"
-#: locale/model_attributes.rb:2
-msgid "public body"
-msgstr "organismo público"
+#: locale/model_attributes.rb:41
+msgid "InfoRequestEvent|Event type"
+msgstr "InfoRequestEvent|Event type"
-#: locale/model_attributes.rb:47
-msgid "raw email"
-msgstr "correo original"
+#: locale/model_attributes.rb:42
+msgid "InfoRequestEvent|Params yaml"
+msgstr "InfoRequestEvent|Params yaml"
-#: app/views/request_mailer/not_clarified_alert.rhtml:1
-msgid "request."
-msgstr "petición."
+#: locale/model_attributes.rb:43
+msgid "InfoRequestEvent|Described state"
+msgstr "InfoRequestEvent|Described state"
-#: app/views/request/show.rhtml:89
-msgid "requesting an internal review"
-msgstr "pidiendo una revisión interna"
+#: locale/model_attributes.rb:44
+msgid "InfoRequestEvent|Calculated state"
+msgstr "InfoRequestEvent|Calculated state"
-#: app/views/request_mailer/requires_admin.rhtml:3
-msgid ""
-"response as needing administrator attention. Take a look, and reply to this\n"
-"email to let them know what you are going to do about it."
-msgstr ""
-"respuesta necesita intervención del administrador. Revísela, y conteste a este\n"
-"correo para indicarles qué va a hacer al respecto."
+#: locale/model_attributes.rb:45
+msgid "InfoRequestEvent|Last described at"
+msgstr "InfoRequestEvent|Last described at"
-#: app/views/request/show.rhtml:102
-msgid "send a follow up message"
-msgstr "envíe un mensaje de seguimiento"
+#: locale/model_attributes.rb:46
+msgid "InfoRequestEvent|Prominence"
+msgstr "InfoRequestEvent|Prominence"
-#: app/views/request/_request_listing_via_event.rhtml:31
-msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr "enviada a {{public_body_name}} por {{info_request_user}} el {{date}}."
+#: locale/model_attributes.rb:47
+msgid "post redirect"
+msgstr "post redirect"
-#: app/views/request/show.rhtml:106
-msgid "sign in"
-msgstr "abrir sesión"
+#: locale/model_attributes.rb:48
+msgid "PostRedirect|Token"
+msgstr "PostRedirect|Token"
-#: app/views/user/wrong_user.rhtml:4
-msgid "sign out"
-msgstr "cerrar sesión"
+#: locale/model_attributes.rb:49
+msgid "PostRedirect|Uri"
+msgstr "PostRedirect"
-#: app/views/request_mailer/new_response.rhtml:2
-msgid "that you made to"
-msgstr "que hizo a"
+#: locale/model_attributes.rb:50
+msgid "PostRedirect|Post params yaml"
+msgstr "PostRedirect|Post params yaml"
-#: app/views/request_mailer/comment_on_alert.rhtml:6
-#: app/views/request_mailer/comment_on_alert_plural.rhtml:5
-#: app/views/request_mailer/new_response.rhtml:15
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:8
-#: app/views/request_mailer/not_clarified_alert.rhtml:9
-#: app/views/request_mailer/old_unclassified_updated.rhtml:8
-#: app/views/request_mailer/overdue_alert.rhtml:9
-#: app/views/request_mailer/stopped_responses.rhtml:16
-#: app/views/request_mailer/very_overdue_alert.rhtml:11
-#: app/views/track_mailer/event_digest.rhtml:66
-#: app/views/user_mailer/already_registered.rhtml:11
-#: app/views/user_mailer/changeemail_already_used.rhtml:10
-#: app/views/user_mailer/changeemail_confirm.rhtml:13
-#: app/views/user_mailer/confirm_login.rhtml:11
-msgid "the {{site_name}} team"
-msgstr "el equipo de {{site_name}}"
+#: locale/model_attributes.rb:51
+msgid "PostRedirect|Email token"
+msgstr "PostRedirect|Email token"
-#: app/views/user/show.rhtml:140
-msgid "this person"
-msgstr "esta persona"
+#: locale/model_attributes.rb:52
+msgid "PostRedirect|Reason params yaml"
+msgstr "PostRedirect|Reason params yaml"
-#: app/views/user/show.rhtml:113
-msgid ""
-"to change password, \n"
-" subscriptions and more"
-msgstr ""
-"para cambiar la contraseña, \n"
-" las suscripciones y más"
+#: locale/model_attributes.rb:53
+msgid "PostRedirect|Circumstance"
+msgstr "PostRedirect|Circumstance"
-#: app/views/request/new.rhtml:34
-msgid "to check that the info isn't already published."
-msgstr "comprobar que la información no esta ya publicada."
+#: locale/model_attributes.rb:54
+msgid "holiday"
+msgstr "vacaciones"
-#: app/views/request/show.rhtml:62
-msgid "to read"
-msgstr "leer"
+#: locale/model_attributes.rb:55
+msgid "Holiday|Day"
+msgstr "Holiday|Day"
-#: app/views/request/show.rhtml:106
-msgid "to send a follow up message."
-msgstr "mandar un mensaje de seguimiento."
+#: locale/model_attributes.rb:56
+msgid "Holiday|Description"
+msgstr "Holiday|Description"
-#: app/views/request/show.rhtml:45
-msgid "to {{public_body}}"
-msgstr "a {{public_body}}"
+#: locale/model_attributes.rb:57
+msgid "exim log done"
+msgstr "log exim completado"
-#: locale/model_attributes.rb:31
-msgid "track thing"
-msgstr "track thing"
+#: locale/model_attributes.rb:58
+msgid "EximLogDone|Filename"
+msgstr "EximLogDone|Filename"
-#: app/views/request/_hidden_correspondence.rhtml:32
-msgid "unexpected prominence on request event"
-msgstr "visibilidad inesperada en el evento de la petición"
+#: locale/model_attributes.rb:59
+msgid "EximLogDone|Last stat"
+msgstr "EximLogDone|Last stat"
-#: app/views/request/_request_listing_via_event.rhtml:38
-msgid "unknown event type indexed "
-msgstr "indexado tipo de evento desconocido "
+#: locale/model_attributes.rb:60
+msgid "incoming message"
+msgstr "incoming message"
-#: app/views/request/followup_bad.rhtml:29
-msgid "unknown reason "
-msgstr "motivo desconocido "
+#: locale/model_attributes.rb:61
+msgid "IncomingMessage|Cached attachment text clipped"
+msgstr "IncomingMessage|Cached attachment text clipped"
-#: app/models/info_request.rb:814 app/models/info_request_event.rb:333
-msgid "unknown status "
-msgstr "estado desconocido "
+#: locale/model_attributes.rb:62
+msgid "IncomingMessage|Cached main body text folded"
+msgstr "IncomingMessage|Cached main body text folded"
-#: app/views/user/show.rhtml:208
-msgid "unsubscribe"
-msgstr "cancelar suscripción"
+#: locale/model_attributes.rb:63
+msgid "IncomingMessage|Cached main body text unfolded"
+msgstr "IncomingMessage|Cached main body text unfolded"
-#: app/views/user/show.rhtml:180 app/views/user/show.rhtml:194
-msgid "unsubscribe all"
-msgstr "cancelar todas las suscripciones"
+#: locale/model_attributes.rb:64
+msgid "IncomingMessage|Sent at"
+msgstr "IncomingMessage|Sent at"
-#: app/views/request/show.rhtml:53
-msgid "useful information."
-msgstr "información útil."
+#: locale/model_attributes.rb:65
+msgid "IncomingMessage|Subject"
+msgstr "IncomingMessage|Subject"
+
+#: locale/model_attributes.rb:66
+msgid "IncomingMessage|Safe mail from"
+msgstr "IncomingMessage|Safe mail from"
+
+#: locale/model_attributes.rb:67
+msgid "IncomingMessage|Mail from domain"
+msgstr "IncomingMessage|Mail from domain"
#: locale/model_attributes.rb:68
-msgid "user"
-msgstr "usuario"
+msgid "IncomingMessage|Valid to reply to"
+msgstr "IncomingMessage|Valid to reply to"
-#: locale/model_attributes.rb:66
+#: locale/model_attributes.rb:69
msgid "user info request sent alert"
msgstr "user info request sent alert"
-#: app/views/user/show.rhtml:140
-msgid "you"
-msgstr "Usted"
+#: locale/model_attributes.rb:70
+msgid "UserInfoRequestSentAlert|Alert type"
+msgstr "UserInfoRequestSentAlert|Alert type"
-#: app/views/request/new.rhtml:6
-msgid ""
-"{{existing_request_user}} already\n"
-" created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n"
-" or edit the details below to make a new but similar request."
-msgstr ""
-"{{existing_request_user}} ya\n"
-" creó la misma petición el {{date}}. Puede ver la <a href=\"{{existing_request}}\">petición existente</a>,\n"
-" o editar la suya para enviar una nueva petición."
+#: locale/model_attributes.rb:71
+msgid "user"
+msgstr "usuario"
-#: app/views/request/_after_actions.rhtml:20
-msgid "{{info_request_user_name}} only:"
-msgstr "Sólo {{info_request_user_name}}:"
+#: locale/model_attributes.rb:72
+msgid "User|Email"
+msgstr "User|Email"
-#: app/views/general/frontpage.rhtml:51
-msgid "{{length_of_time}} ago"
-msgstr "hace {{length_of_time}}"
+#: locale/model_attributes.rb:73
+msgid "User|Name"
+msgstr "User|Name"
-#: app/views/request/_after_actions.rhtml:43
-msgid "{{public_body_name}} only:"
-msgstr "Sólo {{public_body_name}}:"
+#: locale/model_attributes.rb:74
+msgid "User|Hashed password"
+msgstr "User|Hashed password"
-#: app/views/public_body/view_email.rhtml:7
-msgid ""
-"{{site_name}} sends new requests to <strong>{{request_email}}</strong> for "
-"this authority."
-msgstr ""
-"{{site_name}} envía nuevas peticiones a <strong>{{request_email}}</strong> para "
-"este organismo."
+#: locale/model_attributes.rb:75
+msgid "User|Salt"
+msgstr "User|Salt"
-#: app/models/user.rb:122
-msgid "{{user_name}} (Banned)"
-msgstr "{{user_name}} (Expulsado)"
+#: locale/model_attributes.rb:76
+msgid "User|Email confirmed"
+msgstr "User|Email confirmed"
-#: app/views/request_mailer/comment_on_alert.rhtml:1
-msgid ""
-"{{user_name}} has annotated your {{law_used_short}} \n"
-"request. Follow this link to see what they wrote."
-msgstr ""
-"{{user_name}} ha comentado su petición {{law_used_short}}. \n"
-"Siga este enlace para ver lo que ha escrito."
+#: locale/model_attributes.rb:77
+msgid "User|Url name"
+msgstr "User|Url name"
-#: app/views/contact_mailer/user_message.rhtml:2
-msgid "{{user_name}} has used {{site_name}} to send you the message below."
-msgstr "{{user_name}} ha usado {{site_name}} para enviarle el siguiente mensaje."
+#: locale/model_attributes.rb:78
+msgid "User|Last daily track email"
+msgstr "User|Last daily track email"
-#: app/views/request/show.rhtml:36
-msgid ""
-"{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) made this "
-"{{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to "
-"{{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
-msgstr ""
-"{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) hizo esta "
-"petición {{law_used_full}} (<a href=\"{{request_admin_url}}\">admin</a>) a "
-"{{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
+#: locale/model_attributes.rb:79
+msgid "User|Admin level"
+msgstr "User|Admin level"
-#: app/views/request/show.rhtml:44
-msgid "{{user}} made this {{law_used_full}} request"
-msgstr "{{user}} hizo esta petición {{law_used_full}}"
+#: locale/model_attributes.rb:80
+msgid "User|Ban text"
+msgstr "User|Ban text"
+
+#: locale/model_attributes.rb:81
+msgid "User|About me"
+msgstr "User|About me"
+
+#: locale/model_attributes.rb:82
+msgid "info request"
+msgstr "info request"
+
+#: locale/model_attributes.rb:83
+msgid "InfoRequest|Title"
+msgstr "InfoRequest|Title"
+
+#: locale/model_attributes.rb:84
+msgid "InfoRequest|Described state"
+msgstr "InfoRequest|Described state"
+
+#: locale/model_attributes.rb:85
+msgid "InfoRequest|Awaiting description"
+msgstr "InfoRequest|Awaiting description"
+
+#: locale/model_attributes.rb:86
+msgid "InfoRequest|Prominence"
+msgstr "InfoRequest|Prominence"
+
+#: locale/model_attributes.rb:87
+msgid "InfoRequest|Url title"
+msgstr "InfoRequest|Url title"
+
+#: locale/model_attributes.rb:88
+msgid "InfoRequest|Law used"
+msgstr "InfoRequest|Law used"
+
+#: locale/model_attributes.rb:89
+msgid "InfoRequest|Allow new responses from"
+msgstr "InfoRequest|Allow new responses from"
+
+#: locale/model_attributes.rb:90
+msgid "InfoRequest|Handle rejected responses"
+msgstr "InfoRequest|Handle rejected responses"
+
+#: locale/model_attributes.rb:91
+msgid "InfoRequest|Idhash"
+msgstr "InfoRequest|Idhash"
diff --git a/locale/fr/app.po b/locale/fr/app.po
index 63fdf31f9..74dbbdb33 100644
--- a/locale/fr/app.po
+++ b/locale/fr/app.po
@@ -2,15 +2,19 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
-# <victoria@access-info.org>, 2011.
+# Translators:
+# <alex@alexskene.com>, 2011.
+# <borisjf@post.harvard.edu>, 2011.
# skenaja <alex@alexskene.com>, 2011.
+# <tanguim@gmail.com>, 2011.
+# <victoria@access-info.org>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2011-08-11 12:30+0200\n"
-"PO-Revision-Date: 2011-08-12 00:21+0000\n"
-"Last-Translator: vickyanderica <victoria@access-info.org>\n"
+"POT-Creation-Date: 2011-09-27 15:58+0200\n"
+"PO-Revision-Date: 2011-09-27 14:01+0000\n"
+"Last-Translator: dcabo <david.cabo@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,213 +22,181 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
-#: app/models/incoming_message.rb:866
-msgid ""
-"\n"
-"\n"
-"[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
-msgstr ""
-
-#: app/views/user/set_profile_about_me.rhtml:14
-msgid ""
-" This will appear on your {{site_name}} profile, to make it\n"
-" easier for others to get involved with what you're doing."
-msgstr ""
-
-#: app/views/comment/_comment_form.rhtml:16
+#: app/controllers/application_controller.rb:298
msgid ""
-" (<strong>no ranty</strong> politics, read our <a href=\"%s\">moderation "
-"policy</a>)"
+"<p>{{site_name}} is currently in maintenance. You can only view existing "
+"requests. You cannot make new ones, add followups or annotations, or "
+"otherwise change the database.</p> <p>{{read_only}}</p>"
msgstr ""
-#: app/views/request/upload_response.rhtml:40
-msgid ""
-" (<strong>patience</strong>, especially for large files, it may take a "
-"while!)"
+#: app/controllers/comment_controller.rb:55
+msgid "To post your annotation"
msgstr ""
-#: app/views/user/show.rhtml:59
-msgid " (you)"
+#: app/controllers/comment_controller.rb:56
+msgid "Then your annotation to {{info_request_title}} will be posted."
msgstr ""
-#: app/views/user/signchangepassword_send_confirm.rhtml:18
-msgid ""
-" <strong>Note:</strong>\n"
-" We will send you an email. Follow the instructions in it to change\n"
-" your password."
+#: app/controllers/comment_controller.rb:57
+msgid "Confirm your annotation to {{info_request_title}}"
msgstr ""
-#: app/views/user/contact.rhtml:35
-msgid " <strong>Privacy note:</strong> Your email address will be given to"
+#: app/controllers/comment_controller.rb:62
+msgid "Thank you for making an annotation!"
msgstr ""
-#: app/views/comment/new.rhtml:33
-msgid " <strong>Summarise</strong> the content of any information returned. "
+#: app/controllers/comment_controller.rb:73
+msgid " You will also be emailed updates about the request."
msgstr ""
-#: app/views/comment/new.rhtml:23
-msgid " Advise on how to <strong>best clarify</strong> the request."
+#: app/controllers/comment_controller.rb:75
+msgid " You are already being emailed updates about the request."
msgstr ""
-#: app/views/comment/new.rhtml:49
+#: app/controllers/help_controller.rb:63
msgid ""
-" Ideas on what <strong>other documents to request</strong> which the "
-"authority may hold. "
+"Your message has been sent. Thank you for getting in touch! We'll get back "
+"to you soon."
msgstr ""
-#: app/views/public_body/view_email.rhtml:30
-msgid ""
-" If you know the address to use, then please <a href=\"%s\">send it to us</a>.\n"
-" You may be able to find the address on their website, or by phoning them up and asking."
+#: app/controllers/public_body_controller.rb:82
+#: app/controllers/user_controller.rb:140
+msgid "There was an error with the words you entered, please try again."
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:26
-msgid ""
-" Include relevant links, such as to a campaign page, your blog or a\n"
-" twitter account. They will be made clickable. \n"
-" e.g."
+#: app/controllers/public_body_controller.rb:123
+msgid "beginning with"
msgstr ""
-#: app/views/comment/new.rhtml:27
-msgid ""
-" Link to the information requested, if it is <strong>already "
-"available</strong> on the Internet. "
+#: app/controllers/request_controller.rb:31
+#: app/controllers/request_controller.rb:303
+msgid "To send your FOI request"
msgstr ""
-#: app/views/comment/new.rhtml:29
-msgid ""
-" Offer better ways of <strong>wording the request</strong> to get the "
-"information. "
-msgstr ""
+#: app/controllers/request_controller.rb:32
+msgid "Then you'll be allowed to send FOI requests."
+msgstr "Ensuite, vous serez autorisé à envoyer des demandes d'accès."
-#: app/views/user/sign.rhtml:26
-msgid " Please sign in or make a new account."
+#: app/controllers/request_controller.rb:33
+msgid "Confirm your email address"
msgstr ""
-#: app/views/comment/new.rhtml:34
-msgid ""
-" Say how you've <strong>used the information</strong>, with links if "
-"possible."
+#: app/controllers/request_controller.rb:81
+msgid "To update the status of this FOI request"
msgstr ""
-#: app/views/comment/new.rhtml:28
-msgid ""
-" Suggest <strong>where else</strong> the requester might find the "
-"information. "
+#: app/controllers/request_controller.rb:82
+msgid "Then you can update the status of your request to "
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:11
-msgid " What are you investigating using Freedom of Information? "
+#: app/controllers/request_controller.rb:83
+msgid "Update the status of your request to "
msgstr ""
-#: app/controllers/comment_controller.rb:75
-msgid " You are already being emailed updates about the request."
-msgstr ""
+#: app/controllers/request_controller.rb:155
+msgid "View and search requests"
+msgstr "Visualiser et parcourir les demandes d'information"
-#: app/controllers/comment_controller.rb:73
-msgid " You will also be emailed updates about the request."
+#: app/controllers/request_controller.rb:285
+msgid ""
+"<p>You do not need to include your email in the request in order to get a "
+"reply, as we will ask for it on the next screen (<a "
+"href=\"%s\">details</a>).</p>"
msgstr ""
-#: app/views/request/upload_response.rhtml:5
-msgid " made by "
+#: app/controllers/request_controller.rb:287
+msgid ""
+"<p>You do not need to include your email in the request in order to get a "
+"reply (<a href=\"%s\">details</a>).</p>"
msgstr ""
-#: app/views/user/show.rhtml:123
-msgid " made no Freedom of Information requests using this site."
+#: app/controllers/request_controller.rb:289
+msgid ""
+"<p>We recommend that you edit your request and remove the email address.\n"
+" If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
msgstr ""
-#: app/views/user/contact.rhtml:36
-msgid " when you send this message."
+#: app/controllers/request_controller.rb:293
+msgid ""
+"<p>Your request contains a <strong>postcode</strong>. Unless it directly "
+"relates to the subject of your request, please remove any address as it will"
+" <strong>appear publicly on the Internet</strong>.</p>"
msgstr ""
-#: app/views/public_body/show.rhtml:80
-msgid "%d Freedom of Information request made using this site"
-msgid_plural "%d Freedom of Information requests made using this site"
-msgstr[0] ""
-msgstr[1] ""
-
-#: app/views/general/frontpage.rhtml:36
-msgid "%d request"
-msgid_plural "%d requests"
-msgstr[0] "other: %d sollicitude"
-msgstr[1] ""
-
-#: app/views/public_body/_body_listing_single.rhtml:21
-msgid "%d request made."
-msgid_plural "%d requests made."
-msgstr[0] ""
-msgstr[1] ""
-
-#: app/views/request/new.rhtml:102
-msgid "'Crime statistics by ward level for Wales'"
+#: app/controllers/request_controller.rb:304
+msgid "Then your FOI request to {{public_body_name}} will be sent."
msgstr ""
-#: app/views/request/new.rhtml:100
-msgid "'Pollution levels over time for the River Tyne'"
+#: app/controllers/request_controller.rb:305
+msgid "Confirm your FOI request to "
msgstr ""
-#: app/controllers/user_controller.rb:355
+#: app/controllers/request_controller.rb:316
msgid ""
-",\n"
-"\n"
-"\n"
-"\n"
-"Yours,\n"
-"\n"
-"{{user_name}}"
+"<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\n"
+" <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\n"
+" replied by then.</p>\n"
+" <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an \n"
+" annotation below telling people about your writing.</p>"
msgstr ""
-#: app/views/request/_after_actions.rhtml:9
-msgid "<a href=\"%s\">Add an annotation</a> (to help the requester or others)"
+#: app/controllers/request_controller.rb:343
+msgid "To classify the response to this FOI request"
msgstr ""
-#: app/views/public_body/list.rhtml:29
-msgid "<a href=\"%s\">Are we missing a public authority?</a>."
+#: app/controllers/request_controller.rb:344
+msgid "Then you can classify the FOI response you have got from "
msgstr ""
-#: app/views/request/_sidebar.rhtml:45
-msgid ""
-"<a href=\"%s\">Are you the owner of\n"
-" any commercial copyright on this page?</a>"
+#: app/controllers/request_controller.rb:345
+msgid "Classify an FOI response from "
msgstr ""
-#: app/views/general/search.rhtml:53
-msgid "<a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add one</a>."
+#: app/controllers/request_controller.rb:352
+msgid ""
+"Please choose whether or not you got some of the information that you "
+"wanted."
msgstr ""
-"<a href=\"%s\">Voir tout</a> ou <a href=\"%s\"> demandez nous d'ajouter "
-"une</a>."
-#: app/views/general/exception_caught.rhtml:13
-msgid "<a href=\"%s\">Contact us</a> to tell us about the problem</li>"
+#: app/controllers/request_controller.rb:358
+msgid ""
+"The request has been updated since you originally loaded this page. Please "
+"check for any new incoming messages below, and try again."
msgstr ""
-#: app/views/public_body/list.rhtml:43
-msgid "<a href=\"%s\">can't find the one you want?</a>"
+#: app/controllers/request_controller.rb:384
+msgid ""
+"Thank you for updating the status of the request '<a "
+"href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests "
+"below for you to classify."
msgstr ""
-#: app/views/request/_followup.rhtml:39 app/views/request/_followup.rhtml:46
-#: app/views/request/show.rhtml:83 app/views/request/show.rhtml:87
-msgid "<a href=\"%s\">details</a>"
+#: app/controllers/request_controller.rb:387
+msgid "Thank you for updating this request!"
msgstr ""
-#: app/views/request/_followup.rhtml:74
-msgid "<a href=\"%s\">what's that?</a>"
+#: app/controllers/request_controller.rb:395
+msgid ""
+"<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\n"
+"{{date_response_required_by}}</strong>.</p>"
msgstr ""
-#: app/views/public_body/show.rhtml:50
+#: app/controllers/request_controller.rb:399
msgid ""
-"<a href=\"{{url}}\">Make a new Freedom of Information request</a> to "
-"{{public_body_name}}"
+"<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you "
+"should have got a response promptly, and normally before the end of "
+"<strong>{{date_response_required_by}}</strong>.</p>"
msgstr ""
-#: app/controllers/request_game_controller.rb:23
+#: app/controllers/request_controller.rb:402
msgid ""
-"<p>All done! Thank you very much for your help.</p><p>There are <a "
-"href=\"{{helpus_url}}\">more things you can do</a> to help "
-"{{site_name}}.</p>"
+"<p>Thank you! Your request is long overdue, by more than "
+"{{very_late_number_of_days}} working days. Most requests should be answered "
+"within {{late_number_of_days}} working days. You might like to complain "
+"about this, see below.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:399
+#: app/controllers/request_controller.rb:405
msgid ""
"<p>Thank you! Here are some ideas on what to do next:</p>\n"
" <ul>\n"
@@ -238,2156 +210,2465 @@ msgid ""
" </ul>"
msgstr ""
-#: app/controllers/request_controller.rb:393
+#: app/controllers/request_controller.rb:420
msgid ""
-"<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you "
-"should have got a response promptly, and normally before the end of "
-"<strong>{{date_response_required_by}}</strong>.</p>"
+"Oh no! Sorry to hear that your request was refused. Here is what to do now."
msgstr ""
-#: app/controllers/request_controller.rb:389
+#: app/controllers/request_controller.rb:423
msgid ""
-"<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\n"
-"{{date_response_required_by}}</strong>.</p>"
+"<p>We're glad you got all the information that you wanted. If you write "
+"about or make use of the information, please come back and add an annotation"
+" below saying what you did.</p><p>If you found {{site_name}} useful, <a "
+"href=\"{{donation_url}}\">make a donation</a> to the charity which runs "
+"it.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:428
+#: app/controllers/request_controller.rb:426
msgid ""
-"<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a "
-"response within 20 days, or be told if it will take longer (<a "
-"href=\"{{review_url}}\">details</a>).</p>"
+"<p>We're glad you got some of the information that you wanted. If you found "
+"{{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to "
+"the charity which runs it.</p><p>If you want to try and get the rest of the "
+"information, here's what to do now.</p>"
msgstr ""
-#: app/controllers/request_controller.rb:431
+#: app/controllers/request_controller.rb:429
msgid ""
-"<p>Thank you! We'll look into what happened and try and fix it up.</p><p>If "
-"the error was a delivery failure, and you can find an up to date FOI email "
-"address for the authority, please tell us using the form below.</p>"
+"Please write your follow up message containing the necessary clarifications "
+"below."
msgstr ""
-#: app/controllers/request_controller.rb:396
+#: app/controllers/request_controller.rb:434
msgid ""
-"<p>Thank you! Your request is long overdue, by more than 40 working days. "
-"Most requests should be answered within 20 working days. You might like to "
-"complain about this, see below.</p>"
+"<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a "
+"response within {{late_number_of_days}} days, or be told if it will take "
+"longer (<a href=\"{{review_url}}\">details</a>).</p>"
msgstr ""
-#: app/controllers/user_controller.rb:495
+#: app/controllers/request_controller.rb:437
msgid ""
-"<p>Thanks for changing the text about you on your profile.</p>\n"
-" <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
+"<p>Thank you! We'll look into what happened and try and fix it up.</p><p>If "
+"the error was a delivery failure, and you can find an up to date FOI email "
+"address for the authority, please tell us using the form below.</p>"
msgstr ""
-#: app/controllers/user_controller.rb:417
-msgid ""
-"<p>Thanks for updating your profile photo.</p>\n"
-" <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
+#: app/controllers/request_controller.rb:440
+msgid "Please use the form below to tell us more."
msgstr ""
-#: app/controllers/request_controller.rb:284
+#: app/controllers/request_controller.rb:443
msgid ""
-"<p>We recommend that you edit your request and remove the email address.\n"
-" If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
+"If you have not done so already, please write a message below telling the "
+"authority that you have withdrawn your request. Otherwise they will not know"
+" it has been withdrawn."
msgstr ""
-#: app/controllers/request_controller.rb:417
-msgid ""
-"<p>We're glad you got all the information that you wanted. If you write "
-"about or make use of the information, please come back and add an annotation"
-" below saying what you did.</p><p>If you found {{site_name}} useful, <a "
-"href=\"{{donation_url}}\">make a donation</a> to the charity which runs "
-"it.</p>"
+#: app/controllers/request_controller.rb:548
+msgid "To send a follow up message to "
msgstr ""
-#: app/controllers/request_controller.rb:420
-msgid ""
-"<p>We're glad you got some of the information that you wanted. If you found "
-"{{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to "
-"the charity which runs it.</p><p>If you want to try and get the rest of the "
-"information, here's what to do now.</p>"
+#: app/controllers/request_controller.rb:549
+msgid "To reply to "
msgstr ""
-#: app/controllers/request_controller.rb:282
-msgid ""
-"<p>You do not need to include your email in the request in order to get a "
-"reply (<a href=\"%s\">details</a>).</p>"
+#: app/controllers/request_controller.rb:551
+msgid "Then you can write follow up message to "
msgstr ""
-#: app/controllers/request_controller.rb:280
-msgid ""
-"<p>You do not need to include your email in the request in order to get a "
-"reply, as we will ask for it on the next screen (<a "
-"href=\"%s\">details</a>).</p>"
+#: app/controllers/request_controller.rb:552
+msgid "Then you can write your reply to "
msgstr ""
-#: app/controllers/request_controller.rb:288
-msgid ""
-"<p>Your request contains a <strong>postcode</strong>. Unless it directly "
-"relates to the subject of your request, please remove any address as it will"
-" <strong>appear publicly on the Internet</strong>.</p>"
+#: app/controllers/request_controller.rb:554
+msgid "Write your FOI follow up message to "
msgstr ""
-#: app/controllers/request_controller.rb:311
-msgid ""
-"<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\n"
-" <p><strong>We will email you</strong> when there is a response, or after 20 working days if the authority still hasn't\n"
-" replied by then.</p>\n"
-" <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an \n"
-" annotation below telling people about your writing.</p>"
+#: app/controllers/request_controller.rb:555
+msgid "Write a reply to "
msgstr ""
-#: app/controllers/application_controller.rb:279
+#: app/controllers/request_controller.rb:562
msgid ""
-"<p>{{site_name}} is currently in maintenance. You can only view existing "
-"requests. You cannot make new ones, add followups or annotations, or "
-"otherwise change the database.</p> <p>{{read_only}}</p>"
+"Your follow up has not been sent because this request has been stopped to "
+"prevent spam. Please <a href=\"%s\">contact us</a> if you really want to "
+"send a follow up message."
msgstr ""
-#: app/views/user/confirm.rhtml:11
+#: app/controllers/request_controller.rb:565
msgid ""
-"<small>If you use web-based email or have \"junk mail\" filters, also check your\n"
-"bulk/spam mail folders. Sometimes, our messages are marked that way.</small>\n"
-"</p>"
+"You previously submitted that exact follow up message for this request."
msgstr ""
-#: app/views/request/new.rhtml:131
-msgid ""
-"<strong> Can I request information about myself?</strong>\n"
-"\t\t\t<a href=\"%s\">No! (Click here for details)</a>"
+#: app/controllers/request_controller.rb:588
+msgid "Your internal review request has been sent on its way."
msgstr ""
-#: app/views/general/search.rhtml:130
-msgid ""
-"<strong><code>commented_by:tony_bowden</code></strong> to search annotations"
-" made by Tony Bowden, typing the name as in the URL."
+#: app/controllers/request_controller.rb:590
+msgid "Your follow up message has been sent on its way."
msgstr ""
-"<strong><code>commented_by:tony_bowden</code></strong> Pour chercher des "
-"commentaires faits par Tony Bowden, écrivez le nom comme dans l'URL"
-#: app/views/general/search.rhtml:132
+#: app/controllers/request_controller.rb:712
msgid ""
-"<strong><code>filetype:pdf</code></strong> to find all responses with PDF "
-"attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
+"To upload a response, you must be logged in using an email address from "
msgstr ""
-"<strong><code>filetype:pdf</code></strong> Pour trouver toutes les réponses "
-"avec des documents PDF. Ou essayer ceux-ci: "
-"<code>{{list_of_file_extensions}}</code>"
-#: app/views/general/search.rhtml:131
-msgid ""
-"<strong><code>request:</code></strong> to restrict to a specific request, "
-"typing the title as in the URL."
+#: app/controllers/request_controller.rb:713
+msgid "Then you can upload an FOI response. "
msgstr ""
-"<strong><code>request:</code></strong> Pour vous limiter à une sollicitude "
-"concrète, tapez le titre comme dans l'URL."
-#: app/views/general/search.rhtml:129
-msgid ""
-"<strong><code>requested_by:julian_todd</code></strong> to search requests "
-"made by Julian Todd, typing the name as in the URL."
+#: app/controllers/request_controller.rb:714
+#: app/controllers/user_controller.rb:542
+msgid "Confirm your account on {{site_name}}"
msgstr ""
-"<strong><code>requested_by:julian_todd</code></strong> Pour chercher les "
-"sollicitudes faites par Julian Todd, écrivez le nom comme dans l'URL. "
-#: app/views/general/search.rhtml:128
-msgid ""
-"<strong><code>requested_from:home_office</code></strong> to search requests "
-"from the Home Office, typing the name as in the URL."
+#: app/controllers/request_controller.rb:741
+msgid "Please type a message and/or choose a file containing your response."
msgstr ""
-"<strong><code>requested_from:home_office</code></strong> Pour chercher les "
-"sollicitudes du Home Office, écrivez le nom comme dans l'URL. "
-#: app/views/general/search.rhtml:126
+#: app/controllers/request_controller.rb:747
msgid ""
-"<strong><code>status:</code></strong> to select based on the status or "
-"historical status of the request, see the <a href=\"{{statuses_url}}\">table"
-" of statuses</a> below."
+"Thank you for responding to this FOI request! Your response has been "
+"published below, and a link to your response has been emailed to "
msgstr ""
-#: app/views/general/search.rhtml:134
-msgid ""
-"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n"
-" and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n"
-" can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
+#: app/controllers/request_controller.rb:773
+msgid "To download the zip file"
msgstr ""
-"<strong><code>tag:charity</code></strong> pour trouvez tous les institutions"
-" publiques ou les sollicitudes avec la même étiquette. Vous pouvez inclure "
-"plusieurs étiquettes, ⏎ ou plusieurs étiquettes, ex. <code>tag:openlylocal "
-"AND tag:financial_transaction:335633</code>. Note that by default any of the"
-" tags⏎ can be present, you have to put <code>AND</code> explicitly if you "
-"only want results them all present."
-#: app/views/general/search.rhtml:127
-msgid ""
-"<strong><code>variety:</code></strong> to select type of thing to search "
-"for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
+#: app/controllers/request_controller.rb:774
+msgid "Then you can download a zip file of {{info_request_title}}."
msgstr ""
-#: app/views/comment/new.rhtml:56
-msgid ""
-"<strong>Advice</strong> on how to get a response that will satisfy the "
-"requester. </li>"
+#: app/controllers/request_controller.rb:775
+msgid "Log in to download a zip file of {{info_request_title}}"
msgstr ""
-#: app/views/request/_other_describe_state.rhtml:56
-msgid "<strong>All the information</strong> has been sent"
+#: app/controllers/request_game_controller.rb:23
+msgid ""
+"<p>All done! Thank you very much for your help.</p><p>There are <a "
+"href=\"{{helpus_url}}\">more things you can do</a> to help "
+"{{site_name}}.</p>"
msgstr ""
-#: app/views/request/_followup.rhtml:79
-msgid ""
-"<strong>Anything else</strong>, such as clarifying, prompting, thanking"
+#: app/controllers/request_game_controller.rb:40
+msgid "To play the request categorisation game"
msgstr ""
-#: app/views/request/details.rhtml:12
-msgid ""
-"<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \n"
-"a good internal knowledge of user behaviour on {{site_name}}. How, \n"
-"why and by whom requests are categorised is not straightforward, and there will\n"
-"be user error and ambiguity. You will also need to understand FOI law, and the\n"
-"way authorities use it. Plus you'll need to be an elite statistician. Please\n"
-"<a href=\"{{contact_path}}\">contact us</a> with questions."
+#: app/controllers/request_game_controller.rb:41
+msgid "Then you can play the request categorisation game."
msgstr ""
-#: app/views/request/_other_describe_state.rhtml:28
-msgid "<strong>Clarification</strong> has been requested"
+#: app/controllers/request_game_controller.rb:42
+msgid "Play the request categorisation game"
msgstr ""
-#: app/views/request/_other_describe_state.rhtml:14
-msgid ""
-"<strong>No response</strong> has been received\n"
-" <small>(maybe there's just an acknowledgement)</small>"
+#: app/controllers/request_game_controller.rb:52
+msgid "Thank you for helping us keep the site tidy!"
msgstr ""
-#: app/views/user/signchangeemail.rhtml:30
+#: app/controllers/services_controller.rb:21
msgid ""
-"<strong>Note:</strong>\n"
-" We will send an email to your new email address. Follow the\n"
-" instructions in it to confirm changing your email."
+"Hello! You can make Freedom of Information requests within {{country_name}} "
+"at {{link_to_website}}"
msgstr ""
-#: app/views/user/contact.rhtml:32
-msgid ""
-"<strong>Note:</strong> You're sending a message to yourself, presumably\n"
-" to try out how it works."
+#: app/controllers/track_controller.rb:98
+msgid "You are already being emailed updates about "
msgstr ""
-#: app/views/request/preview.rhtml:31
-msgid ""
-"<strong>Privacy note:</strong> If you want to request private information about\n"
-" yourself then <a href=\"%s\">click here</a>."
+#: app/controllers/track_controller.rb:111
+msgid "You will now be emailed updates about "
msgstr ""
-#: app/views/user/set_crop_profile_photo.rhtml:35
-msgid ""
-"<strong>Privacy note:</strong> Your photo will be shown in public on the Internet, \n"
-" wherever you do something on {{site_name}}."
+#: app/controllers/track_controller.rb:143
+msgid "To cancel this alert"
msgstr ""
-#: app/views/request/followup_preview.rhtml:37
-msgid ""
-"<strong>Privacy warning:</strong> Your message, and any response\n"
-" to it, will be displayed publicly on this website."
+#: app/controllers/track_controller.rb:144
+msgid "Then you can cancel the alert."
msgstr ""
-#: app/views/request/_other_describe_state.rhtml:52
-msgid "<strong>Some of the information</strong> has been sent "
+#: app/controllers/track_controller.rb:145
+msgid "Cancel a {{site_name}} alert"
msgstr ""
-#: app/views/general/exception_caught.rhtml:17
-msgid "<strong>Technical details:</strong>"
+#: app/controllers/track_controller.rb:154
+msgid "You will no longer be emailed updates about "
msgstr ""
-#: app/views/comment/new.rhtml:35
-msgid "<strong>Thank</strong> the public authority or "
+#: app/controllers/track_controller.rb:173
+msgid "To cancel these alerts"
msgstr ""
-#: app/views/request/new.rhtml:23
-msgid ""
-"<strong>browse</strong> the authority's <a href=\"%s\">publication "
-"scheme</a> or <strong>search</strong> their web site ..."
+#: app/controllers/track_controller.rb:174
+msgid "Then you can cancel the alerts."
msgstr ""
-#: app/views/request/show.rhtml:91
-msgid "<strong>did not have</strong> the information requested."
+#: app/controllers/track_controller.rb:175
+msgid "Cancel some {{site_name}} alerts"
msgstr ""
-#: app/views/request/new.rhtml:25
-msgid "<strong>search</strong> the authority's web site ..."
+#: app/controllers/track_controller.rb:183
+msgid "You will no longer be emailed updates for those alerts"
msgstr ""
-#: app/views/comment/new.rhtml:45
+#: app/controllers/user_controller.rb:43
+msgid "{{search_results}} matching '{{query}}'"
+msgstr "{{search_results}} correspondant à '{{query}}'"
+
+#: app/controllers/user_controller.rb:207
msgid ""
-"A <strong>summary</strong> of the response if you have received it by post. "
+"That doesn't look like a valid email address. Please check you have typed it"
+" correctly."
msgstr ""
-#: app/views/general/search.rhtml:162
-msgid "A public authority"
+#: app/controllers/user_controller.rb:221
+msgid "Then you can change your password on {{site_name}}"
msgstr ""
-#: app/views/request/_other_describe_state.rhtml:34
-msgid "A response will be sent <strong>by post</strong>"
+#: app/controllers/user_controller.rb:222
+msgid "Change your password {{site_name}}"
msgstr ""
-#: app/views/general/search.rhtml:151
-msgid "A strange reponse, required attention by the {{site_name}} team"
+#: app/controllers/user_controller.rb:249
+msgid "Your password has been changed."
msgstr ""
-#: app/views/general/search.rhtml:163
-msgid "A {{site_name}} user"
+#: app/controllers/user_controller.rb:266
+msgid "To change your email address used on {{site_name}}"
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:20
-msgid "About you:"
+#: app/controllers/user_controller.rb:267
+msgid "Then you can change your email address used on {{site_name}}"
msgstr ""
-#: app/models/info_request_event.rb:293
-msgid "Acknowledgement"
+#: app/controllers/user_controller.rb:268
+#: app/views/user/signchangeemail.rhtml:1
+#: app/views/user/signchangeemail.rhtml:11
+msgid "Change your email address used on {{site_name}}"
msgstr ""
-#: app/views/request/_sidebar.rhtml:5
-msgid "Act on what you've learnt"
+#: app/controllers/user_controller.rb:328
+msgid "You have now changed your email address used on {{site_name}}"
msgstr ""
-#: app/views/comment/new.rhtml:14
-msgid "Add an annotation to "
+#: app/controllers/user_controller.rb:347
+msgid "To send a message to "
msgstr ""
-#: app/views/request/show_response.rhtml:47
-msgid ""
-"Add an annotation to your request with choice quotes, or\n"
-" a <strong>summary of the response</strong>."
+#: app/controllers/user_controller.rb:348
+msgid "Then you can send a message to "
msgstr ""
-#: app/views/public_body/_body_listing_single.rhtml:26
-msgid "Added on {{date}}"
+#: app/controllers/user_controller.rb:349
+msgid "Send a message to "
msgstr ""
-#: app/models/user.rb:54
-msgid "Admin level is not included in list"
-msgstr "Le niveau administratif n'est pas inclus dans cette liste"
-
-#: app/views/request_mailer/requires_admin.rhtml:9
-msgid "Administration URL:"
+#: app/controllers/user_controller.rb:367
+msgid "Your message to {{recipient_user_name}} has been sent!"
msgstr ""
-#: app/views/general/search.rhtml:31 app/views/general/search.rhtml:121
-msgid "Advanced search tips"
-msgstr "Conseils pour une recherche avancée"
-
-#: app/views/comment/new.rhtml:52
+#: app/controllers/user_controller.rb:373
msgid ""
-"Advise on whether the <strong>refusal is legal</strong>, and how to complain"
-" about it if not."
+",\n"
+"\n"
+"\n"
+"\n"
+"Yours,\n"
+"\n"
+"{{user_name}}"
+msgstr ",\\n\\n\\n\\nCordialement,\\n\\n{{user_name}}"
+
+#: app/controllers/user_controller.rb:389
+msgid "You need to be logged in to change your profile photo."
msgstr ""
-#: app/views/request/new.rhtml:69
+#: app/controllers/user_controller.rb:416
+#: app/controllers/user_controller.rb:432
+msgid "Thank you for updating your profile photo"
+msgstr ""
+
+#: app/controllers/user_controller.rb:435
msgid ""
-"Air, water, soil, land, flora and fauna (including how these effect\n"
-" human beings)"
+"<p>Thanks for updating your profile photo.</p>\n"
+" <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
msgstr ""
-#: app/models/info_request_event.rb:309
-msgid "All information sent"
+#: app/controllers/user_controller.rb:451
+msgid "You need to be logged in to clear your profile photo."
msgstr ""
-#: app/views/general/search.rhtml:146
-msgid "All of the information requested has been received"
+#: app/controllers/user_controller.rb:460
+msgid "You've now cleared your profile photo"
msgstr ""
-#: app/views/public_body/list.rhtml:5
-msgid "Alphabet"
+#: app/controllers/user_controller.rb:488
+msgid "You need to be logged in to change the text about you on your profile."
msgstr ""
-#: app/views/public_body/_body_listing_single.rhtml:12
-msgid "Also called {{other_name}}."
+#: app/controllers/user_controller.rb:510
+msgid "You have now changed the text about you on your profile."
msgstr ""
-#: app/views/request_mailer/new_response.rhtml:12
+#: app/controllers/user_controller.rb:513
msgid ""
-"Although all responses are automatically published, we depend on\n"
-"you, the original requester, to evaluate them."
+"<p>Thanks for changing the text about you on your profile.</p>\n"
+" <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
msgstr ""
-#: app/views/request/_other_describe_state.rhtml:70
-msgid "An <strong>error message</strong> has been received"
+#: app/controllers/user_controller.rb:541
+msgid "Then you can sign in to {{site_name}}"
msgstr ""
-#: app/views/general/search.rhtml:161
-msgid "Annotation added to request"
-msgstr ""
+#: app/models/about_me_validator.rb:24
+msgid "Please keep it shorter than 500 characters"
+msgstr "Merci de vous limiter à 500 caractères "
-#: app/views/user/show.rhtml:34
-msgid "Annotations"
-msgstr ""
+#: app/models/change_email_validator.rb:29
+msgid "Please enter your old email address"
+msgstr "Merci d'entrer votre ancienne addresse e-mail"
-#: app/views/comment/new.rhtml:17
-msgid ""
-"Annotations are so anyone, including you, can help the requester with their "
-"request. For example:"
+#: app/models/change_email_validator.rb:30
+msgid "Please enter your new email address"
+msgstr "Merci d'entrer votre nouvelle addresse e-mail"
+
+#: app/models/change_email_validator.rb:31
+msgid "Please enter your password"
+msgstr "Merci d'entrer votre mot de passe"
+
+#: app/models/change_email_validator.rb:39
+msgid "Old email doesn't look like a valid address"
msgstr ""
-#: app/views/comment/new.rhtml:69
+#: app/models/change_email_validator.rb:44
msgid ""
-"Annotations will be posted publicly here, and are \n"
-" <strong>not</strong> sent to {{public_body_name}}."
+"Old email address isn't the same as the address of the account you are "
+"logged in with"
msgstr ""
-#: app/views/request/_after_actions.rhtml:6
-msgid "Anyone:"
+#: app/models/change_email_validator.rb:47
+msgid "Password is not correct"
msgstr ""
-#: app/views/request/new.rhtml:47
-msgid ""
-"Ask for <strong>specific</strong> documents or information, this site is not"
-" suitable for general enquiries."
+#: app/models/change_email_validator.rb:53
+msgid "New email doesn't look like a valid address"
msgstr ""
-#: app/views/request/show_response.rhtml:31
+#: app/models/comment.rb:59
+msgid "Please enter your annotation"
+msgstr "Merci de rédiger votre commentaire"
+
+#: app/models/comment.rb:62
msgid ""
-"At the bottom of this page, write a reply to them trying to persuade them to scan it in\n"
-" (<a href=\"%s\">more details</a>)."
+"Please write your annotation using a mixture of capital and lower case "
+"letters. This makes it easier for others to read."
msgstr ""
+"S'il vous plait écrivez votre commentaire en utilisant des lettres "
+"majuscules et minuscules. Ce sera plus facile de lire."
-#: app/views/request/upload_response.rhtml:33
-msgid "Attachment (optional):"
-msgstr ""
+#: app/models/contact_validator.rb:28 app/models/user.rb:38
+msgid "Please enter your name"
+msgstr "Merci d'entrer votre nom"
-#: app/models/info_request.rb:783
-msgid "Awaiting classification."
-msgstr ""
+#: app/models/contact_validator.rb:29 app/models/user.rb:36
+msgid "Please enter your email address"
+msgstr "Merci d'entrer votre addresse e-mail"
-#: app/models/info_request.rb:803
-msgid "Awaiting internal review."
-msgstr ""
+#: app/models/contact_validator.rb:30
+msgid "Please enter a subject"
+msgstr "Merci d'entrer un sujet"
-#: app/models/info_request.rb:785
-msgid "Awaiting response."
+#: app/models/contact_validator.rb:31
+msgid "Please enter the message you want to send"
+msgstr "Merci de rédiger le message que vous voulez envoyer"
+
+#: app/models/contact_validator.rb:34
+msgid "Email doesn't look like a valid address"
msgstr ""
-#: app/views/request/new.rhtml:43
+#: app/models/incoming_message.rb:867
msgid ""
-"Browse <a href=\"%s\">other requests</a> for examples of how to word your "
-"request."
+"\n"
+"\n"
+"[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
msgstr ""
-#: app/views/request/new.rhtml:41
+#: app/models/info_request.rb:34
+msgid "Please enter a summary of your request"
+msgstr "Merci de rédiger un récapitulatif de votre demande"
+
+#: app/models/info_request.rb:35
+msgid "Please write a summary with some text in it"
+msgstr "S'il vous plait écrivez un résumé avec du texte"
+
+#: app/models/info_request.rb:120
msgid ""
-"Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for "
-"examples of how to word your request."
+"Please write the summary using a mixture of capital and lower case letters. "
+"This makes it easier for others to read."
msgstr ""
+"S'il vous plait écrivez un résumé en utilisant des lettres majuscules et "
+"minuscules"
-#: app/views/request/show.rhtml:86
+#: app/models/info_request.rb:123
msgid ""
-"By law, under all circumstances, {{public_body_link}} should have responded "
-"by now"
+"Please keep the summary short, like in the subject of an email. You can use "
+"a phrase, rather than a full sentence."
msgstr ""
+"S'il vous plait soyez bref dans le résumé, comme dans le titre d'un email."
-#: app/views/request/show.rhtml:78
+#: app/models/info_request.rb:126
msgid ""
-"By law, {{public_body_link}} should normally have responded "
-"<strong>promptly</strong> and"
+"Please describe more what the request is about in the subject. There is no "
+"need to say it is an FOI request, we add that on anyway."
msgstr ""
+"Merci d'indiquer le thème de votre requête dans le champ \"Sujet\". Il n'est"
+" pas nécessaire d'indiquer qu'il s'agit d'une demande d'accès aux documents "
+"administratifs, nous le précisons par défaut."
-#: app/views/general/search.rhtml:17
+#: app/models/info_request.rb:395
msgid ""
-"Can't find it? <a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add"
-" it</a>."
+"This request has been set by an administrator to \"allow new responses from "
+"nobody\""
msgstr ""
-"Vous ne l'avez pas truové? <a href=\"%s\">Voyez tous</a> ou <a "
-"href=\"%s\">demandez nous de l'inclure</a>."
-#: app/controllers/track_controller.rb:145
-msgid "Cancel a {{site_name}} alert"
+#: app/models/info_request.rb:401
+msgid ""
+"Only the authority can reply to this request, but there is no \"From\" "
+"address to check against"
msgstr ""
-#: app/controllers/track_controller.rb:175
-msgid "Cancel some {{site_name}} alerts"
+#: app/models/info_request.rb:405
+msgid ""
+"Only the authority can reply to this request, and I don't recognise the "
+"address this reply was sent from"
msgstr ""
-#: locale/model_attributes.rb:39
-msgid "CensorRule|Last edit comment"
+#: app/models/info_request.rb:785
+msgid "Awaiting classification."
msgstr ""
-#: locale/model_attributes.rb:38
-msgid "CensorRule|Last edit editor"
+#: app/models/info_request.rb:787
+msgid "Awaiting response."
msgstr ""
-#: locale/model_attributes.rb:37
-msgid "CensorRule|Replacement"
+#: app/models/info_request.rb:789
+msgid "Delayed."
msgstr ""
-#: locale/model_attributes.rb:36
-msgid "CensorRule|Text"
+#: app/models/info_request.rb:791
+msgid "Long overdue."
msgstr ""
-#: lib/public_body_categories_en.rb:14
-msgid "Central government"
+#: app/models/info_request.rb:793
+msgid "Information not held."
msgstr ""
-#: app/views/user/signchangeemail.rhtml:37
-msgid "Change email on {{site_name}}"
+#: app/models/info_request.rb:795
+msgid "Refused."
msgstr ""
-#: app/views/user/signchangepassword.rhtml:27
-msgid "Change password on {{site_name}}"
+#: app/models/info_request.rb:797
+msgid "Partially successful."
msgstr ""
-#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104
-msgid "Change profile photo"
+#: app/models/info_request.rb:799
+msgid "Successful."
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:1
-msgid "Change the text about you on your profile at {{site_name}}"
+#: app/models/info_request.rb:801
+msgid "Waiting clarification."
msgstr ""
-#: app/views/user/show.rhtml:107
-msgid "Change your email"
+#: app/models/info_request.rb:803
+msgid "Handled by post."
msgstr ""
-#: app/controllers/user_controller.rb:250
-#: app/views/user/signchangeemail.rhtml:1
-#: app/views/user/signchangeemail.rhtml:11
-msgid "Change your email address used on {{site_name}}"
+#: app/models/info_request.rb:805
+msgid "Awaiting internal review."
msgstr ""
-#: app/views/user/show.rhtml:106
-msgid "Change your password"
+#: app/models/info_request.rb:807
+msgid "Delivery error"
msgstr ""
-#: app/views/user/signchangepassword.rhtml:1
-#: app/views/user/signchangepassword.rhtml:11
-#: app/views/user/signchangepassword_send_confirm.rhtml:1
-#: app/views/user/signchangepassword_send_confirm.rhtml:9
-msgid "Change your password on {{site_name}}"
+#: app/models/info_request.rb:809
+msgid "Unusual response."
msgstr ""
-#: app/controllers/user_controller.rb:204
-msgid "Change your password {{site_name}}"
+#: app/models/info_request.rb:811
+msgid "Withdrawn by the requester."
msgstr ""
-#: app/views/public_body/show.rhtml:15 app/views/public_body/show.rhtml:17
-msgid "Charity registration"
+#: app/models/info_request.rb:816 app/models/info_request_event.rb:318
+msgid "unknown status "
msgstr ""
-#: app/views/general/exception_caught.rhtml:6
-msgid "Check for mistakes if you typed or copied the address."
+#: app/models/info_request_event.rb:306
+msgid "Response"
msgstr ""
-#: app/views/request/followup_preview.rhtml:14
-#: app/views/request/preview.rhtml:7
-msgid "Check you haven't included any <strong>personal information</strong>."
+#: app/models/info_request_event.rb:313
+msgid "Internal review request"
msgstr ""
-#: app/models/info_request_event.rb:331
+#: app/models/info_request_event.rb:316
msgid "Clarification"
msgstr ""
-#: app/models/info_request_event.rb:295
-msgid "Clarification required"
+#: app/models/info_request_event.rb:320
+msgid "Follow up"
msgstr ""
-#: app/controllers/request_controller.rb:339
-msgid "Classify an FOI response from "
+#: app/models/info_request_event.rb:323
+msgid "display_status only works for incoming and outgoing messages right now"
msgstr ""
-#: app/views/request_mailer/very_overdue_alert.rhtml:6
-msgid ""
-"Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\n"
-"review, asking them to find out why response to the request has been so slow."
+#: app/models/outgoing_message.rb:63
+msgid "Dear {{public_body_name}},"
msgstr ""
-#: app/views/request_mailer/overdue_alert.rhtml:5
-msgid ""
-"Click on the link below to send a message to {{public_body}} reminding them "
-"to reply to your request."
+#: app/models/outgoing_message.rb:68
+msgid "Yours sincerely,"
msgstr ""
+"Je vous prie de croire, Monsieur/Madame, à l'assurance de mes salutations "
+"distinguées,"
-#: locale/model_attributes.rb:22
-msgid "Comment|Body"
+#: app/models/outgoing_message.rb:70
+msgid "Yours faithfully,"
msgstr ""
+"Je vous prie de croire, Monsieur/Madame, à l'assurance de mes salutations "
+"distinguées,"
-#: locale/model_attributes.rb:21
-msgid "Comment|Comment type"
+#: app/models/outgoing_message.rb:74
+msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
msgstr ""
-#: locale/model_attributes.rb:24
-msgid "Comment|Locale"
+#: app/models/outgoing_message.rb:146
+msgid "Please give details explaining why you want a review"
msgstr ""
+"Merci d'indiquer la/les raison(s) pour laquelle/lesquelles vous demandez une"
+" révision "
-#: locale/model_attributes.rb:23
-msgid "Comment|Visible"
-msgstr ""
+#: app/models/outgoing_message.rb:148
+msgid "Please enter your follow up message"
+msgstr "Merci de rédiger votre message de relance"
-#: app/models/track_thing.rb:147
-msgid "Confirm you want to be emailed about new requests"
+#: app/models/outgoing_message.rb:151
+msgid "Please enter your letter requesting information"
+msgstr "Merci de rédiger votre demande d'accès aux documents administratifs"
+
+#: app/models/outgoing_message.rb:157
+msgid ""
+"Please sign at the bottom with your name, or alter the \"%{signoff}\" "
+"signature"
msgstr ""
+"S'il vous plait signer à la fin avec votre nom, ou changez la \"%{signoff}\""
+" signature"
-#: app/models/track_thing.rb:214
+#: app/models/outgoing_message.rb:160
msgid ""
-"Confirm you want to be emailed about new requests or responses matching "
-"'{{query}}'"
+"Please write your message using a mixture of capital and lower case letters."
+" This makes it easier for others to read."
msgstr ""
+"S'il vous plait écrivez votre message en utilisant des lettres majuscules et"
+" minuscules. Ce sera plus facile de lire."
-#: app/models/track_thing.rb:198
-msgid "Confirm you want to be emailed about requests by '{{user_name}}'"
+#: app/models/outgoing_message.rb:163
+msgid "Please choose what sort of reply you are making."
+msgstr "Merci de choisir le type de réponse que vous entrez."
+
+#: app/models/profile_photo.rb:91
+msgid "Please choose a file containing your photo."
+msgstr "Choisissez un fichier qui contient votre photo."
+
+#: app/models/profile_photo.rb:96
+msgid ""
+"Couldn't understand the image file that you uploaded. PNG, JPEG, GIF and "
+"many other common image file formats are supported."
msgstr ""
+"Nous ne pouvons utiliser le fichier image que vous nous avez soumis. Nous "
+"acceptons les fichiers PNG, JPEG et GIF, ainsi qu'un grand nombre d'autres "
+"formats communément utilisés."
-#: app/models/track_thing.rb:182
+#: app/models/profile_photo.rb:101
+msgid "Failed to convert image to a PNG"
+msgstr "Nous n'avons pas pu convertir l'image au format PNG."
+
+#: app/models/profile_photo.rb:105
msgid ""
-"Confirm you want to be emailed about requests to '{{public_body_name}}'"
+"Failed to convert image to the correct size: at %{cols}x%{rows}, need "
+"%{width}x%{height}"
msgstr ""
+"Nous n'avons pas pu changer les dimensions de l'image: at %{cols}x%{rows}, "
+"need %{width}x%{height}"
-#: app/models/track_thing.rb:163
-msgid "Confirm you want to be emailed when an FOI request succeeds"
+#: app/models/public_body.rb:36
+msgid "Name can't be blank"
+msgstr "Le nom ne peut pas être effacé"
+
+#: app/models/public_body.rb:37
+msgid "URL name can't be blank"
+msgstr "Le champs URL ne peut être vide"
+
+#: app/models/public_body.rb:39
+msgid "Short name is already taken"
+msgstr "Ce nom est déjà pris"
+
+#: app/models/public_body.rb:40
+msgid "Name is already taken"
+msgstr "Le nom est déjà pris"
+
+#: app/models/request_mailer.rb:218
+msgid "Could not identify the request from the email address"
msgstr ""
-#: app/controllers/request_controller.rb:300
-msgid "Confirm your FOI request to "
+#: app/models/track_mailer.rb:25
+msgid "Your {{site_name}} email alert"
msgstr ""
-#: app/controllers/request_controller.rb:703
-#: app/controllers/user_controller.rb:515
-msgid "Confirm your account on {{site_name}}"
+#: app/models/track_thing.rb:83 app/views/general/search.rhtml:54
+msgid "users"
+msgstr "utilisateurs"
+
+#: app/models/track_thing.rb:86 app/views/general/search.rhtml:103
+#: app/views/request/_request_filter_form.rhtml:14
+msgid "comments"
+msgstr "commentaires"
+
+#: app/models/track_thing.rb:89 app/views/general/search.rhtml:55
+msgid "authorities"
+msgstr "institutions"
+
+#: app/models/track_thing.rb:92 app/models/track_thing.rb:111
+#: app/models/track_thing.rb:113 app/views/general/search.rhtml:53
+msgid "requests"
+msgstr "demandes"
+
+#: app/models/track_thing.rb:95
+msgid "between two dates"
+msgstr "entre deux dates"
+
+#: app/models/track_thing.rb:98
+msgid "unsuccessful"
+msgstr "infructueux/se"
+
+#: app/models/track_thing.rb:101
+msgid "successful"
+msgstr "fructueux/se"
+
+#: app/models/track_thing.rb:104
+msgid "awaiting a response"
+msgstr "en attente d'une réponse"
+
+#: app/models/track_thing.rb:112
+msgid "requests which are {{list_of_statuses}}"
+msgstr "demandes qui sont"
+
+#: app/models/track_thing.rb:112 app/models/track_thing.rb:120
+msgid " or "
msgstr ""
-#: app/controllers/comment_controller.rb:57
-msgid "Confirm your annotation to {{info_request_title}}"
+#: app/models/track_thing.rb:116
+msgid "anything"
msgstr ""
-#: app/models/user_mailer.rb:34
-msgid "Confirm your new email address on {{site_name}}"
+#: app/models/track_thing.rb:122
+msgid "{{list_of_things}} matching text '{{search_query}}'"
+msgstr "{{list_of_things}} correspondant au texte '{{search_query}}'"
+
+#: app/models/track_thing.rb:195
+msgid "'{{link_to_request}}', a request"
msgstr ""
-#: app/views/layouts/default.rhtml:127
-msgid "Contact {{site_name}}"
-msgstr "Contact {{site_name}}"
+#: app/models/track_thing.rb:196
+msgid "Track this request by email"
+msgstr ""
-#: app/models/request_mailer.rb:210
-msgid "Could not identify the request from the email address"
+#: app/models/track_thing.rb:197
+msgid "You are already tracking this request by email"
msgstr ""
-#: app/models/profile_photo.rb:96
-msgid ""
-"Couldn't understand the image file that you uploaded. PNG, JPEG, GIF and "
-"many other common image file formats are supported."
+#: app/models/track_thing.rb:199 app/models/track_thing.rb:200
+msgid "New updates for the request '{{request_title}}'"
msgstr ""
-"Nous n'avons pas pu comprendre le format de l'image que vous avais "
-"téléchargé. D’autres formats tels que PNG, JPEG ou GIF sont admis ."
-#: app/views/user/set_crop_profile_photo.rhtml:6
-msgid "Crop your profile photo"
+#: app/models/track_thing.rb:202
+msgid "To follow updates to the request '{{request_title}}'"
msgstr ""
+"Pour suivre les mises à jour de cette demande d'information "
+"'{{request_title}}'"
-#: app/views/request/new.rhtml:74
+#: app/models/track_thing.rb:203
msgid ""
-"Cultural sites and built structures (as they may be affected by the\n"
-" environmental factors listed above)"
+"Then you will be emailed whenever the request '{{request_title}}' is "
+"updated."
msgstr ""
-#: app/views/request/show.rhtml:68
-msgid ""
-"Currently <strong>waiting for a response</strong> from {{public_body_link}},"
-" they must respond promptly and"
+#: app/models/track_thing.rb:204
+msgid "Confirm you want to follow updates to the request '{{request_title}}'"
msgstr ""
-#: app/models/info_request_event.rb:299
-msgid "Deadline Extended"
+#: app/models/track_thing.rb:211
+msgid "any <a href=\"/list\">new requests</a>"
msgstr ""
-#: app/models/outgoing_message.rb:57
-msgid "Dear "
+#: app/models/track_thing.rb:212
+msgid "Email me when there are new requests"
msgstr ""
-#: app/models/info_request.rb:787
-msgid "Delayed."
+#: app/models/track_thing.rb:213
+msgid "You are being emailed when there are new requests"
msgstr ""
-#: app/models/info_request.rb:805 app/models/info_request_event.rb:315
-msgid "Delivery error"
+#: app/models/track_thing.rb:215 app/models/track_thing.rb:216
+msgid "New Freedom of Information requests"
msgstr ""
-#: app/views/request/details.rhtml:1 app/views/request/details.rhtml:2
-msgid "Details of request '"
+#: app/models/track_thing.rb:218
+msgid "To be emailed about any new requests"
msgstr ""
-#: app/views/general/search.rhtml:50 app/views/general/search.rhtml:62
-msgid "Did you mean: {{correction}}"
-msgstr "Vous vouliez dire: {{correction}}"
+#: app/models/track_thing.rb:219
+msgid "Then you will be emailed whenever anyone makes a new FOI request."
+msgstr ""
-#: app/views/outgoing_mailer/_followup_footer.rhtml:1
-msgid ""
-"Disclaimer: This message and any reply that you make will be published on "
-"the internet. Our privacy and copyright policies:"
+#: app/models/track_thing.rb:220
+msgid "Confirm you want to be emailed about new requests"
msgstr ""
-#: app/views/request/_view_html_prefix.rhtml:6
-msgid "Download original attachment"
+#: app/models/track_thing.rb:227
+msgid "any <a href=\"/list/successful\">successful requests</a>"
msgstr ""
-#: app/views/request/_followup.rhtml:85
-msgid ""
-"Edit and add <strong>more details</strong> to the message above,\n"
-" explaining why you are dissatisfied with their response."
+#: app/models/track_thing.rb:228
+msgid "Email me new successful responses "
msgstr ""
-#: app/views/admin_public_body/_locale_selector.rhtml:2
-msgid "Edit language version:"
+#: app/models/track_thing.rb:229
+msgid "You are being emailed about any new successful responses"
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:9
-msgid "Edit text about you"
+#: app/models/track_thing.rb:231 app/models/track_thing.rb:232
+msgid "Successful Freedom of Information requests"
msgstr ""
-#: app/models/user.rb:135
-msgid "Either the email or password was not recognised, please try again."
+#: app/models/track_thing.rb:234
+msgid "To be emailed about any successful requests"
msgstr ""
-#: app/models/user.rb:137
-msgid ""
-"Either the email or password was not recognised, please try again. Or create"
-" a new account using the form on the right."
+#: app/models/track_thing.rb:235
+msgid "Then you will be emailed whenever an FOI request succeeds."
msgstr ""
-#: app/models/contact_validator.rb:34
-msgid "Email doesn't look like a valid address"
+#: app/models/track_thing.rb:236
+msgid "Confirm you want to be emailed when an FOI request succeeds"
msgstr ""
-#: app/views/comment/_comment_form.rhtml:8
-msgid "Email me future updates to this request"
-msgstr "Écrivez-moi avec les nouveautés de cette sollicitude"
+#: app/models/track_thing.rb:246
+msgid "'{{link_to_authority}}', a public authority"
+msgstr ""
-#: app/models/track_thing.rb:155
-msgid "Email me new successful responses "
+#: app/models/track_thing.rb:247
+msgid "Track requests to {{public_body_name}} by email"
msgstr ""
-#: app/models/track_thing.rb:139
-msgid "Email me when there are new requests"
+#: app/models/track_thing.rb:248
+msgid "You are already tracking requests to {{public_body_name}} by email"
msgstr ""
-#: app/views/user/show.rhtml:36
-msgid "Email subscriptions"
+#: app/models/track_thing.rb:253
+msgid ""
+"To be emailed about requests made using {{site_name}} to the public "
+"authority '{{public_body_name}}'"
msgstr ""
-#: app/views/general/search.rhtml:123
+#: app/models/track_thing.rb:254
msgid ""
-"Enter words that you want to find separated by spaces, e.g. <strong>climbing"
-" lane</strong>"
+"Then you will be emailed whenever someone requests something or gets a "
+"response from '{{public_body_name}}'."
msgstr ""
-"Écrivez les mots que vous voulez trouver séparés avec des espaces, ex. "
-"<strong>climbing lane</strong>"
-#: app/views/request/upload_response.rhtml:23
+#: app/models/track_thing.rb:255
msgid ""
-"Enter your response below. You may attach one file (use email, or \n"
-"<a href=\"%s\">contact us</a> if you need more)."
+"Confirm you want to be emailed about requests to '{{public_body_name}}'"
msgstr ""
-#: app/views/public_body/show.rhtml:96
-msgid "Environmental Information Regulations requests made"
+#: app/models/track_thing.rb:262
+msgid "'{{link_to_user}}', a person"
msgstr ""
-#: app/views/public_body/show.rhtml:69
-msgid "Environmental Information Regulations requests made using this site"
+#: app/models/track_thing.rb:263
+msgid "Track this person by email"
msgstr ""
-#: app/views/request/details.rhtml:4
-msgid "Event history"
+#: app/models/track_thing.rb:264
+msgid "You are already tracking this person by email"
msgstr ""
-#: app/views/request/_sidebar.rhtml:41
-msgid "Event history details"
+#: app/models/track_thing.rb:266 app/models/track_thing.rb:267
+msgid "FOI requests by '{{user_name}}'"
msgstr ""
-#: app/views/request/new.rhtml:124
-msgid ""
-"Everything that you enter on this page \n"
-" will be <strong>displayed publicly</strong> on\n"
-" this website forever (<a href=\"%s\">why?</a>)."
+#: app/models/track_thing.rb:269
+msgid "To be emailed about requests by '{{user_name}}'"
msgstr ""
-#: app/views/request/new.rhtml:116
+#: app/models/track_thing.rb:270
msgid ""
-"Everything that you enter on this page, including <strong>your name</strong>, \n"
-" will be <strong>displayed publicly</strong> on\n"
-" this website forever (<a href=\"%s\">why?</a>)."
+"Then you will be emailed whenever '{{user_name}}' requests something or gets"
+" a response."
msgstr ""
-#: locale/model_attributes.rb:60
-msgid "EximLogDone|Filename"
+#: app/models/track_thing.rb:271
+msgid "Confirm you want to be emailed about requests by '{{user_name}}'"
msgstr ""
-#: locale/model_attributes.rb:61
-msgid "EximLogDone|Last stat"
+#: app/models/track_thing.rb:279
+msgid "Track things matching this search by email"
msgstr ""
-#: locale/model_attributes.rb:19
-msgid "EximLog|Line"
+#: app/models/track_thing.rb:280
+msgid "You are already tracking things matching this search by email"
msgstr ""
+"Vous nous avez déjà demandé de vous tenir au courant des évolutions de cette"
+" recherche par e-mail"
-#: locale/model_attributes.rb:18
-msgid "EximLog|Order"
+#: app/models/track_thing.rb:282 app/models/track_thing.rb:283
+msgid "Requests or responses matching your saved search"
msgstr ""
-#: app/views/public_body/view_email.rhtml:3
-msgid "FOI email address for {{public_body}}"
+#: app/models/track_thing.rb:285
+msgid "To follow requests and responses matching your search"
msgstr ""
+"Pour suivre les demandes d'information et les réponses correspondant à votre"
+" recherche"
-#: app/views/user/show.rhtml:33
-msgid "FOI requests"
+#: app/models/track_thing.rb:286
+msgid ""
+"Then you will be emailed whenever a new request or response matches your "
+"search."
msgstr ""
-#: app/models/track_thing.rb:193 app/models/track_thing.rb:194
-msgid "FOI requests by '{{user_name}}'"
+#: app/models/track_thing.rb:287
+msgid ""
+"Confirm you want to be emailed about new requests or responses matching your"
+" search"
msgstr ""
-#: app/models/profile_photo.rb:101
-msgid "Failed to convert image to a PNG"
-msgstr "Je n'ais pas pu convertir l'image en PNG"
+#: app/models/user.rb:40
+msgid "Please enter a password"
+msgstr "Merci d'entrer un mot de passe"
-#: app/models/profile_photo.rb:105
-msgid ""
-"Failed to convert image to the correct size: at %{cols}x%{rows}, need "
-"%{width}x%{height}"
-msgstr ""
-"Nous n'avons pas pu changer la dimension de l'image: at %{cols}x%{rows}, "
-"need %{width}x%{height}"
+#: app/models/user.rb:51
+msgid "Please enter the same password twice"
+msgstr "Merci d'entrer le même mot de passe deux fois"
-#: app/views/request/new.rhtml:21
-msgid "First,"
+#: app/models/user.rb:56
+msgid "Admin level is not included in list"
+msgstr "Le niveau administratif n'est pas inclus dans cette liste"
+
+#: app/models/user.rb:117
+msgid "Please enter a valid email address"
+msgstr "Merci d'entrer une adresse e-mail valide"
+
+#: app/models/user.rb:120
+msgid "Please enter your name, not your email address, in the name field."
msgstr ""
+"Merci d'indiquer votre nom, non pas votre e-mail, dans le champ réservée au "
+"nom."
-#: app/views/general/frontpage.rhtml:8
-msgid ""
-"First, type in the <strong>name of the UK public authority</strong> you'd \n"
-" <br>like information from. <strong>By law, they have to respond</strong>\n"
-" (<a href=\"%s\">why?</a>)."
+#: app/models/user.rb:133
+msgid "{{user_name}} (Banned)"
msgstr ""
-"Écrivez en premier lieu le <strong> nom de l'institution publique</strong> "
-"de laquelle vous voulez recevoir ⏎ <br>l'information<strong> Selon la loi, "
-"ils doivent vous répondre</strong>⏎ (<a href=\"%s\">pourquoi?</a>)."
-#: app/views/request_mailer/old_unclassified_updated.rhtml:4
-msgid "Follow this link to see the request:"
+#: app/models/user.rb:146
+msgid "Either the email or password was not recognised, please try again."
msgstr ""
-#: app/models/info_request_event.rb:335
-msgid "Follow up"
+#: app/models/user.rb:148
+msgid ""
+"Either the email or password was not recognised, please try again. Or create"
+" a new account using the form on the right."
msgstr ""
-#: app/views/general/search.rhtml:159
-msgid "Follow up message sent by requester"
+#: app/models/user_mailer.rb:34
+msgid "Confirm your new email address on {{site_name}}"
msgstr ""
-#: app/views/public_body/view_email.rhtml:14
-msgid "Follow up messages to existing requests are sent to "
+#: app/models/user_mailer.rb:45
+msgid "Unable to change email address on {{site_name}}"
msgstr ""
-#: app/views/request/_followup.rhtml:16
-msgid ""
-"Follow ups and new responses to this request have been stopped to prevent "
-"spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and"
-" need to send a follow up."
+#: app/views/admin_public_body/_locale_selector.rhtml:2
+msgid "Edit language version:"
+msgstr "Changer la langue :"
+
+#: app/views/comment/_comment_form.rhtml:8
+msgid "Email me future updates to this request"
+msgstr "Me prévenir par e-mail quand cette demande évolue"
+
+#: app/views/comment/_comment_form.rhtml:15
+msgid "Preview your annotation"
msgstr ""
-#: app/views/public_body/show.rhtml:61
+#: app/views/comment/_comment_form.rhtml:16
msgid ""
-"For an unknown reason, it is not possible to make a request to this "
-"authority."
+" (<strong>no ranty</strong> politics, read our <a href=\"%s\">moderation "
+"policy</a>)"
msgstr ""
-"Par des raisons que nous méconnaissons, ce n'est pas possible d'envoyer des "
-"sollicitudes à cette institution"
-#: app/views/user/_signin.rhtml:21
-msgid "Forgotten your password?"
+#: app/views/comment/_single_comment.rhtml:10
+msgid "You"
msgstr ""
-#: app/views/public_body/show.rhtml:56
-msgid ""
-"Freedom of Information law does not apply to this authority, so you cannot make\n"
-" a request to it."
+#: app/views/comment/_single_comment.rhtml:10
+msgid "left an annotation"
msgstr ""
-"La loi d'accès à l'information n'est pas applicable à cette institution, "
-"vous ne pouvez donc pas y envoyer⏎ une sollicitude."
-#: app/views/request/followup_bad.rhtml:11
-msgid "Freedom of Information law no longer applies to"
+#: app/views/comment/_single_comment.rhtml:24
+msgid "Report abuse"
msgstr ""
-#: app/views/public_body/view_email.rhtml:10
-msgid ""
-"Freedom of Information law no longer applies to this authority.Follow up "
-"messages to existing requests are sent to "
+#: app/views/comment/new.rhtml:14
+msgid "Add an annotation"
msgstr ""
-#: app/views/user/show.rhtml:128
-msgid "Freedom of Information request"
+#: app/views/comment/new.rhtml:18
+msgid ""
+"Annotations are so anyone, including you, can help the requester with their "
+"request. For example:"
msgstr ""
-#: app/views/public_body/show.rhtml:98
-msgid "Freedom of Information requests made"
-msgstr "La sollicitude d'accès à l'information a été envoyée"
+#: app/views/comment/new.rhtml:24
+msgid " Advise on how to <strong>best clarify</strong> the request."
+msgstr "Indiquez comment rendre la demande <strong>plus claire</strong>."
-#: app/views/user/show.rhtml:121 app/views/user/show.rhtml:140
-msgid "Freedom of Information requests made by"
+#: app/views/comment/new.rhtml:28
+msgid ""
+" Link to the information requested, if it is <strong>already "
+"available</strong> on the Internet. "
msgstr ""
-#: app/views/public_body/show.rhtml:72
-msgid "Freedom of Information requests made using this site"
+#: app/views/comment/new.rhtml:29
+msgid ""
+" Suggest <strong>where else</strong> the requester might find the "
+"information. "
msgstr ""
-"La sollicitude d'accès à l'information a été envoyée en utilisant cette page"
+" Suggérez <strong>un autre endroit</strong> où l'utilisateur pourrait "
+"trouver ces informations. "
-#: app/views/request/followup_bad.rhtml:12
+#: app/views/comment/new.rhtml:30
msgid ""
-"From the request page, try replying to a particular message, rather than sending\n"
-" a general followup. If you need to make a general followup, and know\n"
-" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
+" Offer better ways of <strong>wording the request</strong> to get the "
+"information. "
msgstr ""
+" Proposez d'autres <strong>formulations</strong> pour accéder à ces "
+"informations. "
-#: app/models/outgoing_message.rb:73
-msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
-msgstr ""
+#: app/views/comment/new.rhtml:34
+msgid " <strong>Summarise</strong> the content of any information returned. "
+msgstr " <strong>Résumez</strong> les informations transmises. "
-#: app/views/general/exception_caught.rhtml:14
-msgid "Go to our <a href=\"%s\">front page</a></li>"
+#: app/views/comment/new.rhtml:35
+msgid ""
+" Say how you've <strong>used the information</strong>, with links if "
+"possible."
msgstr ""
+" Dites-nous comment vous avez <strong>utilisé ces informations</strong>, à "
+"l'aide de liens si possible."
-#: app/models/info_request_event.rb:297
-msgid "Handled by post"
+#: app/views/comment/new.rhtml:36
+msgid "<strong>Thank</strong> the public authority or "
msgstr ""
-#: app/models/info_request.rb:801
-msgid "Handled by post."
+#: app/views/comment/new.rhtml:39
+msgid ""
+"Suggest how the requester can find the <strong>rest of the "
+"information</strong>."
msgstr ""
-#: app/views/layouts/default.rhtml:102
-msgid "Hello!"
-msgstr "Bonjour!"
-
-#: app/views/layouts/default.rhtml:99
-msgid "Hello, {{username}}!"
-msgstr "Bonjour, {{username}}!"
-
-#: app/views/layouts/default.rhtml:94
-msgid "Help"
-msgstr "Aide"
-
-#: app/views/request/details.rhtml:50
+#: app/views/comment/new.rhtml:42
msgid ""
-"Here <strong>described</strong> means when a user selected a status for the request, and\n"
-"the most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\n"
-"{{site_name}} for intermediate events, which weren't given an explicit\n"
-"description by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
+"Point to <strong>related information</strong>, campaigns or forums which may"
+" be useful."
msgstr ""
-#: app/views/request/_other_describe_state.rhtml:4
+#: app/views/comment/new.rhtml:46
msgid ""
-"Hi! We need your help. The person who made the following request\n"
-" hasn't told us whether or not it was successful. Would you mind taking\n"
-" a moment to read it and help us keep the place tidy for everyone?\n"
-" Thanks."
+"A <strong>summary</strong> of the response if you have received it by post. "
msgstr ""
-#: locale/model_attributes.rb:57
-msgid "Holiday|Day"
+#: app/views/comment/new.rhtml:50
+msgid ""
+" Ideas on what <strong>other documents to request</strong> which the "
+"authority may hold. "
msgstr ""
+"Idées d'<strong>autres documents à demander</strong> que cette "
+"administration pourrait détenir."
-#: locale/model_attributes.rb:58
-msgid "Holiday|Description"
+#: app/views/comment/new.rhtml:53
+msgid ""
+"Advise on whether the <strong>refusal is legal</strong>, and how to complain"
+" about it if not."
msgstr ""
-#: app/views/public_body/show.rhtml:7
-msgid "Home page of authority"
-msgstr "Page web de l'institution"
+#: app/views/comment/new.rhtml:57
+msgid ""
+"<strong>Advice</strong> on how to get a response that will satisfy the "
+"requester. </li>"
+msgstr ""
-#: app/views/request/new.rhtml:63
+#: app/views/comment/new.rhtml:60
msgid ""
-"However, you have the right to request environmental\n"
-" information under a different law"
+"You know what caused the error, and can <strong>suggest a solution</strong>,"
+" such as a working email address."
msgstr ""
-#: app/views/request/new.rhtml:73
-msgid "Human health and safety"
+#: app/views/comment/new.rhtml:63
+msgid ""
+"Your thoughts on what the {{site_name}} <strong>administrators</strong> "
+"should do about the request."
msgstr ""
-#: app/views/request/_followup.rhtml:68
-msgid "I am asking for <strong>new information</strong>"
+#: app/views/comment/new.rhtml:70
+msgid ""
+"Annotations will be posted publicly here, and are \n"
+" <strong>not</strong> sent to {{public_body_name}}."
msgstr ""
-#: app/views/request/_followup.rhtml:73
-msgid "I am requesting an <strong>internal review</strong>"
+#: app/views/comment/preview.rhtml:1
+msgid "Preview new annotation on '{{info_request_title}}'"
msgstr ""
-#: app/views/request_game/play.rhtml:39
-msgid "I don't like these ones &mdash; give me some more!"
+#: app/views/comment/preview.rhtml:5
+msgid "Now preview your annotation"
msgstr ""
-#: app/views/request_game/play.rhtml:40
-msgid "I don't want to do any more tidying now!"
+#: app/views/comment/preview.rhtml:10
+msgid ""
+"Your name and annotation will appear in <strong>search engines</strong>."
msgstr ""
-#: app/views/request/_describe_state.rhtml:91
-msgid "I would like to <strong>withdraw this request</strong>"
+#: app/views/comment/preview.rhtml:20
+msgid "Re-edit this annotation"
msgstr ""
-#: app/views/request/_describe_state.rhtml:11
-msgid ""
-"I'm still <strong>waiting</strong> for my information\n"
-" <small>(maybe you got an acknowledgement)</small>"
+#: app/views/comment/preview.rhtml:21
+msgid "Post annotation"
msgstr ""
-#: app/views/request/_describe_state.rhtml:18
-msgid "I'm still <strong>waiting</strong> for the internal review"
+#: app/views/contact_mailer/message.rhtml:4
+msgid "Message sent using {{site_name}} contact form, "
msgstr ""
-#: app/views/request/_describe_state.rhtml:32
-msgid "I'm waiting for an <strong>internal review</strong> response"
+#: app/views/contact_mailer/message.rhtml:7
+msgid "Last request viewed: "
msgstr ""
-#: app/views/request/_describe_state.rhtml:25
-msgid "I've been asked to <strong>clarify</strong> my request"
+#: app/views/contact_mailer/message.rhtml:10
+msgid "Last authority viewed: "
msgstr ""
-#: app/views/request/_describe_state.rhtml:60
-msgid "I've received <strong>all the information"
+#: app/views/contact_mailer/user_message.rhtml:2
+msgid "{{user_name}} has used {{site_name}} to send you the message below."
msgstr ""
-#: app/views/request/_describe_state.rhtml:56
-msgid "I've received <strong>some of the information</strong>"
+#: app/views/contact_mailer/user_message.rhtml:3
+msgid ""
+"Your details have not been given to anyone, unless you choose to reply to this\n"
+"message, which will then go directly to the person who wrote the message."
msgstr ""
-#: app/views/request/_describe_state.rhtml:76
-msgid "I've received an <strong>error message</strong>"
+#: app/views/contact_mailer/user_message.rhtml:10
+msgid "View Freedom of Information requests made by {{user_name}}:"
msgstr ""
-#: app/views/public_body/view_email.rhtml:28
+#: app/views/general/_advanced_search_tips.rhtml:3
+msgid "Advanced search tips"
+msgstr "Conseils pour une recherche avancée"
+
+#: app/views/general/_advanced_search_tips.rhtml:5
msgid ""
-"If the address is wrong, or you know a better address, please <a "
-"href=\"%s\">contact us</a>."
+"Enter words that you want to find separated by spaces, e.g. <strong>climbing"
+" lane</strong>"
msgstr ""
+"Entrez les mots que vous voulez trouver séparés avec des espaces. ex. : "
+"<strong>voie rapide</strong>"
-#: app/views/request_mailer/stopped_responses.rhtml:10
+#: app/views/general/_advanced_search_tips.rhtml:6
msgid ""
-"If this is incorrect, or you would like to send a late response to the request\n"
-"or an email on another subject to {{user}}, then please\n"
-"email {{contact_email}} for help."
+"Use OR (in capital letters) where you don't mind which word, e.g. "
+"<strong><code>commons OR lords</code></strong>"
msgstr ""
+"Utilisez OR (en majuscules) pour indiquer que l'ordre des mots n'importe "
+"pas, \\n\\n par exemple, <code><strong>sénat OR assemblée</strong></code>"
-#: app/views/request/_followup.rhtml:20
+#: app/views/general/_advanced_search_tips.rhtml:7
msgid ""
-"If you are dissatisfied by the response you got from\n"
-" the public authority, you have the right to\n"
-" complain (<a href=\"%s\">details</a>)."
+"Use quotes when you want to find an exact phrase, e.g. "
+"<strong><code>\"Liverpool City Council\"</code></strong>"
msgstr ""
+"Utilisez les guillemets pour une expression exacte, par exemple, "
+"<code><strong>\"Conseil de l'europe\"</strong></code>"
-#: app/views/user/no_cookies.rhtml:20
-msgid "If you are still having trouble, please <a href=\"%s\">contact us</a>."
+#: app/views/general/_advanced_search_tips.rhtml:8
+msgid ""
+"<strong><code>status:</code></strong> to select based on the status or "
+"historical status of the request, see the <a href=\"{{statuses_url}}\">table"
+" of statuses</a> below."
msgstr ""
-#: app/views/request/hidden.rhtml:15
+#: app/views/general/_advanced_search_tips.rhtml:9
msgid ""
-"If you are the requester, then you may <a href=\"%s\">sign in</a> to view "
-"the request."
+"<strong><code>variety:</code></strong> to select type of thing to search "
+"for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
msgstr ""
-#: app/views/request/new.rhtml:119
+#: app/views/general/_advanced_search_tips.rhtml:10
msgid ""
-"If you are thinking of using a pseudonym,\n"
-" please <a href=\"%s\">read this first</a>."
+"<strong><code>requested_from:home_office</code></strong> to search requests "
+"from the Home Office, typing the name as in the URL."
msgstr ""
+"<strong><code>requested_from:home_office</code></strong> Pour chercher les "
+"sollicitudes du Home Office, écrivez le nom comme dans l'URL. "
-#: app/views/request/show.rhtml:105
-msgid "If you are {{user_link}}, please"
+#: app/views/general/_advanced_search_tips.rhtml:11
+msgid ""
+"<strong><code>requested_by:julian_todd</code></strong> to search requests "
+"made by Julian Todd, typing the name as in the URL."
msgstr ""
+"<strong><code>requested_by:julian_todd</code></strong> Pour chercher les "
+"sollicitudes faites par Julian Todd, écrivez le nom comme dans l'URL. "
-#: app/views/user/bad_token.rhtml:7
+#: app/views/general/_advanced_search_tips.rhtml:12
msgid ""
-"If you can't click on it in the email, you'll have to <strong>select and copy\n"
-"it</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\n"
-"you would type the address of any other webpage."
+"<strong><code>commented_by:tony_bowden</code></strong> to search annotations"
+" made by Tony Bowden, typing the name as in the URL."
msgstr ""
+"<strong><code>commented_by:tony_bowden</code></strong> Pour chercher des "
+"commentaires faits par Tony Bowden, écrivez le nom comme dans l'URL"
-#: app/views/request/show_response.rhtml:49
+#: app/views/general/_advanced_search_tips.rhtml:13
msgid ""
-"If you can, scan in or photograph the response, and <strong>send us\n"
-" a copy to upload</strong>."
+"<strong><code>request:</code></strong> to restrict to a specific request, "
+"typing the title as in the URL."
msgstr ""
+"<strong><code>request:</code></strong> Pour vous limiter à une sollicitude "
+"concrète, tapez le titre comme dans l'URL."
-#: app/views/outgoing_mailer/_followup_footer.rhtml:4
+#: app/views/general/_advanced_search_tips.rhtml:14
msgid ""
-"If you find this service useful as an FOI officer, please ask your web "
-"manager to link to us from your organisation's FOI page."
+"<strong><code>filetype:pdf</code></strong> to find all responses with PDF "
+"attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
msgstr ""
+"<strong><code>filetype:pdf</code></strong> Pour trouver toutes les réponses "
+"avec des documents PDF. Ou essayer ceux-ci: "
+"<code>{{list_of_file_extensions}}</code>"
-#: app/views/user/bad_token.rhtml:13
+#: app/views/general/_advanced_search_tips.rhtml:15
msgid ""
-"If you got the email <strong>more than six months ago</strong>, then this login link won't work any\n"
-"more. Please try doing what you were doing from the beginning."
+"Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show "
+"things that happened in the first two weeks of January."
msgstr ""
+"Saisissez <strong><code>01/01/2008..14/01/2008</code></strong> pour afficher"
+" que les évènements s'étant produits durant les deux premières semaine de "
+"janvier."
-#: app/controllers/request_controller.rb:437
+#: app/views/general/_advanced_search_tips.rhtml:16
msgid ""
-"If you have not done so already, please write a message below telling the "
-"authority that you have withdrawn your request. Otherwise they will not know"
-" it has been withdrawn."
+"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n"
+" and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n"
+" can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
msgstr ""
+"<strong><code>tag:charity</code></strong> pour trouvez tous les institutions"
+" publiques ou les sollicitudes avec la même étiquette. Vous pouvez inclure "
+"plusieurs étiquettes,\\n ou plusieurs étiquettes, ex. <code>tag:openlylocal "
+"AND tag:financial_transaction:335633</code>. Note that by default any of the"
+" tags \\n can be present, you have to put <code>AND</code> explicitly if you"
+" only want results them all present."
-#: app/views/user/signchangeemail_confirm.rhtml:11
-#: app/views/user/signchangepassword_confirm.rhtml:10
+#: app/views/general/_advanced_search_tips.rhtml:19
msgid ""
-"If you use web-based email or have \"junk mail\" filters, also check your\n"
-"bulk/spam mail folders. Sometimes, our messages are marked that way."
+"Read about <a href=\"{{advanced_search_url}}\">advanced search "
+"operators</a>, such as proximity and wildcards."
msgstr ""
-#: app/views/user/banned.rhtml:15
+#: app/views/general/_advanced_search_tips.rhtml:22
+msgid "Table of statuses"
+msgstr "Table d'états"
+
+#: app/views/general/_advanced_search_tips.rhtml:23
msgid ""
-"If you would like us to lift this ban, then you may politely\n"
-"<a href=\"/help/contact\">contact us</a> giving reasons.\n"
+"All the options below can use <strong>status</strong> or "
+"<strong>latest_status</strong> before the colon. For example, "
+"<strong>status:not_held</strong> will match requests which have "
+"<em>ever</em> been marked as not held; "
+"<strong>latest_status:not_held</strong> will match only requests that are "
+"<em>currently</em> marked as not held."
msgstr ""
-#: app/views/user/_signup.rhtml:6
-msgid "If you're new to {{site_name}}"
+#: app/views/general/_advanced_search_tips.rhtml:26
+msgid "Waiting for the public authority to reply"
msgstr ""
-#: app/views/user/_signin.rhtml:7
-msgid "If you've used {{site_name}} before"
+#: app/views/general/_advanced_search_tips.rhtml:27
+msgid "The public authority does not have the information requested"
msgstr ""
-#: app/views/user/no_cookies.rhtml:12
-msgid ""
-"If your browser is set to accept cookies and you are seeing this message,\n"
-"then there is probably a fault with our server."
+#: app/views/general/_advanced_search_tips.rhtml:28
+msgid "The request was refused by the public authority"
msgstr ""
-#: locale/model_attributes.rb:63
-msgid "IncomingMessage|Cached attachment text clipped"
+#: app/views/general/_advanced_search_tips.rhtml:29
+msgid "Some of the information requested has been received"
msgstr ""
-#: locale/model_attributes.rb:64
-msgid "IncomingMessage|Cached main body text folded"
+#: app/views/general/_advanced_search_tips.rhtml:30
+msgid "All of the information requested has been received"
msgstr ""
-#: locale/model_attributes.rb:65
-msgid "IncomingMessage|Cached main body text unfolded"
+#: app/views/general/_advanced_search_tips.rhtml:31
+msgid "The public authority would like part of the request explained"
msgstr ""
-#: locale/model_attributes.rb:44
-msgid "InfoRequestEvent|Calculated state"
+#: app/views/general/_advanced_search_tips.rhtml:32
+msgid "The public authority would like to / has responded by post"
msgstr ""
-#: locale/model_attributes.rb:43
-msgid "InfoRequestEvent|Described state"
+#: app/views/general/_advanced_search_tips.rhtml:33
+msgid ""
+"Waiting for the public authority to complete an internal review of their "
+"handling of the request"
msgstr ""
-#: locale/model_attributes.rb:41
-msgid "InfoRequestEvent|Event type"
+#: app/views/general/_advanced_search_tips.rhtml:34
+msgid "Received an error message, such as delivery failure."
msgstr ""
-#: locale/model_attributes.rb:45
-msgid "InfoRequestEvent|Last described at"
+#: app/views/general/_advanced_search_tips.rhtml:35
+msgid "A strange reponse, required attention by the {{site_name}} team"
msgstr ""
-#: locale/model_attributes.rb:42
-msgid "InfoRequestEvent|Params yaml"
+#: app/views/general/_advanced_search_tips.rhtml:36
+msgid "The requester has abandoned this request for some reason"
msgstr ""
-#: locale/model_attributes.rb:46
-msgid "InfoRequestEvent|Prominence"
+#: app/views/general/_advanced_search_tips.rhtml:39
+msgid "Table of varieties"
msgstr ""
-#: locale/model_attributes.rb:86
-msgid "InfoRequest|Allow new responses from"
+#: app/views/general/_advanced_search_tips.rhtml:40
+msgid ""
+"All the options below can use <strong>variety</strong> or "
+"<strong>latest_variety</strong> before the colon. For example, "
+"<strong>variety:sent</strong> will match requests which have <em>ever</em> "
+"been sent; <strong>latest_variety:sent</strong> will match only requests "
+"that are <em>currently</em> marked as sent."
msgstr ""
-#: locale/model_attributes.rb:82
-msgid "InfoRequest|Awaiting description"
+#: app/views/general/_advanced_search_tips.rhtml:42
+msgid "Original request sent"
msgstr ""
-#: locale/model_attributes.rb:81
-msgid "InfoRequest|Described state"
+#: app/views/general/_advanced_search_tips.rhtml:43
+msgid "Follow up message sent by requester"
msgstr ""
-#: locale/model_attributes.rb:87
-msgid "InfoRequest|Handle rejected responses"
+#: app/views/general/_advanced_search_tips.rhtml:44
+msgid "Response from a public authority"
msgstr ""
-#: locale/model_attributes.rb:85
-msgid "InfoRequest|Law used"
+#: app/views/general/_advanced_search_tips.rhtml:45
+msgid "Annotation added to request"
msgstr ""
-#: locale/model_attributes.rb:83
-msgid "InfoRequest|Prominence"
+#: app/views/general/_advanced_search_tips.rhtml:46
+msgid "A public authority"
msgstr ""
-#: locale/model_attributes.rb:80
-msgid "InfoRequest|Title"
+#: app/views/general/_advanced_search_tips.rhtml:47
+msgid "A {{site_name}} user"
msgstr ""
-#: locale/model_attributes.rb:84
-msgid "InfoRequest|Url title"
+#: app/views/general/_credits.rhtml:1
+msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
msgstr ""
-#: app/models/info_request_event.rb:303
-msgid "Information not held"
+#: app/views/general/_footer.rhtml:2
+msgid "Contact {{site_name}}"
+msgstr "Contact {{site_name}}"
+
+#: app/views/general/_footer.rhtml:3 app/views/general/blog.rhtml:7
+msgid "Follow us on twitter"
msgstr ""
-#: app/models/info_request.rb:791
-msgid "Information not held."
+#: app/views/general/_localised_datepicker.rhtml:4
+msgid "Done"
msgstr ""
-#: app/views/request/new.rhtml:71
-msgid ""
-"Information on emissions and discharges (e.g. noise, energy,\n"
-" radiation, waste materials)"
+#: app/views/general/_localised_datepicker.rhtml:5
+msgid "Prev"
msgstr ""
-#: app/models/info_request_event.rb:311
-msgid "Internal review acknowledgement"
+#: app/views/general/_localised_datepicker.rhtml:6
+msgid "Next"
msgstr ""
-#: app/models/info_request_event.rb:328
-msgid "Internal review request"
+#: app/views/general/_localised_datepicker.rhtml:7
+msgid "Today"
+msgstr "Aujourd'hui"
+
+#: app/views/general/_localised_datepicker.rhtml:13
+msgid "Wk"
msgstr ""
-#: app/views/outgoing_mailer/initial_request.rhtml:8
-msgid ""
-"Is {{email_address}} the wrong address for {{type_of_request}} requests to "
-"{{public_body_name}}? If so, please contact us using this form:"
+#: app/views/general/_topnav.rhtml:3
+msgid "Home"
msgstr ""
-#: app/views/user/no_cookies.rhtml:8
-msgid ""
-"It may be that your browser is not set to accept a thing called \"cookies\",\n"
-"or cannot do so. If you can, please enable cookies, or try using a different\n"
-"browser. Then press refresh to have another go."
+#: app/views/general/_topnav.rhtml:4
+msgid "Make a request"
msgstr ""
-#: app/views/user/_user_listing_single.rhtml:21
-msgid "Joined in"
+#: app/views/general/_topnav.rhtml:5
+msgid "View requests"
+msgstr "Voir requêtes"
+
+#: app/views/general/_topnav.rhtml:6
+msgid "View authorities"
+msgstr "Voir institutions publiques"
+
+#: app/views/general/_topnav.rhtml:7
+msgid "Read blog"
+msgstr "Lire le blog"
+
+#: app/views/general/_topnav.rhtml:8
+msgid "Help"
+msgstr "Aide"
+
+#: app/views/general/blog.rhtml:1
+msgid "{{site_name}} blog and tweets"
msgstr ""
-#: app/views/user/show.rhtml:62
-msgid "Joined {{site_name}} in"
+#: app/views/general/blog.rhtml:6
+msgid "Stay up to date"
msgstr ""
-#: app/views/request/new.rhtml:48
-msgid ""
-"Keep it <strong>focused</strong>, you'll be more likely to get what you want"
-" (<a href=\"%s\">why?</a>)."
+#: app/views/general/blog.rhtml:8
+msgid "Subscribe to blog"
msgstr ""
-#: app/views/contact_mailer/message.rhtml:10
-msgid "Last authority viewed: "
+#: app/views/general/blog.rhtml:53
+msgid "Posted on {{date}} by {{author}}"
msgstr ""
-#: app/views/contact_mailer/message.rhtml:7
-msgid "Last request viewed: "
+#: app/views/general/blog.rhtml:56
+msgid "{{number_of_comments}} comments"
msgstr ""
-#: app/views/user/no_cookies.rhtml:17
-msgid ""
-"Let us know what you were doing when this message\n"
-"appeared and your browser and operating system type and version."
+#: app/views/general/exception_caught.rhtml:3
+msgid "Sorry, we couldn't find that page"
msgstr ""
-#: app/views/request/_correspondence.rhtml:27
-#: app/views/request/_correspondence.rhtml:57
-msgid "Link to this"
+#: app/views/general/exception_caught.rhtml:5
+msgid "The page doesn't exist. Things you can try now:"
msgstr ""
-#: app/views/public_body/list.rhtml:32
-msgid "List of all authorities (CSV)"
+#: app/views/general/exception_caught.rhtml:8
+msgid "Check for mistakes if you typed or copied the address."
msgstr ""
-#: lib/public_body_categories_en.rb:23
-msgid "Local and regional"
+#: app/views/general/exception_caught.rhtml:9
+msgid "Search the site to find what you were looking for."
msgstr ""
-#: app/models/info_request.rb:789
-msgid "Long overdue."
+#: app/views/general/exception_caught.rhtml:12
+#: app/views/general/frontpage.rhtml:23 app/views/general/search.rhtml:32
+#: app/views/general/search.rhtml:45 app/views/public_body/list.rhtml:42
+#: app/views/request/_request_filter_form.rhtml:49
+#: app/views/request/select_authority.rhtml:41
+msgid "Search"
+msgstr "Rechercher"
+
+#: app/views/general/exception_caught.rhtml:17
+msgid "Sorry, there was a problem processing this page"
msgstr ""
-#: app/views/public_body/show.rhtml:47
-msgid "Make a new Environmental Information request"
+#: app/views/general/exception_caught.rhtml:18
+msgid ""
+"You have found a bug. Please <a href=\"{{contact_url}}\">contact us</a> to "
+"tell us about the problem"
msgstr ""
+"Vous avez identifié un bogue. Merci de <a href=\"{{contact_url}}\">nous "
+"contacter</a> pour nous signaler ce problème"
-#: app/views/request/new.rhtml:1
-msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
+#: app/views/general/exception_caught.rhtml:21
+msgid "Technical details"
msgstr ""
-#: app/views/layouts/default.rhtml:15
-msgid "Make and browse Freedom of Information (FOI) requests"
-msgstr "Envoyer et rechercher des sollicitudes d'accès à lìnformation"
+#: app/views/general/exception_caught.rhtml:22
+msgid "Unknown"
+msgstr ""
+
+#: app/views/general/frontpage.rhtml:5
+msgid ""
+"Make a new<br/>\n"
+" <strong>Freedom <span>of</span><br/>\n"
+" Information<br/>\n"
+" request</strong>"
+msgstr ""
-#: app/views/layouts/default.rhtml:67
-msgid "Make and explore Freedom of Information requests"
-msgstr "Faire et chercher des sollicitudes d'accès à l’information"
+#: app/views/general/frontpage.rhtml:10
+msgid "Start now &raquo;"
+msgstr ""
-#: app/views/general/frontpage.rhtml:4
-msgid "Make or explore Freedom of Information requests"
-msgstr "Faire et chercher des sollicitudes d'accès à l’information"
+#: app/views/general/frontpage.rhtml:15
+msgid ""
+"Search over<br/>\n"
+" <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\n"
+" <strong>{{number_of_authorities}} authorities</strong>"
+msgstr ""
-#: app/views/layouts/default.rhtml:87
-msgid "Make request"
-msgstr "Faire une sollicitude"
+#: app/views/general/frontpage.rhtml:37
+msgid "Who can I request information from?"
+msgstr "A qui puis-je faire une demande d'information ?"
-#: app/views/public_body/_body_listing_single.rhtml:23
-msgid "Make your own request"
+#: app/views/general/frontpage.rhtml:38
+msgid ""
+"{{site_name}} covers requests to {{number_of_authorities}} authorities, "
+"including:"
msgstr ""
+"{{site_name}} gère les demandes adressées à {{number_of_authorities}} "
+"institutions, dont :"
-#: app/views/contact_mailer/message.rhtml:4
-msgid "Message sent using {{site_name}} contact form, "
+#: app/views/general/frontpage.rhtml:43
+msgid "%d request"
+msgid_plural "%d requests"
+msgstr[0] "%d demande"
+msgstr[1] "%d demandes"
+
+#: app/views/general/frontpage.rhtml:48
+msgid "Browse all authorities..."
msgstr ""
-#: app/views/request/new_bad_contact.rhtml:1
-msgid "Missing contact details for '"
+#: app/views/general/frontpage.rhtml:54
+msgid "What information has been released?"
+msgstr "Quelles informations ont été rendues publiques ?"
+
+#: app/views/general/frontpage.rhtml:55
+msgid ""
+"{{site_name}} users have made {{number_of_requests}} requests, including:"
msgstr ""
+"Les utilisateurs de {{site_name}} ont envoyé {{number_of_requests}} "
+"demandes, dont :"
-#: app/views/public_body/show.rhtml:5
-msgid "More about this authority"
-msgstr "Plus d'infos sur cet administration"
+#: app/views/general/frontpage.rhtml:60
+msgid "answered a request about"
+msgstr "a répondu à une demande sur"
-#: app/views/general/frontpage.rhtml:41
-msgid "More authorities..."
-msgstr "Encore plus d'administrations"
+#: app/views/general/frontpage.rhtml:62
+msgid "{{length_of_time}} ago"
+msgstr "depuis {{length_of_time}}"
-#: app/views/general/frontpage.rhtml:55
+#: app/views/general/frontpage.rhtml:67
msgid "More successful requests..."
msgstr "Les sollicitudes les plus réussites"
-#: app/views/request/_describe_state.rhtml:64
-msgid "My request has been <strong>refused</strong>"
+#: app/views/general/search.rhtml:8
+msgid "Search Freedom of Information requests, public authorities and users"
msgstr ""
+"Chercher des sollicitudes d'accès à l'information, des institutions "
+"publiques et utilisateurs"
-#: app/views/layouts/default.rhtml:91
-msgid "My requests"
-msgstr "Mes demandes"
-
-#: app/models/public_body.rb:36
-msgid "Name can't be blank"
-msgstr "Le nom ne peut pas être effacé"
+#: app/views/general/search.rhtml:10 app/views/public_body/show.rhtml:109
+msgid "There were no requests matching your query."
+msgstr "Aucune demande d'information ne correspond à votre recherche."
-#: app/models/public_body.rb:40
-msgid "Name is already taken"
-msgstr "Le nom est déjà pris"
+#: app/views/general/search.rhtml:12
+msgid "Results page {{page_number}}"
+msgstr "Page de résultats {{page_number}}"
-#: app/models/track_thing.rb:142 app/models/track_thing.rb:143
-msgid "New Freedom of Information requests"
+#: app/views/general/search.rhtml:24
+msgid ""
+"To use the advanced search, combine phrases and labels as described in the "
+"search tips below."
msgstr ""
+"Pour utiliser la recherche avancée, associez les termes et les étiquettes "
+"comme indiqué dans les conseils ci-dessous."
-#: app/views/user/signchangeemail.rhtml:20
-msgid "New e-mail:"
+#: app/views/general/search.rhtml:33
+msgid "Simple search"
msgstr ""
-#: app/models/change_email_validator.rb:53
-msgid "New email doesn't look like a valid address"
+#: app/views/general/search.rhtml:46
+msgid "Advanced search"
msgstr ""
-#: app/views/user/signchangepassword.rhtml:15
-msgid "New password:"
+#: app/views/general/search.rhtml:51
+#: app/views/request/_request_filter_form.rhtml:29
+msgid "Showing"
msgstr ""
-#: app/views/user/signchangepassword.rhtml:20
-msgid "New password: (again)"
+#: app/views/general/search.rhtml:56
+msgid "everything"
+msgstr "tout"
+
+#: app/views/general/search.rhtml:75
+msgid "Tags (separated by a space):"
msgstr ""
-#: app/views/request/show_response.rhtml:62
-msgid "New response to your request"
+#: app/views/general/search.rhtml:87
+msgid "Restrict to"
msgstr ""
-#: app/views/request/show_response.rhtml:68
-msgid "New response to {{law_used_short}} request"
+#: app/views/general/search.rhtml:88
+#: app/views/request/_request_filter_form.rhtml:31
+msgid "successful requests"
+msgstr "demandes qui ont abouti"
+
+#: app/views/general/search.rhtml:89
+#: app/views/request/_request_filter_form.rhtml:32
+msgid "unsuccessful requests"
+msgstr "demandes qui n'ont pas abouti"
+
+#: app/views/general/search.rhtml:90
+#: app/views/request/_request_filter_form.rhtml:33
+msgid "unresolved requests"
+msgstr "demandes qui n'ont pas encore abouti"
+
+#: app/views/general/search.rhtml:91
+msgid "internal reviews"
+msgstr "révisions internes"
+
+#: app/views/general/search.rhtml:100
+msgid "Search in"
msgstr ""
-#: app/views/general/search.rhtml:40
+#: app/views/general/search.rhtml:101
+#: app/views/request/_request_filter_form.rhtml:12
+msgid "messages from users"
+msgstr "messages des utilisateurs"
+
+#: app/views/general/search.rhtml:102
+#: app/views/request/_request_filter_form.rhtml:13
+msgid "messages from authorities"
+msgstr "messages des institutions"
+
+#: app/views/general/search.rhtml:129
+msgid "Show most relevant results first"
+msgstr "Afficher les résultats les plus pertinents en premier"
+
+#: app/views/general/search.rhtml:131
msgid "Newest results first"
msgstr "Les résultats les plus nouveaux en premier lieu"
-#: app/views/user/set_draft_profile_photo.rhtml:32
-msgid "Next, crop your photo &gt;&gt;"
+#: app/views/general/search.rhtml:133
+msgid "Recently described results first"
msgstr ""
-#: app/views/general/search.rhtml:16
-msgid "Next, select the public authority you'd like to make the request from."
+#: app/views/general/search.rhtml:156
+msgid "One public authority found"
msgstr ""
-"En suite, selectionnez l'administration que vous voulez faire votre demande."
-#: app/views/general/search.rhtml:48
+#: app/views/general/search.rhtml:158
+msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr ""
+
+#: app/views/general/search.rhtml:169
msgid "No public authorities found"
msgstr "Aucune institution trouvée"
-#: app/views/request/list.rhtml:23
-msgid "No requests of this sort yet."
-msgstr ""
+#: app/views/general/search.rhtml:171
+msgid "Did you mean: {{correction}}"
+msgstr "Vouliez-vous dire {{correction}} ?"
-#: app/views/request/similar.rhtml:7
-msgid "No similar requests found."
+#: app/views/general/search.rhtml:173
+msgid "<a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add one</a>."
msgstr ""
+"<a href=\"%s\">Voir tout</a> ou <a href=\"%s\"> demandez nous d'ajouter "
+"une</a>."
-#: app/views/public_body/show.rhtml:73
-msgid ""
-"Nobody has made any Freedom of Information requests to {{public_body_name}} "
-"using this site yet."
+#: app/views/general/search.rhtml:180
+msgid "One person found"
msgstr ""
-"Personne n'a jamais envoyée une sollicitude d'accès à l'information à "
-"{{public_body_name}} en utilisant cette page."
-#: app/views/public_body/_body_listing.rhtml:2
-#: app/views/request/_request_listing.rhtml:2
-msgid "None found."
+#: app/views/general/search.rhtml:182
+msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
msgstr ""
-#: app/views/user/signchangeemail_confirm.rhtml:3
-#: app/views/user/signchangepassword_confirm.rhtml:1
-#: app/views/user/signchangepassword_confirm.rhtml:3
-msgid "Now check your email!"
+#: app/views/general/search.rhtml:196
+msgid "One FOI request found"
msgstr ""
-#: app/views/comment/preview.rhtml:5
-msgid "Now preview your annotation"
+#: app/views/general/search.rhtml:198
+msgid "FOI requests {{start_count}} to {{end_count}} of {{total_count}}"
msgstr ""
-#: app/views/request/followup_preview.rhtml:10
-msgid "Now preview your follow up"
-msgstr ""
+#: app/views/help/alaveteli.rhtml:6
+msgid "Would you like to see a website like this in your country?"
+msgstr "Soutenez-vous la création d'un site similaire dans votre pays ?"
-#: app/views/request/followup_preview.rhtml:8
-msgid "Now preview your message asking for an internal review"
-msgstr ""
+#: app/views/layouts/default.rhtml:15 app/views/layouts/no_chrome.rhtml:8
+msgid "Make and browse Freedom of Information (FOI) requests"
+msgstr "Envoyer et rechercher des sollicitudes d'accès à lìnformation"
-#: app/views/request/preview.rhtml:5
-msgid "Now preview your request"
+#: app/views/layouts/default.rhtml:102
+msgid "Hello, {{username}}!"
+msgstr "Bonjour, {{username}}!"
+
+#: app/views/layouts/default.rhtml:105
+msgid "My profile"
msgstr ""
-#: app/views/user/set_draft_profile_photo.rhtml:46
-msgid "OR remove the existing photo"
+#: app/views/layouts/default.rhtml:109
+msgid "Sign out"
+msgstr "Se déconnecter"
+
+#: app/views/layouts/default.rhtml:111
+msgid "Sign in or sign up"
+msgstr "Se connecter ou s'inscrire"
+
+#: app/views/layouts/default.rhtml:152
+msgid "Paste this link into emails, tweets, and anywhere else:"
msgstr ""
-#: app/views/general/frontpage.rhtml:25
+#: app/views/outgoing_mailer/_followup_footer.rhtml:1
msgid ""
-"OR, <strong>search</strong> for information others have requested using "
-"{{site_name}}"
+"Disclaimer: This message and any reply that you make will be published on "
+"the internet. Our privacy and copyright policies:"
msgstr ""
-#: app/controllers/request_controller.rb:414
+#: app/views/outgoing_mailer/_followup_footer.rhtml:4
msgid ""
-"Oh no! Sorry to hear that your request was refused. Here is what to do now."
+"If you find this service useful as an FOI officer, please ask your web "
+"manager to link to us from your organisation's FOI page."
msgstr ""
-#: app/views/user/signchangeemail.rhtml:15
-msgid "Old e-mail:"
+#: app/views/outgoing_mailer/followup.rhtml:6
+#: app/views/outgoing_mailer/initial_request.rhtml:5
+msgid "Please use this email address for all replies to this request:"
msgstr ""
-#: app/models/change_email_validator.rb:44
+#: app/views/outgoing_mailer/initial_request.rhtml:8
msgid ""
-"Old email address isn't the same as the address of the account you are "
-"logged in with"
+"Is {{email_address}} the wrong address for {{type_of_request}} requests to "
+"{{public_body_name}}? If so, please contact us using this form:"
msgstr ""
-#: app/models/change_email_validator.rb:39
-msgid "Old email doesn't look like a valid address"
+#: app/views/public_body/_body_listing.rhtml:3
+#: app/views/request/_request_listing.rhtml:2
+msgid "None found."
+msgstr "Aucun résultat trouvé."
+
+#: app/views/public_body/_body_listing_single.rhtml:12
+msgid "Also called {{other_name}}."
msgstr ""
-#: app/views/user/show.rhtml:32
-msgid "On this page"
+#: app/views/public_body/_body_listing_single.rhtml:21
+msgid "%d request made."
+msgid_plural "%d requests made."
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/public_body/_body_listing_single.rhtml:23
+msgid "Make your own request"
msgstr ""
-#: app/views/general/search.rhtml:71
-msgid "One public authority matching &#x2018;{{user_search_query}}&#x2019;"
+#: app/views/public_body/_body_listing_single.rhtml:27
+msgid "Added on {{date}}"
msgstr ""
-#: app/views/public_body/show.rhtml:91
-msgid "Only requests made using {{site_name}} are shown."
-msgstr "Seules les demandes faites en utilisant {{site_name}} sont présentés."
+#: app/views/public_body/_search_ahead.rhtml:3
+#: app/views/request/select_authority.rhtml:47
+msgid "Top search results:"
+msgstr "Résultats les plus pertinents :"
-#: app/models/info_request.rb:405
-msgid ""
-"Only the authority can reply to this request, and I don't recognise the "
-"address this reply was sent from"
+#: app/views/public_body/_search_ahead.rhtml:5
+#: app/views/request/select_authority.rhtml:49
+msgid "Select one to see more information about the authority."
msgstr ""
-#: app/models/info_request.rb:401
-msgid ""
-"Only the authority can reply to this request, but there is no \"From\" "
-"address to check against"
+#: app/views/public_body/_search_ahead.rhtml:8
+#: app/views/request/select_authority.rhtml:52
+msgid "No results found."
msgstr ""
-#: app/views/general/search.rhtml:158
-msgid "Original request sent"
+#: app/views/public_body/list.rhtml:2
+msgid "Show only..."
msgstr ""
-#: locale/model_attributes.rb:26
-msgid "OutgoingMessage|Body"
+#: app/views/public_body/list.rhtml:4
+msgid "Beginning with"
msgstr ""
-#: locale/model_attributes.rb:29
-msgid "OutgoingMessage|Last sent at"
+#: app/views/public_body/list.rhtml:28
+msgid "<a href=\"%s\">Are we missing a public authority?</a>."
msgstr ""
-#: locale/model_attributes.rb:28
-msgid "OutgoingMessage|Message type"
+#: app/views/public_body/list.rhtml:31
+msgid "List of all authorities (CSV)"
+msgstr "Liste de toutes les intitutions (CSV)"
+
+#: app/views/public_body/list.rhtml:35
+msgid "Public authorities - {{description}}"
msgstr ""
-#: locale/model_attributes.rb:27
-msgid "OutgoingMessage|Status"
+#: app/views/public_body/list.rhtml:37
+msgid "Public authorities"
msgstr ""
-#: locale/model_attributes.rb:30
-msgid "OutgoingMessage|What doing"
+#: app/views/public_body/list.rhtml:46
+msgid "Found {{count}} public bodies {{description}}"
msgstr ""
-#: app/models/info_request.rb:795
-msgid "Partially successful."
+#: app/views/public_body/list.rhtml:50
+msgid "<a href=\"%s\">Can't find the one you want?</a>"
msgstr ""
-#: app/models/change_email_validator.rb:47
-msgid "Password is not correct"
+#: app/views/public_body/show.rhtml:4
+msgid "Follow this authority"
msgstr ""
-#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30
-msgid "Password:"
+#: app/views/public_body/show.rhtml:7
+msgid "There is %d person following this authority"
+msgid_plural "There are %d people following this authority"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/public_body/show.rhtml:10
+msgid "More about this authority"
+msgstr "Plus d'infos sur cet administration"
+
+#: app/views/public_body/show.rhtml:12
+msgid "Home page of authority"
+msgstr "Page web de l'institution"
+
+#: app/views/public_body/show.rhtml:15
+msgid "Publication scheme"
+msgstr "Diffusions d'Infos Publiques"
+
+#: app/views/public_body/show.rhtml:20 app/views/public_body/show.rhtml:22
+msgid "Charity registration"
msgstr ""
-#: app/views/user/_signup.rhtml:35
-msgid "Password: (again)"
+#: app/views/public_body/show.rhtml:26
+msgid "View FOI email address"
msgstr ""
-#: app/views/user/set_draft_profile_photo.rhtml:13
-msgid "Photo of you:"
+#: app/views/public_body/show.rhtml:30
+msgid "Freedom of information requests to"
msgstr ""
-#: app/views/request/new.rhtml:76
-msgid "Plans and administrative measures that affect these matters"
+#: app/views/public_body/show.rhtml:35
+msgid "also called {{public_body_short_name}}"
+msgstr "aussi appelé {{public_body_short_name}}"
+
+#: app/views/public_body/show.rhtml:37
+msgid "admin"
+msgstr "admin"
+
+#: app/views/public_body/show.rhtml:46
+msgid ""
+"You can only request information about the environment from this authority."
msgstr ""
+"Vous ne pouvez demander des informations concernant l'environnement pour "
+"cette institution."
-#: app/controllers/request_game_controller.rb:42
-msgid "Play the request categorisation game"
+#: app/views/public_body/show.rhtml:52
+msgid "Make a new <strong>Environmental Information</strong> request"
msgstr ""
-#: app/views/request_game/play.rhtml:1 app/views/request_game/play.rhtml:30
-msgid "Play the request categorisation game!"
+#: app/views/public_body/show.rhtml:54
+msgid ""
+"Make a new <strong>Freedom of Information</strong> request to "
+"{{public_body}}"
msgstr ""
-#: app/views/request/show.rhtml:101
-msgid "Please"
+#: app/views/public_body/show.rhtml:56
+msgid "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>"
msgstr ""
-#: app/views/user/no_cookies.rhtml:15
-msgid "Please <a href=\"%s\">get in touch</a> with us so we can fix it."
+#: app/views/public_body/show.rhtml:56
+msgid "Start"
msgstr ""
-#: app/views/request/show.rhtml:52
+#: app/views/public_body/show.rhtml:60
msgid ""
-"Please <strong>answer the question above</strong> so we know whether the "
+"Freedom of Information law does not apply to this authority, so you cannot make\n"
+" a request to it."
msgstr ""
-#: app/views/user/show.rhtml:12
+#: app/views/public_body/show.rhtml:63
+msgid "This authority no longer exists, so you cannot make a request to it."
+msgstr "Cette institution n'existe plus."
+
+#: app/views/public_body/show.rhtml:65
msgid ""
-"Please <strong>go to the following requests</strong>, and let us\n"
-" know if there was information in the recent responses to them."
+"For an unknown reason, it is not possible to make a request to this "
+"authority."
msgstr ""
+"Par des raisons que nous ne pouvons pas déterminer, il est impossible "
+"d'envoyer des demandes à cette institution."
-#: app/views/request/_followup.rhtml:27
-msgid ""
-"Please <strong>only</strong> write messages directly relating to your "
-"request {{request_link}}. If you would like to ask for information that was "
-"not in your original request, then <a href=\"{{new_request_link}}\">file a "
-"new request</a>."
+#: app/views/public_body/show.rhtml:73
+msgid "Environmental Information Regulations requests made using this site"
msgstr ""
-#: app/views/request/new.rhtml:60
-msgid "Please ask for environmental information only"
+#: app/views/public_body/show.rhtml:76
+msgid "Freedom of Information requests made using this site"
msgstr ""
+"sollicitudes d'accès à l'information envoyées en utilisant cette site web"
-#: app/views/user/bad_token.rhtml:2
+#: app/views/public_body/show.rhtml:77
msgid ""
-"Please check the URL (i.e. the long code of letters and numbers) is copied\n"
-"correctly from your email."
+"Nobody has made any Freedom of Information requests to {{public_body_name}} "
+"using this site yet."
msgstr ""
+"Personne n'a jamais envoyée une sollicitude d'accès à l'information à "
+"{{public_body_name}} en utilisant cette page."
-#: app/models/profile_photo.rb:91
-msgid "Please choose a file containing your photo."
-msgstr "Choisissez un fichier qui contient votre photo."
+#: app/views/public_body/show.rhtml:85
+msgid "Search within the %d Freedom of Information requests to %s"
+msgid_plural "Search within the %d Freedom of Information requests made to %s"
+msgstr[0] ""
+msgstr[1] ""
-#: app/models/outgoing_message.rb:162
-msgid "Please choose what sort of reply you are making."
-msgstr "S'il vous plait choisissez le type de réponse que vous faites"
+#: app/views/public_body/show.rhtml:87
+msgid "%d Freedom of Information request to %s"
+msgid_plural "%d Freedom of Information requests to %s"
+msgstr[0] ""
+msgstr[1] ""
-#: app/controllers/request_controller.rb:346
-msgid ""
-"Please choose whether or not you got some of the information that you "
-"wanted."
+#: app/views/public_body/show.rhtml:111
+msgid "Only requests made using {{site_name}} are shown."
+msgstr "Seules les demandes faites en utilisant {{site_name}} sont présentés."
+
+#: app/views/public_body/show.rhtml:116
+msgid "Environmental Information Regulations requests made"
msgstr ""
-#: app/views/user_mailer/changeemail_confirm.rhtml:3
+#: app/views/public_body/show.rhtml:118
+msgid "Freedom of Information requests made"
+msgstr "sollicitudes d'accès à l'information envoyées"
+
+#: app/views/public_body/show.rhtml:120
msgid ""
-"Please click on the link below to confirm that you want to \n"
-"change the email address that you use for {{site_name}}\n"
-"from {{old_email}} to {{new_email}}"
+"The search index is currently offline, so we can't show the Freedom of "
+"Information requests that have been made to this authority."
msgstr ""
+"Les fonctionnalités de recherche sont temporairement indisponibles. C'est "
+"pour cette raison que nous ne pouvons afficher les demandes d'information "
+"relative à cette institution."
-#: app/views/user_mailer/confirm_login.rhtml:3
-msgid "Please click on the link below to confirm your email address."
+#: app/views/public_body/view_email.rhtml:3
+msgid "FOI email address for {{public_body}}"
msgstr ""
-#: app/models/info_request.rb:126
+#: app/views/public_body/view_email.rhtml:7
msgid ""
-"Please describe more what the request is about in the subject. There is no "
-"need to say it is an FOI request, we add that on anyway."
+"{{site_name}} sends new requests to <strong>{{request_email}}</strong> for "
+"this authority."
msgstr ""
-"S'il vous plait indiquer le sujet de votre sollicitude. Ce n'est pas "
-"nécessaire d'indiquer que c'est une sollicitude d'accès à l'information."
-#: app/views/user/set_draft_profile_photo.rhtml:22
+#: app/views/public_body/view_email.rhtml:10
msgid ""
-"Please don't upload offensive pictures. We will take down images\n"
-" that we consider inappropriate."
+"Freedom of Information law no longer applies to this authority.Follow up "
+"messages to existing requests are sent to "
msgstr ""
-#: app/views/user/no_cookies.rhtml:3
-msgid "Please enable \"cookies\" to carry on"
+#: app/views/public_body/view_email.rhtml:14
+msgid "Follow up messages to existing requests are sent to "
msgstr ""
-#: app/models/user.rb:38
-msgid "Please enter a password"
-msgstr "Entrez un mot de passe"
-
-#: app/models/contact_validator.rb:30
-msgid "Please enter a subject"
-msgstr "Entrez un sujet"
-
-#: app/models/info_request.rb:34
-msgid "Please enter a summary of your request"
-msgstr "Entrez un récapitulatif de votre demande"
-
-#: app/models/user.rb:106
-msgid "Please enter a valid email address"
-msgstr "Entrez une adresse email valide"
-
-#: app/models/contact_validator.rb:31
-msgid "Please enter the message you want to send"
-msgstr "Entrez le message que vous voulez envoyer"
+#: app/views/public_body/view_email.rhtml:17
+msgid "We do not have a working request email address for this authority."
+msgstr ""
-#: app/models/user.rb:49
-msgid "Please enter the same password twice"
-msgstr "Entrez le même mot de passe deux fois "
+#: app/views/public_body/view_email.rhtml:28
+msgid ""
+"If the address is wrong, or you know a better address, please <a "
+"href=\"%s\">contact us</a>."
+msgstr ""
-#: app/models/comment.rb:59
-msgid "Please enter your annotation"
-msgstr "S'il vous plait introduisez votre commentaire"
+#: app/views/public_body/view_email.rhtml:30
+msgid ""
+" If you know the address to use, then please <a href=\"%s\">send it to us</a>.\n"
+" You may be able to find the address on their website, or by phoning them up and asking."
+msgstr ""
+" Si vous savez quelle adresse utiliser, merci de <a href=\"%s\">nous la communiquer</a>.\n"
+" Vous êtes susceptible de trouver l'adresse sur leur site Internet ou en la leur demandant par téléphone."
-#: app/models/contact_validator.rb:29 app/models/user.rb:34
-msgid "Please enter your email address"
-msgstr "Entrez votre addresse email"
+#: app/views/public_body/view_email_captcha.rhtml:1
+msgid "View FOI email address for '{{public_body_name}}'"
+msgstr ""
-#: app/models/outgoing_message.rb:147
-msgid "Please enter your follow up message"
-msgstr "S'il vous plait introduisez votre message "
+#: app/views/public_body/view_email_captcha.rhtml:3
+msgid "View FOI email address for {{public_body_name}}"
+msgstr ""
-#: app/models/outgoing_message.rb:150
-msgid "Please enter your letter requesting information"
-msgstr "Ecrivez votre demande d'accès aux documents administratifs"
+#: app/views/public_body/view_email_captcha.rhtml:5
+msgid ""
+"To view the email address that we use to send FOI requests to "
+"{{public_body_name}}, please enter these words."
+msgstr ""
-#: app/models/contact_validator.rb:28 app/models/user.rb:36
-msgid "Please enter your name"
-msgstr "Entrez votre nom"
+#: app/views/public_body/view_email_captcha.rhtml:12
+msgid "View email"
+msgstr ""
-#: app/models/user.rb:109
-msgid "Please enter your name, not your email address, in the name field."
+#: app/views/request/_after_actions.rhtml:3
+msgid "Things to do with this request"
msgstr ""
-"S'il vous plait indiquer votre nom, non pas votre email, dans la case NOM"
-#: app/models/change_email_validator.rb:30
-msgid "Please enter your new email address"
-msgstr "Entrez votre nouvelle addresse email"
+#: app/views/request/_after_actions.rhtml:6
+msgid "Anyone:"
+msgstr ""
-#: app/models/change_email_validator.rb:29
-msgid "Please enter your old email address"
-msgstr "Entrez votre ancienne addresse email"
+#: app/views/request/_after_actions.rhtml:9
+msgid "<a href=\"%s\">Add an annotation</a> (to help the requester or others)"
+msgstr ""
-#: app/models/change_email_validator.rb:31
-msgid "Please enter your password"
-msgstr "Entrez votre mot de passe"
+#: app/views/request/_after_actions.rhtml:13
+#: app/views/request/_after_actions.rhtml:35
+msgid "Update the status of this request"
+msgstr ""
-#: app/models/outgoing_message.rb:145
-msgid "Please give details explaining why you want a review"
-msgstr "S'il vous plait expliquer pourquoi vous voulez une révision."
+#: app/views/request/_after_actions.rhtml:17
+msgid "Download a zip file of all correspondence"
+msgstr ""
-#: app/models/about_me_validator.rb:24
-msgid "Please keep it shorter than 500 characters"
-msgstr "S'il vous limitez vous à 500 caractères "
+#: app/views/request/_after_actions.rhtml:23
+msgid "{{info_request_user_name}} only:"
+msgstr ""
-#: app/models/info_request.rb:123
-msgid ""
-"Please keep the summary short, like in the subject of an email. You can use "
-"a phrase, rather than a full sentence."
+#: app/views/request/_after_actions.rhtml:28
+msgid "Send a followup"
msgstr ""
-"S'il vous plait soyez bref dans le résumé, comme dans le titre d'un email."
-#: app/views/request/new.rhtml:79
-msgid ""
-"Please only request information that comes under those categories, <strong>do not waste your\n"
-" time</strong> or the time of the public authority by requesting unrelated information."
+#: app/views/request/_after_actions.rhtml:30
+msgid "Write a reply"
msgstr ""
-#: app/views/request/new_please_describe.rhtml:5
-msgid ""
-"Please select each of these requests in turn, and <strong>let everyone know</strong>\n"
-"if they are successful yet or not."
+#: app/views/request/_after_actions.rhtml:39
+msgid "Request an internal review"
msgstr ""
-#: app/models/outgoing_message.rb:156
-msgid ""
-"Please sign at the bottom with your name, or alter the \"%{signoff}\" "
-"signature"
+#: app/views/request/_after_actions.rhtml:45
+msgid "{{public_body_name}} only:"
msgstr ""
-"S'il vous plait signer à la fin avec votre nom, ou changez la \"%{signoff}\""
-" signature"
-#: app/views/user/sign.rhtml:8
-msgid "Please sign in as "
+#: app/views/request/_after_actions.rhtml:48
+msgid "Respond to request"
msgstr ""
-#: app/controllers/request_controller.rb:730
-msgid "Please type a message and/or choose a file containing your response."
+#: app/views/request/_correspondence.rhtml:12
+#: app/views/request/_correspondence.rhtml:36
+#: app/views/request/simple_correspondence.rhtml:14
+#: app/views/request/simple_correspondence.rhtml:27
+msgid "From:"
msgstr ""
-#: app/controllers/request_controller.rb:434
-msgid "Please use the form below to tell us more."
+#: app/views/request/_correspondence.rhtml:26
+#: app/views/request/_correspondence.rhtml:54
+msgid "Link to this"
msgstr ""
-#: app/views/outgoing_mailer/followup.rhtml:6
-#: app/views/outgoing_mailer/initial_request.rhtml:5
-msgid "Please use this email address for all replies to this request:"
+#: app/views/request/_describe_state.rhtml:4
+msgid "What best describes the status of this request now?"
msgstr ""
-#: app/models/info_request.rb:35
-msgid "Please write a summary with some text in it"
-msgstr "S'il vous plait écrivez un résumé avec du texte"
+#: app/views/request/_describe_state.rhtml:7
+#: app/views/request/_other_describe_state.rhtml:10
+msgid "This request is still in progress:"
+msgstr ""
-#: app/models/info_request.rb:120
+#: app/views/request/_describe_state.rhtml:11
msgid ""
-"Please write the summary using a mixture of capital and lower case letters. "
-"This makes it easier for others to read."
+"I'm still <strong>waiting</strong> for my information\n"
+" <small>(maybe you got an acknowledgement)</small>"
msgstr ""
-"S'il vous plait écrivez un résumé en utilisant des lettres majuscules et "
-"minuscules"
-#: app/models/comment.rb:62
-msgid ""
-"Please write your annotation using a mixture of capital and lower case "
-"letters. This makes it easier for others to read."
+#: app/views/request/_describe_state.rhtml:18
+msgid "I'm still <strong>waiting</strong> for the internal review"
msgstr ""
-"S'il vous plait écrivez votre commentaire en utilisant des lettres "
-"majuscules et minuscules. Ce sera plus facile de lire."
-#: app/controllers/request_controller.rb:423
-msgid ""
-"Please write your follow up message containing the necessary clarifications "
-"below."
+#: app/views/request/_describe_state.rhtml:25
+msgid "I've been asked to <strong>clarify</strong> my request"
msgstr ""
-#: app/models/outgoing_message.rb:159
-msgid ""
-"Please write your message using a mixture of capital and lower case letters."
-" This makes it easier for others to read."
+#: app/views/request/_describe_state.rhtml:32
+msgid "I'm waiting for an <strong>internal review</strong> response"
msgstr ""
-"S'il vous plait écrivez votre message en utilisant des lettres majuscules et"
-" minuscules. Ce sera plus facile de lire."
-#: app/views/comment/new.rhtml:41
-msgid ""
-"Point to <strong>related information</strong>, campaigns or forums which may"
-" be useful."
+#: app/views/request/_describe_state.rhtml:38
+msgid "They are going to reply <strong>by post</strong>"
msgstr ""
-#: app/views/comment/preview.rhtml:21
-msgid "Post annotation"
+#: app/views/request/_describe_state.rhtml:44
+#: app/views/request/_other_describe_state.rhtml:40
+msgid "This particular request is finished:"
msgstr ""
-#: locale/model_attributes.rb:55
-msgid "PostRedirect|Circumstance"
+#: app/views/request/_describe_state.rhtml:47
+#: app/views/request/_other_describe_state.rhtml:43
+msgid "The <strong>review has finished</strong> and overall:"
msgstr ""
-#: locale/model_attributes.rb:53
-msgid "PostRedirect|Email token"
+#: app/views/request/_describe_state.rhtml:52
+msgid ""
+"They do <strong>not have</strong> the information <small>(maybe they say who"
+" does)</small>"
msgstr ""
-#: locale/model_attributes.rb:52
-msgid "PostRedirect|Post params yaml"
+#: app/views/request/_describe_state.rhtml:56
+msgid "I've received <strong>some of the information</strong>"
msgstr ""
-#: locale/model_attributes.rb:54
-msgid "PostRedirect|Reason params yaml"
+#: app/views/request/_describe_state.rhtml:60
+msgid "I've received <strong>all the information"
msgstr ""
-#: locale/model_attributes.rb:50
-msgid "PostRedirect|Token"
+#: app/views/request/_describe_state.rhtml:64
+msgid "My request has been <strong>refused</strong>"
+msgstr "Ma demande a été <strong>refusée</strong>"
+
+#: app/views/request/_describe_state.rhtml:71
+msgid "Other:"
msgstr ""
-#: locale/model_attributes.rb:51
-msgid "PostRedirect|Uri"
+#: app/views/request/_describe_state.rhtml:76
+msgid "I've received an <strong>error message</strong>"
msgstr ""
-#: app/views/general/_credits.rhtml:1
-msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>."
+#: app/views/request/_describe_state.rhtml:84
+msgid "This request <strong>requires administrator attention</strong>"
msgstr ""
-#: app/views/request/followup_preview.rhtml:1
-msgid "Preview follow up to '"
+#: app/views/request/_describe_state.rhtml:91
+msgid "I would like to <strong>withdraw this request</strong>"
msgstr ""
-#: app/views/comment/preview.rhtml:1
-msgid "Preview new annotation on '{{info_request_title}}'"
+#: app/views/request/_describe_state.rhtml:101
+msgid "Submit status"
msgstr ""
-#: app/views/comment/_comment_form.rhtml:15
-msgid "Preview your annotation"
+#: app/views/request/_describe_state.rhtml:101
+msgid "and we'll suggest <strong>what to do next</strong>"
msgstr ""
-#: app/views/request/_followup.rhtml:96
-msgid "Preview your message"
+#: app/views/request/_describe_state.rhtml:107
+msgid ""
+"We don't know whether the most recent response to this request contains\n"
+" information or not\n"
+" &ndash;\n"
+"\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
msgstr ""
-#: app/views/request/new.rhtml:139
-msgid "Preview your public request"
+#: app/views/request/_followup.rhtml:3
+msgid "the main FOI contact at {{public_body}}"
msgstr ""
-#: locale/model_attributes.rb:15
-msgid "ProfilePhoto|Data"
+#: app/views/request/_followup.rhtml:8
+msgid "Request an internal review from {{person_or_body}}"
msgstr ""
-#: locale/model_attributes.rb:16
-msgid "ProfilePhoto|Draft"
+#: app/views/request/_followup.rhtml:11
+msgid "Send a public follow up message to {{person_or_body}}"
msgstr ""
-#: app/views/public_body/list.rhtml:37
-msgid "Public authorities - {{description}}"
+#: app/views/request/_followup.rhtml:14
+msgid "Send a public reply to {{person_or_body}}"
msgstr ""
-#: app/views/general/search.rhtml:73
+#: app/views/request/_followup.rhtml:19
msgid ""
-"Public authorities {{start_count}} to {{end_count}} of {{total_count}} for "
-"{{user_search_query}}"
+"Don't want to address your message to {{person_or_body}}? You can also "
+"write to:"
msgstr ""
-"Administrations {{start_count}} à {{end_count}} de {{total_count}} pour "
-"{{user_search_query}} "
-#: locale/model_attributes.rb:12
-msgid "PublicBody|First letter"
+#: app/views/request/_followup.rhtml:23 app/views/request/_followup.rhtml:28
+#: app/views/request/_followup.rhtml:34
+msgid "the main FOI contact address for {{public_body}}"
msgstr ""
-#: locale/model_attributes.rb:10
-msgid "PublicBody|Home page"
+#: app/views/request/_followup.rhtml:43
+msgid ""
+"Follow ups and new responses to this request have been stopped to prevent "
+"spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and"
+" need to send a follow up."
msgstr ""
-#: locale/model_attributes.rb:8
-msgid "PublicBody|Last edit comment"
+#: app/views/request/_followup.rhtml:47
+msgid ""
+"If you are dissatisfied by the response you got from\n"
+" the public authority, you have the right to\n"
+" complain (<a href=\"%s\">details</a>)."
msgstr ""
-#: locale/model_attributes.rb:7
-msgid "PublicBody|Last edit editor"
+#: app/views/request/_followup.rhtml:54
+msgid ""
+"Please <strong>only</strong> write messages directly relating to your "
+"request {{request_link}}. If you would like to ask for information that was "
+"not in your original request, then <a href=\"{{new_request_link}}\">file a "
+"new request</a>."
msgstr ""
-#: locale/model_attributes.rb:3
-msgid "PublicBody|Name"
+#: app/views/request/_followup.rhtml:59
+msgid ""
+"The response to your request has been <strong>delayed</strong>. You can say that, \n"
+" by law, the authority should normally have responded\n"
+" <strong>promptly</strong> and"
msgstr ""
-#: locale/model_attributes.rb:11
-msgid "PublicBody|Notes"
+#: app/views/request/_followup.rhtml:63 app/views/request/show.rhtml:70
+#: app/views/request/show.rhtml:80
+msgid "in term time"
msgstr ""
-#: locale/model_attributes.rb:13
-msgid "PublicBody|Publication scheme"
+#: app/views/request/_followup.rhtml:65
+msgid "by <strong>{{date}}</strong>"
msgstr ""
-#: locale/model_attributes.rb:5
-msgid "PublicBody|Request email"
+#: app/views/request/_followup.rhtml:66 app/views/request/_followup.rhtml:73
+#: app/views/request/show.rhtml:83 app/views/request/show.rhtml:87
+msgid "<a href=\"%s\">details</a>"
msgstr ""
-#: locale/model_attributes.rb:4
-msgid "PublicBody|Short name"
+#: app/views/request/_followup.rhtml:71
+msgid ""
+"The response to your request is <strong>long overdue</strong>. You can say that, by \n"
+" law, under all circumstances, the authority should have responded\n"
+" by now"
msgstr ""
-#: locale/model_attributes.rb:9
-msgid "PublicBody|Url name"
+#: app/views/request/_followup.rhtml:85
+msgid "What are you doing?"
msgstr ""
-#: locale/model_attributes.rb:6
-msgid "PublicBody|Version"
+#: app/views/request/_followup.rhtml:95
+msgid "I am asking for <strong>new information</strong>"
msgstr ""
-#: app/views/public_body/show.rhtml:10
-msgid "Publication scheme"
-msgstr "Diffusions d'Infos Publiques"
+#: app/views/request/_followup.rhtml:100
+msgid "I am requesting an <strong>internal review</strong>"
+msgstr ""
-#: locale/model_attributes.rb:48
-msgid "RawEmail|Data binary"
+#: app/views/request/_followup.rhtml:101
+msgid "<a href=\"%s\">what's that?</a>"
msgstr ""
-#: app/views/comment/preview.rhtml:20
-msgid "Re-edit this annotation"
+#: app/views/request/_followup.rhtml:106
+msgid ""
+"<strong>Anything else</strong>, such as clarifying, prompting, thanking"
msgstr ""
-#: app/views/request/followup_preview.rhtml:49
-msgid "Re-edit this message"
+#: app/views/request/_followup.rhtml:112
+msgid ""
+"Edit and add <strong>more details</strong> to the message above,\n"
+" explaining why you are dissatisfied with their response."
msgstr ""
-#: app/views/request/preview.rhtml:40
-msgid "Re-edit this request"
+#: app/views/request/_followup.rhtml:123
+msgid "Preview your message"
msgstr ""
-#: app/views/general/search.rhtml:137
+#: app/views/request/_hidden_correspondence.rhtml:10
msgid ""
-"Read about <a href=\"{{advanced_search_url}}\">advanced search "
-"operators</a>, such as proximity and wildcards."
+"This response has been hidden. See annotations to find out why.\n"
+" If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
msgstr ""
-#: app/views/layouts/default.rhtml:93
-msgid "Read blog"
-msgstr "Lire le blog"
-
-#: app/views/request/new.rhtml:16
-msgid "Read this before writing your {{info_request_law_used_full}} request"
+#: app/views/request/_hidden_correspondence.rhtml:17
+msgid ""
+"This outgoing message has been hidden. See annotations to\n"
+"\t\t\t\t\t\tfind out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
msgstr ""
-#: app/views/general/search.rhtml:150
-msgid "Received an error message, such as delivery failure."
+#: app/views/request/_hidden_correspondence.rhtml:23
+msgid ""
+"This comment has been hidden. See annotations to\n"
+" find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
msgstr ""
-#: app/views/general/search.rhtml:42
-msgid "Recently described results first"
+#: app/views/request/_hidden_correspondence.rhtml:32
+msgid "unexpected prominence on request event"
msgstr ""
-#: app/controllers/request_controller.rb:139
-msgid "Recently sent Freedom of Information requests"
+#: app/views/request/_other_describe_state.rhtml:4
+msgid ""
+"Hi! We need your help. The person who made the following request\n"
+" hasn't told us whether or not it was successful. Would you mind taking\n"
+" a moment to read it and help us keep the place tidy for everyone?\n"
+" Thanks."
msgstr ""
-#: app/views/request/list.rhtml:6
-msgid "Recently sent requests"
+#: app/views/request/_other_describe_state.rhtml:14
+msgid ""
+"<strong>No response</strong> has been received\n"
+" <small>(maybe there's just an acknowledgement)</small>"
msgstr ""
-#: app/controllers/request_controller.rb:144
-msgid "Recently successful responses"
+#: app/views/request/_other_describe_state.rhtml:21
+msgid "Still awaiting an <strong>internal review</strong>"
msgstr ""
-#: app/models/info_request_event.rb:305
-msgid "Refused"
+#: app/views/request/_other_describe_state.rhtml:28
+msgid "<strong>Clarification</strong> has been requested"
msgstr ""
-#: app/models/info_request.rb:793
-msgid "Refused."
+#: app/views/request/_other_describe_state.rhtml:34
+msgid "A response will be sent <strong>by post</strong>"
msgstr ""
-#: app/views/user/_signin.rhtml:26
+#: app/views/request/_other_describe_state.rhtml:48
msgid ""
-"Remember me</label> (keeps you signed in longer;\n"
-" do not use on a public computer) "
+"The authority do <strong>not have</strong> the information <small>(maybe "
+"they say who does)"
msgstr ""
-#: app/views/request/_correspondence.rhtml:28
-msgid "Reply to this message"
+#: app/views/request/_other_describe_state.rhtml:52
+msgid "<strong>Some of the information</strong> has been sent "
msgstr ""
-#: app/views/comment/_single_comment.rhtml:24
-msgid "Report abuse"
+#: app/views/request/_other_describe_state.rhtml:56
+msgid "<strong>All the information</strong> has been sent"
msgstr ""
-#: app/views/request/_after_actions.rhtml:37
-msgid "Request an internal review"
+#: app/views/request/_other_describe_state.rhtml:60
+msgid "The request has been <strong>refused</strong>"
msgstr ""
-#: app/views/request/_followup.rhtml:4
-msgid "Request an internal review from"
+#: app/views/request/_other_describe_state.rhtml:70
+msgid "An <strong>error message</strong> has been received"
msgstr ""
-#: app/views/request/hidden.rhtml:1
-msgid "Request has been removed"
+#: app/views/request/_request_filter_form.rhtml:6
+msgid "Keywords"
msgstr ""
-#: app/views/request/_request_listing_via_event.rhtml:28
-msgid ""
-"Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
+#: app/views/request/_request_filter_form.rhtml:11
+msgid "Search for words in:"
msgstr ""
-#: app/views/request/_request_listing_via_event.rhtml:36
-msgid ""
-"Request to {{public_body_name}} by {{info_request_user}}. Annotated by "
-"{{event_comment_user}} on {{date}}."
+#: app/views/request/_request_filter_form.rhtml:23
+msgid "Made between"
msgstr ""
-#: app/views/request/_request_listing_single.rhtml:12
-msgid ""
-"Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
-msgstr ""
+#: app/views/request/_request_filter_form.rhtml:25
+msgid "and"
+msgstr "et"
-#: app/views/request/_sidebar_request_listing.rhtml:13
-msgid "Requested on {{date}}"
+#: app/views/request/_request_filter_form.rhtml:30
+msgid "all requests"
+msgstr "toutes les demandes"
+
+#: app/views/request/_request_listing_short_via_event.rhtml:9
+msgid "To {{public_body_link_absolute}}"
msgstr ""
-#: app/models/track_thing.rb:209 app/models/track_thing.rb:210
-msgid "Requests or responses matching '{{query}}'"
+#: app/views/request/_request_listing_short_via_event.rhtml:10
+msgid "by {{user_link_absolute}}"
msgstr ""
-#: app/views/request/upload_response.rhtml:11
-msgid "Respond by email"
+#: app/views/request/_request_listing_single.rhtml:12
+msgid ""
+"Requested from {{public_body_name}} by {{info_request_user}} on {{date}}"
msgstr ""
-#: app/views/request/_after_actions.rhtml:46
-msgid "Respond to request"
+#: app/views/request/_request_listing_via_event.rhtml:20
+msgid ""
+"Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
msgstr ""
-#: app/views/request/upload_response.rhtml:5
-msgid "Respond to the FOI request"
+#: app/views/request/_request_listing_via_event.rhtml:23
+msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
msgstr ""
-#: app/views/request/upload_response.rhtml:21
-msgid "Respond using the web"
+#: app/views/request/_request_listing_via_event.rhtml:26
+msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
msgstr ""
-#: app/views/general/search.rhtml:160
-msgid "Response from a public authority"
+#: app/views/request/_request_listing_via_event.rhtml:28
+msgid ""
+"Request to {{public_body_name}} by {{info_request_user}}. Annotated by "
+"{{event_comment_user}} on {{date}}."
msgstr ""
-#: app/views/request/show.rhtml:77
-msgid "Response to this request is <strong>delayed</strong>."
+#: app/views/request/_request_listing_via_event.rhtml:30
+msgid "unknown event type indexed "
msgstr ""
-#: app/views/request/show.rhtml:85
-msgid "Response to this request is <strong>long overdue</strong>."
+#: app/views/request/_search_ahead.rhtml:3
+msgid "Possibly related requests:"
msgstr ""
-#: app/views/request/show_response.rhtml:64
-msgid "Response to your request"
+#: app/views/request/_search_ahead.rhtml:10
+msgid "Or search in their website for this information."
msgstr ""
-#: app/views/request/upload_response.rhtml:28
-msgid "Response:"
+#: app/views/request/_sidebar.rhtml:2
+msgid "Follow this request"
msgstr ""
-#: app/views/general/search.rhtml:9
-msgid "Results page {{page_number}}"
-msgstr "Page de résultats {{page_number}}"
+#: app/views/request/_sidebar.rhtml:5
+msgid "There is %d person following this request"
+msgid_plural "There are %d people following this request"
+msgstr[0] ""
+msgstr[1] ""
-#: app/views/user/set_profile_about_me.rhtml:35
-msgid "Save"
+#: app/views/request/_sidebar.rhtml:8
+msgid "Act on what you've learnt"
msgstr ""
-#: app/views/general/exception_caught.rhtml:10
-#: app/views/general/frontpage.rhtml:16 app/views/general/search.rhtml:29
-#: app/views/layouts/default.rhtml:80 app/views/request/new.rhtml:31
-msgid "Search"
-msgstr "Rechercher"
+#: app/views/request/_sidebar.rhtml:13
+msgid "Tweet this request"
+msgstr "Partager cette demande d'information sur Twitter"
-#: app/views/general/search.rhtml:4
-msgid "Search Freedom of Information requests, public authorities and users"
+#: app/views/request/_sidebar.rhtml:17
+msgid "Start your own blog"
msgstr ""
-"Chercher des sollicitudes d'accès à l'information, des institutions "
-"publiques et des ****"
-#: app/views/general/exception_caught.rhtml:7
-msgid "Search the site to find what you were looking for."
+#: app/views/request/_sidebar.rhtml:24
+msgid "Similar requests"
msgstr ""
-#: app/controllers/user_controller.rb:331
-msgid "Send a message to "
+#: app/views/request/_sidebar.rhtml:29
+msgid "More similar requests"
msgstr ""
-#: app/views/request/_followup.rhtml:7
-msgid "Send a public follow up message to"
+#: app/views/request/_sidebar.rhtml:35
+msgid "Event history details"
msgstr ""
-#: app/views/request/_followup.rhtml:10
-msgid "Send a public reply to"
+#: app/views/request/_sidebar.rhtml:39
+msgid ""
+"<a href=\"%s\">Are you the owner of\n"
+" any commercial copyright on this page?</a>"
msgstr ""
-#: app/views/request/_correspondence.rhtml:58
-msgid "Send follow up"
+#: app/views/request/_sidebar_request_listing.rhtml:13
+msgid "Requested on {{date}}"
msgstr ""
-#: app/views/request/followup_preview.rhtml:50
-msgid "Send message"
+#: app/views/request/_view_html_prefix.rhtml:6
+msgid "Download original attachment"
msgstr ""
-#: app/views/user/show.rhtml:69
-msgid "Send message to "
+#: app/views/request/_view_html_prefix.rhtml:9
+msgid ""
+"This is an HTML version of an attachment to the Freedom of Information "
+"request"
msgstr ""
-#: app/views/request/preview.rhtml:41
-msgid "Send public "
+#: app/views/request/details.rhtml:1 app/views/request/details.rhtml:2
+msgid "Details of request '"
msgstr ""
-#: app/views/user/show.rhtml:53
-msgid "Set your profile photo"
+#: app/views/request/details.rhtml:4
+msgid "Event history"
msgstr ""
-#: app/models/public_body.rb:39
-msgid "Short name is already taken"
-msgstr "Ce nom est déjà pris"
-
-#: app/views/general/search.rhtml:38
-msgid "Show most relevant results first"
-msgstr "Afficher les résultats les plus pertinents en premier"
-
-#: app/views/public_body/list.rhtml:3 app/views/request/list.rhtml:2
-msgid "Show only..."
+#: app/views/request/details.rhtml:6
+msgid ""
+"This table shows the technical details of the internal events that happened\n"
+"to this request on {{site_name}}. This could be used to generate information about\n"
+"the speed with which authorities respond to requests, the number of requests\n"
+"which require a postal response and much more."
msgstr ""
-#: app/views/user/_signin.rhtml:31 app/views/user/show.rhtml:113
-msgid "Sign in"
+#: app/views/request/details.rhtml:12
+msgid ""
+"<strong>Caveat emptor!</strong> To use this data in an honourable way, you will need \n"
+"a good internal knowledge of user behaviour on {{site_name}}. How, \n"
+"why and by whom requests are categorised is not straightforward, and there will\n"
+"be user error and ambiguity. You will also need to understand FOI law, and the\n"
+"way authorities use it. Plus you'll need to be an elite statistician. Please\n"
+"<a href=\"{{contact_path}}\">contact us</a> with questions."
msgstr ""
-#: app/views/user/sign.rhtml:20
-msgid "Sign in or make a new account"
+#: app/views/request/details.rhtml:50
+msgid ""
+"Here <strong>described</strong> means when a user selected a status for the request, and\n"
+"the most recent event had its status updated to that value. <strong>calculated</strong> is then inferred by\n"
+"{{site_name}} for intermediate events, which weren't given an explicit\n"
+"description by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
msgstr ""
-#: app/views/layouts/default.rhtml:103
-msgid "Sign in or sign up"
-msgstr "Se connecter ou s'inscrire"
+#: app/views/request/details.rhtml:58
+msgid ""
+"You can get this page in computer-readable format as part of the main JSON\n"
+"page for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
+msgstr ""
-#: app/views/layouts/default.rhtml:100
-msgid "Sign out"
-msgstr "Se déconnecter"
+#: app/views/request/followup_bad.rhtml:2
+msgid "Unable to send follow up message to {{username}}"
+msgstr ""
-#: app/views/user/_signup.rhtml:41
-msgid "Sign up"
+#: app/views/request/followup_bad.rhtml:4
+msgid "Unable to send a reply to {{username}}"
msgstr ""
-#: app/views/request/_sidebar.rhtml:30
-msgid "Similar requests"
+#: app/views/request/followup_bad.rhtml:11
+msgid "Freedom of Information law no longer applies to"
msgstr ""
-#: app/models/info_request_event.rb:307
-msgid "Some information sent"
+#: app/views/request/followup_bad.rhtml:12
+msgid ""
+"From the request page, try replying to a particular message, rather than sending\n"
+" a general followup. If you need to make a general followup, and know\n"
+" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
msgstr ""
-#: app/views/general/search.rhtml:145
-msgid "Some of the information requested has been received"
+#: app/views/request/followup_bad.rhtml:18
+msgid ""
+"no longer exists. If you are trying to make\n"
+" From the request page, try replying to a particular message, rather than sending\n"
+" a general followup. If you need to make a general followup, and know\n"
+" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
msgstr ""
-#: app/views/request_game/play.rhtml:31
+#: app/views/request/followup_bad.rhtml:24
msgid ""
-"Some people who've made requests haven't let us know whether they were\n"
-"successful or not. We need <strong>your</strong> help &ndash;\n"
-"choose one of these requests, read it, and let everyone know whether or not the\n"
-"information has been provided. Everyone'll be exceedingly grateful."
+"We do not have a working {{law_used_full}} address for {{public_body_name}}."
msgstr ""
-#: app/views/user_mailer/changeemail_already_used.rhtml:1
+#: app/views/request/followup_bad.rhtml:24
msgid ""
-"Someone, perhaps you, just tried to change their email address on\n"
-"{{site_name}} from {{old_email}} to {{new_email}}."
+"You may be able to find\n"
+" one on their website, or by phoning them up and asking. If you manage\n"
+" to find one, then please <a href=\"%s\">send it to us</a>."
msgstr ""
-#: app/views/general/exception_caught.rhtml:1
-msgid "Sorry, we couldn't find that page"
+#: app/views/request/followup_bad.rhtml:29
+msgid "unknown reason "
msgstr ""
-#: app/views/request/new.rhtml:53
-msgid "Special note for this authority!"
+#: app/views/request/followup_preview.rhtml:1
+msgid "Preview follow up to '"
msgstr ""
-#: app/views/request/_other_describe_state.rhtml:21
-msgid "Still awaiting an <strong>internal review</strong>"
+#: app/views/request/followup_preview.rhtml:8
+msgid "Now preview your message asking for an internal review"
+msgstr "Maintenant prévisualiser votre message demandant un examen interne"
+
+#: app/views/request/followup_preview.rhtml:10
+msgid "Now preview your follow up"
+msgstr "Maintenant prévisualiser votre suivi"
+
+#: app/views/request/followup_preview.rhtml:14
+#: app/views/request/preview.rhtml:7
+msgid "Check you haven't included any <strong>personal information</strong>."
+msgstr ""
+
+#: app/views/request/followup_preview.rhtml:15
+msgid "Your message will appear in <strong>search engines</strong>"
+msgstr ""
+
+#: app/views/request/followup_preview.rhtml:22 app/views/request/new.rhtml:40
+#: app/views/request/preview.rhtml:17
+#: app/views/request/simple_correspondence.rhtml:16
+#: app/views/request/simple_correspondence.rhtml:28
+msgid "To:"
msgstr ""
#: app/views/request/followup_preview.rhtml:23
@@ -2395,433 +2676,454 @@ msgstr ""
msgid "Subject:"
msgstr ""
-#: app/views/user/signchangepassword_send_confirm.rhtml:26
-msgid "Submit"
+#: app/views/request/followup_preview.rhtml:37
+msgid ""
+"<strong>Privacy warning:</strong> Your message, and any response\n"
+" to it, will be displayed publicly on this website."
msgstr ""
-#: app/views/request/_describe_state.rhtml:101
-msgid "Submit status"
+#: app/views/request/followup_preview.rhtml:49
+msgid "Re-edit this message"
msgstr ""
-#: app/models/track_thing.rb:158 app/models/track_thing.rb:159
-msgid "Successful Freedom of Information requests"
+#: app/views/request/followup_preview.rhtml:50
+msgid "Send message"
msgstr ""
-#: app/views/request/list.rhtml:5
-msgid "Successful responses"
+#: app/views/request/hidden.rhtml:1
+msgid "Request has been removed"
msgstr ""
-#: app/models/info_request.rb:797
-msgid "Successful."
+#: app/views/request/hidden.rhtml:9
+msgid ""
+"The request you have tried to view has been removed. There are\n"
+"various reasons why we might have done this, sorry we can't be more specific here. Please <a\n"
+" href=\"%s\">contact us</a> if you have any questions."
msgstr ""
-#: app/views/comment/new.rhtml:38
+#: app/views/request/hidden.rhtml:15
msgid ""
-"Suggest how the requester can find the <strong>rest of the "
-"information</strong>."
+"If you are the requester, then you may <a href=\"%s\">sign in</a> to view "
+"the request."
msgstr ""
-#: app/views/request/new.rhtml:93
-msgid "Summary:"
+#: app/views/request/list.rhtml:8
+msgid "Follow these requests"
msgstr ""
-#: app/views/general/search.rhtml:140
-msgid "Table of statuses"
-msgstr "Table d'états"
+#: app/views/request/list.rhtml:19
+msgid "No requests of this sort yet."
+msgstr "Pas encore de demande de ce type."
-#: app/views/request/preview.rhtml:45
-msgid "Tags:"
+#: app/views/request/list.rhtml:21
+msgid "{{count}} FOI requests found"
+msgstr "{{count}} demandes d'accès aux documents administratifs trouvées"
+
+#: app/views/request/list.rhtml:27
+msgid "Unexpected search result type"
msgstr ""
-#: app/controllers/request_game_controller.rb:52
-msgid "Thank you for helping us keep the site tidy!"
+#: app/views/request/new.rhtml:20
+msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
msgstr ""
-#: app/controllers/comment_controller.rb:62
-msgid "Thank you for making an annotation!"
+#: app/views/request/new.rhtml:22
+msgid "2. Ask for Information"
msgstr ""
-#: app/controllers/request_controller.rb:736
+#: app/views/request/new.rhtml:27
msgid ""
-"Thank you for responding to this FOI request! Your response has been "
-"published below, and a link to your response has been emailed to "
+"{{existing_request_user}} already\n"
+" created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n"
+" or edit the details below to make a new but similar request."
msgstr ""
-#: app/controllers/request_controller.rb:378
+#: app/views/request/new.rhtml:44
msgid ""
-"Thank you for updating the status of the request '<a "
-"href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests "
-"below for you to classify."
+"Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for "
+"examples of how to word your request."
msgstr ""
-#: app/controllers/request_controller.rb:381
-msgid "Thank you for updating this request!"
+#: app/views/request/new.rhtml:46
+msgid ""
+"Browse <a href='{{url}}'>other requests</a> for examples of how to word your"
+" request."
msgstr ""
-#: app/controllers/user_controller.rb:398
-#: app/controllers/user_controller.rb:414
-msgid "Thank you for updating your profile photo"
+#: app/views/request/new.rhtml:52
+msgid "Special note for this authority!"
msgstr ""
-#: app/views/request_game/play.rhtml:42
-msgid ""
-"Thanks for helping - your work will make it easier for everyone to find successful\n"
-"responses, and maybe even let us make league tables..."
+#: app/views/request/new.rhtml:58
+msgid "Please ask for environmental information only"
msgstr ""
-#: app/views/user/show.rhtml:20
-msgid ""
-"Thanks very much - this will help others find useful stuff. We'll\n"
-" also, if you need it, give advice on what to do next about your\n"
-" requests."
+#: app/views/request/new.rhtml:60
+msgid "The Freedom of Information Act <strong>does not apply</strong> to"
msgstr ""
-#: app/views/request/new_please_describe.rhtml:20
+#: app/views/request/new.rhtml:61
msgid ""
-"Thanks very much for helping keep everything <strong>neat and organised</strong>.\n"
-" We'll also, if you need it, give you advice on what to do next about each of your\n"
-" requests."
+"However, you have the right to request environmental\n"
+" information under a different law"
msgstr ""
-#: app/controllers/user_controller.rb:189
+#: app/views/request/new.rhtml:63
msgid ""
-"That doesn't look like a valid email address. Please check you have typed it"
-" correctly."
+"This covers a very wide spectrum of information about the state of\n"
+" the <strong>natural and built environment</strong>, such as:"
msgstr ""
+"Cela couvre un très large spectre d'informations sur l'état de "
+"<strong>l'environnement naturel et construit par l'homme,</strong> comme par"
+" exemple :"
-#: app/views/request/_describe_state.rhtml:47
-#: app/views/request/_other_describe_state.rhtml:43
-msgid "The <strong>review has finished</strong> and overall:"
+#: app/views/request/new.rhtml:67
+msgid ""
+"Air, water, soil, land, flora and fauna (including how these effect\n"
+" human beings)"
msgstr ""
-#: app/views/request/new.rhtml:62
-msgid "The Freedom of Information Act <strong>does not apply</strong> to"
+#: app/views/request/new.rhtml:69
+msgid ""
+"Information on emissions and discharges (e.g. noise, energy,\n"
+" radiation, waste materials)"
msgstr ""
-#: app/views/user_mailer/changeemail_already_used.rhtml:8
-msgid "The accounts have been left as they previously were."
+#: app/views/request/new.rhtml:71
+msgid "Human health and safety"
msgstr ""
-#: app/views/request/_other_describe_state.rhtml:48
+#: app/views/request/new.rhtml:72
msgid ""
-"The authority do <strong>not have</strong> the information <small>(maybe "
-"they say who does)"
+"Cultural sites and built structures (as they may be affected by the\n"
+" environmental factors listed above)"
msgstr ""
-#: app/views/request/show_response.rhtml:28
-msgid ""
-"The authority only has a <strong>paper copy</strong> of the information."
+#: app/views/request/new.rhtml:74
+msgid "Plans and administrative measures that affect these matters"
msgstr ""
-#: app/views/request/show_response.rhtml:18
+#: app/views/request/new.rhtml:77
msgid ""
-"The authority say that they <strong>need a postal\n"
-" address</strong>, not just an email, for it to be a valid FOI request"
+"Please only request information that comes under those categories, <strong>do not waste your\n"
+" time</strong> or the time of the public authority by requesting unrelated information."
msgstr ""
-#: app/views/request/show.rhtml:109
-msgid ""
-"The authority would like to / has <strong>responded by post</strong> to this"
-" request."
+#: app/views/request/new.rhtml:84
+msgid "Summary:"
msgstr ""
-#: app/views/request_mailer/stopped_responses.rhtml:1
+#: app/views/request/new.rhtml:88
msgid ""
-"The email that you, on behalf of {{public_body}}, sent to\n"
-"{{user}} to reply to an {{law_used_short}}\n"
-"request has not been delivered."
+"a one line summary of the information you are requesting, \n"
+"\t\t\te.g."
msgstr ""
-#: app/views/request/show_response.rhtml:22
-msgid ""
-"The law, the Ministry of Justice and the Information Commissioner\n"
-" all say that an email is sufficient (<a href=\"%s\">more details</a>).\n"
-" At the bottom of this page, write a reply to the authority explaining this to them."
+#: app/views/request/new.rhtml:90
+msgid "'Pollution levels over time for the River Tyne'"
msgstr ""
-#: app/views/general/exception_caught.rhtml:3
-msgid "The page either doesn't exist, or is broken. Things you can try now:"
+#: app/views/request/new.rhtml:92
+msgid "'Crime statistics by ward level for Wales'"
msgstr ""
-#: app/views/general/search.rhtml:143
-msgid "The public authority does not have the information requested"
+#: app/views/request/new.rhtml:104
+msgid "Write your request in <strong>simple, precise language</strong>."
msgstr ""
-#: app/views/general/search.rhtml:147
-msgid "The public authority would like part of the request explained"
+#: app/views/request/new.rhtml:105
+msgid ""
+"Ask for <strong>specific</strong> documents or information, this site is not"
+" suitable for general enquiries."
msgstr ""
-#: app/views/general/search.rhtml:148
-msgid "The public authority would like to / has responded by post"
+#: app/views/request/new.rhtml:106
+msgid ""
+"Keep it <strong>focused</strong>, you'll be more likely to get what you want"
+" (<a href=\"%s\">why?</a>)."
msgstr ""
-#: app/views/request/_other_describe_state.rhtml:60
-msgid "The request has been <strong>refused</strong>"
+#: app/views/request/new.rhtml:113
+msgid "Your request:"
msgstr ""
-#: app/controllers/request_controller.rb:352
+#: app/views/request/new.rhtml:120
msgid ""
-"The request has been updated since you originally loaded this page. Please "
-"check for any new incoming messages below, and try again."
+"Everything that you enter on this page, including <strong>your name</strong>, \n"
+" will be <strong>displayed publicly</strong> on\n"
+" this website forever (<a href=\"%s\">why?</a>)."
msgstr ""
-#: app/views/request/show.rhtml:104
-msgid "The request is <strong>waiting for clarification</strong>."
+#: app/views/request/new.rhtml:123
+msgid ""
+"If you are thinking of using a pseudonym,\n"
+" please <a href=\"%s\">read this first</a>."
msgstr ""
-#: app/views/request/show.rhtml:97
-msgid "The request was <strong>partially successful</strong>."
+#: app/views/request/new.rhtml:128
+msgid ""
+"Everything that you enter on this page \n"
+" will be <strong>displayed publicly</strong> on\n"
+" this website forever (<a href=\"%s\">why?</a>)."
msgstr ""
-#: app/views/request/show.rhtml:93
-msgid "The request was <strong>refused</strong> by"
+#: app/views/request/new.rhtml:135
+msgid ""
+"<strong> Can I request information about myself?</strong>\n"
+"\t\t\t<a href=\"%s\">No! (Click here for details)</a>"
msgstr ""
-#: app/views/request/show.rhtml:95
-msgid "The request was <strong>successful</strong>."
+#: app/views/request/new.rhtml:143
+msgid "Preview your public request"
msgstr ""
-#: app/views/general/search.rhtml:144
-msgid "The request was refused by the public authority"
+#: app/views/request/new_bad_contact.rhtml:1
+msgid "Missing contact details for '"
msgstr ""
-#: app/views/request/hidden.rhtml:9
+#: app/views/request/new_bad_contact.rhtml:5
msgid ""
-"The request you have tried to view has been removed. There are\n"
-"various reasons why we might have done this, sorry we can't be more specific here. Please <a\n"
-" href=\"%s\">contact us</a> if you have any questions."
+"Unfortunately, we do not have a working {{info_request_law_used_full}}\n"
+"address for"
msgstr ""
-#: app/views/general/search.rhtml:152
-msgid "The requester has abandoned this request for some reason"
+#: app/views/request/new_bad_contact.rhtml:6
+msgid ""
+"You may be able to find\n"
+"one on their website, or by phoning them up and asking. If you manage\n"
+"to find one, then please <a href=\"{{help_url}}\">send it to us</a>."
msgstr ""
-#: app/views/request/_followup.rhtml:32
+#: app/views/request/new_please_describe.rhtml:5
msgid ""
-"The response to your request has been <strong>delayed</strong>. You can say that, \n"
-" by law, the authority should normally have responded\n"
-" <strong>promptly</strong> and"
+"Please select each of these requests in turn, and <strong>let everyone know</strong>\n"
+"if they are successful yet or not."
msgstr ""
-#: app/views/request/_followup.rhtml:44
+#: app/views/request/new_please_describe.rhtml:16
msgid ""
-"The response to your request is <strong>long overdue</strong>. You can say that, by \n"
-" law, under all circumstances, the authority should have responded\n"
-" by now"
+"When you're done, <strong>come back here</strong>, <a href=\"%s\">reload "
+"this page</a> and file your new request."
msgstr ""
-#: app/views/public_body/show.rhtml:100
+#: app/views/request/new_please_describe.rhtml:20
msgid ""
-"The search index is currently offline, so we can't show the Freedom of "
-"Information requests that have been made to this authority."
+"Thanks very much for helping keep everything <strong>neat and organised</strong>.\n"
+" We'll also, if you need it, give you advice on what to do next about each of your\n"
+" requests."
msgstr ""
-#: app/views/user/show.rhtml:141
+#: app/views/request/preview.rhtml:5
+msgid "3. Now check your request"
+msgstr ""
+
+#: app/views/request/preview.rhtml:8
msgid ""
-"The search index is currently offline, so we can't show the Freedom of "
-"Information requests this person has made."
+"Your name, request and any responses will appear in <strong>search engines</strong>\n"
+" (<a href=\"%s\">details</a>)."
msgstr ""
-#: app/controllers/track_controller.rb:144
-msgid "Then you can cancel the alert."
+#: app/views/request/preview.rhtml:31
+msgid ""
+"<strong>Privacy note:</strong> If you want to request private information about\n"
+" yourself then <a href=\"%s\">click here</a>."
msgstr ""
-#: app/controllers/track_controller.rb:174
-msgid "Then you can cancel the alerts."
+#: app/views/request/preview.rhtml:40
+msgid "Edit this request"
msgstr ""
-#: app/controllers/user_controller.rb:249
-msgid "Then you can change your email address used on {{site_name}}"
+#: app/views/request/preview.rhtml:41
+msgid "Send request"
msgstr ""
-#: app/controllers/user_controller.rb:203
-msgid "Then you can change your password on {{site_name}}"
+#: app/views/request/preview.rhtml:45
+msgid "Tags:"
msgstr ""
-#: app/controllers/request_controller.rb:338
-msgid "Then you can classify the FOI response you have got from "
+#: app/views/request/select_authority.rhtml:27
+msgid "Select the authority to write to"
msgstr ""
-#: app/controllers/request_game_controller.rb:41
-msgid "Then you can play the request categorisation game."
+#: app/views/request/select_authority.rhtml:29
+msgid "1. Select an authority"
msgstr ""
-#: app/controllers/user_controller.rb:330
-msgid "Then you can send a message to "
+#: app/views/request/select_authority.rhtml:35
+msgid ""
+"First, type in the <strong>name of the UK public authority</strong> you'd \n"
+" <br>like information from. <strong>By law, they have to respond</strong>\n"
+" (<a href=\"%s\">why?</a>)."
msgstr ""
-#: app/controllers/user_controller.rb:514
-msgid "Then you can sign in to {{site_name}}"
+#: app/views/request/show.rhtml:5
+msgid ""
+"This request has prominence 'hidden'. You can only see it because you are logged\n"
+" in as a super user."
msgstr ""
-#: app/controllers/request_controller.rb:61
-msgid "Then you can update the status of your request to "
+#: app/views/request/show.rhtml:11
+msgid ""
+"This request is hidden, so that only you the requester can see it. Please\n"
+" <a href=\"%s\">contact us</a> if you are not sure why."
msgstr ""
-#: app/controllers/request_controller.rb:702
-msgid "Then you can upload an FOI response. "
+#: app/views/request/show.rhtml:36
+msgid ""
+"{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) made this "
+"{{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to "
+"{{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
msgstr ""
-#: app/controllers/request_controller.rb:545
-msgid "Then you can write follow up message to "
+#: app/views/request/show.rhtml:44
+msgid "{{user}} made this {{law_used_full}} request"
msgstr ""
-#: app/controllers/request_controller.rb:546
-msgid "Then you can write your reply to "
+#: app/views/request/show.rhtml:45
+msgid "to {{public_body}}"
msgstr ""
-#: app/models/track_thing.rb:197
+#: app/views/request/show.rhtml:52
msgid ""
-"Then you will be emailed whenever '{{user_name}}' requests something or gets"
-" a response."
+"Please <strong>answer the question above</strong> so we know whether the "
msgstr ""
-#: app/models/track_thing.rb:213
-msgid ""
-"Then you will be emailed whenever a new request or response matches "
-"'{{query}}'."
+#: app/views/request/show.rhtml:53
+msgid "useful information."
msgstr ""
-#: app/models/track_thing.rb:162
-msgid "Then you will be emailed whenever an FOI request succeeds."
+#: app/views/request/show.rhtml:55
+msgid "This request has an <strong>unknown status</strong>."
msgstr ""
-#: app/models/track_thing.rb:146
-msgid "Then you will be emailed whenever anyone makes a new FOI request."
+#: app/views/request/show.rhtml:57
+msgid "We're waiting for someone to read"
msgstr ""
-#: app/models/track_thing.rb:181
+#: app/views/request/show.rhtml:59
msgid ""
-"Then you will be emailed whenever someone requests something or gets a "
-"response from '{{public_body_name}}'."
+"and update the status accordingly. Perhaps <strong>you</strong> might like "
+"to help out by doing that?"
msgstr ""
-#: app/controllers/request_controller.rb:299
-msgid "Then your FOI request to {{public_body_name}} will be sent."
+#: app/views/request/show.rhtml:61
+msgid "We're waiting for"
msgstr ""
-#: app/controllers/comment_controller.rb:56
-msgid "Then your annotation to {{info_request_title}} will be posted."
+#: app/views/request/show.rhtml:62
+msgid "to read"
msgstr ""
-#: app/views/request_mailer/comment_on_alert_plural.rhtml:1
-msgid ""
-"There are {{count}} new annotations on your {{info_request}} request. Follow"
-" this link to see what they wrote."
+#: app/views/request/show.rhtml:64
+msgid "and update the status."
msgstr ""
-#: app/views/user/show.rhtml:4
+#: app/views/request/show.rhtml:68
msgid ""
-"There is <strong>more than one person</strong> who uses this site and has this name. \n"
-" One of them is shown below, you may mean a different one:"
+"Currently <strong>waiting for a response</strong> from {{public_body_link}},"
+" they must respond promptly and"
msgstr ""
-#: app/views/request/show.rhtml:113
-msgid ""
-"There was a <strong>delivery error</strong> or similar, which needs fixing "
-"by the {{site_name}} team."
+#: app/views/request/show.rhtml:72
+msgid "normally"
msgstr ""
-#: app/controllers/public_body_controller.rb:77
-msgid "There was an error with the words you entered, please try again."
+#: app/views/request/show.rhtml:74
+msgid "no later than"
msgstr ""
-#: app/views/request/_describe_state.rhtml:38
-msgid "They are going to reply <strong>by post</strong>"
+#: app/views/request/show.rhtml:77
+msgid "Response to this request is <strong>delayed</strong>."
msgstr ""
-#: app/views/request/_describe_state.rhtml:52
+#: app/views/request/show.rhtml:78
msgid ""
-"They do <strong>not have</strong> the information <small>(maybe they say who"
-" does)</small>"
+"By law, {{public_body_link}} should normally have responded "
+"<strong>promptly</strong> and"
msgstr ""
-#: app/views/user/show.rhtml:83
-msgid "They have been given the following explanation:"
+#: app/views/request/show.rhtml:82
+msgid "by"
msgstr ""
-#: app/views/request_mailer/overdue_alert.rhtml:3
-msgid ""
-"They have not replied to your {{law_used_short}} request {{title}} promptly,"
-" as normally required by law"
+#: app/views/request/show.rhtml:85
+msgid "Response to this request is <strong>long overdue</strong>."
msgstr ""
-#: app/views/request_mailer/very_overdue_alert.rhtml:3
+#: app/views/request/show.rhtml:86
msgid ""
-"They have not replied to your {{law_used_short}} request {{title}}, \n"
-"as required by law"
+"By law, under all circumstances, {{public_body_link}} should have responded "
+"by now"
msgstr ""
-#: app/views/request/_after_actions.rhtml:3
-msgid "Things to do with this request"
+#: app/views/request/show.rhtml:88
+msgid "You can <strong>complain</strong> by"
msgstr ""
-#: app/views/public_body/show.rhtml:59
-msgid "This authority no longer exists, so you cannot make a request to it."
+#: app/views/request/show.rhtml:89
+msgid "requesting an internal review"
msgstr ""
-#: app/views/request/_hidden_correspondence.rhtml:23
-msgid ""
-"This comment has been hidden. See annotations to\n"
-" find out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+#: app/views/request/show.rhtml:91
+msgid "<strong>did not have</strong> the information requested."
msgstr ""
-#: app/views/request/new.rhtml:65
-msgid ""
-"This covers a very wide spectrum of information about the state of\n"
-" the <strong>natural and built environment</strong>, such as:"
+#: app/views/request/show.rhtml:93
+msgid "The request was <strong>refused</strong> by"
msgstr ""
-#: app/views/request/_view_html_prefix.rhtml:9
-msgid ""
-"This is an HTML version of an attachment to the Freedom of Information "
-"request"
+#: app/views/request/show.rhtml:95
+msgid "The request was <strong>successful</strong>."
msgstr ""
-#: app/views/request_mailer/stopped_responses.rhtml:5
-msgid ""
-"This is because {{title}} is an old request that has been\n"
-"marked to no longer receive responses."
+#: app/views/request/show.rhtml:97
+msgid "The request was <strong>partially successful</strong>."
msgstr ""
-#: app/views/track/_tracking_links.rhtml:9
-msgid ""
-"This is your own request, so you will be automatically emailed when new "
-"responses arrive."
+#: app/views/request/show.rhtml:100
+msgid "is <strong>waiting for your clarification</strong>."
msgstr ""
-#: app/views/request/_hidden_correspondence.rhtml:17
-msgid ""
-"This outgoing message has been hidden. See annotations to\n"
-"\t\t\t\t\t\tfind out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+#: app/views/request/show.rhtml:101
+msgid "Please"
+msgstr "S'il vous plait"
+
+#: app/views/request/show.rhtml:102
+msgid "send a follow up message"
msgstr ""
-#: app/views/user/show.rhtml:122
-msgid "This person has"
+#: app/views/request/show.rhtml:104
+msgid "The request is <strong>waiting for clarification</strong>."
msgstr ""
-#: app/views/user/show.rhtml:152
-msgid "This person's"
+#: app/views/request/show.rhtml:105
+msgid "If you are {{user_link}}, please"
+msgstr "Si vous êtes {{user_link}}, merci de "
+
+#: app/views/request/show.rhtml:106
+msgid "sign in"
msgstr ""
-#: app/views/request/_describe_state.rhtml:84
-msgid "This request <strong>requires administrator attention</strong>"
+#: app/views/request/show.rhtml:106
+msgid "to send a follow up message."
msgstr ""
-#: app/views/request/show.rhtml:55
-msgid "This request has an <strong>unknown status</strong>."
+#: app/views/request/show.rhtml:109
+msgid ""
+"The authority would like to / has <strong>responded by post</strong> to this"
+" request."
msgstr ""
-#: app/views/request/show.rhtml:117
+#: app/views/request/show.rhtml:111
msgid ""
-"This request has been <strong>withdrawn</strong> by the person who made it. \n"
-" \t There may be an explanation in the correspondence below."
+"Waiting for an <strong>internal review</strong> by {{public_body_link}} of "
+"their handling of this request."
msgstr ""
-#: app/models/info_request.rb:395
+#: app/views/request/show.rhtml:113
msgid ""
-"This request has been set by an administrator to \"allow new responses from "
-"nobody\""
+"There was a <strong>delivery error</strong> or similar, which needs fixing "
+"by the {{site_name}} team."
msgstr ""
#: app/views/request/show.rhtml:115
@@ -2830,411 +3132,495 @@ msgid ""
"attention</strong> from the {{site_name}} team."
msgstr ""
-#: app/views/request/show.rhtml:5
+#: app/views/request/show.rhtml:117
msgid ""
-"This request has prominence 'hidden'. You can only see it because you are logged\n"
-" in as a super user."
+"This request has been <strong>withdrawn</strong> by the person who made it. \n"
+" \t There may be an explanation in the correspondence below."
msgstr ""
-#: app/views/request/show.rhtml:11
+#: app/views/request/show_response.rhtml:13
+msgid "Which of these is happening?"
+msgstr ""
+
+#: app/views/request/show_response.rhtml:18
msgid ""
-"This request is hidden, so that only you the requester can see it. Please\n"
-" <a href=\"%s\">contact us</a> if you are not sure why."
+"The authority say that they <strong>need a postal\n"
+" address</strong>, not just an email, for it to be a valid FOI request"
msgstr ""
-#: app/views/request/_hidden_correspondence.rhtml:10
+#: app/views/request/show_response.rhtml:26
msgid ""
-"This response has been hidden. See annotations to find out why.\n"
-" If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
+"The authority only has a <strong>paper copy</strong> of the information."
msgstr ""
-#: app/views/request/new.rhtml:49
+#: app/views/request/show_response.rhtml:29
msgid ""
-"This site is <strong>public</strong>. Everything you type and any response "
-"will be published."
+"At the bottom of this page, write a reply to them trying to persuade them to scan it in\n"
+" (<a href=\"%s\">more details</a>)."
msgstr ""
-#: app/views/request/details.rhtml:6
+#: app/views/request/show_response.rhtml:34
msgid ""
-"This table shows the technical details of the internal events that happened\n"
-"to this request on {{site_name}}. This could be used to generate information about\n"
-"the speed with which authorities respond to requests, the number of requests\n"
-"which require a postal response and much more."
+"You want to <strong>give your postal address</strong> to the authority in "
+"private."
msgstr ""
-#: app/views/user/show.rhtml:79
-msgid "This user has been banned from {{site_name}} "
+#: app/views/request/show_response.rhtml:37
+msgid "To do that please send a private email to "
msgstr ""
-#: app/views/user_mailer/changeemail_already_used.rhtml:5
+#: app/views/request/show_response.rhtml:39
msgid ""
-"This was not possible because there is already an account using \n"
-"the email address {{email}}."
+"containing your postal address, and asking them to reply to this request.\n"
+" Or you could phone them."
msgstr ""
-#: app/models/track_thing.rb:145
-msgid "To be emailed about any new requests"
+#: app/views/request/show_response.rhtml:42
+msgid ""
+"When you receive the paper response, please help\n"
+" others find out what it says:"
msgstr ""
-#: app/models/track_thing.rb:161
-msgid "To be emailed about any successful requests"
+#: app/views/request/show_response.rhtml:45
+msgid ""
+"Add an annotation to your request with choice quotes, or\n"
+" a <strong>summary of the response</strong>."
msgstr ""
-#: app/models/track_thing.rb:196
-msgid "To be emailed about requests by '{{user_name}}'"
+#: app/views/request/show_response.rhtml:47
+msgid ""
+"If you can, scan in or photograph the response, and <strong>send us\n"
+" a copy to upload</strong>."
msgstr ""
-#: app/models/track_thing.rb:180
-msgid ""
-"To be emailed about requests made using {{site_name}} to the public "
-"authority '{{public_body_name}}'"
+#: app/views/request/show_response.rhtml:60
+msgid "New response to your request"
+msgstr "Nouvelle réponse à votre demande"
+
+#: app/views/request/show_response.rhtml:62
+msgid "Response to your request"
msgstr ""
-#: app/controllers/track_controller.rb:173
-msgid "To cancel these alerts"
+#: app/views/request/show_response.rhtml:66
+msgid "New response to {{law_used_short}} request"
msgstr ""
-#: app/controllers/track_controller.rb:143
-msgid "To cancel this alert"
+#: app/views/request/similar.rhtml:7
+msgid "No similar requests found."
+msgstr "Pas de demandes similaires trouvés."
+
+#: app/views/request/similar.rhtml:18
+msgid "Unexpected search result type "
msgstr ""
-#: app/views/user/no_cookies.rhtml:5
+#: app/views/request/simple_correspondence.rhtml:1
msgid ""
-"To carry on, you need to sign in or make an account. Unfortunately, there\n"
-"was a technical problem trying to do this."
+"This is a plain-text version of the Freedom of Information request "
+"\"{{request_title}}\". The latest, full version is available online at "
+"{{full_url}}"
msgstr ""
-#: app/controllers/user_controller.rb:248
-msgid "To change your email address used on {{site_name}}"
+#: app/views/request/simple_correspondence.rhtml:17
+#: app/views/request/simple_correspondence.rhtml:29
+#: app/views/request/simple_correspondence.rhtml:36
+msgid "Date:"
msgstr ""
-#: app/controllers/request_controller.rb:337
-msgid "To classify the response to this FOI request"
+#: app/views/request/simple_correspondence.rhtml:21
+msgid "Attachment:"
msgstr ""
-#: app/views/request/show_response.rhtml:39
-msgid "To do that please send a private email to "
+#: app/views/request/simple_correspondence.rhtml:42
+msgid "{{username}} left an annotation:"
msgstr ""
-#: app/views/request_mailer/not_clarified_alert.rhtml:2
-msgid "To do this, first click on the link below."
+#: app/views/request/upload_response.rhtml:5
+msgid "Respond to the FOI request"
msgstr ""
-#: app/models/track_thing.rb:212
-msgid "To follow requests and responses matching '{{query}}'"
+#: app/views/request/upload_response.rhtml:5
+msgid " made by "
msgstr ""
-#: app/views/request_mailer/old_unclassified_updated.rhtml:1
+#: app/views/request/upload_response.rhtml:8
msgid ""
-"To help us keep the site tidy, someone else has updated the status of the \n"
-"{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
-msgstr ""
-
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:1
-msgid "To let us know, follow this link and then select the appropriate box."
+"Your response will <strong>appear on the Internet</strong>, <a "
+"href=\"%s\">read why</a> and answers to other questions."
msgstr ""
-#: app/controllers/request_game_controller.rb:40
-msgid "To play the request categorisation game"
+#: app/views/request/upload_response.rhtml:11
+msgid "Respond by email"
msgstr ""
-#: app/controllers/comment_controller.rb:55
-msgid "To post your annotation"
+#: app/views/request/upload_response.rhtml:13
+msgid ""
+"You should have received a copy of the request by email, and you can respond\n"
+"by <strong>simply replying</strong> to that email. For your convenience, here is the address:"
msgstr ""
-#: app/controllers/request_controller.rb:543
-msgid "To reply to "
+#: app/views/request/upload_response.rhtml:16
+msgid ""
+"You may <strong>include attachments</strong>. If you would like to attach a\n"
+"file too large for email, use the form below."
msgstr ""
-#: app/controllers/request_controller.rb:542
-msgid "To send a follow up message to "
+#: app/views/request/upload_response.rhtml:21
+msgid "Respond using the web"
msgstr ""
-#: app/controllers/user_controller.rb:329
-msgid "To send a message to "
+#: app/views/request/upload_response.rhtml:23
+msgid ""
+"Enter your response below. You may attach one file (use email, or \n"
+"<a href=\"%s\">contact us</a> if you need more)."
msgstr ""
-#: app/controllers/request_controller.rb:298
-msgid "To send your FOI request"
+#: app/views/request/upload_response.rhtml:28
+msgid "Response:"
msgstr ""
-#: app/controllers/request_controller.rb:60
-msgid "To update the status of this FOI request"
+#: app/views/request/upload_response.rhtml:33
+msgid "Attachment (optional):"
msgstr ""
-#: app/controllers/request_controller.rb:701
+#: app/views/request/upload_response.rhtml:40
msgid ""
-"To upload a response, you must be logged in using an email address from "
+" (<strong>patience</strong>, especially for large files, it may take a "
+"while!)"
msgstr ""
-#: app/views/public_body/view_email_captcha.rhtml:5
-msgid ""
-"To view the email address that we use to send FOI requests to "
-"{{public_body_name}}, please enter these words."
-msgstr ""
+#: app/views/request_game/play.rhtml:1 app/views/request_game/play.rhtml:30
+msgid "Play the request categorisation game!"
+msgstr "Jouez au jeu de catégorisation des demandes !"
-#: app/views/request_mailer/new_response.rhtml:5
-msgid "To view the response, click on the link below."
+#: app/views/request_game/play.rhtml:31
+msgid ""
+"Some people who've made requests haven't let us know whether they were\n"
+"successful or not. We need <strong>your</strong> help &ndash;\n"
+"choose one of these requests, read it, and let everyone know whether or not the\n"
+"information has been provided. Everyone'll be exceedingly grateful."
msgstr ""
-#: app/views/request/_request_listing_short_via_event.rhtml:9
-msgid "To {{public_body_link_absolute}}"
+#: app/views/request_game/play.rhtml:39
+msgid "I don't like these ones &mdash; give me some more!"
msgstr ""
-#: app/views/request/followup_preview.rhtml:22 app/views/request/new.rhtml:88
-#: app/views/request/preview.rhtml:17
-msgid "To:"
+#: app/views/request_game/play.rhtml:40
+msgid "I don't want to do any more tidying now!"
msgstr ""
-#: app/models/track_thing.rb:174
-msgid "Track requests to {{public_body_name}} by email"
+#: app/views/request_game/play.rhtml:42
+msgid ""
+"Thanks for helping - your work will make it easier for everyone to find successful\n"
+"responses, and maybe even let us make league tables..."
msgstr ""
-#: app/models/track_thing.rb:206
-msgid "Track things matching '{{query}}' by email"
+#: app/views/request_mailer/comment_on_alert.rhtml:1
+msgid ""
+"{{user_name}} has annotated your {{law_used_short}} \n"
+"request. Follow this link to see what they wrote."
msgstr ""
-#: app/views/public_body/show.rhtml:3
-msgid "Track this authority"
+#: app/views/request_mailer/comment_on_alert.rhtml:6
+#: app/views/request_mailer/comment_on_alert_plural.rhtml:5
+#: app/views/request_mailer/new_response.rhtml:15
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:8
+#: app/views/request_mailer/not_clarified_alert.rhtml:9
+#: app/views/request_mailer/old_unclassified_updated.rhtml:8
+#: app/views/request_mailer/overdue_alert.rhtml:9
+#: app/views/request_mailer/stopped_responses.rhtml:16
+#: app/views/request_mailer/very_overdue_alert.rhtml:11
+#: app/views/track_mailer/event_digest.rhtml:66
+#: app/views/user_mailer/already_registered.rhtml:11
+#: app/views/user_mailer/changeemail_already_used.rhtml:10
+#: app/views/user_mailer/changeemail_confirm.rhtml:13
+#: app/views/user_mailer/confirm_login.rhtml:11
+msgid "the {{site_name}} team"
msgstr ""
-#: app/views/user/show.rhtml:29
-msgid "Track this person"
+#: app/views/request_mailer/comment_on_alert_plural.rhtml:1
+msgid ""
+"There are {{count}} new annotations on your {{info_request}} request. Follow"
+" this link to see what they wrote."
msgstr ""
-#: app/models/track_thing.rb:190
-msgid "Track this person by email"
+#: app/views/request_mailer/new_response.rhtml:1
+msgid "You have a new response to the {{law_used_full}} request "
msgstr ""
-#: app/views/request/_sidebar.rhtml:2
-msgid "Track this request"
+#: app/views/request_mailer/new_response.rhtml:2
+msgid "that you made to"
msgstr ""
-#: app/models/track_thing.rb:123
-msgid "Track this request by email"
+#: app/views/request_mailer/new_response.rhtml:5
+msgid "To view the response, click on the link below."
msgstr ""
-#: locale/model_attributes.rb:33
-msgid "TrackThing|Track medium"
+#: app/views/request_mailer/new_response.rhtml:9
+msgid ""
+"When you get there, please update the status to say if the response \n"
+"contains any useful information."
msgstr ""
-#: locale/model_attributes.rb:32
-msgid "TrackThing|Track query"
+#: app/views/request_mailer/new_response.rhtml:12
+msgid ""
+"Although all responses are automatically published, we depend on\n"
+"you, the original requester, to evaluate them."
msgstr ""
-#: locale/model_attributes.rb:34
-msgid "TrackThing|Track type"
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:1
+msgid "To let us know, follow this link and then select the appropriate box."
msgstr ""
-#: app/views/general/search.rhtml:133
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:5
msgid ""
-"Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show "
-"things that happened in the first two weeks of January."
+"Your request was called {{info_request}}. Letting everyone know whether you "
+"got the information will help us keep tabs on"
msgstr ""
-#: app/models/public_body.rb:37
-msgid "URL name can't be blank"
+#: app/views/request_mailer/not_clarified_alert.rhtml:1
+msgid "request."
msgstr ""
-#: app/models/user_mailer.rb:45
-msgid "Unable to change email address on {{site_name}}"
+#: app/views/request_mailer/not_clarified_alert.rhtml:2
+msgid "To do this, first click on the link below."
msgstr ""
-#: app/views/request/followup_bad.rhtml:4
-msgid "Unable to send a reply to {{username}}"
+#: app/views/request_mailer/not_clarified_alert.rhtml:6
+msgid ""
+"You will only get an answer to your request if you follow up\n"
+"with the clarification."
msgstr ""
-#: app/views/request/followup_bad.rhtml:2
-msgid "Unable to send follow up message to {{username}}"
+#: app/views/request_mailer/old_unclassified_updated.rhtml:1
+msgid ""
+"To help us keep the site tidy, someone else has updated the status of the \n"
+"{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
msgstr ""
-#: app/views/request/list.rhtml:29
-msgid "Unexpected search result type"
+#: app/views/request_mailer/old_unclassified_updated.rhtml:4
+msgid "Follow this link to see the request:"
msgstr ""
-#: app/views/request/similar.rhtml:18
-msgid "Unexpected search result type "
+#: app/views/request_mailer/overdue_alert.rhtml:1
+msgid "have delayed."
msgstr ""
-#: app/views/user/wrong_user_unknown_email.rhtml:3
+#: app/views/request_mailer/overdue_alert.rhtml:3
msgid ""
-"Unfortunately we don't know the FOI\n"
-"email address for that authority, so we can't validate this.\n"
-"Please <a href=\"%s\">contact us</a> to sort it out."
+"They have not replied to your {{law_used_short}} request {{title}} promptly,"
+" as normally required by law"
msgstr ""
-#: app/views/request/new_bad_contact.rhtml:5
-msgid ""
-"Unfortunately, we do not have a working {{info_request_law_used_full}}\n"
-"address for"
+#: app/views/request_mailer/overdue_alert.rhtml:3
+msgid "during term time"
msgstr ""
-#: app/views/general/exception_caught.rhtml:17
-msgid "Unknown"
+#: app/views/request_mailer/overdue_alert.rhtml:5
+msgid ""
+"Click on the link below to send a message to {{public_body}} reminding them "
+"to reply to your request."
msgstr ""
-#: app/models/info_request_event.rb:317
-msgid "Unusual response"
+#: app/views/request_mailer/requires_admin.rhtml:2
+msgid "has reported an"
msgstr ""
-#: app/models/info_request.rb:807
-msgid "Unusual response."
+#: app/views/request_mailer/requires_admin.rhtml:3
+msgid ""
+"response as needing administrator attention. Take a look, and reply to this\n"
+"email to let them know what you are going to do about it."
msgstr ""
-#: app/views/request/_after_actions.rhtml:13
-#: app/views/request/_after_actions.rhtml:33
-msgid "Update the status of this request"
+#: app/views/request_mailer/requires_admin.rhtml:9
+msgid "Administration URL:"
msgstr ""
-#: app/controllers/request_controller.rb:62
-msgid "Update the status of your request to "
+#: app/views/request_mailer/stopped_responses.rhtml:1
+msgid ""
+"The email that you, on behalf of {{public_body}}, sent to\n"
+"{{user}} to reply to an {{law_used_short}}\n"
+"request has not been delivered."
msgstr ""
-#: app/views/general/search.rhtml:124
+#: app/views/request_mailer/stopped_responses.rhtml:5
msgid ""
-"Use OR (in capital letters) where you don't mind which word, e.g. "
-"<strong><code>commons OR lords</code></strong>"
+"This is because {{title}} is an old request that has been\n"
+"marked to no longer receive responses."
msgstr ""
-#: app/views/general/search.rhtml:125
+#: app/views/request_mailer/stopped_responses.rhtml:10
msgid ""
-"Use quotes when you want to find an exact phrase, e.g. "
-"<strong><code>\"Liverpool City Council\"</code></strong>"
+"If this is incorrect, or you would like to send a late response to the request\n"
+"or an email on another subject to {{user}}, then please\n"
+"email {{contact_email}} for help."
msgstr ""
-#: locale/model_attributes.rb:67
-msgid "UserInfoRequestSentAlert|Alert type"
+#: app/views/request_mailer/stopped_responses.rhtml:14
+msgid "Your original message is attached."
msgstr ""
-#: locale/model_attributes.rb:78
-msgid "User|About me"
+#: app/views/request_mailer/very_overdue_alert.rhtml:1
+msgid "are long overdue."
msgstr ""
-#: locale/model_attributes.rb:76
-msgid "User|Admin level"
+#: app/views/request_mailer/very_overdue_alert.rhtml:3
+msgid ""
+"They have not replied to your {{law_used_short}} request {{title}}, \n"
+"as required by law"
msgstr ""
-#: locale/model_attributes.rb:77
-msgid "User|Ban text"
+#: app/views/request_mailer/very_overdue_alert.rhtml:4
+msgid "even during holidays"
msgstr ""
-#: locale/model_attributes.rb:69
-msgid "User|Email"
+#: app/views/request_mailer/very_overdue_alert.rhtml:6
+msgid ""
+"Click on the link below to send a message to {{public_body_name}} telling them to reply to your request. You might like to ask for an internal\n"
+"review, asking them to find out why response to the request has been so slow."
msgstr ""
-#: locale/model_attributes.rb:73
-msgid "User|Email confirmed"
+#: app/views/track/_tracking_links.rhtml:8
+msgid ""
+"This is your own request, so you will be automatically emailed when new "
+"responses arrive."
msgstr ""
-#: locale/model_attributes.rb:71
-msgid "User|Hashed password"
+#: app/views/track/_tracking_links.rhtml:21
+msgid "Follow by email"
msgstr ""
-#: locale/model_attributes.rb:75
-msgid "User|Last daily track email"
+#: app/views/track/_tracking_links.rhtml:26
+msgid "RSS feed of updates"
msgstr ""
-#: locale/model_attributes.rb:70
-msgid "User|Name"
+#: app/views/track/_tracking_links.rhtml:26
+msgid "RSS feed"
msgstr ""
-#: locale/model_attributes.rb:72
-msgid "User|Salt"
-msgstr ""
+#: app/views/track_mailer/event_digest.rhtml:21
+msgid "{{public_body}} sent a response to {{user_name}}"
+msgstr "{{public_body}} a répondu à {{user_name}}"
-#: locale/model_attributes.rb:74
-msgid "User|Url name"
-msgstr ""
+#: app/views/track_mailer/event_digest.rhtml:24
+msgid "{{user_name}} sent a follow up message to {{public_body}}"
+msgstr "{{user_name}} a envoyé un message de relance à {{public_body}}"
-#: app/views/public_body/show.rhtml:21
-msgid "View FOI email address"
+#: app/views/track_mailer/event_digest.rhtml:28
+msgid "{{user_name}} sent a request to {{public_body}}"
+msgstr "{{user_name}} a envoyé une demande à {{public_body}}"
+
+#: app/views/track_mailer/event_digest.rhtml:31
+msgid "{{user_name}} added an annotation"
+msgstr "{{user_name}} a ajouté une annotation"
+
+#: app/views/track_mailer/event_digest.rhtml:60
+msgid "Alter your subscription"
msgstr ""
-#: app/views/public_body/view_email_captcha.rhtml:1
-msgid "View FOI email address for '{{public_body_name}}'"
+#: app/views/track_mailer/event_digest.rhtml:63
+msgid "Please click on the link below to cancel or alter these emails."
msgstr ""
-#: app/views/public_body/view_email_captcha.rhtml:3
-msgid "View FOI email address for {{public_body_name}}"
+#: app/views/user/_signin.rhtml:7
+msgid "If you've used {{site_name}} before"
msgstr ""
-#: app/views/contact_mailer/user_message.rhtml:10
-msgid "View Freedom of Information requests made by {{user_name}}:"
+#: app/views/user/_signin.rhtml:11 app/views/user/_signup.rhtml:9
+#: app/views/user/signchangepassword_send_confirm.rhtml:13
+msgid "Your e-mail:"
msgstr ""
-#: app/views/layouts/default.rhtml:89
-msgid "View authorities"
+#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30
+msgid "Password:"
+msgstr "Mot de passe :"
+
+#: app/views/user/_signin.rhtml:21
+msgid "Forgotten your password?"
msgstr ""
-#: app/views/public_body/view_email_captcha.rhtml:12
-msgid "View email"
+#: app/views/user/_signin.rhtml:26
+msgid ""
+"Remember me</label> (keeps you signed in longer;\n"
+" do not use on a public computer) "
msgstr ""
-#: app/views/layouts/default.rhtml:88
-msgid "View requests"
-msgstr "Voir requêtes"
+#: app/views/user/_signin.rhtml:32
+msgid "Sign in"
+msgstr ""
-#: app/models/info_request.rb:799
-msgid "Waiting clarification."
+#: app/views/user/_signup.rhtml:6
+msgid "If you're new to {{site_name}}"
msgstr ""
-#: app/views/request/show.rhtml:111
+#: app/views/user/_signup.rhtml:13
msgid ""
-"Waiting for an <strong>internal review</strong> by {{public_body_link}} of "
-"their handling of this request."
+"We will not reveal your email address to anybody unless you or\n"
+" the law tell us to (<a href=\"%s\">details</a>). "
msgstr ""
+"Nous ne communiquerons pas votre adresse e-mail sauf si vous nous y \n"
+" autorisez ou si la loi nous y oblige (<a href=\"%s\">détails</a>). "
-#: app/views/general/search.rhtml:149
-msgid ""
-"Waiting for the public authority to complete an internal review of their "
-"handling of the request"
+#: app/views/user/_signup.rhtml:18
+msgid "Your name:"
msgstr ""
-#: app/views/general/search.rhtml:142
-msgid "Waiting for the public authority to reply"
+#: app/views/user/_signup.rhtml:22
+msgid ""
+"Your <strong>name will appear publicly</strong> \n"
+" (<a href=\"%s\">why?</a>)\n"
+" on this website and in search engines. If you\n"
+" are thinking of using a pseudonym, please \n"
+" <a href=\"%s\">read this first</a>."
msgstr ""
-#: app/views/public_body/view_email.rhtml:17
-msgid "We do not have a working request email address for this authority."
+#: app/views/user/_signup.rhtml:35
+msgid "Password: (again)"
+msgstr "Mot de passe : (confirmation)"
+
+#: app/views/user/_signup.rhtml:46
+msgid "Sign up"
msgstr ""
-#: app/views/request/followup_bad.rhtml:24
-msgid ""
-"We do not have a working {{law_used_full}} address for {{public_body_name}}."
+#: app/views/user/_user_listing_single.rhtml:19
+#: app/views/user/_user_listing_single.rhtml:20
+msgid "made."
msgstr ""
-#: app/views/request/_describe_state.rhtml:107
-msgid ""
-"We don't know whether the most recent response to this request contains\n"
-" information or not\n"
-" &ndash;\n"
-"\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
+#: app/views/user/_user_listing_single.rhtml:21
+msgid "Joined in"
msgstr ""
-#: app/views/user_mailer/confirm_login.rhtml:8
+#: app/views/user/bad_token.rhtml:2
msgid ""
-"We will not reveal your email address to anybody unless you\n"
-"or the law tell us to."
+"Please check the URL (i.e. the long code of letters and numbers) is copied\n"
+"correctly from your email."
msgstr ""
-#: app/views/user_mailer/changeemail_confirm.rhtml:10
+#: app/views/user/bad_token.rhtml:7
msgid ""
-"We will not reveal your email addresses to anybody unless you\n"
-"or the law tell us to."
+"If you can't click on it in the email, you'll have to <strong>select and copy\n"
+"it</strong> from the email. Then <strong>paste it into your browser</strong>, into the place\n"
+"you would type the address of any other webpage."
msgstr ""
-#: app/views/request/show.rhtml:61
-msgid "We're waiting for"
+#: app/views/user/bad_token.rhtml:13
+msgid ""
+"If you got the email <strong>more than six months ago</strong>, then this login link won't work any\n"
+"more. Please try doing what you were doing from the beginning."
msgstr ""
-#: app/views/request/show.rhtml:57
-msgid "We're waiting for someone to read"
+#: app/views/user/banned.rhtml:9
+msgid ""
+"You will be unable to make new requests, send follow ups, add annotations or\n"
+"send messages to other users. You may continue to view other requests, and set\n"
+"up\n"
+"email alerts."
msgstr ""
-#: app/views/user/signchangeemail_confirm.rhtml:6
+#: app/views/user/banned.rhtml:15
msgid ""
-"We've sent an email to your new email address. You'll need to click the link in\n"
-"it before your email address will be changed."
+"If you would like us to lift this ban, then you may politely\n"
+"<a href=\"/help/contact\">contact us</a> giving reasons.\n"
msgstr ""
#: app/views/user/confirm.rhtml:6
@@ -3243,737 +3629,865 @@ msgid ""
"continue."
msgstr ""
-#: app/views/user/signchangepassword_confirm.rhtml:6
+#: app/views/user/confirm.rhtml:11
msgid ""
-"We've sent you an email, click the link in it, then you can change your "
-"password."
+"<small>If you use web-based email or have \"junk mail\" filters, also check your\n"
+"bulk/spam mail folders. Sometimes, our messages are marked that way.</small>\n"
+"</p>"
msgstr ""
-#: app/views/request/_followup.rhtml:58
-msgid "What are you doing?"
+#: app/views/user/contact.rhtml:32
+msgid ""
+"<strong>Note:</strong> You're sending a message to yourself, presumably\n"
+" to try out how it works."
msgstr ""
-#: app/views/request/_describe_state.rhtml:4
-msgid "What best describes the status of this request now?"
+#: app/views/user/contact.rhtml:35
+msgid " <strong>Privacy note:</strong> Your email address will be given to"
msgstr ""
+" <strong>Protection de vos données :</strong> Votre adresse e-mail sera "
+"communiquée à"
-#: app/views/request_mailer/new_response.rhtml:9
-msgid ""
-"When you get there, please update the status to say if the response \n"
-"contains any useful information."
+#: app/views/user/contact.rhtml:36
+msgid " when you send this message."
msgstr ""
-#: app/views/request/show_response.rhtml:44
-msgid ""
-"When you receive the paper response, please help\n"
-" others find out what it says:"
+#: app/views/user/no_cookies.rhtml:3
+msgid "Please enable \"cookies\" to carry on"
msgstr ""
-#: app/views/request/new_please_describe.rhtml:16
+#: app/views/user/no_cookies.rhtml:5
msgid ""
-"When you're done, <strong>come back here</strong>, <a href=\"%s\">reload "
-"this page</a> and file your new request."
+"To carry on, you need to sign in or make an account. Unfortunately, there\n"
+"was a technical problem trying to do this."
msgstr ""
-#: app/views/request/show_response.rhtml:13
-msgid "Which of these is happening?"
+#: app/views/user/no_cookies.rhtml:8
+msgid ""
+"It may be that your browser is not set to accept a thing called \"cookies\",\n"
+"or cannot do so. If you can, please enable cookies, or try using a different\n"
+"browser. Then press refresh to have another go."
msgstr ""
-#: app/models/info_request_event.rb:313
-msgid "Withdrawn by requester"
+#: app/views/user/no_cookies.rhtml:12
+msgid ""
+"If your browser is set to accept cookies and you are seeing this message,\n"
+"then there is probably a fault with our server."
msgstr ""
-#: app/models/info_request.rb:809
-msgid "Withdrawn by the requester."
+#: app/views/user/no_cookies.rhtml:15
+msgid "Please <a href=\"%s\">get in touch</a> with us so we can fix it."
msgstr ""
-#: app/controllers/request_controller.rb:549
-msgid "Write a reply to "
+#: app/views/user/no_cookies.rhtml:17
+msgid ""
+"Let us know what you were doing when this message\n"
+"appeared and your browser and operating system type and version."
msgstr ""
+"Dites-nous ce que vous faisiez lorsque ce message est apparu ainsi que votre"
+" navigateur et le type et la version de votre système d'exploitation."
-#: app/controllers/request_controller.rb:548
-msgid "Write your FOI follow up message to "
+#: app/views/user/no_cookies.rhtml:20
+msgid "If you are still having trouble, please <a href=\"%s\">contact us</a>."
msgstr ""
-#: app/views/request/new.rhtml:46
-msgid "Write your request in <strong>simple, precise language</strong>."
+#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104
+msgid "Change profile photo"
msgstr ""
-#: app/models/info_request_event.rb:301
-msgid "Wrong Response"
+#: app/views/user/set_crop_profile_photo.rhtml:6
+msgid "Crop your profile photo"
msgstr ""
-#: app/views/comment/_single_comment.rhtml:10
-msgid "You"
+#: app/views/user/set_crop_profile_photo.rhtml:35
+msgid ""
+"<strong>Privacy note:</strong> Your photo will be shown in public on the Internet, \n"
+" wherever you do something on {{site_name}}."
msgstr ""
-#: app/controllers/track_controller.rb:98
-msgid "You are already being emailed updates about "
+#: app/views/user/set_draft_profile_photo.rhtml:5
+msgid "Choose your profile photo"
msgstr ""
-#: app/models/track_thing.rb:175
-msgid "You are already tracking requests to {{public_body_name}} by email"
+#: app/views/user/set_draft_profile_photo.rhtml:13
+msgid "Photo of you:"
+msgstr "Votre photo :"
+
+#: app/views/user/set_draft_profile_photo.rhtml:18
+msgid ""
+"Your photo will be shown in public <strong>on the Internet</strong>, \n"
+" wherever you do something on {{site_name}}."
msgstr ""
-#: app/models/track_thing.rb:207
-msgid "You are already tracking things matching '{{query}}' by email"
+#: app/views/user/set_draft_profile_photo.rhtml:22
+msgid ""
+"Please don't upload offensive pictures. We will take down images\n"
+" that we consider inappropriate."
msgstr ""
-#: app/models/track_thing.rb:191
-msgid "You are already tracking this person by email"
+#: app/views/user/set_draft_profile_photo.rhtml:32
+msgid "Next, crop your photo &gt;&gt;"
+msgstr "Ensuite, recadrer votre photo&gt;&gt;"
+
+#: app/views/user/set_draft_profile_photo.rhtml:46
+msgid "OR remove the existing photo"
msgstr ""
-#: app/models/track_thing.rb:124
-msgid "You are already tracking this request by email"
+#: app/views/user/set_draft_profile_photo.rhtml:55
+msgid "Cancel, return to your profile page"
msgstr ""
-#: app/models/track_thing.rb:156
-msgid "You are being emailed about any new successful responses"
+#: app/views/user/set_profile_about_me.rhtml:1
+msgid "Change the text about you on your profile at {{site_name}}"
msgstr ""
-#: app/models/track_thing.rb:140
-msgid "You are being emailed when there are new requests"
+#: app/views/user/set_profile_about_me.rhtml:3
+#: app/views/user/signchangeemail.rhtml:3
+msgid "internal error"
msgstr ""
-#: app/views/request/show.rhtml:88
-msgid "You can <strong>complain</strong> by"
+#: app/views/user/set_profile_about_me.rhtml:9
+msgid "Edit text about you"
msgstr ""
-#: app/views/request/details.rhtml:58
-msgid ""
-"You can get this page in computer-readable format as part of the main JSON\n"
-"page for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
+#: app/views/user/set_profile_about_me.rhtml:11
+msgid " What are you investigating using Freedom of Information? "
msgstr ""
-#: app/views/public_body/show.rhtml:40
+#: app/views/user/set_profile_about_me.rhtml:14
msgid ""
-"You can only request information about the environment from this authority."
+" This will appear on your {{site_name}} profile, to make it\n"
+" easier for others to get involved with what you're doing."
msgstr ""
-#: app/views/user/show.rhtml:122
-msgid "You have"
-msgstr ""
+#: app/views/user/set_profile_about_me.rhtml:20
+msgid "About you:"
+msgstr "A propos de vous&nbsp;:"
-#: app/views/request_mailer/new_response.rhtml:1
-msgid "You have a new response to the {{law_used_full}} request "
+#: app/views/user/set_profile_about_me.rhtml:26
+msgid ""
+" Include relevant links, such as to a campaign page, your blog or a\n"
+" twitter account. They will be made clickable. \n"
+" e.g."
msgstr ""
-#: app/controllers/user_controller.rb:492
-msgid "You have now changed the text about you on your profile."
+#: app/views/user/set_profile_about_me.rhtml:35
+msgid "Save"
msgstr ""
-#: app/controllers/user_controller.rb:310
-msgid "You have now changed your email address used on {{site_name}}"
+#: app/views/user/show.rhtml:4
+msgid ""
+"There is <strong>more than one person</strong> who uses this site and has this name. \n"
+" One of them is shown below, you may mean a different one:"
msgstr ""
-#: app/views/user_mailer/already_registered.rhtml:3
+#: app/views/user/show.rhtml:12
msgid ""
-"You just tried to sign up to {{site_name}}, when you\n"
-"already have an account. Your name and password have been\n"
-"left as they previously were.\n"
-"\n"
-"Please click on the link below."
+"Please <strong>go to the following requests</strong>, and let us\n"
+" know if there was information in the recent responses to them."
msgstr ""
-#: app/views/comment/new.rhtml:59
+#: app/views/user/show.rhtml:20
msgid ""
-"You know what caused the error, and can <strong>suggest a solution</strong>,"
-" such as a working email address."
+"Thanks very much - this will help others find useful stuff. We'll\n"
+" also, if you need it, give advice on what to do next about your\n"
+" requests."
msgstr ""
-#: app/views/request/upload_response.rhtml:16
-msgid ""
-"You may <strong>include attachments</strong>. If you would like to attach a\n"
-"file too large for email, use the form below."
+#: app/views/user/show.rhtml:29
+msgid "Track this person"
msgstr ""
-#: app/views/request/followup_bad.rhtml:24
-msgid ""
-"You may be able to find\n"
-" one on their website, or by phoning them up and asking. If you manage\n"
-" to find one, then please <a href=\"%s\">send it to us</a>."
+#: app/views/user/show.rhtml:32
+msgid "On this page"
+msgstr "Sur cette page"
+
+#: app/views/user/show.rhtml:33
+msgid "FOI requests"
msgstr ""
-#: app/views/request/new_bad_contact.rhtml:6
-msgid ""
-"You may be able to find\n"
-"one on their website, or by phoning them up and asking. If you manage\n"
-"to find one, then please <a href=\"%s\">send it to us</a>."
+#: app/views/user/show.rhtml:34
+msgid "Annotations"
msgstr ""
-#: app/controllers/user_controller.rb:470
-msgid "You need to be logged in to change the text about you on your profile."
+#: app/views/user/show.rhtml:36
+msgid "Email subscriptions"
msgstr ""
-#: app/controllers/user_controller.rb:371
-msgid "You need to be logged in to change your profile photo."
+#: app/views/user/show.rhtml:53
+msgid "Set your profile photo"
msgstr ""
-#: app/controllers/user_controller.rb:433
-msgid "You need to be logged in to clear your profile photo."
+#: app/views/user/show.rhtml:59
+msgid " (you)"
msgstr ""
-#: app/controllers/request_controller.rb:559
-msgid ""
-"You previously submitted that exact follow up message for this request."
+#: app/views/user/show.rhtml:62
+msgid "Joined {{site_name}} in"
msgstr ""
-#: app/views/request/upload_response.rhtml:13
-msgid ""
-"You should have received a copy of the request by email, and you can respond\n"
-"by <strong>simply replying</strong> to that email. For your convenience, here is the address:"
+#: app/views/user/show.rhtml:69
+msgid "Send message to "
msgstr ""
-#: app/views/request/show_response.rhtml:36
-msgid ""
-"You want to <strong>give your postal address</strong> to the authority in "
-"private."
+#: app/views/user/show.rhtml:71
+msgid "just to see how it works"
msgstr ""
-#: app/views/user/banned.rhtml:9
-msgid ""
-"You will be unable to make new requests, send follow ups, add annotations or\n"
-"send messages to other users. You may continue to view other requests, and set\n"
-"up\n"
-"email alerts."
+#: app/views/user/show.rhtml:79
+msgid "This user has been banned from {{site_name}} "
msgstr ""
-#: app/controllers/track_controller.rb:154
-msgid "You will no longer be emailed updates about "
+#: app/views/user/show.rhtml:83
+msgid "They have been given the following explanation:"
msgstr ""
-#: app/controllers/track_controller.rb:183
-msgid "You will no longer be emailed updates for those alerts"
+#: app/views/user/show.rhtml:96
+msgid "edit text about you"
msgstr ""
-#: app/controllers/track_controller.rb:111
-msgid "You will now be emailed updates about "
+#: app/views/user/show.rhtml:106
+msgid "Change your password"
msgstr ""
-#: app/views/request_mailer/not_clarified_alert.rhtml:6
+#: app/views/user/show.rhtml:107
+msgid "Change your email"
+msgstr ""
+
+#: app/views/user/show.rhtml:113
msgid ""
-"You will only get an answer to your request if you follow up\n"
-"with the clarification."
+"<a href=\"%s\">Sign in</a> to change password, subscriptions and more "
+"({{user_name}} only)"
msgstr ""
-#: app/controllers/user_controller.rb:442
-msgid "You've now cleared your profile photo"
+#: app/views/user/show.rhtml:123
+msgid "Search your contributions"
msgstr ""
-#: app/views/user/show.rhtml:152
-msgid "Your "
+#: app/views/user/show.rhtml:125
+msgid "Search contributions by this person"
msgstr ""
-#: app/views/user/_signup.rhtml:22
-msgid ""
-"Your <strong>name will appear publicly</strong> \n"
-" (<a href=\"%s\">why?</a>)\n"
-" on this website and in search engines. If you\n"
-" are thinking of using a pseudonym, please \n"
-" <a href=\"%s\">read this first</a>."
+#: app/views/user/show.rhtml:136
+msgid "You have made no Freedom of Information requests using this site."
msgstr ""
-#: app/views/contact_mailer/user_message.rhtml:3
+#: app/views/user/show.rhtml:136
msgid ""
-"Your details have not been given to anyone, unless you choose to reply to this\n"
-"message, which will then go directly to the person who wrote the message."
+"This person has made no Freedom of Information requests using this site."
msgstr ""
-#: app/views/user/_signin.rhtml:11 app/views/user/_signup.rhtml:9
-#: app/views/user/signchangepassword_send_confirm.rhtml:13
-msgid "Your e-mail:"
+#: app/views/user/show.rhtml:141
+msgid "Your %d Freedom of Information request"
+msgid_plural "Your %d Freedom of Information requests"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/user/show.rhtml:141
+msgid "This person's %d Freedom of Information request"
+msgid_plural "This person's %d Freedom of Information requests"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/user/show.rhtml:155
+msgid "Freedom of Information requests made by you"
msgstr ""
-#: app/views/user/show.rhtml:168
-msgid "Your email subscriptions"
+#: app/views/user/show.rhtml:155
+msgid "Freedom of Information requests made by this person"
msgstr ""
-#: app/controllers/request_controller.rb:556
+#: app/views/user/show.rhtml:156
msgid ""
-"Your follow up has not been sent because this request has been stopped to "
-"prevent spam. Please <a href=\"%s\">contact us</a> if you really want to "
-"send a follow up message."
+"The search index is currently offline, so we can't show the Freedom of "
+"Information requests this person has made."
msgstr ""
-#: app/controllers/request_controller.rb:584
-msgid "Your follow up message has been sent on its way."
+#: app/views/user/show.rhtml:162
+msgid "Your annotations"
msgstr ""
-#: app/controllers/request_controller.rb:582
-msgid "Your internal review request has been sent on its way."
+#: app/views/user/show.rhtml:162
+msgid "This person's annotations"
msgstr ""
-#: app/controllers/help_controller.rb:63
-msgid ""
-"Your message has been sent. Thank you for getting in touch! We'll get back "
-"to you soon."
+#: app/views/user/show.rhtml:165 app/views/user/show.rhtml:185
+msgid "None made."
msgstr ""
-#: app/controllers/user_controller.rb:349
-msgid "Your message to {{recipient_user_name}} has been sent!"
+#: app/views/user/show.rhtml:169
+msgid "Your %d annotation"
+msgid_plural "Your %d annotations"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/user/show.rhtml:169
+msgid "This person's %d annotation"
+msgid_plural "This person's %d annotations"
+msgstr[0] ""
+msgstr[1] ""
+
+#: app/views/user/show.rhtml:184
+msgid "Your email subscriptions"
msgstr ""
-#: app/views/request/followup_preview.rhtml:15
-msgid "Your message will appear in <strong>search engines</strong>"
+#: app/views/user/show.rhtml:187
+msgid "email subscription"
msgstr ""
-#: app/views/comment/preview.rhtml:10
-msgid ""
-"Your name and annotation will appear in <strong>search engines</strong>."
+#: app/views/user/show.rhtml:196 app/views/user/show.rhtml:210
+msgid "unsubscribe all"
msgstr ""
-#: app/views/request/preview.rhtml:8
-msgid ""
-"Your name, request and any responses will appear in <strong>search engines</strong>\n"
-" (<a href=\"%s\">details</a>)."
+#: app/views/user/show.rhtml:224
+msgid "unsubscribe"
msgstr ""
-#: app/views/user/_signup.rhtml:18
-msgid "Your name:"
+#: app/views/user/sign.rhtml:8
+msgid "Please sign in as "
msgstr ""
-#: app/views/request_mailer/stopped_responses.rhtml:14
-msgid "Your original message is attached."
+#: app/views/user/sign.rhtml:11
+msgid "please sign in as "
msgstr ""
-#: app/controllers/user_controller.rb:231
-msgid "Your password has been changed."
+#: app/views/user/sign.rhtml:20
+msgid "Sign in or make a new account"
+msgstr ""
+
+#: app/views/user/sign.rhtml:26
+msgid " Please sign in or make a new account."
+msgstr "Merci de vous identifier ou de créer un nouveau compte."
+
+#: app/views/user/sign.rhtml:28
+msgid "please sign in or make a new account."
msgstr ""
+#: app/views/user/signchangeemail.rhtml:15
+msgid "Old e-mail:"
+msgstr "Ancien e-mail :"
+
+#: app/views/user/signchangeemail.rhtml:20
+msgid "New e-mail:"
+msgstr "Nouvel e-mail :"
+
#: app/views/user/signchangeemail.rhtml:25
msgid "Your password:"
msgstr ""
-#: app/views/user/set_draft_profile_photo.rhtml:18
+#: app/views/user/signchangeemail.rhtml:30
msgid ""
-"Your photo will be shown in public <strong>on the Internet</strong>, \n"
-" wherever you do something on {{site_name}}."
+"<strong>Note:</strong>\n"
+" We will send an email to your new email address. Follow the\n"
+" instructions in it to confirm changing your email."
msgstr ""
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:5
+#: app/views/user/signchangeemail.rhtml:37
+msgid "Change email on {{site_name}}"
+msgstr ""
+
+#: app/views/user/signchangeemail_confirm.rhtml:3
+#: app/views/user/signchangepassword_confirm.rhtml:1
+#: app/views/user/signchangepassword_confirm.rhtml:3
+msgid "Now check your email!"
+msgstr "Maintenant, relevez votre email !"
+
+#: app/views/user/signchangeemail_confirm.rhtml:6
msgid ""
-"Your request was called {{info_request}}. Letting everyone know whether you "
-"got the information will help us keep tabs on"
+"We've sent an email to your new email address. You'll need to click the link in\n"
+"it before your email address will be changed."
msgstr ""
-#: app/views/request/new.rhtml:109
-msgid "Your request:"
+#: app/views/user/signchangeemail_confirm.rhtml:11
+#: app/views/user/signchangepassword_confirm.rhtml:10
+msgid ""
+"If you use web-based email or have \"junk mail\" filters, also check your\n"
+"bulk/spam mail folders. Sometimes, our messages are marked that way."
msgstr ""
-#: app/views/request/upload_response.rhtml:8
+#: app/views/user/signchangepassword.rhtml:1
+#: app/views/user/signchangepassword.rhtml:11
+#: app/views/user/signchangepassword_send_confirm.rhtml:1
+#: app/views/user/signchangepassword_send_confirm.rhtml:9
+msgid "Change your password on {{site_name}}"
+msgstr ""
+
+#: app/views/user/signchangepassword.rhtml:15
+msgid "New password:"
+msgstr "Nouveau mot de passe :"
+
+#: app/views/user/signchangepassword.rhtml:20
+msgid "New password: (again)"
+msgstr "Nouveau mot de passe : (confirmation)"
+
+#: app/views/user/signchangepassword.rhtml:27
+msgid "Change password on {{site_name}}"
+msgstr ""
+
+#: app/views/user/signchangepassword_confirm.rhtml:6
msgid ""
-"Your response will <strong>appear on the Internet</strong>, <a "
-"href=\"%s\">read why</a> and answers to other questions."
+"We've sent you an email, click the link in it, then you can change your "
+"password."
msgstr ""
-#: app/views/comment/new.rhtml:62
+#: app/views/user/signchangepassword_send_confirm.rhtml:18
msgid ""
-"Your thoughts on what the {{site_name}} <strong>administrators</strong> "
-"should do about the request."
+" <strong>Note:</strong>\n"
+" We will send you an email. Follow the instructions in it to change\n"
+" your password."
msgstr ""
+" <strong>A savoir :</strong>\n"
+" Nous allons vous envoyer un courrier électronique. Suivez les instructions de ce courrier pour changer votre mot de passe."
-#: app/models/track_mailer.rb:25
-msgid "Your {{site_name}} email alert"
+#: app/views/user/signchangepassword_send_confirm.rhtml:26
+msgid "Submit"
msgstr ""
-#: app/models/outgoing_message.rb:69
-msgid "Yours faithfully,"
+#: app/views/user/wrong_user.rhtml:2
+msgid "Sorry, but only {{user_name}} is allowed to do that."
msgstr ""
-#: app/models/outgoing_message.rb:67
-msgid "Yours sincerely,"
+#: app/views/user/wrong_user_unknown_email.rhtml:3
+msgid ""
+"Unfortunately we don't know the FOI\n"
+"email address for that authority, so we can't validate this.\n"
+"Please <a href=\"%s\">contact us</a> to sort it out."
msgstr ""
-#: app/views/request/new.rhtml:97
+#: app/views/user_mailer/already_registered.rhtml:3
msgid ""
-"a one line summary of the information you are requesting, \n"
-"\t\t\te.g."
+"You just tried to sign up to {{site_name}}, when you\n"
+"already have an account. Your name and password have been\n"
+"left as they previously were.\n"
+"\n"
+"Please click on the link below."
msgstr ""
-#: app/views/public_body/show.rhtml:31
-msgid "admin"
-msgstr "admin"
+#: app/views/user_mailer/changeemail_already_used.rhtml:1
+msgid ""
+"Someone, perhaps you, just tried to change their email address on\n"
+"{{site_name}} from {{old_email}} to {{new_email}}."
+msgstr ""
-#: app/views/public_body/show.rhtml:29
-msgid "also called {{public_body_short_name}}"
-msgstr "aussi appelé {{public_body_short_name}}"
+#: app/views/user_mailer/changeemail_already_used.rhtml:5
+msgid ""
+"This was not possible because there is already an account using \n"
+"the email address {{email}}."
+msgstr ""
-#: app/views/user/wrong_user.rhtml:5
-msgid "and sign in as "
+#: app/views/user_mailer/changeemail_already_used.rhtml:8
+msgid "The accounts have been left as they previously were."
msgstr ""
-#: app/views/request/show.rhtml:59
+#: app/views/user_mailer/changeemail_confirm.rhtml:3
msgid ""
-"and update the status accordingly. Perhaps <strong>you</strong> might like "
-"to help out by doing that?"
+"Please click on the link below to confirm that you want to \n"
+"change the email address that you use for {{site_name}}\n"
+"from {{old_email}} to {{new_email}}"
msgstr ""
-#: app/views/request/show.rhtml:64
-msgid "and update the status."
+#: app/views/user_mailer/changeemail_confirm.rhtml:10
+msgid ""
+"We will not reveal your email addresses to anybody unless you\n"
+"or the law tell us to."
msgstr ""
-#: app/views/request/_describe_state.rhtml:101
-msgid "and we'll suggest <strong>what to do next</strong>"
+#: app/views/user_mailer/confirm_login.rhtml:3
+msgid "Please click on the link below to confirm your email address."
msgstr ""
-#: app/views/user/show.rhtml:153
-msgid "annotation"
+#: app/views/user_mailer/confirm_login.rhtml:8
+msgid ""
+"We will not reveal your email address to anybody unless you\n"
+"or the law tell us to."
msgstr ""
-#: app/views/user/show.rhtml:147
-msgid "annotations"
+#: lib/world_foi_websites.rb:5
+msgid "United Kingdom"
+msgstr "Royaume-Uni"
+
+#: lib/world_foi_websites.rb:9
+msgid "Kosovo"
msgstr ""
-#: app/models/track_thing.rb:138
-msgid "any <a href=\"/list\">new requests</a>"
+#: lib/world_foi_websites.rb:13
+msgid "European Union"
msgstr ""
-#: app/models/track_thing.rb:154
-msgid "any <a href=\"/list/successful\">successful requests</a>"
+#: lib/world_foi_websites.rb:17
+msgid "United States of America"
+msgstr "Etats-Unis d'Amérique"
+
+#: lib/world_foi_websites.rb:21
+msgid "New Zealand"
msgstr ""
-#: app/views/request_mailer/very_overdue_alert.rhtml:1
-msgid "are long overdue."
+#: lib/world_foi_websites.rb:25
+msgid "Germany"
msgstr ""
-#: app/controllers/public_body_controller.rb:111
-msgid "beginning with"
+#: lib/world_foi_websites.rb:29
+msgid "Chile"
msgstr ""
-#: app/views/request/show.rhtml:82
-msgid "by"
+#: locale/model_attributes.rb:2
+msgid "public body"
msgstr ""
-#: app/views/request/_followup.rhtml:38
-msgid "by <strong>{{date}}</strong>"
+#: locale/model_attributes.rb:3
+msgid "PublicBody|Name"
msgstr ""
-#: app/views/request/_request_listing_via_event.rhtml:34
-msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
+#: locale/model_attributes.rb:4
+msgid "PublicBody|Short name"
msgstr ""
-#: app/views/request/_request_listing_short_via_event.rhtml:10
-msgid "by {{user_link_absolute}}"
+#: locale/model_attributes.rb:5
+msgid "PublicBody|Request email"
msgstr ""
-#: locale/model_attributes.rb:35
-msgid "censor rule"
+#: locale/model_attributes.rb:6
+msgid "PublicBody|Version"
msgstr ""
-#: locale/model_attributes.rb:20
-msgid "comment"
+#: locale/model_attributes.rb:7
+msgid "PublicBody|Last edit editor"
msgstr ""
-#: app/views/request/show_response.rhtml:41
-msgid ""
-"containing your postal address, and asking them to reply to this request.\n"
-" Or you could phone them."
+#: locale/model_attributes.rb:8
+msgid "PublicBody|Last edit comment"
msgstr ""
-#: app/models/info_request_event.rb:338
-msgid "display_status only works for incoming and outgoing messages right now"
+#: locale/model_attributes.rb:9
+msgid "PublicBody|Url name"
msgstr ""
-#: app/views/request_mailer/overdue_alert.rhtml:3
-msgid "during term time"
+#: locale/model_attributes.rb:10
+msgid "PublicBody|Home page"
msgstr ""
-#: app/views/general/frontpage.rhtml:18
-msgid "e.g."
-msgstr "ex:"
+#: locale/model_attributes.rb:11
+msgid "PublicBody|Notes"
+msgstr ""
-#: app/views/user/show.rhtml:96
-msgid "edit text about you"
+#: locale/model_attributes.rb:12
+msgid "PublicBody|First letter"
msgstr ""
-#: app/views/user/show.rhtml:171
-msgid "email subscription"
+#: locale/model_attributes.rb:13
+msgid "PublicBody|Publication scheme"
msgstr ""
-#: app/views/request_mailer/very_overdue_alert.rhtml:4
-msgid "even during holidays"
+#: locale/model_attributes.rb:14
+msgid "profile photo"
+msgstr ""
+
+#: locale/model_attributes.rb:15
+msgid "ProfilePhoto|Data"
+msgstr ""
+
+#: locale/model_attributes.rb:16
+msgid "ProfilePhoto|Draft"
msgstr ""
#: locale/model_attributes.rb:17
msgid "exim log"
+msgstr "exim log"
+
+#: locale/model_attributes.rb:18
+msgid "EximLog|Order"
+msgstr "EximLogComplet|Ordre"
+
+#: locale/model_attributes.rb:19
+msgid "EximLog|Line"
+msgstr "EximLogComplet|Ligne"
+
+#: locale/model_attributes.rb:20
+msgid "comment"
+msgstr "commentaire"
+
+#: locale/model_attributes.rb:21
+msgid "Comment|Comment type"
+msgstr "Commentaire|Type de Commentaire"
+
+#: locale/model_attributes.rb:22
+msgid "Comment|Body"
+msgstr "Commentaire|Texte"
+
+#: locale/model_attributes.rb:23
+msgid "Comment|Visible"
+msgstr "Commentaire|Visible"
+
+#: locale/model_attributes.rb:24
+msgid "Comment|Locale"
+msgstr "Commentaire|Localisation"
+
+#: locale/model_attributes.rb:25
+msgid "outgoing message"
msgstr ""
-#: locale/model_attributes.rb:59
-msgid "exim log done"
+#: locale/model_attributes.rb:26
+msgid "OutgoingMessage|Body"
msgstr ""
-#: app/views/request_mailer/requires_admin.rhtml:2
-msgid "has reported an"
+#: locale/model_attributes.rb:27
+msgid "OutgoingMessage|Status"
msgstr ""
-#: app/views/request_mailer/overdue_alert.rhtml:1
-msgid "have delayed."
+#: locale/model_attributes.rb:28
+msgid "OutgoingMessage|Message type"
msgstr ""
-#: locale/model_attributes.rb:56
-msgid "holiday"
+#: locale/model_attributes.rb:29
+msgid "OutgoingMessage|Last sent at"
msgstr ""
-#: app/views/request/_followup.rhtml:36 app/views/request/show.rhtml:70
-#: app/views/request/show.rhtml:80
-msgid "in term time"
+#: locale/model_attributes.rb:30
+msgid "OutgoingMessage|What doing"
msgstr ""
-#: app/views/public_body/list.rhtml:42
-msgid "in total"
+#: locale/model_attributes.rb:31
+msgid "track thing"
msgstr ""
-#: locale/model_attributes.rb:62
-msgid "incoming message"
+#: locale/model_attributes.rb:32
+msgid "TrackThing|Track query"
msgstr ""
-#: locale/model_attributes.rb:79
-msgid "info request"
+#: locale/model_attributes.rb:33
+msgid "TrackThing|Track medium"
msgstr ""
-#: locale/model_attributes.rb:40
-msgid "info request event"
+#: locale/model_attributes.rb:34
+msgid "TrackThing|Track type"
msgstr ""
-#: app/views/user/set_profile_about_me.rhtml:3
-#: app/views/user/signchangeemail.rhtml:3
-msgid "internal error"
+#: locale/model_attributes.rb:35
+msgid "censor rule"
msgstr ""
-#: app/views/request/show.rhtml:100
-msgid "is <strong>waiting for your clarification</strong>."
+#: locale/model_attributes.rb:36
+msgid "CensorRule|Text"
msgstr ""
-#: app/views/user/show.rhtml:71
-msgid "just to see how it works"
+#: locale/model_attributes.rb:37
+msgid "CensorRule|Replacement"
msgstr ""
-#: app/views/comment/_single_comment.rhtml:10
-msgid "left an annotation"
+#: locale/model_attributes.rb:38
+msgid "CensorRule|Last edit editor"
msgstr ""
-#: app/views/user/_user_listing_single.rhtml:19
-#: app/views/user/_user_listing_single.rhtml:20
-msgid "made."
+#: locale/model_attributes.rb:39
+msgid "CensorRule|Last edit comment"
msgstr ""
-#: app/views/request/show.rhtml:74
-msgid "no later than"
+#: locale/model_attributes.rb:40
+msgid "info request event"
msgstr ""
-#: app/views/request/followup_bad.rhtml:18
-msgid ""
-"no longer exists. If you are trying to make\n"
-" From the request page, try replying to a particular message, rather than sending\n"
-" a general followup. If you need to make a general followup, and know\n"
-" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
+#: locale/model_attributes.rb:41
+msgid "InfoRequestEvent|Event type"
msgstr ""
-#: app/views/request/show.rhtml:72
-msgid "normally"
+#: locale/model_attributes.rb:42
+msgid "InfoRequestEvent|Params yaml"
msgstr ""
-#: app/views/user/show.rhtml:114
-msgid "only"
+#: locale/model_attributes.rb:43
+msgid "InfoRequestEvent|Described state"
msgstr ""
-#: locale/model_attributes.rb:25
-msgid "outgoing message"
+#: locale/model_attributes.rb:44
+msgid "InfoRequestEvent|Calculated state"
msgstr ""
-#: app/views/user/sign.rhtml:11
-msgid "please sign in as "
+#: locale/model_attributes.rb:45
+msgid "InfoRequestEvent|Last described at"
msgstr ""
-#: app/views/user/sign.rhtml:28
-msgid "please sign in or make a new account."
+#: locale/model_attributes.rb:46
+msgid "InfoRequestEvent|Prominence"
msgstr ""
-#: locale/model_attributes.rb:49
+#: locale/model_attributes.rb:47
msgid "post redirect"
msgstr ""
-#: locale/model_attributes.rb:14
-msgid "profile photo"
+#: locale/model_attributes.rb:48
+msgid "PostRedirect|Token"
msgstr ""
-#: locale/model_attributes.rb:2
-msgid "public body"
+#: locale/model_attributes.rb:49
+msgid "PostRedirect|Uri"
msgstr ""
-#: locale/model_attributes.rb:47
-msgid "raw email"
+#: locale/model_attributes.rb:50
+msgid "PostRedirect|Post params yaml"
msgstr ""
-#: app/views/request_mailer/not_clarified_alert.rhtml:1
-msgid "request."
+#: locale/model_attributes.rb:51
+msgid "PostRedirect|Email token"
msgstr ""
-#: app/views/request/show.rhtml:89
-msgid "requesting an internal review"
+#: locale/model_attributes.rb:52
+msgid "PostRedirect|Reason params yaml"
msgstr ""
-#: app/views/request_mailer/requires_admin.rhtml:3
-msgid ""
-"response as needing administrator attention. Take a look, and reply to this\n"
-"email to let them know what you are going to do about it."
+#: locale/model_attributes.rb:53
+msgid "PostRedirect|Circumstance"
msgstr ""
-#: app/views/request/show.rhtml:102
-msgid "send a follow up message"
-msgstr ""
+#: locale/model_attributes.rb:54
+msgid "holiday"
+msgstr "jour férié"
-#: app/views/request/_request_listing_via_event.rhtml:31
-msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
-msgstr ""
+#: locale/model_attributes.rb:55
+msgid "Holiday|Day"
+msgstr "JoursFériés|Jour"
-#: app/views/request/show.rhtml:106
-msgid "sign in"
+#: locale/model_attributes.rb:56
+msgid "Holiday|Description"
+msgstr "JoursFériés|Description"
+
+#: locale/model_attributes.rb:57
+msgid "exim log done"
+msgstr "exim log complet"
+
+#: locale/model_attributes.rb:58
+msgid "EximLogDone|Filename"
+msgstr "EximLogComplet|Nom du fichier"
+
+#: locale/model_attributes.rb:59
+msgid "EximLogDone|Last stat"
+msgstr "EximLogComplet|Dernier état"
+
+#: locale/model_attributes.rb:60
+msgid "incoming message"
msgstr ""
-#: app/views/user/wrong_user.rhtml:4
-msgid "sign out"
+#: locale/model_attributes.rb:61
+msgid "IncomingMessage|Cached attachment text clipped"
msgstr ""
-#: app/views/request_mailer/new_response.rhtml:2
-msgid "that you made to"
+#: locale/model_attributes.rb:62
+msgid "IncomingMessage|Cached main body text folded"
msgstr ""
-#: app/views/request_mailer/comment_on_alert.rhtml:6
-#: app/views/request_mailer/comment_on_alert_plural.rhtml:5
-#: app/views/request_mailer/new_response.rhtml:15
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:8
-#: app/views/request_mailer/not_clarified_alert.rhtml:9
-#: app/views/request_mailer/old_unclassified_updated.rhtml:8
-#: app/views/request_mailer/overdue_alert.rhtml:9
-#: app/views/request_mailer/stopped_responses.rhtml:16
-#: app/views/request_mailer/very_overdue_alert.rhtml:11
-#: app/views/track_mailer/event_digest.rhtml:66
-#: app/views/user_mailer/already_registered.rhtml:11
-#: app/views/user_mailer/changeemail_already_used.rhtml:10
-#: app/views/user_mailer/changeemail_confirm.rhtml:13
-#: app/views/user_mailer/confirm_login.rhtml:11
-msgid "the {{site_name}} team"
+#: locale/model_attributes.rb:63
+msgid "IncomingMessage|Cached main body text unfolded"
msgstr ""
-#: app/views/user/show.rhtml:140
-msgid "this person"
+#: locale/model_attributes.rb:64
+msgid "IncomingMessage|Sent at"
msgstr ""
-#: app/views/user/show.rhtml:113
-msgid ""
-"to change password, \n"
-" subscriptions and more"
+#: locale/model_attributes.rb:65
+msgid "IncomingMessage|Subject"
msgstr ""
-#: app/views/request/new.rhtml:34
-msgid "to check that the info isn't already published."
+#: locale/model_attributes.rb:66
+msgid "IncomingMessage|Safe mail from"
msgstr ""
-#: app/views/request/show.rhtml:62
-msgid "to read"
+#: locale/model_attributes.rb:67
+msgid "IncomingMessage|Mail from domain"
msgstr ""
-#: app/views/request/show.rhtml:106
-msgid "to send a follow up message."
+#: locale/model_attributes.rb:68
+msgid "IncomingMessage|Valid to reply to"
msgstr ""
-#: app/views/request/show.rhtml:45
-msgid "to {{public_body}}"
+#: locale/model_attributes.rb:69
+msgid "user info request sent alert"
msgstr ""
-#: locale/model_attributes.rb:31
-msgid "track thing"
+#: locale/model_attributes.rb:70
+msgid "UserInfoRequestSentAlert|Alert type"
msgstr ""
-#: app/views/request/_hidden_correspondence.rhtml:32
-msgid "unexpected prominence on request event"
+#: locale/model_attributes.rb:71
+msgid "user"
+msgstr "utilisateur"
+
+#: locale/model_attributes.rb:72
+msgid "User|Email"
msgstr ""
-#: app/views/request/_request_listing_via_event.rhtml:38
-msgid "unknown event type indexed "
+#: locale/model_attributes.rb:73
+msgid "User|Name"
msgstr ""
-#: app/views/request/followup_bad.rhtml:29
-msgid "unknown reason "
+#: locale/model_attributes.rb:74
+msgid "User|Hashed password"
msgstr ""
-#: app/models/info_request.rb:814 app/models/info_request_event.rb:333
-msgid "unknown status "
+#: locale/model_attributes.rb:75
+msgid "User|Salt"
msgstr ""
-#: app/views/user/show.rhtml:208
-msgid "unsubscribe"
+#: locale/model_attributes.rb:76
+msgid "User|Email confirmed"
msgstr ""
-#: app/views/user/show.rhtml:180 app/views/user/show.rhtml:194
-msgid "unsubscribe all"
+#: locale/model_attributes.rb:77
+msgid "User|Url name"
msgstr ""
-#: app/views/request/show.rhtml:53
-msgid "useful information."
+#: locale/model_attributes.rb:78
+msgid "User|Last daily track email"
msgstr ""
-#: locale/model_attributes.rb:68
-msgid "user"
+#: locale/model_attributes.rb:79
+msgid "User|Admin level"
msgstr ""
-#: locale/model_attributes.rb:66
-msgid "user info request sent alert"
+#: locale/model_attributes.rb:80
+msgid "User|Ban text"
msgstr ""
-#: app/views/user/show.rhtml:140
-msgid "you"
+#: locale/model_attributes.rb:81
+msgid "User|About me"
msgstr ""
-#: app/views/request/new.rhtml:6
-msgid ""
-"{{existing_request_user}} already\n"
-" created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n"
-" or edit the details below to make a new but similar request."
+#: locale/model_attributes.rb:82
+msgid "info request"
msgstr ""
-#: app/views/request/_after_actions.rhtml:20
-msgid "{{info_request_user_name}} only:"
+#: locale/model_attributes.rb:83
+msgid "InfoRequest|Title"
msgstr ""
-#: app/views/general/frontpage.rhtml:51
-msgid "{{length_of_time}} ago"
-msgstr "depuis {{length_of_time}}"
+#: locale/model_attributes.rb:84
+msgid "InfoRequest|Described state"
+msgstr ""
-#: app/views/request/_after_actions.rhtml:43
-msgid "{{public_body_name}} only:"
+#: locale/model_attributes.rb:85
+msgid "InfoRequest|Awaiting description"
msgstr ""
-#: app/views/public_body/view_email.rhtml:7
-msgid ""
-"{{site_name}} sends new requests to <strong>{{request_email}}</strong> for "
-"this authority."
+#: locale/model_attributes.rb:86
+msgid "InfoRequest|Prominence"
msgstr ""
-#: app/models/user.rb:122
-msgid "{{user_name}} (Banned)"
+#: locale/model_attributes.rb:87
+msgid "InfoRequest|Url title"
msgstr ""
-#: app/views/request_mailer/comment_on_alert.rhtml:1
-msgid ""
-"{{user_name}} has annotated your {{law_used_short}} \n"
-"request. Follow this link to see what they wrote."
+#: locale/model_attributes.rb:88
+msgid "InfoRequest|Law used"
msgstr ""
-#: app/views/contact_mailer/user_message.rhtml:2
-msgid "{{user_name}} has used {{site_name}} to send you the message below."
+#: locale/model_attributes.rb:89
+msgid "InfoRequest|Allow new responses from"
msgstr ""
-#: app/views/request/show.rhtml:36
-msgid ""
-"{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) made this "
-"{{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to "
-"{{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
+#: locale/model_attributes.rb:90
+msgid "InfoRequest|Handle rejected responses"
msgstr ""
-#: app/views/request/show.rhtml:44
-msgid "{{user}} made this {{law_used_full}} request"
+#: locale/model_attributes.rb:91
+msgid "InfoRequest|Idhash"
msgstr ""
diff --git a/locale/sq/app.po b/locale/sq/app.po
index a0a7b952e..cf09cf3b5 100644
--- a/locale/sq/app.po
+++ b/locale/sq/app.po
@@ -2,17 +2,18 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
+# Translators:
# <bresta@gmail.com>, 2011.
# driton <dritoni.h@gmail.com>, 2011.
-# <vbrestovci@gmail.com>, 2011.
# Valon <vbrestovci@gmail.com>, 2011.
+# <vbrestovci@gmail.com>, 2011.
# vbrestovci <vbrestovci@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: alaveteli\n"
"Report-Msgid-Bugs-To: http://github.com/sebbacon/alaveteli/issues\n"
-"POT-Creation-Date: 2011-08-11 12:30+0200\n"
-"PO-Revision-Date: 2011-08-12 08:23+0000\n"
+"POT-Creation-Date: 2011-10-07 13:48+0200\n"
+"PO-Revision-Date: 2011-10-07 13:09+0000\n"
"Last-Translator: vbrestovci <vbrestovci@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -21,18 +22,23 @@ msgstr ""
"Language: sq\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
-#: app/models/incoming_message.rb:866
+#: app/models/incoming_message.rb:867
msgid ""
"\n"
"\n"
"[ {{site_name}} note: The above text was badly encoded, and has had strange characters removed. ]"
msgstr ""
+"\n"
+"\n"
+"[{{site_name}} shënim: Teksti i lartshënuar është koduar keq, dhe i janë hequr karaktere të çuditshme.]"
#: app/views/user/set_profile_about_me.rhtml:14
msgid ""
" This will appear on your {{site_name}} profile, to make it\n"
" easier for others to get involved with what you're doing."
msgstr ""
+"Kjo do të shfaqet në profilin tënd në {{site_name}}, për ta bërë më të\n"
+"lehtë për të tjerët që të involvohen me çfarë jeni duke bërë."
#: app/views/comment/_comment_form.rhtml:16
msgid ""
@@ -52,7 +58,11 @@ msgstr ""
#: app/views/user/show.rhtml:59
msgid " (you)"
-msgstr "(ti)"
+msgstr " (ti)"
+
+#: app/views/public_body/show.rhtml:1
+msgid " - view and make Freedom of Information requests"
+msgstr "- shfleto dhe bëj kërkesa për informata zyrtare"
#: app/views/user/signchangepassword_send_confirm.rhtml:18
msgid ""
@@ -60,24 +70,25 @@ msgid ""
" We will send you an email. Follow the instructions in it to change\n"
" your password."
msgstr ""
-"<strong>Shënim:</strong>Do të dërgoj një email. Ndiq udhëzimet në te për të "
-"ndryshuar fjalëkalimin tënd."
+" <strong>Shënim:</strong>\n"
+" Do të dërgoj një email. Ndiq udhëzimet në te për të ndryshuar \n"
+" fjalëkalimin tënd."
#: app/views/user/contact.rhtml:35
msgid " <strong>Privacy note:</strong> Your email address will be given to"
-msgstr "<strong>Shënim privacie:</strong> Adresa e emailit do t'i jepet"
+msgstr " <strong>Shënim privatësie:</strong> Adresa e emailit do t'i jepet"
-#: app/views/comment/new.rhtml:33
+#: app/views/comment/new.rhtml:34
msgid " <strong>Summarise</strong> the content of any information returned. "
msgstr ""
-"<strong>Përmbledh</strong> përmbajtjen e informacioneve të kthyera "
-"(përgjegura)."
+" <strong>Përmbledh</strong> përmbajtjen e informacioneve të kthyera "
+"(përgjigura)."
-#: app/views/comment/new.rhtml:23
+#: app/views/comment/new.rhtml:24
msgid " Advise on how to <strong>best clarify</strong> the request."
msgstr " Këshillo se si <strong>më së miri të sqarohet</strong> një kërkesë."
-#: app/views/comment/new.rhtml:49
+#: app/views/comment/new.rhtml:50
msgid ""
" Ideas on what <strong>other documents to request</strong> which the "
"authority may hold. "
@@ -90,9 +101,8 @@ msgid ""
" If you know the address to use, then please <a href=\"%s\">send it to us</a>.\n"
" You may be able to find the address on their website, or by phoning them up and asking."
msgstr ""
-"Nëse e din adresën e emailit për ta përdorur, atëherë të lutem <a "
-"href=\"%s\">na e dërgon</a> . Ti mund ta gjen adresën e emailit në ueb "
-"sajtin e tyre ose duke ju telefonuar dhe pyetur."
+" Nëse e din adresën e emailit për ta përdorur, atëherë të lutem <a href=\"%s\">na e dërgon</a>. \n"
+"Ti mund ta gjen adresën e emailit në ueb sajtin e tyre ose duke ju telefonuar dhe pyetur."
#: app/views/user/set_profile_about_me.rhtml:26
msgid ""
@@ -104,78 +114,78 @@ msgstr ""
" llogaria e twitterit. Ato do të bëhen të klikueshme. \n"
" p.sh."
-#: app/views/comment/new.rhtml:27
+#: app/views/comment/new.rhtml:28
msgid ""
" Link to the information requested, if it is <strong>already "
"available</strong> on the Internet. "
msgstr ""
-"Vegza për informatat e kërkuara, në qoftë se ato <strong> tashmë "
-"janë</strong> në dispozicion në internet."
+" Vegza për informatat e kërkuara, në qoftë se ato <strong> tashmë "
+"janë</strong> në dispozicion në internet. "
-#: app/views/comment/new.rhtml:29
+#: app/views/comment/new.rhtml:30
msgid ""
" Offer better ways of <strong>wording the request</strong> to get the "
"information. "
msgstr ""
-"Propozo mënyra më të mira të <strong>formulim të kërkesës</strong> për të "
-"marrë informacion."
+" Propozo mënyra më të mira të <strong>formulim të kërkesës</strong> për të "
+"marrë informacion. "
#: app/views/user/sign.rhtml:26
msgid " Please sign in or make a new account."
-msgstr "Të lutem kyçu ose krijo një llogari të re."
+msgstr " Të lutem kyçu ose krijo një llogari të re."
-#: app/views/comment/new.rhtml:34
+#: app/views/comment/new.rhtml:35
msgid ""
" Say how you've <strong>used the information</strong>, with links if "
"possible."
msgstr ""
-"Trego se si ke <strong>përdorur informacionin,</strong> me ueb vegza nëse "
+" Trego se si ke <strong>përdorur informacionin,</strong> me ueb vegza nëse "
"është e mundur."
-#: app/views/comment/new.rhtml:28
+#: app/views/comment/new.rhtml:29
msgid ""
" Suggest <strong>where else</strong> the requester might find the "
"information. "
msgstr ""
-"Sugjero <strong>ku tjetër</strong> kërkuesi mund të gjej informacionin."
+" Sugjero <strong>ku tjetër</strong> kërkuesi mund të gjej informacionin. "
#: app/views/user/set_profile_about_me.rhtml:11
msgid " What are you investigating using Freedom of Information? "
msgstr ""
-"Çfarë jeni duke hulumtuar (hetuar) duke përdor kërkesat për çasje në "
-"Informata Zyrtare?"
+" Çfarë jeni duke hulumtuar (hetuar) duke përdor kërkesat për çasje në "
+"Informata Zyrtare? "
#: app/controllers/comment_controller.rb:75
msgid " You are already being emailed updates about the request."
msgstr ""
-"Ti tashmë je duke i pranuar me email aktualizimet në lidhje me këtë kërkesë."
+" Ti tashmë je duke i pranuar me email aktualizimet në lidhje me këtë "
+"kërkesë."
#: app/controllers/comment_controller.rb:73
msgid " You will also be emailed updates about the request."
msgstr ""
-"Ti gjithashtu do të pranon email me aktualizimet e reja në lidhje me "
+" Ti gjithashtu do të pranon email me aktualizimet e reja në lidhje me "
"kërkesën."
#: app/views/request/upload_response.rhtml:5
msgid " made by "
-msgstr "bërë nga "
+msgstr " bërë nga "
-#: app/views/user/show.rhtml:123
-msgid " made no Freedom of Information requests using this site."
-msgstr ""
-"nuk ka bërë kërkesa për informata zyrtare duke përdorur këtë ueb faqe."
+#: app/models/track_thing.rb:112 app/models/track_thing.rb:120
+msgid " or "
+msgstr " ose "
#: app/views/user/contact.rhtml:36
msgid " when you send this message."
-msgstr "kur e dërgoni këtë mesazh."
+msgstr " kur e dërgoni këtë mesazh."
-#: app/views/public_body/show.rhtml:80
-msgid "%d Freedom of Information request made using this site"
-msgid_plural "%d Freedom of Information requests made using this site"
-msgstr[0] ""
-msgstr[1] ""
+#: app/views/public_body/show.rhtml:87
+msgid "%d Freedom of Information request to %s"
+msgid_plural "%d Freedom of Information requests to %s"
+msgstr[0] "%d Kërkesë për informata zyrtare për %s"
+msgstr[1] "%d Kërkesa për informata zyrtare për %s"
-#: app/views/general/frontpage.rhtml:36
+#: app/views/general/frontpage.rhtml:43
msgid "%d request"
msgid_plural "%d requests"
msgstr[0] "%d kërkesë"
@@ -184,18 +194,30 @@ msgstr[1] "%d kërkesa"
#: app/views/public_body/_body_listing_single.rhtml:21
msgid "%d request made."
msgid_plural "%d requests made."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d kërkesë e bërë."
+msgstr[1] "%d kërkesa të bëra."
-#: app/views/request/new.rhtml:102
+#: app/views/request/new.rhtml:92
msgid "'Crime statistics by ward level for Wales'"
msgstr "'Statistikat e krimit në nivel komune'"
-#: app/views/request/new.rhtml:100
+#: app/views/request/new.rhtml:90
msgid "'Pollution levels over time for the River Tyne'"
-msgstr "'Niveli i ndotjes për lumin Drin'"
+msgstr "'Niveli i ndotjes në lumin Drin'"
-#: app/controllers/user_controller.rb:355
+#: app/models/track_thing.rb:246
+msgid "'{{link_to_authority}}', a public authority"
+msgstr "'{{link_to_authority}}', një autoritet publik"
+
+#: app/models/track_thing.rb:195
+msgid "'{{link_to_request}}', a request"
+msgstr "'{{link_to_request}}', një kërkesë"
+
+#: app/models/track_thing.rb:262
+msgid "'{{link_to_user}}', a person"
+msgstr "'{{link_to_user}}', një person"
+
+#: app/controllers/user_controller.rb:373
msgid ""
",\n"
"\n"
@@ -213,60 +235,82 @@ msgstr ""
"\n"
"{{user_name}}"
+#: app/views/user/sign.rhtml:37
+msgid "- or -"
+msgstr "- apo -"
+
+#: app/views/request/select_authority.rhtml:29
+msgid "1. Select an authority"
+msgstr "1. Zgjedh një autoritet"
+
+#: app/views/request/new.rhtml:22
+msgid "2. Ask for Information"
+msgstr "2. Kërko informata"
+
+#: app/views/request/preview.rhtml:5
+msgid "3. Now check your request"
+msgstr "3. Kontrollo kërkesën tënde"
+
+#: app/views/public_body/show.rhtml:56
+msgid "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>"
+msgstr "<a class=\"link_button_green\" href=\"{{url}}\">{{text}}</a>"
+
#: app/views/request/_after_actions.rhtml:9
msgid "<a href=\"%s\">Add an annotation</a> (to help the requester or others)"
msgstr ""
-"<a href=\"%s\">Shto një shënim</a> (për të ndihmuar kërkuesit ose të tjerët)"
+"<a href=\"%s\">Shto një shënim</a> (për të ndihmuar kërkuesin ose "
+"përdoruesit e tjerë)"
#: app/views/public_body/list.rhtml:29
msgid "<a href=\"%s\">Are we missing a public authority?</a>."
-msgstr "<a href=\"%s\">A po mungon ndonjë autoritet publik?</a> ."
+msgstr "<a href=\"%s\">A po mungon ndonjë autoritet publik?</a>"
-#: app/views/request/_sidebar.rhtml:45
+#: app/views/request/_sidebar.rhtml:39
msgid ""
"<a href=\"%s\">Are you the owner of\n"
" any commercial copyright on this page?</a>"
msgstr ""
-"<a href=\"%s\">Are you the owner of any commercial copyright on this "
-"page?</a>"
+"<a href=\"%s\">A je pronar i\n"
+" ndonjë të drejte autoriale komerciale në këtë faqe? </a>"
-#: app/views/general/search.rhtml:53
+#: app/views/general/search.rhtml:173
msgid "<a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add one</a>."
msgstr ""
"<a href=\"%s\">Shfletoni të gjitha</a> ose <a href=\"%s\">kërkoni nga ne që "
-"të shtojmë një</a> ."
+"të shtojmë një</a>."
-#: app/views/general/exception_caught.rhtml:13
-msgid "<a href=\"%s\">Contact us</a> to tell us about the problem</li>"
-msgstr "<a href=\"%s\">Na kontakto</a> për të na tregu për problemin</li>"
+#: app/views/public_body/list.rhtml:51
+msgid "<a href=\"%s\">Can't find the one you want?</a>"
+msgstr "<a href=\"%s\">Nuk mund të gjen autoritetin që dëshiron?</a>"
-#: app/views/public_body/list.rhtml:43
-msgid "<a href=\"%s\">can't find the one you want?</a>"
-msgstr "<a href=\"%s\">nuk mund të gjeni ate që dëshironi?</a>"
+#: app/views/user/show.rhtml:113
+msgid ""
+"<a href=\"%s\">Sign in</a> to change password, subscriptions and more "
+"({{user_name}} only)"
+msgstr ""
+"<a href=\"%s\">Kyçu</a> për të ndryshuar fjalëkalimin, abonimet dhe të tjera"
+" (vetëm për {{user_name}})"
-#: app/views/request/_followup.rhtml:39 app/views/request/_followup.rhtml:46
+#: app/views/request/_followup.rhtml:66 app/views/request/_followup.rhtml:73
#: app/views/request/show.rhtml:83 app/views/request/show.rhtml:87
msgid "<a href=\"%s\">details</a>"
msgstr "<a href=\"%s\">detajet</a>"
-#: app/views/request/_followup.rhtml:74
+#: app/views/request/_followup.rhtml:101
msgid "<a href=\"%s\">what's that?</a>"
msgstr "<a href=\"%s\">Çfarë është ajo?</a>"
-#: app/views/public_body/show.rhtml:50
-msgid ""
-"<a href=\"{{url}}\">Make a new Freedom of Information request</a> to "
-"{{public_body_name}}"
-msgstr ""
-
#: app/controllers/request_game_controller.rb:23
msgid ""
"<p>All done! Thank you very much for your help.</p><p>There are <a "
"href=\"{{helpus_url}}\">more things you can do</a> to help "
"{{site_name}}.</p>"
msgstr ""
+"<p>Të gjitha u bënë! Shumë faleminderit për ndihmën tënde. </p><p>Ka <a "
+"href=\"{{helpus_url}}\">shumë gjëra që ti mund të bësh</a> për të ndihmuar "
+"{{site_name}}. </p>"
-#: app/controllers/request_controller.rb:399
+#: app/controllers/request_controller.rb:405
msgid ""
"<p>Thank you! Here are some ideas on what to do next:</p>\n"
" <ul>\n"
@@ -279,60 +323,95 @@ msgid ""
" </li>\n"
" </ul>"
msgstr ""
+"<p>Faleminderit! Ja disa idea se çka të bësh në vijim:</p>\n"
+" <ul>\n"
+" <li>Për të dërguar kërkesën tënde te një autoritet tjetër, së pari kopjo tekstin e kërkesës së mëposhtme, pastaj <a href=\"{{find_authority_url}}\">gjete autoritetin tjetër publik</a>.</li>\n"
+" <li>Nëse dëshiron të kontestosh deklarimin e autoritetit publik që ata nuk e posedojnë këtë informatë, këtu është vegza \n"
+" <a href=\"{{complain_url}}\">si të ankohesh</a>.\n"
+" </li>\n"
+" <li>Kemi<a href=\"{{other_means_url}}\">sugjerime</a>\n"
+" për mjete të tjera për t'iu përgjigjur pyetjes tënde.\n"
+" </li>\n"
+" </ul>"
-#: app/controllers/request_controller.rb:393
+#: app/controllers/request_controller.rb:399
msgid ""
"<p>Thank you! Hope you don't have to wait much longer.</p> <p>By law, you "
"should have got a response promptly, and normally before the end of "
"<strong>{{date_response_required_by}}</strong>.</p>"
msgstr ""
+"<p>Faleminderit! Shpresojmë se ti nuk do të presësh shumë gjatë. "
+"</p><p>Sipas ligjit, ti duhet të kesh marrë një përgjigje menjëherë, dhe "
+"normalisht para <strong>{{date_response_required_by}}</strong>.</p>"
-#: app/controllers/request_controller.rb:389
+#: app/controllers/request_controller.rb:395
msgid ""
"<p>Thank you! Hopefully your wait isn't too long.</p> <p>By law, you should get a response promptly, and normally before the end of <strong>\n"
"{{date_response_required_by}}</strong>.</p>"
msgstr ""
+"<p>Faleminderit! Shpresojmë se pritja yte nuk do të jetë shumë e gjatë. </p><p>Sipas ligjit, ti duhet marrë një përgjigje menjëherë, dhe normalisht para <strong>\n"
+"{{date_response_required_by}}</strong>.</p>"
-#: app/controllers/request_controller.rb:428
+#: app/controllers/request_controller.rb:434
msgid ""
"<p>Thank you! Hopefully your wait isn't too long.</p><p>You should get a "
-"response within 20 days, or be told if it will take longer (<a "
-"href=\"{{review_url}}\">details</a>).</p>"
+"response within {{late_number_of_days}} days, or be told if it will take "
+"longer (<a href=\"{{review_url}}\">details</a>).</p>"
msgstr ""
+"<p>Faleminderit! Shpresojmë që pritja yte nuk do të jetë shumë e "
+"gjatë.</p><p> Ti duhet të marrë një përgjigje brenda "
+"{{late_number_of_days}} ditë pune, ose të njoftohesh se do të marrë kohë më "
+"të gjatë (<a href={{review_url}}\">detajet</a>).</p>"
-#: app/controllers/request_controller.rb:431
+#: app/controllers/request_controller.rb:437
msgid ""
"<p>Thank you! We'll look into what happened and try and fix it up.</p><p>If "
"the error was a delivery failure, and you can find an up to date FOI email "
"address for the authority, please tell us using the form below.</p>"
msgstr ""
+"<p> Faleminderit! Ne do të shohim çfarë ka ndodhur dhe të përpiqemi që ta "
+"rregullojmë atë. </p><p> Nëse gabimi ishte në dorëzimin e kërkesës në email "
+"adresën e autoritetit, dhe ti mund të gjesh email adresën aktuale të "
+"autoritetit, të lutem na e trego duke përdorur formularin e mëposhtëm.</p>"
-#: app/controllers/request_controller.rb:396
+#: app/controllers/request_controller.rb:402
msgid ""
-"<p>Thank you! Your request is long overdue, by more than 40 working days. "
-"Most requests should be answered within 20 working days. You might like to "
-"complain about this, see below.</p>"
+"<p>Thank you! Your request is long overdue, by more than "
+"{{very_late_number_of_days}} working days. Most requests should be answered "
+"within {{late_number_of_days}} working days. You might like to complain "
+"about this, see below.</p>"
msgstr ""
+"<p>Faleminderit! Përgjigja në kërkesën tënde është vonuar, për më tepër se "
+"{{very_late_number_of_days}} ditë pune. Shumica e kërkesave duhet të "
+"përgjigjen jo më vonë se për {{late_number_of_days}} ditë pune. Ti mund të "
+"ankohesh për këtë, shih më poshtë.</p>"
-#: app/controllers/user_controller.rb:495
+#: app/controllers/user_controller.rb:513
msgid ""
"<p>Thanks for changing the text about you on your profile.</p>\n"
" <p><strong>Next...</strong> You can upload a profile photograph too.</p>"
msgstr ""
+"<p> Faleminderit për ndryshimin e tekstit për vetën tënde në profil. </p>\n"
+" <p> <strong>Pastaj ...</strong> Ti gjithashtu mund ta ngarkon (upload) një fotografi në profilin tënd.</p>"
-#: app/controllers/user_controller.rb:417
+#: app/controllers/user_controller.rb:435
msgid ""
"<p>Thanks for updating your profile photo.</p>\n"
" <p><strong>Next...</strong> You can put some text about you and your research on your profile.</p>"
msgstr ""
+"<p>Faleminderit për azhurimin e fotografisë në profilit tënd. </p><p> "
+"<strong>Pastaj ...</strong>Ti mund të shkruash një tekst për veti dhe për "
+"temat e hulumtimit tënd në profil.</p>"
-#: app/controllers/request_controller.rb:284
+#: app/controllers/request_controller.rb:289
msgid ""
"<p>We recommend that you edit your request and remove the email address.\n"
" If you leave it, the email address will be sent to the authority, but will not be displayed on the site.</p>"
msgstr ""
+"<p> Ne të rekomandojmë që të editosh kërkesën dhe për të fshire adresën e emailit.\n"
+" Nëse e len atë, adresa e emailit do ti dërgohet autoritetit, por nuk do të shfaqet në këtë ueb faqe. </p>"
-#: app/controllers/request_controller.rb:417
+#: app/controllers/request_controller.rb:423
msgid ""
"<p>We're glad you got all the information that you wanted. If you write "
"about or make use of the information, please come back and add an annotation"
@@ -340,31 +419,44 @@ msgid ""
"href=\"{{donation_url}}\">make a donation</a> to the charity which runs "
"it.</p>"
msgstr ""
+"<p>Na vjen mirë që keni marrë të gjitha informatat e kërkuara. Nëse shkruan "
+"lidhur me këtë ose i përdorë këto informata, të lutem kthehu ne këtë ueb "
+"faqe dhe shto një shënim më poshtë që të tregosh atë që bëre.</p><p> Nëse e"
+" ke gjetë {{site_name}} të dobishëm, <a href=\"{{donation_url}}\">bëj një "
+"donacion</a> për organizatat që qëndrojnë mbrapa sajë.</p>"
-#: app/controllers/request_controller.rb:420
+#: app/controllers/request_controller.rb:426
msgid ""
"<p>We're glad you got some of the information that you wanted. If you found "
"{{site_name}} useful, <a href=\"{{donation_url}}\">make a donation</a> to "
"the charity which runs it.</p><p>If you want to try and get the rest of the "
"information, here's what to do now.</p>"
msgstr ""
+"<p>Na vjen mirë që keni marrë disa prej informatave të kërkuara. Nëse e ke "
+"gjetë {{site_name}} të dobishëm, <a href=\"{{donation_url}}\">bëj një "
+"donacion</a> për organizatat që qëndrojnë mbrapa sajë.</p><p>Nëse dëshiron "
+"të tentosh që të marrësh edhe pjesën e mbetur të informatave, këtu është se "
+"çfarë duhet të bësh.</p>"
-#: app/controllers/request_controller.rb:282
+#: app/controllers/request_controller.rb:287
msgid ""
"<p>You do not need to include your email in the request in order to get a "
"reply (<a href=\"%s\">details</a>).</p>"
msgstr ""
-"<p> Ti nuk duhet të inkludosh adresën e emailit tënd në këtë kërkesë qe të "
-"marrësh përgjigje ( <a href=\"%s\">detaje</a> ). </p>"
+"<p> Ti nuk duhet të inkludosh adresën e emailit tënd në këtë kërkesë qe të "
+"marrësh përgjigje (<a href=\"%s\">detaje</a> ). </p>"
-#: app/controllers/request_controller.rb:280
+#: app/controllers/request_controller.rb:285
msgid ""
"<p>You do not need to include your email in the request in order to get a "
"reply, as we will ask for it on the next screen (<a "
"href=\"%s\">details</a>).</p>"
msgstr ""
+"<p> Ti nuk duhet të inkludosh adresën e emailit tënd në këtë kërkesë qe të "
+"marrësh përgjigje, sepse ne do ta kërkojme atë ne faqen vijuese (<a "
+"href=\"%s\">detaje</a> )."
-#: app/controllers/request_controller.rb:288
+#: app/controllers/request_controller.rb:293
msgid ""
"<p>Your request contains a <strong>postcode</strong>. Unless it directly "
"relates to the subject of your request, please remove any address as it will"
@@ -374,21 +466,27 @@ msgstr ""
"direkt me temën e kërkesës tënde, të lutem largo çdo adresë sepse do të jetë"
" <strong> publike në internet</strong>. </p>"
-#: app/controllers/request_controller.rb:311
+#: app/controllers/request_controller.rb:316
msgid ""
"<p>Your {{law_used_full}} request has been <strong>sent on its way</strong>!</p>\n"
-" <p><strong>We will email you</strong> when there is a response, or after 20 working days if the authority still hasn't\n"
+" <p><strong>We will email you</strong> when there is a response, or after {{late_number_of_days}} working days if the authority still hasn't\n"
" replied by then.</p>\n"
" <p>If you write about this request (for example in a forum or a blog) please link to this page, and add an \n"
" annotation below telling people about your writing.</p>"
msgstr ""
+"<p>Kërkesa yte për informata zyrtare <strong>është dërguar</strong>!</p>\n"
+" <p><strong>Ne do të njoftojmë me email</strong> kur të mirret një përgjigje, apo pas {{late_number_of_days}} ditë pune nëse autoriteti ende nuk është përgjigjur deri atëherë.</p>"
-#: app/controllers/application_controller.rb:279
+#: app/controllers/application_controller.rb:298
msgid ""
"<p>{{site_name}} is currently in maintenance. You can only view existing "
"requests. You cannot make new ones, add followups or annotations, or "
"otherwise change the database.</p> <p>{{read_only}}</p>"
msgstr ""
+"<p>{{site_name}} është aktualisht në mirëmbajtje teknike. Ti vetëm mund të "
+"shikosh kërkesat ekzistuese. Ti nuk mund të bësh kërkesa të reja, të shton "
+"mesazhe vazhduese apo të bësh ndonjë ndryshim në bazën e të dhënave. "
+"</p><p>{{read_only}}</p>"
#: app/views/user/confirm.rhtml:11
msgid ""
@@ -400,7 +498,7 @@ msgstr ""
"\"junk mail\" filtra, kontrollo edhe bulk/spam folderët. Ndonjëherë, "
"mesazhet tona janë të shenjuara në këtë mënyrë.</small> </p>"
-#: app/views/request/new.rhtml:131
+#: app/views/request/new.rhtml:135
msgid ""
"<strong> Can I request information about myself?</strong>\n"
"\t\t\t<a href=\"%s\">No! (Click here for details)</a>"
@@ -408,7 +506,7 @@ msgstr ""
"<strong> A mund të kërkoj informatë për veten time?</strong>\n"
"<span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><span class=\"whitespace other\" title=\"Tab\">»</span><a href=\"%s\">Jo! (Kliko këtu për detaje)</a>"
-#: app/views/general/search.rhtml:130
+#: app/views/general/_advanced_search_tips.rhtml:12
msgid ""
"<strong><code>commented_by:tony_bowden</code></strong> to search annotations"
" made by Tony Bowden, typing the name as in the URL."
@@ -416,7 +514,7 @@ msgstr ""
"<strong><code>komentuar_nga:filan_fisteku</code></strong> për të kërkuar "
"shenimet nga Filan Fisteku, shtypeni emrin si në URL."
-#: app/views/general/search.rhtml:132
+#: app/views/general/_advanced_search_tips.rhtml:14
msgid ""
"<strong><code>filetype:pdf</code></strong> to find all responses with PDF "
"attachments. Or try these: <code>{{list_of_file_extensions}}</code>"
@@ -425,7 +523,7 @@ msgstr ""
"përgjigjet me PDF të bashkangjitur. Apo provo këto: "
"<code>{{list_of_file_extensions}}</code>"
-#: app/views/general/search.rhtml:131
+#: app/views/general/_advanced_search_tips.rhtml:13
msgid ""
"<strong><code>request:</code></strong> to restrict to a specific request, "
"typing the title as in the URL."
@@ -433,7 +531,7 @@ msgstr ""
"<strong><code>kërkesë:</code></strong> për të kufizuar në një kërkesë të "
"caktuar, duke shkruar titullin si në URL."
-#: app/views/general/search.rhtml:129
+#: app/views/general/_advanced_search_tips.rhtml:11
msgid ""
"<strong><code>requested_by:julian_todd</code></strong> to search requests "
"made by Julian Todd, typing the name as in the URL."
@@ -441,7 +539,7 @@ msgstr ""
"<strong><code>kerkuar_nga:filan_fisteku</code></strong> për të kërkuar "
"kërkesat e bëra nga Filan Fisteku duke shkruar titullin si në URL."
-#: app/views/general/search.rhtml:128
+#: app/views/general/_advanced_search_tips.rhtml:10
msgid ""
"<strong><code>requested_from:home_office</code></strong> to search requests "
"from the Home Office, typing the name as in the URL."
@@ -450,40 +548,48 @@ msgstr ""
" kërkesat e dërguara te Zyra e Kryeministrit, duke shkruar titullin si në "
"URL."
-#: app/views/general/search.rhtml:126
+#: app/views/general/_advanced_search_tips.rhtml:8
msgid ""
"<strong><code>status:</code></strong> to select based on the status or "
"historical status of the request, see the <a href=\"{{statuses_url}}\">table"
" of statuses</a> below."
msgstr ""
+"<strong><code>status:</code></strong>për të selektuar në bazë të statusit "
+"apo historisë së statusit të kërkesës, shih<a "
+"href=\"{{statuses_url}}\">tabelën e statuseve</a> më poshtë."
-#: app/views/general/search.rhtml:134
+#: app/views/general/_advanced_search_tips.rhtml:16
msgid ""
"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n"
" and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n"
" can be present, you have to put <code>AND</code> explicitly if you only want results them all present."
msgstr ""
-"<strong><code>etiketa:charity</code></strong> për të gjetur të gjitha institucionet apo kërkesat me etiketën e dhënë. Mund të përfshihen edhe disa etiketa, \n"
+"<strong><code>etiketa:organizatë</code></strong> për të gjetur të gjitha institucionet apo kërkesat me etiketën e dhënë. Mund të përfshihen edhe disa etiketa, \n"
" dhe vlera të etiketave, psh. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Secila nga etiketat mund të jetë\n"
" prezente, duhet të shkruash <code>AND</code> në mënyrë eksplicite nëse do që vetëm ato te përfshihen."
-#: app/views/general/search.rhtml:127
+#: app/views/general/_advanced_search_tips.rhtml:9
msgid ""
"<strong><code>variety:</code></strong> to select type of thing to search "
"for, see the <a href=\"{{varieties_url}}\">table of varieties</a> below."
msgstr ""
+"<strong><code>variety:</code></strong> për të zgjedhur tipin e asaj që do të"
+" kërkosh, shih <a href=\"{{varieties_url}}\">tabelën e varianteve</a> më "
+"poshtë."
-#: app/views/comment/new.rhtml:56
+#: app/views/comment/new.rhtml:57
msgid ""
"<strong>Advice</strong> on how to get a response that will satisfy the "
"requester. </li>"
msgstr ""
+"<strong>Këshillo</strong> se si të merrni një përgjigje që do të kënaqte "
+"kërkuesin. </li>"
#: app/views/request/_other_describe_state.rhtml:56
msgid "<strong>All the information</strong> has been sent"
msgstr "<strong>Të gjitha informatat</strong> janë dërguar"
-#: app/views/request/_followup.rhtml:79
+#: app/views/request/_followup.rhtml:106
msgid ""
"<strong>Anything else</strong>, such as clarifying, prompting, thanking"
msgstr "<strong>Diçka tjetër,</strong> p.sh. sqarim, falënderim"
@@ -497,6 +603,9 @@ msgid ""
"way authorities use it. Plus you'll need to be an elite statistician. Please\n"
"<a href=\"{{contact_path}}\">contact us</a> with questions."
msgstr ""
+"<strong>Caveat emptor!</strong> Për të përdorur këto shenime në mënyrë të ndershme, ju duhet njohuri e brendshme e pikënisjes së përdoruesve të {{site_name}}. Si,\n"
+"pse dhe nga kush kategorizohen kërkesat nuk është diçka e vetëkuptueshme pra edhe mund të ketë gabime dhe paqartësi. Gjithashtu duhet ta kuptoni ligjin për qasje në dokumente publike, si dhe mënyrën se si institucionet (autoritetet) e zbatojnë atë. Plus duhet të jeni ekspert i statistikës. Të lutem\n"
+"<a href=\"{{contact_path}}\"> na kontakto </a> me pyetje."
#: app/views/request/_other_describe_state.rhtml:28
msgid "<strong>Clarification</strong> has been requested"
@@ -507,6 +616,8 @@ msgid ""
"<strong>No response</strong> has been received\n"
" <small>(maybe there's just an acknowledgement)</small>"
msgstr ""
+"<strong>Asnjë përgjigje</strong> nuk është marrë <small>(ndoshta ke marrë "
+"konfirmim të pranimit)</small>"
#: app/views/user/signchangeemail.rhtml:30
msgid ""
@@ -531,101 +642,86 @@ msgid ""
"<strong>Privacy note:</strong> If you want to request private information about\n"
" yourself then <a href=\"%s\">click here</a>."
msgstr ""
-"<strong>Shenim privacie:</strong> Nëse do të kërkosh informatë private për\n"
-" veten tënde <a href=\"%s\">kliko këtu</a>."
+"<strong>Shënim privatësie:</strong> Nëse do të kërkosh informatë private për\n"
+" vetën tënde <a href=\"%s\">kliko këtu</a>."
#: app/views/user/set_crop_profile_photo.rhtml:35
msgid ""
"<strong>Privacy note:</strong> Your photo will be shown in public on the Internet, \n"
" wherever you do something on {{site_name}}."
msgstr ""
+"<strong>Shënim privatësie:</strong> Fotografia yte do të tregohet publikisht në internet, \n"
+" kudo që vepron diçka në {{site_name}}."
#: app/views/request/followup_preview.rhtml:37
msgid ""
"<strong>Privacy warning:</strong> Your message, and any response\n"
" to it, will be displayed publicly on this website."
msgstr ""
-"<strong>Parajalmrim privacie:</strong> Mesazhi yt si dhe çdo përgjigje do të"
-" paraqitet publikisht në këtë ueb faqe "
+"<strong>Parajalmrim privatësie:</strong> Mesazhi yt si dhe çdo përgjigje\n"
+" do të paraqitet publikisht në këtë ueb faqe "
#: app/views/request/_other_describe_state.rhtml:52
msgid "<strong>Some of the information</strong> has been sent "
-msgstr "<strong>Disa nga informacionet</strong> janë dërguar"
-
-#: app/views/general/exception_caught.rhtml:17
-msgid "<strong>Technical details:</strong>"
-msgstr "<strong>Detajet teknike:</strong>"
+msgstr "<strong>Disa nga informacionet</strong> janë dërguar "
-#: app/views/comment/new.rhtml:35
+#: app/views/comment/new.rhtml:36
msgid "<strong>Thank</strong> the public authority or "
msgstr "<strong>Falënderoju</strong> autoritet publik ose "
-#: app/views/request/new.rhtml:23
-msgid ""
-"<strong>browse</strong> the authority's <a href=\"%s\">publication "
-"scheme</a> or <strong>search</strong> their web site ..."
-msgstr ""
-
#: app/views/request/show.rhtml:91
msgid "<strong>did not have</strong> the information requested."
msgstr "<strong>nuk e kanë</strong> informacionin e kërkuar."
-#: app/views/request/new.rhtml:25
-msgid "<strong>search</strong> the authority's web site ..."
-msgstr "<strong>kërko</strong> në ueb sajtin e autoritetit ..."
-
-#: app/views/comment/new.rhtml:45
+#: app/views/comment/new.rhtml:46
msgid ""
"A <strong>summary</strong> of the response if you have received it by post. "
msgstr ""
"Një <strong>përmbledhje</strong> e përgjigjes nëse ate e keni marrë me "
-"postë."
+"postë. "
-#: app/views/general/search.rhtml:162
+#: app/views/general/_advanced_search_tips.rhtml:46
msgid "A public authority"
-msgstr ""
+msgstr "Autoriteti publik"
#: app/views/request/_other_describe_state.rhtml:34
msgid "A response will be sent <strong>by post</strong>"
msgstr "Përgjigja do të dërgohet <strong>me postë</strong>"
-#: app/views/general/search.rhtml:151
+#: app/views/general/_advanced_search_tips.rhtml:35
msgid "A strange reponse, required attention by the {{site_name}} team"
msgstr ""
+"Një përgjigje e çuditshme, kërkohet vëmendje e ekipit të {{site_name}}"
-#: app/views/general/search.rhtml:163
+#: app/views/general/_advanced_search_tips.rhtml:47
msgid "A {{site_name}} user"
-msgstr ""
+msgstr "Përdorues i {{site_name}}"
#: app/views/user/set_profile_about_me.rhtml:20
msgid "About you:"
msgstr "Për ty:"
-#: app/models/info_request_event.rb:293
-msgid "Acknowledgement"
-msgstr "Konfirmim për pranim "
-
-#: app/views/request/_sidebar.rhtml:5
+#: app/views/request/_sidebar.rhtml:8
msgid "Act on what you've learnt"
msgstr "Vepro sipas asaj që ke marrë vesh"
#: app/views/comment/new.rhtml:14
-msgid "Add an annotation to "
-msgstr "Shto një shënim për"
+msgid "Add an annotation"
+msgstr "Shto një shënim"
-#: app/views/request/show_response.rhtml:47
+#: app/views/request/show_response.rhtml:45
msgid ""
"Add an annotation to your request with choice quotes, or\n"
" a <strong>summary of the response</strong>."
msgstr ""
-"Shto shenim në kërkesën tënde me citate të zgjedhura, apo\n"
+"Shto shënim në kërkesën tënde me citate të zgjedhura, apo\n"
" me <strong>përmbledhje të përgjigjes</strong>."
-#: app/views/public_body/_body_listing_single.rhtml:26
+#: app/views/public_body/_body_listing_single.rhtml:27
msgid "Added on {{date}}"
-msgstr ""
+msgstr "Shtuar më {{date}}"
-#: app/models/user.rb:54
+#: app/models/user.rb:56
msgid "Admin level is not included in list"
msgstr "Niveli i administratorit nuk është i përfshir në listë"
@@ -633,38 +729,59 @@ msgstr "Niveli i administratorit nuk është i përfshir në listë"
msgid "Administration URL:"
msgstr "URL për administrim:"
-#: app/views/general/search.rhtml:31 app/views/general/search.rhtml:121
+#: app/views/general/search.rhtml:46
+msgid "Advanced search"
+msgstr "Kërkim i avancuar"
+
+#: app/views/general/_advanced_search_tips.rhtml:3
msgid "Advanced search tips"
-msgstr "Këshilla te avansuara për kërkim"
+msgstr "Këshilla te avancuara për kërkim"
-#: app/views/comment/new.rhtml:52
+#: app/views/comment/new.rhtml:53
msgid ""
"Advise on whether the <strong>refusal is legal</strong>, and how to complain"
" about it if not."
msgstr ""
+"Këshillo se a <strong>është refuzimi i ligjshëm,</strong> dhe si të "
+"ankohensh për atë nëse nuk është i ligjshëm."
-#: app/views/request/new.rhtml:69
+#: app/views/request/new.rhtml:67
msgid ""
"Air, water, soil, land, flora and fauna (including how these effect\n"
-" human beings)"
+" human beings)"
msgstr ""
-#: app/models/info_request_event.rb:309
-msgid "All information sent"
-msgstr "Të gjitha informatat janë dërguar"
-
-#: app/views/general/search.rhtml:146
+#: app/views/general/_advanced_search_tips.rhtml:30
msgid "All of the information requested has been received"
+msgstr "Të gjitha informatat e kërkuara janë marrë"
+
+#: app/views/general/_advanced_search_tips.rhtml:23
+msgid ""
+"All the options below can use <strong>status</strong> or "
+"<strong>latest_status</strong> before the colon. For example, "
+"<strong>status:not_held</strong> will match requests which have "
+"<em>ever</em> been marked as not held; "
+"<strong>latest_status:not_held</strong> will match only requests that are "
+"<em>currently</em> marked as not held."
msgstr ""
-#: app/views/public_body/list.rhtml:5
-msgid "Alphabet"
-msgstr "Sipas alfabetit"
+#: app/views/general/_advanced_search_tips.rhtml:40
+msgid ""
+"All the options below can use <strong>variety</strong> or "
+"<strong>latest_variety</strong> before the colon. For example, "
+"<strong>variety:sent</strong> will match requests which have <em>ever</em> "
+"been sent; <strong>latest_variety:sent</strong> will match only requests "
+"that are <em>currently</em> marked as sent."
+msgstr ""
#: app/views/public_body/_body_listing_single.rhtml:12
msgid "Also called {{other_name}}."
msgstr "i quajtur edhe {{other_name}}."
+#: app/views/track_mailer/event_digest.rhtml:60
+msgid "Alter your subscription"
+msgstr "Ndrysho abonimin tënd"
+
#: app/views/request_mailer/new_response.rhtml:12
msgid ""
"Although all responses are automatically published, we depend on\n"
@@ -677,15 +794,15 @@ msgstr ""
msgid "An <strong>error message</strong> has been received"
msgstr "Një <strong>mesazh gabimi</strong> është marrë"
-#: app/views/general/search.rhtml:161
+#: app/views/general/_advanced_search_tips.rhtml:45
msgid "Annotation added to request"
-msgstr ""
+msgstr "Shënimi iu shtua kërkesës"
#: app/views/user/show.rhtml:34
msgid "Annotations"
msgstr "Shënimet"
-#: app/views/comment/new.rhtml:17
+#: app/views/comment/new.rhtml:18
msgid ""
"Annotations are so anyone, including you, can help the requester with their "
"request. For example:"
@@ -693,17 +810,19 @@ msgstr ""
"Shënimet shërbejne për të gjithë, duke përfshirë edhe ty, që të mund të "
"ndihmoj kërkuesit me kërkesën e tyre. Për shembull:"
-#: app/views/comment/new.rhtml:69
+#: app/views/comment/new.rhtml:70
msgid ""
"Annotations will be posted publicly here, and are \n"
" <strong>not</strong> sent to {{public_body_name}}."
msgstr ""
+"Shënimet do të shfaqen publikisht këtu, dhe\n"
+"<strong>nuk</strong> dërgohen te {{public_body_name}}."
#: app/views/request/_after_actions.rhtml:6
msgid "Anyone:"
msgstr "Çdokush:"
-#: app/views/request/new.rhtml:47
+#: app/views/request/new.rhtml:105
msgid ""
"Ask for <strong>specific</strong> documents or information, this site is not"
" suitable for general enquiries."
@@ -711,7 +830,7 @@ msgstr ""
"Kërko dokumente apo informata <strong>specifike</strong>, kjo faqe nuk është"
" e përshtatshme për pyetje të përgjithshme."
-#: app/views/request/show_response.rhtml:31
+#: app/views/request/show_response.rhtml:29
msgid ""
"At the bottom of this page, write a reply to them trying to persuade them to scan it in\n"
" (<a href=\"%s\">more details</a>)."
@@ -723,31 +842,45 @@ msgstr ""
msgid "Attachment (optional):"
msgstr "Shtojca - attachment (opcionale):"
-#: app/models/info_request.rb:783
+#: app/views/request/simple_correspondence.rhtml:21
+msgid "Attachment:"
+msgstr "Shtojca (attachment):"
+
+#: app/models/info_request.rb:785
msgid "Awaiting classification."
msgstr "Në pritje të klasifikimit."
-#: app/models/info_request.rb:803
+#: app/models/info_request.rb:805
msgid "Awaiting internal review."
msgstr "Në pritje për rishqyrtim intern."
-#: app/models/info_request.rb:785
+#: app/models/info_request.rb:787
msgid "Awaiting response."
-msgstr "Në pritje të përgjigjes."
+msgstr "Në pritje të përgjigjes"
+
+#: app/views/public_body/list.rhtml:4
+msgid "Beginning with"
+msgstr "Duke filluar me"
-#: app/views/request/new.rhtml:43
+#: app/views/request/new.rhtml:46
msgid ""
-"Browse <a href=\"%s\">other requests</a> for examples of how to word your "
-"request."
+"Browse <a href='{{url}}'>other requests</a> for examples of how to word your"
+" request."
msgstr ""
-"Shfleto <a href=\"%s\">kërkesa të tjera</a> për shembuj se si të formulosh "
-"kërkesën tënde."
+"Shfleto <a href='{{url}}'>kërkesa të tjera</a> për shembuj se si të "
+"formulosh kërkesën tënde."
-#: app/views/request/new.rhtml:41
+#: app/views/request/new.rhtml:44
msgid ""
"Browse <a href='{{url}}'>other requests</a> to '{{public_body_name}}' for "
"examples of how to word your request."
msgstr ""
+"Shfleto <a href='{{url}}'>kërkesa të tjera</a> të drejtuara te "
+"'{{public_body_name}}' për shembuj se si të formulosh kërkesën tënde."
+
+#: app/views/general/frontpage.rhtml:48
+msgid "Browse all authorities..."
+msgstr "Shfleto të gjitha autoritetet ..."
#: app/views/request/show.rhtml:86
msgid ""
@@ -762,17 +895,9 @@ msgid ""
"By law, {{public_body_link}} should normally have responded "
"<strong>promptly</strong> and"
msgstr ""
-"Sipas ligjit, {{public_body_link}} do të duhej të ishte përgjegjur "
+"Sipas ligjit, {{public_body_link}} do të duhej të ishte përgjigjur "
"<strong>menjëherë</strong> dhe"
-#: app/views/general/search.rhtml:17
-msgid ""
-"Can't find it? <a href=\"%s\">Browse all</a> or <a href=\"%s\">ask us to add"
-" it</a>."
-msgstr ""
-"Nuk u gjet? <a href=\"%s\">Shfleto të gjtiha</a> apo <a href=\"%s\">kërko që"
-" të shtohet</a>."
-
#: app/controllers/track_controller.rb:145
msgid "Cancel a {{site_name}} alert"
msgstr "Anulo njoftimet për {{site_name}}"
@@ -781,13 +906,17 @@ msgstr "Anulo njoftimet për {{site_name}}"
msgid "Cancel some {{site_name}} alerts"
msgstr "Anulo disa njoftime për {{site_name}}"
+#: app/views/user/set_draft_profile_photo.rhtml:55
+msgid "Cancel, return to your profile page"
+msgstr "Anulo, kthehu në faqen e profilit tënd "
+
#: locale/model_attributes.rb:39
msgid "CensorRule|Last edit comment"
-msgstr "CensorRule | Redaktimi i fundit i koment"
+msgstr "CensorRule | Editimi i fundit i koment"
#: locale/model_attributes.rb:38
msgid "CensorRule|Last edit editor"
-msgstr "CensorRule | Redaktimi i fundit të editorit"
+msgstr "CensorRule | Editimi i fundit të editorit"
#: locale/model_attributes.rb:37
msgid "CensorRule|Replacement"
@@ -797,31 +926,27 @@ msgstr "CensorRule | Zëvendësimi"
msgid "CensorRule|Text"
msgstr "CensorRule | Teksti"
-#: lib/public_body_categories_en.rb:14
-msgid "Central government"
-msgstr "Qeveria"
-
#: app/views/user/signchangeemail.rhtml:37
msgid "Change email on {{site_name}}"
-msgstr ""
+msgstr "Ndrysho emailin në {{site_name}}"
#: app/views/user/signchangepassword.rhtml:27
msgid "Change password on {{site_name}}"
msgstr "Ndrysho fjalekalimin në {{site_name}}"
-#: app/views/user/set_crop_profile_photo.rhtml:1 app/views/user/show.rhtml:104
+#: app/views/user/show.rhtml:104 app/views/user/set_crop_profile_photo.rhtml:1
msgid "Change profile photo"
msgstr "Ndrysho fotografinë e profilit"
#: app/views/user/set_profile_about_me.rhtml:1
msgid "Change the text about you on your profile at {{site_name}}"
-msgstr ""
+msgstr "Ndrysho tekstin për vetën në profilin tënd në {{site_name}}"
#: app/views/user/show.rhtml:107
msgid "Change your email"
msgstr "Ndrysho email adresën tënde"
-#: app/controllers/user_controller.rb:250
+#: app/controllers/user_controller.rb:268
#: app/views/user/signchangeemail.rhtml:1
#: app/views/user/signchangeemail.rhtml:11
msgid "Change your email address used on {{site_name}}"
@@ -831,40 +956,44 @@ msgstr "Ndysho email adresën tënde të përdorur në këtë {{site_name}}"
msgid "Change your password"
msgstr "Ndrysho fjalëkalimin tënd"
-#: app/views/user/signchangepassword.rhtml:1
-#: app/views/user/signchangepassword.rhtml:11
#: app/views/user/signchangepassword_send_confirm.rhtml:1
#: app/views/user/signchangepassword_send_confirm.rhtml:9
+#: app/views/user/signchangepassword.rhtml:1
+#: app/views/user/signchangepassword.rhtml:11
msgid "Change your password on {{site_name}}"
msgstr "Ndrysho fjalëkalimin tënd në {{site_name}}"
-#: app/controllers/user_controller.rb:204
+#: app/controllers/user_controller.rb:222
msgid "Change your password {{site_name}}"
msgstr "Ndrysho fjalëkalimin tënd {{site_name}}"
-#: app/views/public_body/show.rhtml:15 app/views/public_body/show.rhtml:17
+#: app/views/public_body/show.rhtml:20 app/views/public_body/show.rhtml:22
msgid "Charity registration"
msgstr "Regjistrimi i organizatës"
-#: app/views/general/exception_caught.rhtml:6
+#: app/views/general/exception_caught.rhtml:8
msgid "Check for mistakes if you typed or copied the address."
msgstr "Kontrollo për gabime, nëse ke shtypur ose kopjuar adresën."
-#: app/views/request/followup_preview.rhtml:14
#: app/views/request/preview.rhtml:7
+#: app/views/request/followup_preview.rhtml:14
msgid "Check you haven't included any <strong>personal information</strong>."
msgstr ""
"Kontrollo që nuk ke përfshi asnjë <strong>informacion personal.</strong>"
-#: app/models/info_request_event.rb:331
+#: lib/world_foi_websites.rb:29
+msgid "Chile"
+msgstr "Kili"
+
+#: app/views/user/set_draft_profile_photo.rhtml:5
+msgid "Choose your profile photo"
+msgstr "Zgjidh fotografinë për profilin tënd"
+
+#: app/models/info_request_event.rb:316
msgid "Clarification"
msgstr "Sqarim"
-#: app/models/info_request_event.rb:295
-msgid "Clarification required"
-msgstr "Kërkohet sqarim"
-
-#: app/controllers/request_controller.rb:339
+#: app/controllers/request_controller.rb:345
msgid "Classify an FOI response from "
msgstr "Klasifiko një përgjigje për kërkesë për informatë zyrtare prej "
@@ -876,7 +1005,7 @@ msgstr ""
"Kliko në vegzën më poshtë për të dërguar një mesazh te {{public_body_name}} "
"duke u thënë atyre që të përgjigjen në kërkesën tënde. Ti mund të dëshirosh "
"të kërkosh rishqyrtim intern, duke u kërkuar atyre për të gjetur se pse "
-"përgjegja ndaj kërkesës ka qenë kaq e ngadaltë."
+"përgjigja ndaj kërkesës ka qenë kaq e ngadaltë."
#: app/views/request_mailer/overdue_alert.rhtml:5
msgid ""
@@ -902,37 +1031,48 @@ msgstr "Koment | Lokale"
msgid "Comment|Visible"
msgstr "Koment | i/e dukshëm"
-#: app/models/track_thing.rb:147
+#: app/models/track_thing.rb:220
msgid "Confirm you want to be emailed about new requests"
msgstr "Konfirmo që doni të merrni email për kërkesa të reja"
-#: app/models/track_thing.rb:214
+#: app/models/track_thing.rb:287
msgid ""
-"Confirm you want to be emailed about new requests or responses matching "
-"'{{query}}'"
+"Confirm you want to be emailed about new requests or responses matching your"
+" search"
msgstr ""
+"Konfirmo që dëshiron të merrësh email për kërkesa ose përgjigje të reja që "
+"përputhen me kërkimin tënd"
-#: app/models/track_thing.rb:198
+#: app/models/track_thing.rb:271
msgid "Confirm you want to be emailed about requests by '{{user_name}}'"
msgstr ""
+"Konfirmo që doni të merrni email për kërkesat e reja të '{{user_name}}'"
-#: app/models/track_thing.rb:182
+#: app/models/track_thing.rb:255
msgid ""
"Confirm you want to be emailed about requests to '{{public_body_name}}'"
msgstr ""
+"Konfirmo që doni të merrni email për kërkesat e reja te "
+"'{{public_body_name}}'"
-#: app/models/track_thing.rb:163
+#: app/models/track_thing.rb:236
msgid "Confirm you want to be emailed when an FOI request succeeds"
msgstr ""
"Konfirmo që doni të merrni email kur një kërkesë për informata zyrtare ka "
"sukses"
-#: app/controllers/request_controller.rb:300
+#: app/models/track_thing.rb:204
+msgid "Confirm you want to follow updates to the request '{{request_title}}'"
+msgstr ""
+"Konfirmo që dëshiron ti përcjell aktualizimet për kërkesën "
+"'{{request_title}}'"
+
+#: app/controllers/request_controller.rb:305
msgid "Confirm your FOI request to "
msgstr "Konfirmo kërkesën tënde për "
-#: app/controllers/request_controller.rb:703
-#: app/controllers/user_controller.rb:515
+#: app/controllers/request_controller.rb:714
+#: app/controllers/user_controller.rb:542
msgid "Confirm your account on {{site_name}}"
msgstr "Konfirmo llogarinë tënde në {{site_name}}"
@@ -940,17 +1080,21 @@ msgstr "Konfirmo llogarinë tënde në {{site_name}}"
msgid "Confirm your annotation to {{info_request_title}}"
msgstr "Konfirmo shënimin tënd për {{info_request_title}}"
+#: app/controllers/request_controller.rb:33
+msgid "Confirm your email address"
+msgstr "Konfirmo adresën tënde të emailit"
+
#: app/models/user_mailer.rb:34
msgid "Confirm your new email address on {{site_name}}"
msgstr "Konfirmo adresën e email-it tënd të ri në {{site_name}}"
-#: app/views/layouts/default.rhtml:127
+#: app/views/general/_footer.rhtml:2
msgid "Contact {{site_name}}"
msgstr "Kontakto {{site_name}}"
-#: app/models/request_mailer.rb:210
+#: app/models/request_mailer.rb:218
msgid "Could not identify the request from the email address"
-msgstr ""
+msgstr "Nuk mund ta identifikoj kërkesën nga email adresa"
#: app/models/profile_photo.rb:96
msgid ""
@@ -964,10 +1108,10 @@ msgstr ""
msgid "Crop your profile photo"
msgstr "Preje fotografinë e profilit tënd"
-#: app/views/request/new.rhtml:74
+#: app/views/request/new.rhtml:72
msgid ""
"Cultural sites and built structures (as they may be affected by the\n"
-" environmental factors listed above)"
+" environmental factors listed above)"
msgstr ""
#: app/views/request/show.rhtml:68
@@ -978,19 +1122,25 @@ msgstr ""
"Momentalisht <strong>duke pritur përgjigje</strong> nga "
"{{public_body_link}}, ata duhet të përgjigjen menjëherë dhe"
-#: app/models/info_request_event.rb:299
-msgid "Deadline Extended"
-msgstr "Afati është vazhduar"
+#: app/views/request/simple_correspondence.rhtml:17
+#: app/views/request/simple_correspondence.rhtml:29
+#: app/views/request/simple_correspondence.rhtml:36
+msgid "Date:"
+msgstr "Data:"
-#: app/models/outgoing_message.rb:57
-msgid "Dear "
-msgstr "I/e nderuar "
+#: app/models/outgoing_message.rb:63
+msgid "Dear {{public_body_name}},"
+msgstr "Të nderuar {{public_body_name}},"
-#: app/models/info_request.rb:787
+#: app/models/request_mailer.rb:86
+msgid "Delayed response to your FOI request - "
+msgstr ""
+
+#: app/models/info_request.rb:789
msgid "Delayed."
msgstr "Vonuar."
-#: app/models/info_request.rb:805 app/models/info_request_event.rb:315
+#: app/models/info_request.rb:807
msgid "Delivery error"
msgstr "Gabim gjatë dorëzimit"
@@ -998,7 +1148,7 @@ msgstr "Gabim gjatë dorëzimit"
msgid "Details of request '"
msgstr "Detajet e kërkesës"
-#: app/views/general/search.rhtml:50 app/views/general/search.rhtml:62
+#: app/views/general/search.rhtml:171
msgid "Did you mean: {{correction}}"
msgstr "Mos mendove këtë: {{correction}}"
@@ -1007,12 +1157,30 @@ msgid ""
"Disclaimer: This message and any reply that you make will be published on "
"the internet. Our privacy and copyright policies:"
msgstr ""
+"Shfajësim: Ky mesazh dhe çdo përgjigje që ti i jep atij do të publikohen në "
+"internet. Politikat tona për privatësinë dhe të drejtat autoriale:"
+
+#: app/views/request/_followup.rhtml:19
+msgid ""
+"Don't want to address your message to {{person_or_body}}? You can also "
+"write to:"
+msgstr ""
+"Nuk dëshiron t'ja adresosh mesazhin tënd {{person_or_body}}? Ti gjithashtu "
+"mund ti shkruash:"
+
+#: app/views/general/_localised_datepicker.rhtml:4
+msgid "Done"
+msgstr "Mbaroi"
+
+#: app/views/request/_after_actions.rhtml:17
+msgid "Download a zip file of all correspondence"
+msgstr "Shkarko zip fajllin me korrespondencën e plotë"
#: app/views/request/_view_html_prefix.rhtml:6
msgid "Download original attachment"
msgstr "Shkarko shtojcën (attachment) origjinale"
-#: app/views/request/_followup.rhtml:85
+#: app/views/request/_followup.rhtml:112
msgid ""
"Edit and add <strong>more details</strong> to the message above,\n"
" explaining why you are dissatisfied with their response."
@@ -1022,18 +1190,22 @@ msgstr ""
#: app/views/admin_public_body/_locale_selector.rhtml:2
msgid "Edit language version:"
-msgstr "Redakto versionin e gjuhës:"
+msgstr "Edito versionin e gjuhës:"
#: app/views/user/set_profile_about_me.rhtml:9
msgid "Edit text about you"
-msgstr " tekstin për vetën tënde"
+msgstr "Edito tekstin për vetën tënde"
+
+#: app/views/request/preview.rhtml:40
+msgid "Edit this request"
+msgstr "Edito këtë kërkesë"
-#: app/models/user.rb:135
+#: app/models/user.rb:146
msgid "Either the email or password was not recognised, please try again."
msgstr ""
"Adresa e email-it apo fjalëkalimi nuk janë njohur, të lutem provo përsëri."
-#: app/models/user.rb:137
+#: app/models/user.rb:148
msgid ""
"Either the email or password was not recognised, please try again. Or create"
" a new account using the form on the right."
@@ -1047,21 +1219,21 @@ msgstr "Email adresa nuk duket si një adresë e vlefshme"
#: app/views/comment/_comment_form.rhtml:8
msgid "Email me future updates to this request"
-msgstr "Dërgom përditësime me email në lidhje me këtë kërkesë"
+msgstr "Dërgom aktualizime me email në lidhje me këtë kërkesë"
-#: app/models/track_thing.rb:155
+#: app/models/track_thing.rb:228
msgid "Email me new successful responses "
-msgstr "M'i dërgo me email përgjigjet e reja të suksesshme"
+msgstr "M'i dërgo me email përgjigjet e reja të suksesshme "
-#: app/models/track_thing.rb:139
+#: app/models/track_thing.rb:212
msgid "Email me when there are new requests"
-msgstr ""
+msgstr "Më dërgo email kur ka kërkesa të reja"
#: app/views/user/show.rhtml:36
msgid "Email subscriptions"
msgstr "Abonimet me email"
-#: app/views/general/search.rhtml:123
+#: app/views/general/_advanced_search_tips.rhtml:5
msgid ""
"Enter words that you want to find separated by spaces, e.g. <strong>climbing"
" lane</strong>"
@@ -1078,25 +1250,29 @@ msgstr ""
"(përdor e-mail, ose <a href=\"%s\">na kontakto</a> nëse ke nevojë për më "
"shumë)."
-#: app/views/public_body/show.rhtml:96
+#: app/views/public_body/show.rhtml:116
msgid "Environmental Information Regulations requests made"
msgstr "\"Environmental Information Regulations\" kërkesa të bëra"
-#: app/views/public_body/show.rhtml:69
+#: app/views/public_body/show.rhtml:73
msgid "Environmental Information Regulations requests made using this site"
msgstr ""
"\"Environmental Information Regulations\" kërkesa të bëra duke përdorur këtë"
" ueb sajt"
+#: lib/world_foi_websites.rb:13
+msgid "European Union"
+msgstr "Bashkimi Europian"
+
#: app/views/request/details.rhtml:4
msgid "Event history"
msgstr "Historiku i ngjarjeve"
-#: app/views/request/_sidebar.rhtml:41
+#: app/views/request/_sidebar.rhtml:35
msgid "Event history details"
msgstr "Detajet e historikut të ngjarjeve"
-#: app/views/request/new.rhtml:124
+#: app/views/request/new.rhtml:128
msgid ""
"Everything that you enter on this page \n"
" will be <strong>displayed publicly</strong> on\n"
@@ -1106,21 +1282,21 @@ msgstr ""
" do të <strong>tregohet publikisht</strong> në\n"
" këtë faqe përgjithmonë (<a href=\"%s\">pse?</a>)."
-#: app/views/request/new.rhtml:116
+#: app/views/request/new.rhtml:120
msgid ""
"Everything that you enter on this page, including <strong>your name</strong>, \n"
" will be <strong>displayed publicly</strong> on\n"
" this website forever (<a href=\"%s\">why?</a>)."
msgstr ""
-"Çdo gjë që ke shkruar në këtë faqe, përfshi edhe <strong>emri yt</strong>, \n"
+"Çdo gjë që ke shkruar në këtë faqe, përfshi edhe <strong>emrin tënd</strong>, \n"
" do të <strong>tregohet publikisht</strong> në\n"
" këtë faqe përgjithmonë (<a href=\"%s\">pse?</a>)."
-#: locale/model_attributes.rb:60
+#: locale/model_attributes.rb:58
msgid "EximLogDone|Filename"
msgstr "EximLogDone|Filename"
-#: locale/model_attributes.rb:61
+#: locale/model_attributes.rb:59
msgid "EximLogDone|Last stat"
msgstr "EximLogDone|Statistika e fundit"
@@ -1140,8 +1316,18 @@ msgstr "Adresa e emailit për Informatë Zyrtare për {{public_body}}"
msgid "FOI requests"
msgstr "Kërkesat për Informata Zyrtare"
-#: app/models/track_thing.rb:193 app/models/track_thing.rb:194
+#: app/models/track_thing.rb:266 app/models/track_thing.rb:267
msgid "FOI requests by '{{user_name}}'"
+msgstr "Kërkesa për informata zyrtare nga '{{user_name}}'"
+
+#: app/views/general/search.rhtml:198
+msgid "FOI requests {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr ""
+"Kërkesat për informata zyrtare {{start_count}} deri {{end_count}} prej "
+"{{total_count}}"
+
+#: app/models/request_mailer.rb:50
+msgid "FOI response requires admin - "
msgstr ""
#: app/models/profile_photo.rb:101
@@ -1152,46 +1338,71 @@ msgstr "Konvertimi i imazhit në PNG dështoi"
msgid ""
"Failed to convert image to the correct size: at %{cols}x%{rows}, need "
"%{width}x%{height}"
-msgstr "Kyçu ose krijo llogari "
+msgstr ""
+"Konvertimi i imazhit në madhësinë adekuate dështoi: në %{cols}x%{rows}, "
+"duhet %{width}x%{height}"
-#: app/views/request/new.rhtml:21
-msgid "First,"
-msgstr "Së pari,"
+#: app/views/general/search.rhtml:121
+msgid "Filter"
+msgstr "Filtro"
-#: app/views/general/frontpage.rhtml:8
+#: app/views/request/select_authority.rhtml:35
msgid ""
"First, type in the <strong>name of the UK public authority</strong> you'd \n"
" <br>like information from. <strong>By law, they have to respond</strong>\n"
" (<a href=\"%s\">why?</a>)."
msgstr ""
-"Së pari, shkruani <strong>emrin e autoritetit publik </strong> <br> prej të "
-"cilit kërkoni informata. <strong>Sipas ligjit, ata duhet të "
-"përgjigjen</strong> ( <a href=\"%s\">pse?</a> )."
+"Së pari, shkruaj <strong>emrin e autoritetit publik</strong> prej të\n"
+" <br>cilit kërkon informata. <strong>Sipas ligjit, ata duhet të\n"
+" përgjigjen</strong> (<a href=\\\"%s\\\">pse?</a>)."
+
+#: app/views/track/_tracking_links.rhtml:21
+msgid "Follow by email"
+msgstr "Përcjell me email"
+
+#: app/views/request/list.rhtml:8
+msgid "Follow these requests"
+msgstr "Përcjelli këto kërkesa"
+
+#: app/views/public_body/show.rhtml:4
+msgid "Follow this authority"
+msgstr "Përcjell aktivitetin e këtij autoriteti"
#: app/views/request_mailer/old_unclassified_updated.rhtml:4
msgid "Follow this link to see the request:"
msgstr "Kliko këtë vegzë për të parë kërkesën:"
-#: app/models/info_request_event.rb:335
+#: app/views/request/_sidebar.rhtml:2
+msgid "Follow this request"
+msgstr "Përcjell këtë kërkesë"
+
+#: app/models/info_request_event.rb:320
msgid "Follow up"
-msgstr ""
+msgstr "Përcjell"
-#: app/views/general/search.rhtml:159
+#: app/views/general/_advanced_search_tips.rhtml:43
msgid "Follow up message sent by requester"
-msgstr ""
+msgstr "Mesazhi vazhdues është dërguar nga kërkuesi"
#: app/views/public_body/view_email.rhtml:14
msgid "Follow up messages to existing requests are sent to "
msgstr "Mesazhet vazhduese të kërkesës ekzistuese dërgohen te "
-#: app/views/request/_followup.rhtml:16
+#: app/views/request/_followup.rhtml:43
msgid ""
"Follow ups and new responses to this request have been stopped to prevent "
"spam. Please <a href=\"{{url}}\">contact us</a> if you are {{user_link}} and"
" need to send a follow up."
msgstr ""
+"Mesazhet vazhduese dhe përgjigjet e reja në këtë kërkesë janë stopuar për të"
+" parandaluar spam emailat. Të lutem <a href=\"{{url}}\"> na kontakto</a> "
+"nëse ti je {{user_link}} dhe ke nevojë të dërgosh mesazh vazhdues."
-#: app/views/public_body/show.rhtml:61
+#: app/views/general/_footer.rhtml:3 app/views/general/blog.rhtml:7
+msgid "Follow us on twitter"
+msgstr "Na përcjell në twitter"
+
+#: app/views/public_body/show.rhtml:65
msgid ""
"For an unknown reason, it is not possible to make a request to this "
"authority."
@@ -1201,15 +1412,19 @@ msgstr ""
#: app/views/user/_signin.rhtml:21
msgid "Forgotten your password?"
-msgstr "Keni harruar fjalëkalimin?"
+msgstr "Ke harru fjalëkalimin?"
-#: app/views/public_body/show.rhtml:56
+#: app/views/public_body/list.rhtml:47
+msgid "Found {{count}} public bodies {{description}}"
+msgstr "U gjetën {{count}} autoritete publike - {{description}}"
+
+#: app/views/public_body/show.rhtml:60
msgid ""
"Freedom of Information law does not apply to this authority, so you cannot make\n"
-" a request to it."
+" a request to it."
msgstr ""
-"Ligji mbi lirinë e informacionit nuk ka të bëjë me këtë autoritet, kështu që"
-" ju nuk mund të bëni kërkesa për informata zyrtare."
+"Ligji për qasje në dokumente publike nuk aplikohet në këtë autoritet publik, kështu që ti\n"
+" nuk mund të bën kërkesa për te."
#: app/views/request/followup_bad.rhtml:11
msgid "Freedom of Information law no longer applies to"
@@ -1220,22 +1435,28 @@ msgid ""
"Freedom of Information law no longer applies to this authority.Follow up "
"messages to existing requests are sent to "
msgstr ""
+"Ligjit mbi qasje në dokumente publike nuk aplikohet më për këtë autoritet. "
+"Follow up mesazhet ndaj kërkesave ekzistuese dërgohen te "
-#: app/views/user/show.rhtml:128
-msgid "Freedom of Information request"
-msgstr "Kërkesë për informatë zyrtare"
-
-#: app/views/public_body/show.rhtml:98
+#: app/views/public_body/show.rhtml:118
msgid "Freedom of Information requests made"
-msgstr "Kërkesa për Informatë zyrtare është bërë"
+msgstr "Kërkesat e bëra për informata zyrtare"
-#: app/views/user/show.rhtml:121 app/views/user/show.rhtml:140
-msgid "Freedom of Information requests made by"
-msgstr "Kërkesat për Informata Zyrtare bërë nga"
+#: app/views/user/show.rhtml:155
+msgid "Freedom of Information requests made by this person"
+msgstr "Kërkesat për informata zyrtare të bëra nga ky person"
-#: app/views/public_body/show.rhtml:72
+#: app/views/user/show.rhtml:155
+msgid "Freedom of Information requests made by you"
+msgstr "Kërkesat për informata zyrtare bërë nga ti"
+
+#: app/views/public_body/show.rhtml:76
msgid "Freedom of Information requests made using this site"
-msgstr "Kërkesat për informata zyrtare të bëra duke përdorur këtë web sajt"
+msgstr "Kërkesat për informata zyrtare të bëra duke përdorur këtë ueb faqe"
+
+#: app/views/public_body/show.rhtml:30
+msgid "Freedom of information requests to"
+msgstr "Kërkesa për informata zyrtare për"
#: app/views/request/followup_bad.rhtml:12
msgid ""
@@ -1247,31 +1468,38 @@ msgstr ""
" shkruash një përgjigje të përgjithshme. Nëse të duhet të shkruash përgjigje të përgjithshme, dhe e di\n"
" emailin ku duhet ta drejtosh, atëherë të lutem <a href=\"%s\">dërgoje te ne</a>."
-#: app/models/outgoing_message.rb:73
+#: app/views/request/_correspondence.rhtml:12
+#: app/views/request/_correspondence.rhtml:36
+#: app/views/request/simple_correspondence.rhtml:14
+#: app/views/request/simple_correspondence.rhtml:27
+msgid "From:"
+msgstr "Prej:"
+
+#: app/models/outgoing_message.rb:74
msgid "GIVE DETAILS ABOUT YOUR COMPLAINT HERE"
msgstr "JEPI DETAJET PËR ANKESËN TËNDE KËTU"
-#: app/views/general/exception_caught.rhtml:14
-msgid "Go to our <a href=\"%s\">front page</a></li>"
-msgstr "Shko te <a href=\"%s\">ballina</a> </li>"
-
-#: app/models/info_request_event.rb:297
-msgid "Handled by post"
-msgstr "Do të trajtohet me postë"
+#: lib/world_foi_websites.rb:25
+msgid "Germany"
+msgstr "Gjermani"
-#: app/models/info_request.rb:801
+#: app/models/info_request.rb:803
msgid "Handled by post."
msgstr "Do të trajtohet me postë."
-#: app/views/layouts/default.rhtml:102
-msgid "Hello!"
-msgstr "Përshëndetje"
+#: app/controllers/services_controller.rb:21
+msgid ""
+"Hello! You can make Freedom of Information requests within {{country_name}} "
+"at {{link_to_website}}"
+msgstr ""
+"Përshëndetje! Ti mund të bën kërkesa për informata zyrtare për autoritetet e"
+" {{country_name}} në {{link_to_website}}"
-#: app/views/layouts/default.rhtml:99
+#: app/views/layouts/default.rhtml:104
msgid "Hello, {{username}}!"
msgstr "Përshëndetje, {{username}}!"
-#: app/views/layouts/default.rhtml:94
+#: app/views/general/_topnav.rhtml:8
msgid "Help"
msgstr "Ndihmë"
@@ -1282,6 +1510,10 @@ msgid ""
"{{site_name}} for intermediate events, which weren't given an explicit\n"
"description by a user. See the <a href=\"{{search_path}}\">search tips</a> for description of the states."
msgstr ""
+"Këtu <strong>përshkruar</strong> nënkupton kur një përdorues ka zgjedhë statusin e kërkesës, dhe\n"
+"ngjarja e fundit ka azhuruar statusin me këtë vlerë. <strong>llogaritur</strong> në këtë rast është vënë nga\n"
+"{{site_name}} për ngjarjet e ndërmjeme, të cilave nuk u është dhënë\n"
+"përshkrim eksplicit nga përdoruesi. Shih <a href=\"{{search_path}}>këshillat e kërkimit</a> për përshkrimet e statuseve."
#: app/views/request/_other_describe_state.rhtml:4
msgid ""
@@ -1290,34 +1522,42 @@ msgid ""
" a moment to read it and help us keep the place tidy for everyone?\n"
" Thanks."
msgstr ""
+"Tung! Ne kemi nevojë për ndihmën tënde. Personi që ka bërë kërkesën e mëposhtme\n"
+" nuk na ka thënë se ishte apo nuk ishte e suksesshme. A mund ta marrësh një \n"
+" moment për ta lexuar dhe klasifikuar atë që ta mbajme ueb faqen të rregullt dhe të organizuar?\n"
+" Faleminderit."
-#: locale/model_attributes.rb:57
+#: locale/model_attributes.rb:55
msgid "Holiday|Day"
msgstr "Festa | Dita"
-#: locale/model_attributes.rb:58
+#: locale/model_attributes.rb:56
msgid "Holiday|Description"
msgstr "Festa | Përshkrimi"
-#: app/views/public_body/show.rhtml:7
+#: app/views/general/_topnav.rhtml:3
+msgid "Home"
+msgstr "Ballina"
+
+#: app/views/public_body/show.rhtml:12
msgid "Home page of authority"
msgstr "Ueb sajti i autoritetit"
-#: app/views/request/new.rhtml:63
+#: app/views/request/new.rhtml:61
msgid ""
"However, you have the right to request environmental\n"
-" information under a different law"
+" information under a different law"
msgstr ""
-#: app/views/request/new.rhtml:73
+#: app/views/request/new.rhtml:71
msgid "Human health and safety"
msgstr ""
-#: app/views/request/_followup.rhtml:68
+#: app/views/request/_followup.rhtml:95
msgid "I am asking for <strong>new information</strong>"
msgstr "Unë jam duke kërkuar <strong>informacion të ri</strong>"
-#: app/views/request/_followup.rhtml:73
+#: app/views/request/_followup.rhtml:100
msgid "I am requesting an <strong>internal review</strong>"
msgstr "Po kërkoj <strong>rishqyrtimin intern</strong>"
@@ -1327,11 +1567,11 @@ msgstr "Nuk më pëlqejnë këto kërkesa &mdash më jep disa të tjera!"
#: app/views/request_game/play.rhtml:40
msgid "I don't want to do any more tidying now!"
-msgstr "Nuk dua të pastroj më tutje!"
+msgstr "Nuk dua të rregullojë e organizoj më tutje!"
#: app/views/request/_describe_state.rhtml:91
msgid "I would like to <strong>withdraw this request</strong>"
-msgstr "Ddo të doja të <strong>tërheqë këtë kërkesë</strong>"
+msgstr "Do të doja të <strong>tërheqë këtë kërkesë</strong>"
#: app/views/request/_describe_state.rhtml:11
msgid ""
@@ -1383,7 +1623,7 @@ msgstr ""
"apo një email me një temë tjetër te {{user}}, atëherë \n"
"dërgo email në {{contact_email}} për ndihmë."
-#: app/views/request/_followup.rhtml:20
+#: app/views/request/_followup.rhtml:47
msgid ""
"If you are dissatisfied by the response you got from\n"
" the public authority, you have the right to\n"
@@ -1405,7 +1645,7 @@ msgstr ""
"Nëse ti je kërkuesi, atëherë ti mund të <a href=\"%s\">kyçesh</a> për të "
"parë kërkesën."
-#: app/views/request/new.rhtml:119
+#: app/views/request/new.rhtml:123
msgid ""
"If you are thinking of using a pseudonym,\n"
" please <a href=\"%s\">read this first</a>."
@@ -1426,7 +1666,7 @@ msgstr ""
"Nëse ti nuk mund të klikosh mbi të në e-mail, duhet që ta <strong>përzgjedhësh dhe t'a kopjosh </strong>. Pastaj <strong>e bashkangjet (paste) \n"
"</strong>në fushën e adresës të shfletuesit tënd."
-#: app/views/request/show_response.rhtml:49
+#: app/views/request/show_response.rhtml:47
msgid ""
"If you can, scan in or photograph the response, and <strong>send us\n"
" a copy to upload</strong>."
@@ -1439,6 +1679,9 @@ msgid ""
"If you find this service useful as an FOI officer, please ask your web "
"manager to link to us from your organisation's FOI page."
msgstr ""
+"Nëse ti si zyrtarë per qasje në dokumente publike e gjenë këtë shërbim të "
+"dobishëm, të lutem kërko nga administratori i ueb faqes të vendosë vegzë "
+"(link) për InformataZyrtare.org në ueb faqen e juaj."
#: app/views/user/bad_token.rhtml:13
msgid ""
@@ -1449,15 +1692,18 @@ msgstr ""
"parë,</strong> atëherë kjo vegzë për kyçje nuk do të funksionojë më. Të "
"lutem provon duke bërë atë që keni vepruar nga fillimi."
-#: app/controllers/request_controller.rb:437
+#: app/controllers/request_controller.rb:443
msgid ""
"If you have not done so already, please write a message below telling the "
"authority that you have withdrawn your request. Otherwise they will not know"
" it has been withdrawn."
msgstr ""
+"Nëse nuk e ke bërë këtë deri tani, të lutem shkruaj një mesazh më poshtë për"
+" ti treguar autoritetit që ti e ke tërheq kërkesën tënde. Përndryshe ata nuk"
+" do të dinë se është e tërhequr kërkesa."
-#: app/views/user/signchangeemail_confirm.rhtml:11
#: app/views/user/signchangepassword_confirm.rhtml:10
+#: app/views/user/signchangeemail_confirm.rhtml:11
msgid ""
"If you use web-based email or have \"junk mail\" filters, also check your\n"
"bulk/spam mail folders. Sometimes, our messages are marked that way."
@@ -1490,18 +1736,38 @@ msgstr ""
"Nëse shfletuesi yt është vendosur për të pranuar \"cookies\" dhe ju jeni "
"duke parë këtë mesazh, atëherë me sa duket ka gabim në serverin tonë."
-#: locale/model_attributes.rb:63
+#: locale/model_attributes.rb:61
msgid "IncomingMessage|Cached attachment text clipped"
msgstr "IncomingMessage|Cached attachment text clipped"
-#: locale/model_attributes.rb:64
+#: locale/model_attributes.rb:62
msgid "IncomingMessage|Cached main body text folded"
msgstr "IncomingMessage|Cached main body text folded"
-#: locale/model_attributes.rb:65
+#: locale/model_attributes.rb:63
msgid "IncomingMessage|Cached main body text unfolded"
msgstr "IncomingMessage|Cached main body text unfolded"
+#: locale/model_attributes.rb:67
+msgid "IncomingMessage|Mail from domain"
+msgstr "IncomingMessage | Email prej domain-it"
+
+#: locale/model_attributes.rb:66
+msgid "IncomingMessage|Safe mail from"
+msgstr "IncomingMessage | Email i sigurtë prej"
+
+#: locale/model_attributes.rb:64
+msgid "IncomingMessage|Sent at"
+msgstr "IncomingMessage | Dërguar më"
+
+#: locale/model_attributes.rb:65
+msgid "IncomingMessage|Subject"
+msgstr "IncomingMessage | Lënda"
+
+#: locale/model_attributes.rb:68
+msgid "IncomingMessage|Valid to reply to"
+msgstr "IncomingMessage | Valide për t'iu përgjigjur te"
+
#: locale/model_attributes.rb:44
msgid "InfoRequestEvent|Calculated state"
msgstr "InfoRequestEvent|Calculated state"
@@ -1526,57 +1792,53 @@ msgstr "InfoRequestEvent|Params yaml"
msgid "InfoRequestEvent|Prominence"
msgstr "InfoRequestEvent|Prominence"
-#: locale/model_attributes.rb:86
+#: locale/model_attributes.rb:89
msgid "InfoRequest|Allow new responses from"
msgstr "InfoRequest|Lejo përgjigje të reja prej"
-#: locale/model_attributes.rb:82
+#: locale/model_attributes.rb:85
msgid "InfoRequest|Awaiting description"
msgstr "InfoRequest|Awaiting description"
-#: locale/model_attributes.rb:81
+#: locale/model_attributes.rb:84
msgid "InfoRequest|Described state"
msgstr "InfoRequest|Described state"
-#: locale/model_attributes.rb:87
+#: locale/model_attributes.rb:90
msgid "InfoRequest|Handle rejected responses"
msgstr "InfoRequest|Handle rejected responses"
-#: locale/model_attributes.rb:85
+#: locale/model_attributes.rb:91
+msgid "InfoRequest|Idhash"
+msgstr "InfoRequest|Idhash"
+
+#: locale/model_attributes.rb:88
msgid "InfoRequest|Law used"
msgstr "Info të kërkesës | Ligji i përdorur"
-#: locale/model_attributes.rb:83
+#: locale/model_attributes.rb:86
msgid "InfoRequest|Prominence"
msgstr "Info të kërkesës | Rëndësi"
-#: locale/model_attributes.rb:80
+#: locale/model_attributes.rb:83
msgid "InfoRequest|Title"
msgstr "Info të kërkesës | Titulli"
-#: locale/model_attributes.rb:84
+#: locale/model_attributes.rb:87
msgid "InfoRequest|Url title"
msgstr "Info të kërkesës | Titulli Url"
-#: app/models/info_request_event.rb:303
-msgid "Information not held"
-msgstr "Informata nuk mbahet këtu"
-
-#: app/models/info_request.rb:791
+#: app/models/info_request.rb:793
msgid "Information not held."
msgstr "Informata nuk mbahet këtu."
-#: app/views/request/new.rhtml:71
+#: app/views/request/new.rhtml:69
msgid ""
"Information on emissions and discharges (e.g. noise, energy,\n"
-" radiation, waste materials)"
+" radiation, waste materials)"
msgstr ""
-#: app/models/info_request_event.rb:311
-msgid "Internal review acknowledgement"
-msgstr "Pranimi i rishqyrtimit intern"
-
-#: app/models/info_request_event.rb:328
+#: app/models/info_request_event.rb:313
msgid "Internal review request"
msgstr "Kërkesë për rishqyrtim intern"
@@ -1585,9 +1847,8 @@ msgid ""
"Is {{email_address}} the wrong address for {{type_of_request}} requests to "
"{{public_body_name}}? If so, please contact us using this form:"
msgstr ""
-"A ështe {{email_address}} adresë e gabuar e {{type_of_request}} kërkesave "
-"për {{public_body_name}}? Nëse po, të luten na kontakto nëpermjet kësaj "
-"forme:"
+"A është {{email_address}} adresë e gabuar për {{public_body_name}}? Nëse "
+"po, të lutem na kontakto nëpermjet kësaj forme:"
#: app/views/user/no_cookies.rhtml:8
msgid ""
@@ -1608,7 +1869,7 @@ msgstr "Bashkangjitur më"
msgid "Joined {{site_name}} in"
msgstr "Bashkangjitur {{site_name}} më"
-#: app/views/request/new.rhtml:48
+#: app/views/request/new.rhtml:106
msgid ""
"Keep it <strong>focused</strong>, you'll be more likely to get what you want"
" (<a href=\"%s\">why?</a>)."
@@ -1616,13 +1877,21 @@ msgstr ""
"Mbaje <strong>të fokusuar</strong>, gjasat janë më të mëdha që të marrësh "
"përgjigjen e dëshiruar (<a href=\"%s\">pse?</a>)."
+#: app/views/request/_request_filter_form.rhtml:6
+msgid "Keywords"
+msgstr "Fjalët kyçe"
+
+#: lib/world_foi_websites.rb:9
+msgid "Kosovo"
+msgstr "Kosova"
+
#: app/views/contact_mailer/message.rhtml:10
msgid "Last authority viewed: "
-msgstr "Autoriteti i shikuar së fundi:"
+msgstr "Autoriteti i shikuar së fundi: "
#: app/views/contact_mailer/message.rhtml:7
msgid "Last request viewed: "
-msgstr "Kërkesa e shikuar së fundi:"
+msgstr "Kërkesa e shikuar së fundi: "
#: app/views/user/no_cookies.rhtml:17
msgid ""
@@ -1633,8 +1902,8 @@ msgstr ""
"shfletuesit (browser-it) dhe versionin e tij. Gjithashtu na trego për emrin "
"e sistemit operativ dhe versionin."
-#: app/views/request/_correspondence.rhtml:27
-#: app/views/request/_correspondence.rhtml:57
+#: app/views/request/_correspondence.rhtml:26
+#: app/views/request/_correspondence.rhtml:54
msgid "Link to this"
msgstr "Vegza e kësaj kërkese"
@@ -1642,37 +1911,54 @@ msgstr "Vegza e kësaj kërkese"
msgid "List of all authorities (CSV)"
msgstr "Listo të gjitha autoritetet (CSV)"
-#: lib/public_body_categories_en.rb:23
-msgid "Local and regional"
-msgstr "Lokale dhe regjionale"
+#: app/controllers/request_controller.rb:775
+msgid "Log in to download a zip file of {{info_request_title}}"
+msgstr "Kyçu për të shkarkuar zip fajllin e {{info_request_title}}"
-#: app/models/info_request.rb:789
+#: app/models/info_request.rb:791
msgid "Long overdue."
-msgstr "Shumë e vonuar."
+msgstr "Tepër e vonuar."
-#: app/views/public_body/show.rhtml:47
-msgid "Make a new Environmental Information request"
-msgstr "Bëj një kërkesë të re për informacione rreth Mjedisit"
+#: app/views/request/_request_filter_form.rhtml:23
+#: app/views/general/search.rhtml:112
+msgid "Made between"
+msgstr "Bërë ndërmjet"
-#: app/views/request/new.rhtml:1
-msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
-msgstr "Bëjë një kërkesë {{law_used_short}} për '{{public_body_name}}'"
+#: app/views/public_body/show.rhtml:52
+msgid "Make a new <strong>Environmental Information</strong> request"
+msgstr ""
-#: app/views/layouts/default.rhtml:15
-msgid "Make and browse Freedom of Information (FOI) requests"
-msgstr "Bëj dhe shfleto kërkesa për Informata Zyrtare"
+#: app/views/public_body/show.rhtml:54
+msgid ""
+"Make a new <strong>Freedom of Information</strong> request to "
+"{{public_body}}"
+msgstr ""
+"Bën një <strong>kërkesë të re për informata zyrtare</strong> për "
+"{{public_body}}"
-#: app/views/layouts/default.rhtml:67
-msgid "Make and explore Freedom of Information requests"
-msgstr "Bëj dhe hulumto kërkesa për Informata Zyrtare"
+#: app/views/general/frontpage.rhtml:5
+msgid ""
+"Make a new<br/>\n"
+" <strong>Freedom <span>of</span><br/>\n"
+" Information<br/>\n"
+" request</strong>"
+msgstr ""
+"Bën një<br/>\n"
+" <strong>kërkesë <span>të re për</span><br/>\n"
+" informata<br/>\n"
+" zyrtare</strong>"
-#: app/views/general/frontpage.rhtml:4
-msgid "Make or explore Freedom of Information requests"
-msgstr "Bëj ose shfleto kërkesa për Informata Zyrtare"
+#: app/views/general/_topnav.rhtml:4
+msgid "Make a request"
+msgstr "Bën një kërkesë"
-#: app/views/layouts/default.rhtml:87
-msgid "Make request"
-msgstr "Bëj kërkesë"
+#: app/views/request/new.rhtml:20
+msgid "Make an {{law_used_short}} request to '{{public_body_name}}'"
+msgstr "Bëjë një kërkesë për '{{public_body_name}}'"
+
+#: app/views/layouts/default.rhtml:8 app/views/layouts/no_chrome.rhtml:8
+msgid "Make and browse Freedom of Information (FOI) requests"
+msgstr "Bëj dhe shfleto kërkesa për Informata Zyrtare"
#: app/views/public_body/_body_listing_single.rhtml:23
msgid "Make your own request"
@@ -1686,26 +1972,26 @@ msgstr "Mesazhi i dërguar duke përdorur kontakt formën e {{site_name}}, "
msgid "Missing contact details for '"
msgstr "Mungojnë të dhënat për '"
-#: app/views/public_body/show.rhtml:5
+#: app/views/public_body/show.rhtml:10
msgid "More about this authority"
msgstr "Më shumë për këtë autoritet"
-#: app/views/general/frontpage.rhtml:41
-msgid "More authorities..."
-msgstr "Më shumë autoritete"
+#: app/views/request/_sidebar.rhtml:29
+msgid "More similar requests"
+msgstr "Më shumë kërkesa të ngjashme"
-#: app/views/general/frontpage.rhtml:55
+#: app/views/general/frontpage.rhtml:67
msgid "More successful requests..."
-msgstr "Më shumë kërkesa te suksesshme"
+msgstr "Më shumë kërkesa të suksesshme..."
+
+#: app/views/layouts/default.rhtml:107
+msgid "My profile"
+msgstr "Profili im"
#: app/views/request/_describe_state.rhtml:64
msgid "My request has been <strong>refused</strong>"
msgstr "Kërkesa ime është <strong>refuzuar</strong>"
-#: app/views/layouts/default.rhtml:91
-msgid "My requests"
-msgstr "Kërkesat e mia"
-
#: app/models/public_body.rb:36
msgid "Name can't be blank"
msgstr "Emri nuk mund të jetë i zbrazët"
@@ -1714,9 +2000,13 @@ msgstr "Emri nuk mund të jetë i zbrazët"
msgid "Name is already taken"
msgstr "Emri është i zënë"
-#: app/models/track_thing.rb:142 app/models/track_thing.rb:143
+#: app/models/track_thing.rb:215 app/models/track_thing.rb:216
msgid "New Freedom of Information requests"
-msgstr ""
+msgstr "Kërkesat e reja për informata zyrtare "
+
+#: lib/world_foi_websites.rb:21
+msgid "New Zealand"
+msgstr "Zelanda e Re"
#: app/views/user/signchangeemail.rhtml:20
msgid "New e-mail:"
@@ -1734,40 +2024,52 @@ msgstr "Fjalëkalim i ri:"
msgid "New password: (again)"
msgstr "Fjalëkalim i ri: (përsërite)"
-#: app/views/request/show_response.rhtml:62
+#: app/models/request_mailer.rb:67
+msgid "New response to your FOI request - "
+msgstr ""
+
+#: app/views/request/show_response.rhtml:60
msgid "New response to your request"
msgstr "përgjigje e re për kërkesën tënde"
-#: app/views/request/show_response.rhtml:68
+#: app/views/request/show_response.rhtml:66
msgid "New response to {{law_used_short}} request"
-msgstr "përgjigje e re për {{law_used_short}} kërkesën"
+msgstr "përgjigje e re për kërkesën"
-#: app/views/general/search.rhtml:40
+#: app/models/track_thing.rb:199 app/models/track_thing.rb:200
+msgid "New updates for the request '{{request_title}}'"
+msgstr "Aktualizime të reja për kërkesën '{{request_title}}'"
+
+#: app/views/general/search.rhtml:131
msgid "Newest results first"
msgstr "Rezultatet më të reja të parat"
+#: app/views/general/_localised_datepicker.rhtml:6
+msgid "Next"
+msgstr "Para"
+
#: app/views/user/set_draft_profile_photo.rhtml:32
msgid "Next, crop your photo &gt;&gt;"
msgstr "Pastaj, preje foton tënde &gt;&gt;"
-#: app/views/general/search.rhtml:16
-msgid "Next, select the public authority you'd like to make the request from."
-msgstr ""
-"Tjetra, zgjidhni autoritin publik për të cilin dëshironi të bëni kërkesë"
-
-#: app/views/general/search.rhtml:48
+#: app/views/general/search.rhtml:169
msgid "No public authorities found"
-msgstr "Nuk u gjet asnjë autoritet"
+msgstr "Nuk u gjet asnjë autoritet publik"
-#: app/views/request/list.rhtml:23
+#: app/views/request/list.rhtml:19
msgid "No requests of this sort yet."
msgstr "Ende nuk ka kërkesa të këtij lloji."
+#: app/views/request/select_authority.rhtml:52
+#: app/views/public_body/_search_ahead.rhtml:8
+msgid "No results found."
+msgstr "Asnjë rezultat nuk u gjet."
+
#: app/views/request/similar.rhtml:7
msgid "No similar requests found."
msgstr "Nuk gjetëm kërkesa të ngjashme."
-#: app/views/public_body/show.rhtml:73
+#: app/views/public_body/show.rhtml:77
msgid ""
"Nobody has made any Freedom of Information requests to {{public_body_name}} "
"using this site yet."
@@ -1775,14 +2077,18 @@ msgstr ""
"Ende askush nuk ka bërë ndonjë kërkesë te {{public_body_name}} duke përdorur"
" këtë faqe."
-#: app/views/public_body/_body_listing.rhtml:2
#: app/views/request/_request_listing.rhtml:2
+#: app/views/public_body/_body_listing.rhtml:3
msgid "None found."
msgstr "Asnjë nuk u gjet."
-#: app/views/user/signchangeemail_confirm.rhtml:3
+#: app/views/user/show.rhtml:165 app/views/user/show.rhtml:185
+msgid "None made."
+msgstr "Asnjë e bërë."
+
#: app/views/user/signchangepassword_confirm.rhtml:1
#: app/views/user/signchangepassword_confirm.rhtml:3
+#: app/views/user/signchangeemail_confirm.rhtml:3
msgid "Now check your email!"
msgstr "Kontrollo emailin tënd!"
@@ -1798,23 +2104,11 @@ msgstr "Shiko vazhdimësinë e komunikimit"
msgid "Now preview your message asking for an internal review"
msgstr "Shiko mesazhin tënd ku ke kërkuar rishqyrtim intern"
-#: app/views/request/preview.rhtml:5
-msgid "Now preview your request"
-msgstr "Shiko kërkesën tënde"
-
#: app/views/user/set_draft_profile_photo.rhtml:46
msgid "OR remove the existing photo"
msgstr "Ose hiqni fotografinë ekzistuese"
-#: app/views/general/frontpage.rhtml:25
-msgid ""
-"OR, <strong>search</strong> for information others have requested using "
-"{{site_name}}"
-msgstr ""
-"OSE, <strong>kërko</strong> informata që të tjerët kanë kërkuar duke "
-"përdorur {{site_name}}"
-
-#: app/controllers/request_controller.rb:414
+#: app/controllers/request_controller.rb:420
msgid ""
"Oh no! Sorry to hear that your request was refused. Here is what to do now."
msgstr "Na vjen keq që kërkesa yte është refuzuar. Ja se çfarë të bëhet tani."
@@ -1839,12 +2133,19 @@ msgstr "Email adresa e vjetër nuk duket si një adresë e vlefshme"
msgid "On this page"
msgstr "Në këtë faqe"
-#: app/views/general/search.rhtml:71
-msgid "One public authority matching &#x2018;{{user_search_query}}&#x2019;"
-msgstr ""
-"Një autoritet publik përputhet me &#x2018;{{user_search_query}}&#x2019;"
+#: app/views/general/search.rhtml:196
+msgid "One FOI request found"
+msgstr "U gjet një kërkesë"
+
+#: app/views/general/search.rhtml:180
+msgid "One person found"
+msgstr "U gjet një person"
+
+#: app/views/general/search.rhtml:156
+msgid "One public authority found"
+msgstr "U gjet një autoritet publik"
-#: app/views/public_body/show.rhtml:91
+#: app/views/public_body/show.rhtml:111
msgid "Only requests made using {{site_name}} are shown."
msgstr "Vetëm kërkesat që janë bërë me {{site_name}} janë të shfaqura."
@@ -1853,16 +2154,28 @@ msgid ""
"Only the authority can reply to this request, and I don't recognise the "
"address this reply was sent from"
msgstr ""
+"Vetëm autoriteti mund të përgjigjet në këtë kërkesë, dhe unë nuk e njoha "
+"adresën prej nga kjo përgjigje u dërgua"
#: app/models/info_request.rb:401
msgid ""
"Only the authority can reply to this request, but there is no \"From\" "
"address to check against"
msgstr ""
+"Vetëm autoriteti mund të përgjigjet në këtë kërkesë, por nuk kishte \"Prej: "
+"(From:)\" adresë për ta verifikuar dërguesin"
-#: app/views/general/search.rhtml:158
+#: app/views/request/_search_ahead.rhtml:10
+msgid "Or search in their website for this information."
+msgstr "Ose kërko në ueb faqen e tyre për këtë informacion."
+
+#: app/views/general/_advanced_search_tips.rhtml:42
msgid "Original request sent"
-msgstr ""
+msgstr "Kërkesa origjinale dërguar nga"
+
+#: app/views/request/_describe_state.rhtml:71
+msgid "Other:"
+msgstr "Tjera:"
#: locale/model_attributes.rb:26
msgid "OutgoingMessage|Body"
@@ -1884,7 +2197,7 @@ msgstr "OutgoingMessage|Status"
msgid "OutgoingMessage|What doing"
msgstr "OutgoingMessage|What doing"
-#: app/models/info_request.rb:795
+#: app/models/info_request.rb:797
msgid "Partially successful."
msgstr "Pjesërisht e suksesshme."
@@ -1892,7 +2205,7 @@ msgstr "Pjesërisht e suksesshme."
msgid "Password is not correct"
msgstr "Fjalëkalimi nuk është i saktë"
-#: app/views/user/_signin.rhtml:16 app/views/user/_signup.rhtml:30
+#: app/views/user/_signup.rhtml:30 app/views/user/_signin.rhtml:16
msgid "Password:"
msgstr "Fjalëkalimi:"
@@ -1900,11 +2213,19 @@ msgstr "Fjalëkalimi:"
msgid "Password: (again)"
msgstr "Fjalëkalimi: (përsërite)"
+#: app/views/layouts/default.rhtml:154
+msgid "Paste this link into emails, tweets, and anywhere else:"
+msgstr "Kopjo (paste) këtë vegzë në emaila, tweeta dhe kudo tjetër:"
+
+#: app/views/general/search.rhtml:182
+msgid "People {{start_count}} to {{end_count}} of {{total_count}}"
+msgstr "Personat {{start_count}} deri {{end_count}} prej {{total_count}}"
+
#: app/views/user/set_draft_profile_photo.rhtml:13
msgid "Photo of you:"
msgstr "Fotografia yte:"
-#: app/views/request/new.rhtml:76
+#: app/views/request/new.rhtml:74
msgid "Plans and administrative measures that affect these matters"
msgstr "Planet dhe masat administrative që ndikojnë këto çështje"
@@ -1928,7 +2249,7 @@ msgstr "Të lutem <a href=\"%s\">na kontakto</a> që neve ta rregullojme ate."
msgid ""
"Please <strong>answer the question above</strong> so we know whether the "
msgstr ""
-"Të lutem <strong> përgjegju pyetjes së mësipërme</strong> që ne të dimë nëse"
+"Të lutem <strong> përgjigju pyetjes së mësipërme</strong> që ne të dimë nëse"
#: app/views/user/show.rhtml:12
msgid ""
@@ -1936,17 +2257,21 @@ msgid ""
" know if there was information in the recent responses to them."
msgstr ""
"Të lutem <strong>shko te kërkesa</strong>, dhe na e bëj\n"
-" medije nëse ka pasë informatë në përgjigjen e fundit drejtuar atyre."
+" me dije nëse ka pasë informatë në përgjigjen e fundit drejtuar atyre."
-#: app/views/request/_followup.rhtml:27
+#: app/views/request/_followup.rhtml:54
msgid ""
"Please <strong>only</strong> write messages directly relating to your "
"request {{request_link}}. If you would like to ask for information that was "
"not in your original request, then <a href=\"{{new_request_link}}\">file a "
"new request</a>."
msgstr ""
+"Të lutem <strong>shkruaj vetëm</strong>mesazhe të ndërlidhura drejtpërdrejti"
+" me kërkesën tënde {{request_link}}. Nëse dëshiron të kërkoni informata të "
+"cilat nuk janë ne kërkesën origjinale, atëher <a "
+"href=\"{{new_request_link}}\">bën kërkesë të re</a>."
-#: app/views/request/new.rhtml:60
+#: app/views/request/new.rhtml:58
msgid "Please ask for environmental information only"
msgstr "Të lutem kërko vetëm për informacion në lidhje me mjedisin"
@@ -1960,17 +2285,24 @@ msgstr ""
#: app/models/profile_photo.rb:91
msgid "Please choose a file containing your photo."
-msgstr "Të lutem zgjedh një fajll që përmban foton tënde."
+msgstr "Të lutem zgjedh një fajll që përmban fotografinë tënde."
-#: app/models/outgoing_message.rb:162
+#: app/models/outgoing_message.rb:163
msgid "Please choose what sort of reply you are making."
msgstr "Të lutem zgjedh llojin e përgjigjes."
-#: app/controllers/request_controller.rb:346
+#: app/controllers/request_controller.rb:352
msgid ""
"Please choose whether or not you got some of the information that you "
"wanted."
msgstr ""
+"Të lutem zgjidh nëse ke marrë ose jo disa nga informatat që i ke kërkuar."
+
+#: app/views/track_mailer/event_digest.rhtml:63
+msgid "Please click on the link below to cancel or alter these emails."
+msgstr ""
+"Të lutem kliko në vegzën e mëposhtme për të anuluar ose ndryshuar këto "
+"emaila."
#: app/views/user_mailer/changeemail_confirm.rhtml:3
msgid ""
@@ -1978,11 +2310,14 @@ msgid ""
"change the email address that you use for {{site_name}}\n"
"from {{old_email}} to {{new_email}}"
msgstr ""
+"Të lutem kliko në vegzën e mëposhtme për të konfirmuar se dëshiron të\n"
+"ndryshon adresën e emailit që ti përdorn në {{site_name}}\n"
+"prej {{old_email}} në {{new_email}}"
#: app/views/user_mailer/confirm_login.rhtml:3
msgid "Please click on the link below to confirm your email address."
msgstr ""
-"Të lutem kliko në vegzën e mëposhëtme për të konfirmuar email adresën tënde."
+"Të lutem kliko në vegzën e mëposhtme për të konfirmuar email adresën tënde."
#: app/models/info_request.rb:126
msgid ""
@@ -2005,7 +2340,7 @@ msgstr ""
msgid "Please enable \"cookies\" to carry on"
msgstr "Të lutem aktivizo \"cookies\" në shfletues për të vazhduar"
-#: app/models/user.rb:38
+#: app/models/user.rb:40
msgid "Please enter a password"
msgstr "Të lutem shkruaj fjalëkalimin"
@@ -2017,15 +2352,15 @@ msgstr "Të lutem shkruaj lëndën"
msgid "Please enter a summary of your request"
msgstr "Të lutem shkruaj një përmbledhje të kërkesës tënde"
-#: app/models/user.rb:106
+#: app/models/user.rb:117
msgid "Please enter a valid email address"
msgstr "Të lutem shkruaj adresën korrekte të emailit"
#: app/models/contact_validator.rb:31
msgid "Please enter the message you want to send"
-msgstr "Të lutem shkruaj mesazhin që dëshiron do ta dërgosh"
+msgstr "Të lutem shkruaj mesazhin që dëshiron ta dërgosh"
-#: app/models/user.rb:49
+#: app/models/user.rb:51
msgid "Please enter the same password twice"
msgstr "Të lutem shkruaj fjalëkalimin e njëjtë dy herë"
@@ -2033,23 +2368,23 @@ msgstr "Të lutem shkruaj fjalëkalimin e njëjtë dy herë"
msgid "Please enter your annotation"
msgstr "Të lutem shkruaj shënimin tënd"
-#: app/models/contact_validator.rb:29 app/models/user.rb:34
+#: app/models/user.rb:36 app/models/contact_validator.rb:29
msgid "Please enter your email address"
msgstr "Të lutem shkruaj adresën e emailit tënd"
-#: app/models/outgoing_message.rb:147
+#: app/models/outgoing_message.rb:148
msgid "Please enter your follow up message"
-msgstr "Të lutem shto mesazhin për përcjellje"
+msgstr "Të lutem shto mesazhin vazhdues"
-#: app/models/outgoing_message.rb:150
+#: app/models/outgoing_message.rb:151
msgid "Please enter your letter requesting information"
msgstr "Të lutem shkruaj letrën e kërkesës për informatë "
-#: app/models/contact_validator.rb:28 app/models/user.rb:36
+#: app/models/user.rb:38 app/models/contact_validator.rb:28
msgid "Please enter your name"
msgstr "Të lutem shkruaj emrin tënd"
-#: app/models/user.rb:109
+#: app/models/user.rb:120
msgid "Please enter your name, not your email address, in the name field."
msgstr "Të lutem shkruaj emrin tënd e jo adresën e emailit ne këtë fushë."
@@ -2065,7 +2400,7 @@ msgstr "Të lutem shkruaj adresën e vjetër të emailit "
msgid "Please enter your password"
msgstr "Të lutem shkruaj fjalëkalimin tënd"
-#: app/models/outgoing_message.rb:145
+#: app/models/outgoing_message.rb:146
msgid "Please give details explaining why you want a review"
msgstr ""
"Të lutem shkruaj hollësi spjeguese se për çfarë arsye po kërkon rishqyrtim"
@@ -2082,13 +2417,11 @@ msgstr ""
"Të lutem bëje përmbledhjen sa më shkurt, sikurse në lëndën (subjektin) e "
"emailit. Mund të shkruash një togfjalësh në vend të një fjalie të plotë."
-#: app/views/request/new.rhtml:79
+#: app/views/request/new.rhtml:77
msgid ""
"Please only request information that comes under those categories, <strong>do not waste your\n"
-" time</strong> or the time of the public authority by requesting unrelated information."
+" time</strong> or the time of the public authority by requesting unrelated information."
msgstr ""
-"Të lutem kërko vetëm informata që hyjnë në këto kategori, <strong>mos e humb\n"
-" kohën tënde</strong> apo kohën e institucionit duke kërkuar informata që s'kanë të bëjnë me të."
#: app/views/request/new_please_describe.rhtml:5
msgid ""
@@ -2098,7 +2431,7 @@ msgstr ""
"Të lutem selektoi të gjitha kërkesat një pas një, dhe <strong>bëje të njohur për të gjithë</strong>\n"
"nëse kanë qenë të suksesshme deri tash apo jo."
-#: app/models/outgoing_message.rb:156
+#: app/models/outgoing_message.rb:157
msgid ""
"Please sign at the bottom with your name, or alter the \"%{signoff}\" "
"signature"
@@ -2110,13 +2443,13 @@ msgstr ""
msgid "Please sign in as "
msgstr "Të lutem kyçu si "
-#: app/controllers/request_controller.rb:730
+#: app/controllers/request_controller.rb:741
msgid "Please type a message and/or choose a file containing your response."
msgstr ""
"Të lutem shkruaj një mesazh dhe/ose zgjedh një fajll që përmban përgjigjen "
"tënde."
-#: app/controllers/request_controller.rb:434
+#: app/controllers/request_controller.rb:440
msgid "Please use the form below to tell us more."
msgstr "Të lutem përdor formularin e mëposhtëm për të na treguar më shumë."
@@ -2147,13 +2480,15 @@ msgstr ""
"Të lutem shkruaj komentin duke përdorur kombinim të germave të mëdha dhe të "
"vogla. Kjo e bën leximin për të tjerët më të lehtë."
-#: app/controllers/request_controller.rb:423
+#: app/controllers/request_controller.rb:429
msgid ""
"Please write your follow up message containing the necessary clarifications "
"below."
msgstr ""
+"Të lutem, më poshtë shkruaj mesazhin vazhdues i cili përmban sqarimet e "
+"domosdoshme."
-#: app/models/outgoing_message.rb:159
+#: app/models/outgoing_message.rb:160
msgid ""
"Please write your message using a mixture of capital and lower case letters."
" This makes it easier for others to read."
@@ -2161,7 +2496,7 @@ msgstr ""
"Të lutem shkruaj mesazhin duke përdorur kombinim të germave të mëdha dhe të "
"vogla. Kjo e bën leximin për të tjerët më të lehtë."
-#: app/views/comment/new.rhtml:41
+#: app/views/comment/new.rhtml:42
msgid ""
"Point to <strong>related information</strong>, campaigns or forums which may"
" be useful."
@@ -2169,41 +2504,53 @@ msgstr ""
"Udhëzo te <strong>informatat që nderlidhen me këtë,</strong> fushata ose "
"forume të cilat mund të jenë të dobishme."
+#: app/views/request/_search_ahead.rhtml:3
+msgid "Possibly related requests:"
+msgstr "Kërkesa të ndërlidhura:"
+
#: app/views/comment/preview.rhtml:21
msgid "Post annotation"
msgstr "Posto shënimin"
-#: locale/model_attributes.rb:55
+#: locale/model_attributes.rb:53
msgid "PostRedirect|Circumstance"
msgstr "PostRedirect|Circumstance"
-#: locale/model_attributes.rb:53
+#: locale/model_attributes.rb:51
msgid "PostRedirect|Email token"
msgstr "PostRedirect|Email token"
-#: locale/model_attributes.rb:52
+#: locale/model_attributes.rb:50
msgid "PostRedirect|Post params yaml"
msgstr "PostRedirect|Post params yaml"
-#: locale/model_attributes.rb:54
+#: locale/model_attributes.rb:52
msgid "PostRedirect|Reason params yaml"
msgstr "PostRedirect|Reason params yaml"
-#: locale/model_attributes.rb:50
+#: locale/model_attributes.rb:48
msgid "PostRedirect|Token"
msgstr "PostRedirect|Token"
-#: locale/model_attributes.rb:51
+#: locale/model_attributes.rb:49
msgid "PostRedirect|Uri"
msgstr "PostRedirect|Uri"
+#: app/views/general/blog.rhtml:53
+msgid "Posted on {{date}} by {{author}}"
+msgstr "Postuar më {{date}} nga {{author}}"
+
#: app/views/general/_credits.rhtml:1
-msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>."
-msgstr ""
+msgid "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
+msgstr "Powered by <a href=\"http://www.alaveteli.org/\">Alaveteli</a>"
+
+#: app/views/general/_localised_datepicker.rhtml:5
+msgid "Prev"
+msgstr "Mrapa"
#: app/views/request/followup_preview.rhtml:1
msgid "Preview follow up to '"
-msgstr ""
+msgstr "Shiko vazhdimësinë e komunikimit për '"
#: app/views/comment/preview.rhtml:1
msgid "Preview new annotation on '{{info_request_title}}'"
@@ -2213,11 +2560,11 @@ msgstr "Shiko shënimin e ri në '{{info_request_title}}'"
msgid "Preview your annotation"
msgstr "Shiko shënimin tënd"
-#: app/views/request/_followup.rhtml:96
+#: app/views/request/_followup.rhtml:123
msgid "Preview your message"
msgstr "Shiko mesazhin tënd"
-#: app/views/request/new.rhtml:139
+#: app/views/request/new.rhtml:143
msgid "Preview your public request"
msgstr "Shiko kërkesën tënde publike"
@@ -2229,17 +2576,18 @@ msgstr "ProfilePhoto|Data"
msgid "ProfilePhoto|Draft"
msgstr "ProfilePhoto|Draft"
-#: app/views/public_body/list.rhtml:37
+#: app/views/public_body/list.rhtml:38
+msgid "Public authorities"
+msgstr "Autoritetet publike"
+
+#: app/views/public_body/list.rhtml:36
msgid "Public authorities - {{description}}"
msgstr "Autoritetet publike - {{description}}"
-#: app/views/general/search.rhtml:73
-msgid ""
-"Public authorities {{start_count}} to {{end_count}} of {{total_count}} for "
-"{{user_search_query}}"
+#: app/views/general/search.rhtml:158
+msgid "Public authorities {{start_count}} to {{end_count}} of {{total_count}}"
msgstr ""
-"Autoritetet publike prej {{start_count}} tek {{end_count}} prej "
-"{{total_count}} për {{user_search_query}}"
+"Autoritetet publike {{start_count}} deri {{end_count}} prej {{total_count}}"
#: locale/model_attributes.rb:12
msgid "PublicBody|First letter"
@@ -2251,11 +2599,11 @@ msgstr "PublicBody |Ballina"
#: locale/model_attributes.rb:8
msgid "PublicBody|Last edit comment"
-msgstr "PublicBody | Redaktimi i fundit i komentit"
+msgstr "PublicBody | Editimi i fundit i komentit"
#: locale/model_attributes.rb:7
msgid "PublicBody|Last edit editor"
-msgstr "PublicBody | Redaktimi i fundit editor"
+msgstr "PublicBody | Editimi i fundit editor"
#: locale/model_attributes.rb:3
msgid "PublicBody|Name"
@@ -2285,66 +2633,47 @@ msgstr "PublicBody |URL emri"
msgid "PublicBody|Version"
msgstr "PublicBody |Versioni"
-#: app/views/public_body/show.rhtml:10
+#: app/views/public_body/show.rhtml:15
msgid "Publication scheme"
msgstr "Skema e publikimit"
-#: locale/model_attributes.rb:48
-msgid "RawEmail|Data binary"
-msgstr "RawEmail |Të dhënat binare"
+#: app/views/track/_tracking_links.rhtml:26
+msgid "RSS feed"
+msgstr "RSS feed"
+
+#: app/views/track/_tracking_links.rhtml:26
+msgid "RSS feed of updates"
+msgstr "Aktualizimet e RSS feed"
#: app/views/comment/preview.rhtml:20
msgid "Re-edit this annotation"
-msgstr "Ri edito këtë shënim"
+msgstr "Re-edito këtë shënim"
#: app/views/request/followup_preview.rhtml:49
msgid "Re-edit this message"
msgstr "Re-edito këtë mesazh"
-#: app/views/request/preview.rhtml:40
-msgid "Re-edit this request"
-msgstr "Re-edito këtë kërkesë"
-
-#: app/views/general/search.rhtml:137
+#: app/views/general/_advanced_search_tips.rhtml:19
msgid ""
"Read about <a href=\"{{advanced_search_url}}\">advanced search "
"operators</a>, such as proximity and wildcards."
msgstr ""
+"Lexo rreth <a href=\"{{advanced_search_url}}\">operatorëve të avansuar për "
+"kërkim</a>, të tilla si afërsia dhe gjithëpërfshirëse."
-#: app/views/layouts/default.rhtml:93
+#: app/views/general/_topnav.rhtml:7
msgid "Read blog"
msgstr "Lexo blog-un"
-#: app/views/request/new.rhtml:16
-msgid "Read this before writing your {{info_request_law_used_full}} request"
-msgstr ""
-"Lexoni këtë para se të shkruani {{info_request_law_used_full}} kërkesën"
-
-#: app/views/general/search.rhtml:150
+#: app/views/general/_advanced_search_tips.rhtml:34
msgid "Received an error message, such as delivery failure."
-msgstr ""
+msgstr "Morra një mesazh gabimi, si p.sh. dështim gjatë dorëzimit."
-#: app/views/general/search.rhtml:42
+#: app/views/general/search.rhtml:133
msgid "Recently described results first"
msgstr "Rezultatet e përshkruara së fundi radhiti të parat"
-#: app/controllers/request_controller.rb:139
-msgid "Recently sent Freedom of Information requests"
-msgstr "Kërkesat për Informata zyrtare të dërguara së fundi"
-
-#: app/views/request/list.rhtml:6
-msgid "Recently sent requests"
-msgstr "Kërkesat e dërguara së fundi"
-
-#: app/controllers/request_controller.rb:144
-msgid "Recently successful responses"
-msgstr "përgjigjet e marra së fundi"
-
-#: app/models/info_request_event.rb:305
-msgid "Refused"
-msgstr "Refuzuar"
-
-#: app/models/info_request.rb:793
+#: app/models/info_request.rb:795
msgid "Refused."
msgstr "Refuzuar."
@@ -2353,37 +2682,33 @@ msgid ""
"Remember me</label> (keeps you signed in longer;\n"
" do not use on a public computer) "
msgstr ""
-"Me mbaj mend </label> (të mban të kyçur më gjatë\n"
+"Më mbaj mend </label> (të mban të kyçur më gjatë\n"
" mos e përdor në kompjuter publik) "
-#: app/views/request/_correspondence.rhtml:28
-msgid "Reply to this message"
-msgstr "Pergjegju këtij mesazhi"
-
#: app/views/comment/_single_comment.rhtml:24
msgid "Report abuse"
msgstr "Raporto abuzim"
-#: app/views/request/_after_actions.rhtml:37
+#: app/views/request/_after_actions.rhtml:39
msgid "Request an internal review"
msgstr "Kërko një rishqyrtim intern"
-#: app/views/request/_followup.rhtml:4
-msgid "Request an internal review from"
-msgstr "Kërko një rishqyrtim intern prej"
+#: app/views/request/_followup.rhtml:8
+msgid "Request an internal review from {{person_or_body}}"
+msgstr "Kërko një rishikim intern nga {{person_or_body}}"
#: app/views/request/hidden.rhtml:1
msgid "Request has been removed"
msgstr "Kërkesa është larguar (fshirë)"
-#: app/views/request/_request_listing_via_event.rhtml:28
+#: app/views/request/_request_listing_via_event.rhtml:20
msgid ""
"Request sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
msgstr ""
"Kërkesë dërguar te {{public_body_name}} nga {{info_request_user}} me "
"{{date}}."
-#: app/views/request/_request_listing_via_event.rhtml:36
+#: app/views/request/_request_listing_via_event.rhtml:28
msgid ""
"Request to {{public_body_name}} by {{info_request_user}}. Annotated by "
"{{event_comment_user}} on {{date}}."
@@ -2401,39 +2726,43 @@ msgstr ""
msgid "Requested on {{date}}"
msgstr "Kërkuar me {{date}}"
-#: app/models/track_thing.rb:209 app/models/track_thing.rb:210
-msgid "Requests or responses matching '{{query}}'"
-msgstr ""
+#: app/models/track_thing.rb:282 app/models/track_thing.rb:283
+msgid "Requests or responses matching your saved search"
+msgstr "Kërkesat ose përgjigjet që përputhen me kërkimin e ruajtur"
#: app/views/request/upload_response.rhtml:11
msgid "Respond by email"
-msgstr "Përgjegju me email"
+msgstr "Përgjigju me email"
-#: app/views/request/_after_actions.rhtml:46
+#: app/views/request/_after_actions.rhtml:48
msgid "Respond to request"
-msgstr "Përgjegju kërkesës"
+msgstr "Përgjigju kërkesës"
#: app/views/request/upload_response.rhtml:5
msgid "Respond to the FOI request"
-msgstr "Përgjegju kërkesës për Informata Zyrtare"
+msgstr "Përgjigju kërkesës për Informata Zyrtare"
#: app/views/request/upload_response.rhtml:21
msgid "Respond using the web"
-msgstr "Përgjegju duke përdorur uebin"
+msgstr "Përgjigju duke përdorur ueb faqen"
-#: app/views/general/search.rhtml:160
+#: app/models/info_request_event.rb:306
+msgid "Response"
+msgstr "Përgjigje"
+
+#: app/views/general/_advanced_search_tips.rhtml:44
msgid "Response from a public authority"
-msgstr ""
+msgstr "Përgjigje nga një autoritet publik"
#: app/views/request/show.rhtml:77
msgid "Response to this request is <strong>delayed</strong>."
-msgstr "Përgjegja e kësaj kërkese është <strong>vonuar.</strong>"
+msgstr "Përgjjgja e kësaj kërkese është <strong>vonuar</strong>."
#: app/views/request/show.rhtml:85
msgid "Response to this request is <strong>long overdue</strong>."
-msgstr "Përgjegja e kësaj kërkese është <strong>vonuar.</strong>"
+msgstr "Përgjigja e kësaj kërkese është <strong>vonuar.</strong>"
-#: app/views/request/show_response.rhtml:64
+#: app/views/request/show_response.rhtml:62
msgid "Response to your request"
msgstr "përgjigje për kërkesën tënde"
@@ -2441,7 +2770,11 @@ msgstr "përgjigje për kërkesën tënde"
msgid "Response:"
msgstr "Përgjigja:"
-#: app/views/general/search.rhtml:9
+#: app/views/general/search.rhtml:87
+msgid "Restrict to"
+msgstr "Kufizo në"
+
+#: app/views/general/search.rhtml:12
msgid "Results page {{page_number}}"
msgstr "Faqja e rezultateve {{page_number}}"
@@ -2449,36 +2782,84 @@ msgstr "Faqja e rezultateve {{page_number}}"
msgid "Save"
msgstr "Ruaj"
-#: app/views/general/exception_caught.rhtml:10
-#: app/views/general/frontpage.rhtml:16 app/views/general/search.rhtml:29
-#: app/views/layouts/default.rhtml:80 app/views/request/new.rhtml:31
+#: app/views/request/_request_filter_form.rhtml:49
+#: app/views/request/select_authority.rhtml:41
+#: app/views/public_body/list.rhtml:43
+#: app/views/general/exception_caught.rhtml:12
+#: app/views/general/frontpage.rhtml:23 app/views/general/search.rhtml:17
+#: app/views/general/search.rhtml:32 app/views/general/search.rhtml:45
msgid "Search"
msgstr "Kërko"
-#: app/views/general/search.rhtml:4
+#: app/views/general/search.rhtml:8
msgid "Search Freedom of Information requests, public authorities and users"
msgstr ""
"Kërko në kërkesat e informatave zyrtare, autoritet publike dhe përdoruesit"
-#: app/views/general/exception_caught.rhtml:7
+#: app/views/user/show.rhtml:125
+msgid "Search contributions by this person"
+msgstr "Kërko për kontribute të bëra nga ky person"
+
+#: app/views/request/_request_filter_form.rhtml:11
+msgid "Search for words in:"
+msgstr "Kërko fjalë në:"
+
+#: app/views/general/search.rhtml:100
+msgid "Search in"
+msgstr "Kërko në"
+
+#: app/views/general/frontpage.rhtml:15
+msgid ""
+"Search over<br/>\n"
+" <strong>{{number_of_requests}} requests</strong> <span>and</span><br/>\n"
+" <strong>{{number_of_authorities}} authorities</strong>"
+msgstr ""
+"Gjej mbi<br/>\n"
+" <strong>{{number_of_requests}} kërkesa</strong> <span>dhe</span><br/>\n"
+" <strong>{{number_of_authorities}} autoritete publike</strong>"
+
+#: app/views/general/search.rhtml:19
+msgid "Search results"
+msgstr "Rezultatet e kërkimit"
+
+#: app/views/general/exception_caught.rhtml:9
msgid "Search the site to find what you were looking for."
msgstr "Kërko në këtë ueb sajt për të gjetur atë që ti po kërkon."
-#: app/controllers/user_controller.rb:331
+#: app/views/public_body/show.rhtml:85
+msgid "Search within the %d Freedom of Information requests to %s"
+msgid_plural "Search within the %d Freedom of Information requests made to %s"
+msgstr[0] "Kërko brenda %d kërkesave për informata zyrtare në %s"
+msgstr[1] "Kërko brenda %d kërkesave për informata zyrtare të bëra në %s"
+
+#: app/views/user/show.rhtml:123
+msgid "Search your contributions"
+msgstr "Kërko në kontributet tua"
+
+#: app/views/request/select_authority.rhtml:49
+#: app/views/public_body/_search_ahead.rhtml:5
+msgid "Select one to see more information about the authority."
+msgstr "Zgjidh një për të parë më shumë informacion në lidhje me autoritetin."
+
+#: app/views/request/select_authority.rhtml:27
+msgid "Select the authority to write to"
+msgstr "Përzgjedh autoritetin"
+
+#: app/views/request/_after_actions.rhtml:28
+msgid "Send a followup"
+msgstr "Dërgo mesazh vazhdues"
+
+#: app/controllers/user_controller.rb:349
msgid "Send a message to "
msgstr "Dërgo mesazh te "
-#: app/views/request/_followup.rhtml:7
-msgid "Send a public follow up message to"
-msgstr ""
-
-#: app/views/request/_followup.rhtml:10
-msgid "Send a public reply to"
-msgstr "Dërgo përgjigje publike te"
+#: app/views/request/_followup.rhtml:11
+msgid "Send a public follow up message to {{person_or_body}}"
+msgstr "Dërgo mesazh publik vazhdues për {{person_or_body}}"
-#: app/views/request/_correspondence.rhtml:58
-msgid "Send follow up"
-msgstr ""
+#: app/views/request/_followup.rhtml:14
+msgid "Send a public reply to {{person_or_body}}"
+msgstr "Dërgo përgjigje publike te {{person_or_body}}"
#: app/views/request/followup_preview.rhtml:50
msgid "Send message"
@@ -2489,8 +2870,8 @@ msgid "Send message to "
msgstr "Dërgo mesazh te "
#: app/views/request/preview.rhtml:41
-msgid "Send public "
-msgstr "Dërgo"
+msgid "Send request"
+msgstr "Dërgo kërkesën"
#: app/views/user/show.rhtml:53
msgid "Set your profile photo"
@@ -2500,15 +2881,21 @@ msgstr "Vendos fotografinë e profilit tënd"
msgid "Short name is already taken"
msgstr "Emri i shkurtë është i zënë"
-#: app/views/general/search.rhtml:38
+#: app/views/general/search.rhtml:129
msgid "Show most relevant results first"
msgstr "Shfaqi rezultatet më relevante"
-#: app/views/public_body/list.rhtml:3 app/views/request/list.rhtml:2
+#: app/views/public_body/list.rhtml:2
msgid "Show only..."
msgstr "Shfaq vetëm..."
-#: app/views/user/_signin.rhtml:31 app/views/user/show.rhtml:113
+#: app/views/request/_request_filter_form.rhtml:29
+#: app/views/general/search.rhtml:51
+msgid "Showing"
+msgstr "Duke paraqitur"
+
+#: app/views/user/sign.rhtml:2 app/views/user/sign.rhtml:33
+#: app/views/user/_signin.rhtml:32
msgid "Sign in"
msgstr "Kyçu"
@@ -2516,30 +2903,34 @@ msgstr "Kyçu"
msgid "Sign in or make a new account"
msgstr "Kyçu ose krijo një llogari të re"
-#: app/views/layouts/default.rhtml:103
+#: app/views/layouts/default.rhtml:113
msgid "Sign in or sign up"
-msgstr "Kyçu ose Ç'kyçu"
+msgstr "Kyçu ose krijo llogari"
-#: app/views/layouts/default.rhtml:100
+#: app/views/layouts/default.rhtml:111
msgid "Sign out"
msgstr "Ç'kyçu"
-#: app/views/user/_signup.rhtml:41
+#: app/views/user/sign.rhtml:40 app/views/user/_signup.rhtml:46
msgid "Sign up"
msgstr "Regjistrohu"
-#: app/views/request/_sidebar.rhtml:30
+#: app/views/request/_sidebar.rhtml:24
msgid "Similar requests"
msgstr "Kërkesa të ngjashme"
-#: app/models/info_request_event.rb:307
-msgid "Some information sent"
-msgstr "Disa informata janë dërguar"
+#: app/views/general/search.rhtml:33
+msgid "Simple search"
+msgstr "Kërkim i thjeshtë"
-#: app/views/general/search.rhtml:145
-msgid "Some of the information requested has been received"
+#: app/models/request_mailer.rb:177
+msgid "Some notes have been added to your FOI request - "
msgstr ""
+#: app/views/general/_advanced_search_tips.rhtml:29
+msgid "Some of the information requested has been received"
+msgstr "Disa nga informatat e kërkuara janë marrë"
+
#: app/views/request_game/play.rhtml:31
msgid ""
"Some people who've made requests haven't let us know whether they were\n"
@@ -2552,26 +2943,56 @@ msgstr ""
" një nga këto kërkesa, lexo atë, dhe njofto të tjerët se a u ofruan "
"informatat e kërkuara. Të gjithë do të jenë shumë mirënjohës për këtë."
+#: app/models/request_mailer.rb:168
+msgid "Somebody added a note to your FOI request - "
+msgstr "Dikush ka shtuar një shënim në kërkesën tënde -"
+
#: app/views/user_mailer/changeemail_already_used.rhtml:1
msgid ""
"Someone, perhaps you, just tried to change their email address on\n"
"{{site_name}} from {{old_email}} to {{new_email}}."
msgstr ""
+"Dikush, ndoshta ti, u përpoq të ndryshojë adresën e emailit në\n"
+"{{site_name}} prej {{old_email}} në {{new_email}}."
+
+#: app/views/user/wrong_user.rhtml:2
+msgid "Sorry, but only {{user_name}} is allowed to do that."
+msgstr "Na vjen keq, por vetëm {{user_name}} ka të drejtë ta bëj këtë."
-#: app/views/general/exception_caught.rhtml:1
+#: app/views/general/exception_caught.rhtml:17
+msgid "Sorry, there was a problem processing this page"
+msgstr "Na vjen keq, ka pasur një problem gjatë përpunimit të kësaj faqe"
+
+#: app/views/general/exception_caught.rhtml:3
msgid "Sorry, we couldn't find that page"
msgstr "Na vjen keq, nuk munda ta gjej këtë faqe"
-#: app/views/request/new.rhtml:53
+#: app/views/request/new.rhtml:52
msgid "Special note for this authority!"
-msgstr "Shënim të veçantë për këtë autoritet!"
+msgstr "Shënim i veçantë për këtë autoritet!"
+
+#: app/views/public_body/show.rhtml:56
+msgid "Start"
+msgstr "Fillo"
+
+#: app/views/general/frontpage.rhtml:10
+msgid "Start now &raquo;"
+msgstr "Fillo tash &raquo;"
+
+#: app/views/request/_sidebar.rhtml:17
+msgid "Start your own blog"
+msgstr "Nis blogun tënd"
+
+#: app/views/general/blog.rhtml:6
+msgid "Stay up to date"
+msgstr "Qëndro i informuar rreth risive"
#: app/views/request/_other_describe_state.rhtml:21
msgid "Still awaiting an <strong>internal review</strong>"
msgstr "Ende në pritje të <strong>rishqyrtimit intern</strong>"
-#: app/views/request/followup_preview.rhtml:23
#: app/views/request/preview.rhtml:18
+#: app/views/request/followup_preview.rhtml:23
msgid "Subject:"
msgstr "Lënda:"
@@ -2583,68 +3004,85 @@ msgstr "Dërgo"
msgid "Submit status"
msgstr "Dërgo statusin"
-#: app/models/track_thing.rb:158 app/models/track_thing.rb:159
+#: app/views/general/blog.rhtml:8
+msgid "Subscribe to blog"
+msgstr "Abonohu në blog"
+
+#: app/models/track_thing.rb:231 app/models/track_thing.rb:232
msgid "Successful Freedom of Information requests"
msgstr "Kërkesat e suksesshme për Informata Zyrtare"
-#: app/views/request/list.rhtml:5
-msgid "Successful responses"
-msgstr "përgjigjet e suksesshme"
-
-#: app/models/info_request.rb:797
+#: app/models/info_request.rb:799
msgid "Successful."
msgstr "Suksesshme."
-#: app/views/comment/new.rhtml:38
+#: app/views/comment/new.rhtml:39
msgid ""
"Suggest how the requester can find the <strong>rest of the "
"information</strong>."
msgstr ""
"Sugjero si kërkuesi mund të gjen pjesën <strong>tjetër të "
-"informacionit.</strong>"
+"informacionit</strong>."
-#: app/views/request/new.rhtml:93
+#: app/views/request/new.rhtml:84
msgid "Summary:"
msgstr "Përmbledhje:"
-#: app/views/general/search.rhtml:140
+#: app/views/general/_advanced_search_tips.rhtml:22
msgid "Table of statuses"
msgstr "Tabela e statuseve"
+#: app/views/general/_advanced_search_tips.rhtml:39
+msgid "Table of varieties"
+msgstr "Tabela e varianteve"
+
+#: app/views/general/search.rhtml:75
+msgid "Tags (separated by a space):"
+msgstr "Etiketat (të ndara me një hapësirë):"
+
#: app/views/request/preview.rhtml:45
msgid "Tags:"
msgstr "Etiketat:"
+#: app/views/general/exception_caught.rhtml:21
+msgid "Technical details"
+msgstr "Detajet teknike"
+
#: app/controllers/request_game_controller.rb:52
msgid "Thank you for helping us keep the site tidy!"
msgstr ""
+"Faleminderit për ndihmën tënde për mbajtjen e rregullt dhe të organizuar të "
+"ueb faqes!"
#: app/controllers/comment_controller.rb:62
msgid "Thank you for making an annotation!"
msgstr "Faleminderit që keni bërë një shënim!"
-#: app/controllers/request_controller.rb:736
+#: app/controllers/request_controller.rb:747
msgid ""
"Thank you for responding to this FOI request! Your response has been "
"published below, and a link to your response has been emailed to "
msgstr ""
-"Faleminderit që i jeni përgjegjur kësaj kërkese për informata zyrtare. "
-"Përgjegja yte është publikuar më poshtë, si dhe vegza për përgjigjen tënde i"
+"Faleminderit që i jeni përgjigjur kësaj kërkese për informata zyrtare. "
+"Përgjigja yte është publikuar më poshtë, si dhe vegza për përgjigjen tënde i"
" është derguar me email "
-#: app/controllers/request_controller.rb:378
+#: app/controllers/request_controller.rb:384
msgid ""
"Thank you for updating the status of the request '<a "
"href=\"{{url}}\">{{info_request_title}}</a>'. There are some more requests "
"below for you to classify."
msgstr ""
+"Faleminderit për aktualizimin e statusit të kërkesës ' <a "
+"href=\"{{url}}\">{{info_request_title}}</a> '. Ka disa kërkesa të tjera për "
+"ty për ti klasifikuar."
-#: app/controllers/request_controller.rb:381
+#: app/controllers/request_controller.rb:387
msgid "Thank you for updating this request!"
msgstr "Faleminderit për aktualizimin e kësaj kërkese!"
-#: app/controllers/user_controller.rb:398
-#: app/controllers/user_controller.rb:414
+#: app/controllers/user_controller.rb:416
+#: app/controllers/user_controller.rb:432
msgid "Thank you for updating your profile photo"
msgstr "Faleminderit për aktualizimin e fotografisë e profilit tënd"
@@ -2653,9 +3091,8 @@ msgid ""
"Thanks for helping - your work will make it easier for everyone to find successful\n"
"responses, and maybe even let us make league tables..."
msgstr ""
-"Faleminderit për ndihmë - ndihma yte do ta bëjë më të lehtë që të tjerët të "
-"gjejnë kërkesat e suksesshme, e ndoshta edhe të na mundesojë krijim e "
-"ranglistave..."
+"Faleminderit për ndihmë - ndihma yte do ta bëjë më të lehtë që të tjerët të gjejnë kërkesat e suksesshme, \n"
+"e ndoshta edhe të na mundesojë krijim e ranglistave..."
#: app/views/user/show.rhtml:20
msgid ""
@@ -2677,7 +3114,7 @@ msgstr ""
"ndihmojmë, nëse ke nevojë, me këshilla si të veproni në vijim me kërkesat "
"tuaja."
-#: app/controllers/user_controller.rb:189
+#: app/controllers/user_controller.rb:207
msgid ""
"That doesn't look like a valid email address. Please check you have typed it"
" correctly."
@@ -2685,12 +3122,12 @@ msgstr ""
"Kjo nuk duket si një email adresë e vlefshme. Të lutem kontrollo që e ke "
"shtypur të saktë."
-#: app/views/request/_describe_state.rhtml:47
#: app/views/request/_other_describe_state.rhtml:43
+#: app/views/request/_describe_state.rhtml:47
msgid "The <strong>review has finished</strong> and overall:"
msgstr "<strong>Rishqyrtimi ka përfunduar</strong> dhe përfundimi është:"
-#: app/views/request/new.rhtml:62
+#: app/views/request/new.rhtml:60
msgid "The Freedom of Information Act <strong>does not apply</strong> to"
msgstr "Kërkesa për <strong>Informata Zyrtare</strong> nuk aplikohet te:"
@@ -2706,7 +3143,7 @@ msgstr ""
"Autoriteti <strong>nuk e ka</strong> informatën <small>(ndoshta ata e dine "
"kush e ka)</small>"
-#: app/views/request/show_response.rhtml:28
+#: app/views/request/show_response.rhtml:26
msgid ""
"The authority only has a <strong>paper copy</strong> of the information."
msgstr "Autoriteti ka vetëm kopje në letër të këtij informacioni"
@@ -2725,7 +3162,7 @@ msgid ""
"The authority would like to / has <strong>responded by post</strong> to this"
" request."
msgstr ""
-"Autoriteti do të / është <strong>përgjegjur me postë</strong> në këtë "
+"Autoriteti do të / është <strong>përgjigjur me postë</strong> në këtë "
"kërkesë."
#: app/views/request_mailer/stopped_responses.rhtml:1
@@ -2735,42 +3172,37 @@ msgid ""
"request has not been delivered."
msgstr ""
"Emaili që ju, në emër të {{public_body}}, keni dërguar te {{user}} për t'iu "
-"përgjegjur një kërkese {{law_used_short}} nuk është dorëzuar."
+"përgjigjur një kërkese nuk është dorëzuar."
-#: app/views/request/show_response.rhtml:22
-msgid ""
-"The law, the Ministry of Justice and the Information Commissioner\n"
-" all say that an email is sufficient (<a href=\"%s\">more details</a>).\n"
-" At the bottom of this page, write a reply to the authority explaining this to them."
-msgstr ""
-
-#: app/views/general/exception_caught.rhtml:3
-msgid "The page either doesn't exist, or is broken. Things you can try now:"
-msgstr ""
-"Kjo faqe ose nuk ekziston, ose është prishur. Gjërat që mund t'i provosh "
-"tani:"
+#: app/views/general/exception_caught.rhtml:5
+msgid "The page doesn't exist. Things you can try now:"
+msgstr "Faqja nuk ekziston. Gjërat që ti mund ti provosh:"
-#: app/views/general/search.rhtml:143
+#: app/views/general/_advanced_search_tips.rhtml:27
msgid "The public authority does not have the information requested"
-msgstr ""
+msgstr "Autoriteti publik nuk i ka informatat e kërkuara"
-#: app/views/general/search.rhtml:147
+#: app/views/general/_advanced_search_tips.rhtml:31
msgid "The public authority would like part of the request explained"
-msgstr ""
+msgstr "Autoriteti publik do të donte që një pjesë e kërkesës të shpjegohet"
-#: app/views/general/search.rhtml:148
+#: app/views/general/_advanced_search_tips.rhtml:32
msgid "The public authority would like to / has responded by post"
msgstr ""
+"Autoriteti publik do të përgjigjet ose tashmë është përgjigjur me postë"
#: app/views/request/_other_describe_state.rhtml:60
msgid "The request has been <strong>refused</strong>"
msgstr "Kërkesa është <strong>refuzuar</strong>"
-#: app/controllers/request_controller.rb:352
+#: app/controllers/request_controller.rb:358
msgid ""
"The request has been updated since you originally loaded this page. Please "
"check for any new incoming messages below, and try again."
msgstr ""
+"Kërkesa është aktualizuar prejse ti fillimisht ke ngarkuar (lexuar) këtë "
+"faqe. Të lutem kontrollo për ndonjë mesazh të ri më poshtë, dhe provo "
+"përsëri."
#: app/views/request/show.rhtml:104
msgid "The request is <strong>waiting for clarification</strong>."
@@ -2788,9 +3220,9 @@ msgstr "Kërkesa u <strong>refuzua</strong> nga"
msgid "The request was <strong>successful</strong>."
msgstr "Kërkesa ishte e <strong>suksesshme</strong>."
-#: app/views/general/search.rhtml:144
+#: app/views/general/_advanced_search_tips.rhtml:28
msgid "The request was refused by the public authority"
-msgstr ""
+msgstr "Kërkesa u refuzua nga autoriteti publik"
#: app/views/request/hidden.rhtml:9
msgid ""
@@ -2803,31 +3235,31 @@ msgstr ""
"më specifik. Të lutem të <a href=\"%s\">na kontakton</a> nëse ke ndonjë "
"pyetje."
-#: app/views/general/search.rhtml:152
+#: app/views/general/_advanced_search_tips.rhtml:36
msgid "The requester has abandoned this request for some reason"
-msgstr ""
+msgstr "Për ndonjë arsye, përdoruesi e ka braktisur kërkesën"
-#: app/views/request/_followup.rhtml:32
+#: app/views/request/_followup.rhtml:59
msgid ""
"The response to your request has been <strong>delayed</strong>. You can say that, \n"
" by law, the authority should normally have responded\n"
" <strong>promptly</strong> and"
msgstr ""
-"Përgjegja në kërkesën tënde është e <strong>vonuar</strong>. Mund të thuhet që,\n"
+"Përgjigja në kërkesën tënde është e <strong>vonuar</strong>. Mund të thuhet që,\n"
"sipas ligjit, autoriteti ishte dashtë të përgjigjet në \n"
"<strong>afat</strong> të paraparë dhe "
-#: app/views/request/_followup.rhtml:44
+#: app/views/request/_followup.rhtml:71
msgid ""
"The response to your request is <strong>long overdue</strong>. You can say that, by \n"
" law, under all circumstances, the authority should have responded\n"
" by now"
msgstr ""
-"Përgjigja në kërkesën tënde është <strong>vonuar për së tepërmi</strong>. Mund të thuhet që,\n"
+"Përgjigja në kërkesën tënde është <strong>vonuar për së tepërmi</strong>. Mund të thuhet që,\n"
"sipas ligjit, duke i patur parasyesh të gjitha rrethanat, autoriteti ishte dashtë të përgjigjet \n"
"deri më tani"
-#: app/views/public_body/show.rhtml:100
+#: app/views/public_body/show.rhtml:120
msgid ""
"The search index is currently offline, so we can't show the Freedom of "
"Information requests that have been made to this authority."
@@ -2835,7 +3267,7 @@ msgstr ""
"Indeksi i kërkimit aktualisht është i shkëputur, kështu që nuk mund të shfaq"
" kërkesat e Informata zyrtare që kan të bëjnë me këtë autoritet"
-#: app/views/user/show.rhtml:141
+#: app/views/user/show.rhtml:156
msgid ""
"The search index is currently offline, so we can't show the Freedom of "
"Information requests this person has made."
@@ -2851,77 +3283,104 @@ msgstr "Pastaj ti mund të anulon njoftimin."
msgid "Then you can cancel the alerts."
msgstr "Pastaj ti mund të anulon njoftimet."
-#: app/controllers/user_controller.rb:249
+#: app/controllers/user_controller.rb:267
msgid "Then you can change your email address used on {{site_name}}"
msgstr ""
"Pastaj ti mund të ndryshosh adresën tënde të emailit që përdoret në "
"{{site_name}}"
-#: app/controllers/user_controller.rb:203
+#: app/controllers/user_controller.rb:221
msgid "Then you can change your password on {{site_name}}"
msgstr ""
"Pastaj ti mund të ndryshosh fjalëkalimin tënd që përdoret në {{site_name}}"
-#: app/controllers/request_controller.rb:338
+#: app/controllers/request_controller.rb:344
msgid "Then you can classify the FOI response you have got from "
msgstr "Pastaj ti mund të klasifikon përgjigjet e marra nga "
+#: app/controllers/request_controller.rb:774
+msgid "Then you can download a zip file of {{info_request_title}}."
+msgstr "Pastaj ti mund të shkarkosh zip fajllin e {{info_request_title}}."
+
#: app/controllers/request_game_controller.rb:41
msgid "Then you can play the request categorisation game."
msgstr "Pastaj ti mund të luash lojën për kategorizim të kërkesave."
-#: app/controllers/user_controller.rb:330
+#: app/controllers/user_controller.rb:348
msgid "Then you can send a message to "
msgstr "Pastaj ti mund të dërgon mesazh te "
-#: app/controllers/user_controller.rb:514
+#: app/controllers/user_controller.rb:541
msgid "Then you can sign in to {{site_name}}"
msgstr "Pastaj ti mund të kyçesh në {{site_name}}"
-#: app/controllers/request_controller.rb:61
+#: app/controllers/request_controller.rb:82
msgid "Then you can update the status of your request to "
msgstr "Pastaj ti mund të aktualizosh statusin e kërkesës tënde për "
-#: app/controllers/request_controller.rb:702
+#: app/controllers/request_controller.rb:713
msgid "Then you can upload an FOI response. "
msgstr ""
"Pastaj ti mund të ngarkon një përgjigje ndaj kërkesës për informata zyrtare."
+" "
-#: app/controllers/request_controller.rb:545
+#: app/controllers/request_controller.rb:551
msgid "Then you can write follow up message to "
-msgstr ""
+msgstr "Atëher ti mund të shkruash mesazh vazhdues për "
-#: app/controllers/request_controller.rb:546
+#: app/controllers/request_controller.rb:552
msgid "Then you can write your reply to "
msgstr "Pastaj ti mund të shkruash përgjigjen tënde për "
-#: app/models/track_thing.rb:197
+#: app/models/track_thing.rb:270
msgid ""
"Then you will be emailed whenever '{{user_name}}' requests something or gets"
" a response."
msgstr ""
+"Atëher ti do njoftohesh me email sa herë që '{{user_name}}' bën ndonjë "
+"kërkesë apo merr përgjigje."
-#: app/models/track_thing.rb:213
+#: app/models/track_thing.rb:286
msgid ""
-"Then you will be emailed whenever a new request or response matches "
-"'{{query}}'."
+"Then you will be emailed whenever a new request or response matches your "
+"search."
msgstr ""
+"Atëherë ti do njoftohesh me email sa herë që dikush bën ndonjë kërkesë apo "
+"mirret përgjigje që përputhet me kërkimin tënd."
-#: app/models/track_thing.rb:162
+#: app/models/track_thing.rb:235
msgid "Then you will be emailed whenever an FOI request succeeds."
msgstr ""
+"Atëher ti do njoftohesh me email sa herë që një kërkesë për informata "
+"zyrtare është e suksesshme."
-#: app/models/track_thing.rb:146
+#: app/models/track_thing.rb:219
msgid "Then you will be emailed whenever anyone makes a new FOI request."
msgstr ""
+"Atëher ti do njoftohesh me email sa herë që dikush bën ndonjë kërkesë për "
+"informata zyrtare."
-#: app/models/track_thing.rb:181
+#: app/models/track_thing.rb:254
msgid ""
"Then you will be emailed whenever someone requests something or gets a "
"response from '{{public_body_name}}'."
msgstr ""
+"Atëher ti do njoftohesh me email sa herë që dikush bën ndonjë kërkesë apo "
+"merr përgjigje nga '{{public_body_name}}'."
+
+#: app/models/track_thing.rb:203
+msgid ""
+"Then you will be emailed whenever the request '{{request_title}}' is "
+"updated."
+msgstr ""
+"Atëherë ti do njoftohesh me email sa herë kërkesa '{{request_title}}' "
+"aktualizohet."
-#: app/controllers/request_controller.rb:299
+#: app/controllers/request_controller.rb:32
+msgid "Then you'll be allowed to send FOI requests."
+msgstr "Atëherë ty do të lejohet të bën kërkesa për informata zyrtare."
+
+#: app/controllers/request_controller.rb:304
msgid "Then your FOI request to {{public_body_name}} will be sent."
msgstr "Pastaj kërkesa yte për "
@@ -2937,12 +3396,24 @@ msgstr ""
"Ka {{count}} shënime të reja në kërkesën tënde {{info_request}}. Ndiqni "
"këtë vegzë për t'i parë ato."
+#: app/views/public_body/show.rhtml:7
+msgid "There is %d person following this authority"
+msgid_plural "There are %d people following this authority"
+msgstr[0] "Një person %d është duke e përcjell këtë autoritet"
+msgstr[1] "Janë %d persona duke e përcjell këtë autoritet"
+
+#: app/views/request/_sidebar.rhtml:5
+msgid "There is %d person following this request"
+msgid_plural "There are %d people following this request"
+msgstr[0] "Një person %d është duke e përcjell këtë kërkesë"
+msgstr[1] "Janë %d persona duke e përcjell këtë autoritet"
+
#: app/views/user/show.rhtml:4
msgid ""
"There is <strong>more than one person</strong> who uses this site and has this name. \n"
" One of them is shown below, you may mean a different one:"
msgstr ""
-"Ekziston <strong>më shumë se një individ</strong> i cili e përdor këtë ueb sajt dhe ka të njejtin emërtim.\n"
+"Ekziston <strong>më shumë se një person</strong> i cili e përdor këtë ueb sajt dhe ka të njejtin emërtim.\n"
"Njëri prej tyre është listuar më poshtë, ti mund të kesh menduar për tjetër kend:"
#: app/views/request/show.rhtml:113
@@ -2950,11 +3421,18 @@ msgid ""
"There was a <strong>delivery error</strong> or similar, which needs fixing "
"by the {{site_name}} team."
msgstr ""
+"Kishte një <strong>dështim gjatë dorëzimit.</strong> apo diç e ngjajshme, e "
+"cila ka nevojë për përmirsim nga ekipi i {{site_name}}."
-#: app/controllers/public_body_controller.rb:77
+#: app/controllers/user_controller.rb:140
+#: app/controllers/public_body_controller.rb:82
msgid "There was an error with the words you entered, please try again."
msgstr "Kishte një gabim me fjalët që keni shtypur, të lutem provo përsëri."
+#: app/views/public_body/show.rhtml:109 app/views/general/search.rhtml:10
+msgid "There were no requests matching your query."
+msgstr "Nuk ka kërkesa që përputhen me kërkimin tënd."
+
#: app/views/request/_describe_state.rhtml:38
msgid "They are going to reply <strong>by post</strong>"
msgstr "Ata do të përgjigjen <strong>me postë</strong>"
@@ -2976,22 +3454,21 @@ msgid ""
"They have not replied to your {{law_used_short}} request {{title}} promptly,"
" as normally required by law"
msgstr ""
-"Ata nuk janë përgjegj ndaj kërkesës {{law_used_short}} tënde {{title}} "
-"menjëherë, siç kërkohet normalisht nga ligji"
+"Ata nuk janë përgjigjur ndaj kërkesës tënde {{title}} menjëherë, siç "
+"kërkohet normalisht nga ligji"
#: app/views/request_mailer/very_overdue_alert.rhtml:3
msgid ""
"They have not replied to your {{law_used_short}} request {{title}}, \n"
"as required by law"
msgstr ""
-"Ata nuk janë përgjegjur {{law_used_short}} ndaj kërkesës teënde {{title}}, "
-"siç kërkohet me ligj"
+"Ata nuk janë përgjigjur ndaj kërkesës tende {{title}}, siç kërkohet me ligj"
#: app/views/request/_after_actions.rhtml:3
msgid "Things to do with this request"
msgstr "Gjëra për të bërë me këtë kërkesë"
-#: app/views/public_body/show.rhtml:59
+#: app/views/public_body/show.rhtml:63
msgid "This authority no longer exists, so you cannot make a request to it."
msgstr ""
"Ky autoritet nuk ekziston më, kështu që ju nuk mund të bëni një kërkesë për "
@@ -3006,12 +3483,21 @@ msgstr ""
"kërkuesi, atëherë ti mund të <a href=\"%s\">kyçesh </a> për të parë "
"përgjigjen."
-#: app/views/request/new.rhtml:65
+#: app/views/request/new.rhtml:63
msgid ""
"This covers a very wide spectrum of information about the state of\n"
-" the <strong>natural and built environment</strong>, such as:"
+" the <strong>natural and built environment</strong>, such as:"
msgstr ""
+#: app/views/request/simple_correspondence.rhtml:1
+msgid ""
+"This is a plain-text version of the Freedom of Information request "
+"\"{{request_title}}\". The latest, full version is available online at "
+"{{full_url}}"
+msgstr ""
+"Ky është versioni tekstual (plain text) i kërkesës për informata zyrtare "
+"\"{{request_title}}\". Versioni i fundit dhe i plotë është në {{full_url}}"
+
#: app/views/request/_view_html_prefix.rhtml:9
msgid ""
"This is an HTML version of an attachment to the Freedom of Information "
@@ -3028,7 +3514,7 @@ msgstr ""
"Kjo është për shkak se {{title}} është një kërkesë e vjetër që ka qenë e "
"shenjuar të mos marrë më përgjigje."
-#: app/views/track/_tracking_links.rhtml:9
+#: app/views/track/_tracking_links.rhtml:8
msgid ""
"This is your own request, so you will be automatically emailed when new "
"responses arrive."
@@ -3041,14 +3527,36 @@ msgid ""
"This outgoing message has been hidden. See annotations to\n"
"\t\t\t\t\t\tfind out why. If you are the requester, then you may <a href=\"%s\">sign in</a> to view the response."
msgstr ""
+"Mesazhi në largim është fshehur. Shih shënimet në \n"
+" »» »» »» për të kuptuar arsyen. Nëse ti je kërkuesi, atëherë ti mund të <a href=\"%s\">kyçesh</a> për të parë përgjigjen."
+
+#: app/views/request/_other_describe_state.rhtml:40
+#: app/views/request/_describe_state.rhtml:44
+msgid "This particular request is finished:"
+msgstr "Kjo kërkesë është përmbyllur:"
+
+#: app/views/user/show.rhtml:136
+msgid ""
+"This person has made no Freedom of Information requests using this site."
+msgstr ""
+"Ky person nuk ka bërë kërkesa për informata zyrtare duke përdorur këtë ueb "
+"faqe."
+
+#: app/views/user/show.rhtml:141
+msgid "This person's %d Freedom of Information request"
+msgid_plural "This person's %d Freedom of Information requests"
+msgstr[0] "%d kërkesë për informatë zyrtare të këtij personi"
+msgstr[1] "%d kërkesa për informata zyrtare të këtij personi"
-#: app/views/user/show.rhtml:122
-msgid "This person has"
-msgstr "Ky person ka"
+#: app/views/user/show.rhtml:169
+msgid "This person's %d annotation"
+msgid_plural "This person's %d annotations"
+msgstr[0] "%d shënim i këtij personi"
+msgstr[1] "%d shënime të këtij personi"
-#: app/views/user/show.rhtml:152
-msgid "This person's"
-msgstr "e këtij personi"
+#: app/views/user/show.rhtml:162
+msgid "This person's annotations"
+msgstr "Shënimet që i ka bërë ky person"
#: app/views/request/_describe_state.rhtml:84
msgid "This request <strong>requires administrator attention</strong>"
@@ -3071,12 +3579,16 @@ msgid ""
"This request has been set by an administrator to \"allow new responses from "
"nobody\""
msgstr ""
+"Për këtë kërkesë, administratori ka vendosur që të mos pranohet pergjigje "
+"nga askush"
#: app/views/request/show.rhtml:115
msgid ""
"This request has had an unusual response, and <strong>requires "
"attention</strong> from the {{site_name}} team."
msgstr ""
+"Kjo kërkesë ka pasë një përgjigje të pazakontë dhe <strong>kërkon \"\n"
+"\"vëmendje</strong> nga ekipi i {{site_name}}."
#: app/views/request/show.rhtml:5
msgid ""
@@ -3095,6 +3607,11 @@ msgstr ""
"ate. Të lutem <a href=\"%s\">na kontakto</a> nëse nuk je i sigurt pse kjo po"
" ndodhë."
+#: app/views/request/_other_describe_state.rhtml:10
+#: app/views/request/_describe_state.rhtml:7
+msgid "This request is still in progress:"
+msgstr "Kjo kërkesë është ende në përpunim:"
+
#: app/views/request/_hidden_correspondence.rhtml:10
msgid ""
"This response has been hidden. See annotations to find out why.\n"
@@ -3104,14 +3621,6 @@ msgstr ""
"kërkuesi, atëherë ti mund të <a href=\"%s\">kyçesh</a> për të parë "
"përgjigjen."
-#: app/views/request/new.rhtml:49
-msgid ""
-"This site is <strong>public</strong>. Everything you type and any response "
-"will be published."
-msgstr ""
-"Ky ueb sajt është <strong>publik.</strong>Kërkesat dhe pergjegjet do të jenë"
-" publike."
-
#: app/views/request/details.rhtml:6
msgid ""
"This table shows the technical details of the internal events that happened\n"
@@ -3119,34 +3628,42 @@ msgid ""
"the speed with which authorities respond to requests, the number of requests\n"
"which require a postal response and much more."
msgstr ""
+"Kjo tabelë paraqet detajet teknike rreth ndodhive të\n"
+"kësaj kërkese në {{site_name}}. Kjo mund të përdoret për të nxjerrë informata rreth\n"
+"shpejtësisë me të cilën autoritetet i përgjigjen kërkesave, numrit të kërkesave\n"
+"që kërkojne përgjigje postale dhe gjëra të tjera."
#: app/views/user/show.rhtml:79
msgid "This user has been banned from {{site_name}} "
-msgstr ""
+msgstr "Ky përdorues është përjashtuar nga {site_name}} "
#: app/views/user_mailer/changeemail_already_used.rhtml:5
msgid ""
"This was not possible because there is already an account using \n"
"the email address {{email}}."
msgstr ""
+"Kjo nuk ishte e mundur sepse egziston një llogari duke\n"
+"përdorur këtë adresë të emailit {{email}}."
-#: app/models/track_thing.rb:145
+#: app/models/track_thing.rb:218
msgid "To be emailed about any new requests"
-msgstr ""
+msgstr "Të marrësh email për cdo kërkesë të re"
-#: app/models/track_thing.rb:161
+#: app/models/track_thing.rb:234
msgid "To be emailed about any successful requests"
-msgstr ""
+msgstr "Të marrësh email për cdo kërkesë të suksesshme"
-#: app/models/track_thing.rb:196
+#: app/models/track_thing.rb:269
msgid "To be emailed about requests by '{{user_name}}'"
-msgstr ""
+msgstr "Të marrësh email për kërkesat e bëra nga '{{user_name}}'"
-#: app/models/track_thing.rb:180
+#: app/models/track_thing.rb:253
msgid ""
"To be emailed about requests made using {{site_name}} to the public "
"authority '{{public_body_name}}'"
msgstr ""
+"Të marrësh email për kërkesat e bëra duke përdorur '{{site_name}}' për "
+"autoritetin publik të quajur '{{public_body_name}}'"
#: app/controllers/track_controller.rb:173
msgid "To cancel these alerts"
@@ -3164,15 +3681,15 @@ msgstr ""
"Për të vazhduar, ti duhet të kyçesh ose të hapë një llogari. Për fat të keq,"
" ka pasur një problem teknik duke u përpjekur për të bërë këtë."
-#: app/controllers/user_controller.rb:248
+#: app/controllers/user_controller.rb:266
msgid "To change your email address used on {{site_name}}"
msgstr "Për të ndryshuar email adresën tënde të përdorur në {{site_name}}"
-#: app/controllers/request_controller.rb:337
+#: app/controllers/request_controller.rb:343
msgid "To classify the response to this FOI request"
msgstr "Për të klasifikuar përgjigjen e kësaj kërkese për informata zyrtare"
-#: app/views/request/show_response.rhtml:39
+#: app/views/request/show_response.rhtml:37
msgid "To do that please send a private email to "
msgstr "Për të bërë këtë të lutem dërgoni një email privat te"
@@ -3180,15 +3697,25 @@ msgstr "Për të bërë këtë të lutem dërgoni një email privat te"
msgid "To do this, first click on the link below."
msgstr "Për ta bërë këtë, së pari kliko në vegzën më poshtë."
-#: app/models/track_thing.rb:212
-msgid "To follow requests and responses matching '{{query}}'"
-msgstr ""
+#: app/controllers/request_controller.rb:773
+msgid "To download the zip file"
+msgstr "Për të shkarkuar zip fajllin"
+
+#: app/models/track_thing.rb:285
+msgid "To follow requests and responses matching your search"
+msgstr "Përcjell kërkesat dhe përgjigjet që përputhen me kërkimin e ruajtur"
+
+#: app/models/track_thing.rb:202
+msgid "To follow updates to the request '{{request_title}}'"
+msgstr "Për të përcjell aktualizimet e kërkesës '{{request_title}}'"
#: app/views/request_mailer/old_unclassified_updated.rhtml:1
msgid ""
"To help us keep the site tidy, someone else has updated the status of the \n"
"{{law_used_full}} request {{title}} that you made to {{public_body}}, to \"{{display_status}}\" If you disagree with their categorisation, please update the status again yourself to what you believe to be more accurate."
msgstr ""
+"Për të na ndihmuar mbajtjen e rregullt dhe të organizuar te ueb faqes, dikush tjetër e ka aktualizuar statusin e \n"
+"kërkesës {{title}} që keni bërë për të {{public_body}}, të \"{{display_status}}\" Nëse ti nuk pajtohesh me kategorizim e tyre, të lutem aktualizo statusin e kërkesës përsëri në atë që ti beson të jetë më e saktë."
#: app/views/request_mailer/new_response_reminder_alert.rhtml:1
msgid "To let us know, follow this link and then select the appropriate box."
@@ -3203,33 +3730,42 @@ msgstr "Për të luajtur në lojën e kategorizimit të kërkesave"
msgid "To post your annotation"
msgstr "Për të postuar shënimin tënd"
-#: app/controllers/request_controller.rb:543
+#: app/controllers/request_controller.rb:549
msgid "To reply to "
-msgstr "Për t'iu përgjegjur "
+msgstr "Për t'iu përgjigjur "
-#: app/controllers/request_controller.rb:542
+#: app/controllers/request_controller.rb:548
msgid "To send a follow up message to "
-msgstr ""
+msgstr "Për të dërguar mesazh vazhdues për "
-#: app/controllers/user_controller.rb:329
+#: app/controllers/user_controller.rb:347
msgid "To send a message to "
msgstr "Për të dërguar mesazh te "
-#: app/controllers/request_controller.rb:298
+#: app/controllers/request_controller.rb:31
+#: app/controllers/request_controller.rb:303
msgid "To send your FOI request"
msgstr "Për të dërguar kërkesën tënde për informata zyrtare"
-#: app/controllers/request_controller.rb:60
+#: app/controllers/request_controller.rb:81
msgid "To update the status of this FOI request"
msgstr "Për të aktualizuar statusin e kësaj kërkese për informata zyrtare"
-#: app/controllers/request_controller.rb:701
+#: app/controllers/request_controller.rb:712
msgid ""
"To upload a response, you must be logged in using an email address from "
msgstr ""
"Të ngarkoni një përgjigje, ti duhet të kyçesh duke përdorur një email adresë"
" nga "
+#: app/views/general/search.rhtml:24
+msgid ""
+"To use the advanced search, combine phrases and labels as described in the "
+"search tips below."
+msgstr ""
+"Për të përdorur kërkimin e avancuar, kombino fraza dhe etiketa siç "
+"përshkruhet në këshilla për kërkime që shihni më poshtë."
+
#: app/views/public_body/view_email_captcha.rhtml:5
msgid ""
"To view the email address that we use to send FOI requests to "
@@ -3246,39 +3782,46 @@ msgstr "Për të parë përgjigjen, kliko në vegzën më poshtë."
msgid "To {{public_body_link_absolute}}"
msgstr "Për {{public_body_link_absolute}}"
-#: app/views/request/followup_preview.rhtml:22 app/views/request/new.rhtml:88
-#: app/views/request/preview.rhtml:17
+#: app/views/request/preview.rhtml:17 app/views/request/new.rhtml:40
+#: app/views/request/followup_preview.rhtml:22
+#: app/views/request/simple_correspondence.rhtml:16
+#: app/views/request/simple_correspondence.rhtml:28
msgid "To:"
msgstr "Për:"
-#: app/models/track_thing.rb:174
-msgid "Track requests to {{public_body_name}} by email"
-msgstr "Përcjell kërkesat e bëra për {{public_body_name}} me email"
+#: app/views/general/_localised_datepicker.rhtml:7
+msgid "Today"
+msgstr "Sot"
-#: app/models/track_thing.rb:206
-msgid "Track things matching '{{query}}' by email"
-msgstr ""
+#: app/views/request/select_authority.rhtml:47
+#: app/views/public_body/_search_ahead.rhtml:3
+msgid "Top search results:"
+msgstr "Rezultatet e kërkimeve më të shpeshta:"
+
+#: app/models/track_thing.rb:247
+msgid "Track requests to {{public_body_name}} by email"
+msgstr "Përcjell me email kërkesat e bëra për {{public_body_name}} "
-#: app/views/public_body/show.rhtml:3
-msgid "Track this authority"
-msgstr "Përcjell këtë autoritet"
+#: app/models/track_thing.rb:279
+msgid "Track things matching this search by email"
+msgstr "Përcjell gjërat që përputhen me këtë kërkim me email"
#: app/views/user/show.rhtml:29
msgid "Track this person"
msgstr "Përcjell aktivitetin e këtij personi"
-#: app/models/track_thing.rb:190
+#: app/models/track_thing.rb:263
msgid "Track this person by email"
msgstr "Përcjell aktivitetin e këtij personi me email"
-#: app/views/request/_sidebar.rhtml:2
-msgid "Track this request"
-msgstr "Përcjell këtë kërkesë"
-
-#: app/models/track_thing.rb:123
+#: app/models/track_thing.rb:196
msgid "Track this request by email"
msgstr "Përcjell këtë kërkesë me email"
+#: app/views/general/search.rhtml:141
+msgid "Track this search"
+msgstr "Përcjell këtë kërkim"
+
#: locale/model_attributes.rb:33
msgid "TrackThing|Track medium"
msgstr "TrackThing |Track medium"
@@ -3291,13 +3834,17 @@ msgstr "TrackThing|Track query"
msgid "TrackThing|Track type"
msgstr "TrackThing |Track type"
-#: app/views/general/search.rhtml:133
+#: app/views/request/_sidebar.rhtml:13
+msgid "Tweet this request"
+msgstr "Tweeto këtë kërkesë"
+
+#: app/views/general/_advanced_search_tips.rhtml:15
msgid ""
"Type <strong><code>01/01/2008..14/01/2008</code></strong> to only show "
"things that happened in the first two weeks of January."
msgstr ""
-"Tipi<code><strong>01/01/2008..14/01/2008</strong></code>është për të treguar"
-" vetëm gjëra që kanë ndodhur në dy javët e para të janarit."
+"Tipi <code><strong>01/01/2008..14/01/2008</strong></code> është për të "
+"treguar vetëm gjëra që kanë ndodhur në dy javët e para të janarit."
#: app/models/public_body.rb:37
msgid "URL name can't be blank"
@@ -3305,7 +3852,7 @@ msgstr "URL emri nuk mund të jetë i zbrazët"
#: app/models/user_mailer.rb:45
msgid "Unable to change email address on {{site_name}}"
-msgstr ""
+msgstr "E pamundur për të ndryshuar email adresën në {{site_name}}"
#: app/views/request/followup_bad.rhtml:4
msgid "Unable to send a reply to {{username}}"
@@ -3315,7 +3862,7 @@ msgstr "Nuk munda të dërgoj përgjigje te {{username}}"
msgid "Unable to send follow up message to {{username}}"
msgstr "Nuk munda të dërgoj një përcjellje te {{username}}"
-#: app/views/request/list.rhtml:29
+#: app/views/request/list.rhtml:27
msgid "Unexpected search result type"
msgstr "Lloji i papritur i rezultatit të kërkuar"
@@ -3341,91 +3888,95 @@ msgstr ""
"Për fat të keq, ne nuk kemi një adresë funksionale "
"{{info_request_law_used_full}} për"
-#: app/views/general/exception_caught.rhtml:17
+#: lib/world_foi_websites.rb:5
+msgid "United Kingdom"
+msgstr "Mbretëria e Bashkuar"
+
+#: lib/world_foi_websites.rb:17
+msgid "United States of America"
+msgstr "Shtetet e Bashkuara të Amerikës"
+
+#: app/views/general/exception_caught.rhtml:22
msgid "Unknown"
msgstr "I/e panjohur"
-#: app/models/info_request_event.rb:317
-msgid "Unusual response"
-msgstr "përgjigje e pazakonshme"
-
-#: app/models/info_request.rb:807
+#: app/models/info_request.rb:809
msgid "Unusual response."
msgstr "përgjigje e pazakonshme."
#: app/views/request/_after_actions.rhtml:13
-#: app/views/request/_after_actions.rhtml:33
+#: app/views/request/_after_actions.rhtml:35
msgid "Update the status of this request"
msgstr "Aktualizo statusin e kësaj kërkese"
-#: app/controllers/request_controller.rb:62
+#: app/controllers/request_controller.rb:83
msgid "Update the status of your request to "
msgstr "Aktualizo statusin e kërkesës tënde për "
-#: app/views/general/search.rhtml:124
+#: app/views/general/_advanced_search_tips.rhtml:6
msgid ""
"Use OR (in capital letters) where you don't mind which word, e.g. "
"<strong><code>commons OR lords</code></strong>"
msgstr ""
-"Përdor OSE (me shkronja të mëdha), ku ju nuk jeni në dijeni për cilat fjalë "
-"bëhet fjalë, p.sh. <code><strong>të përbashkëta ose të "
-"mdhaja</strong></code>"
+"Përdor OSE (me shkronja të mëdha), kur ti nuk je në dijeni për cilat fjalë "
+"bëhet fjalë, p.sh. <code><strong>të përbashkëta ose të "
+"mëdhaja</strong></code>"
-#: app/views/general/search.rhtml:125
+#: app/views/general/_advanced_search_tips.rhtml:7
msgid ""
"Use quotes when you want to find an exact phrase, e.g. "
"<strong><code>\"Liverpool City Council\"</code></strong>"
msgstr ""
-"Përdor thonjëzat (\" \") kur ti dëshiron të gjeshë një fjalë ekzakte, "
-"p.sh.<code><strong>\"Ministria e Arsimit\"</strong></code>"
+"Përdor thonjëzat (\" \") kur ti dëshiron të gjeshë një fjalë ekzakte, p.sh. "
+"<code><strong>\"Ministria e Arsimit\"</strong></code>"
-#: locale/model_attributes.rb:67
+#: locale/model_attributes.rb:70
msgid "UserInfoRequestSentAlert|Alert type"
msgstr "UserInfoRequestSentAlert|Alert type"
-#: locale/model_attributes.rb:78
+#: locale/model_attributes.rb:81
msgid "User|About me"
msgstr "Përdoruesi |Rreth meje"
-#: locale/model_attributes.rb:76
+#: locale/model_attributes.rb:79
msgid "User|Admin level"
msgstr "Përdoruesi | Niveli i Administrimit"
-#: locale/model_attributes.rb:77
+#: locale/model_attributes.rb:80
msgid "User|Ban text"
msgstr "Përdoruesi |Tekst i ndaluar"
-#: locale/model_attributes.rb:69
+#: locale/model_attributes.rb:72
msgid "User|Email"
msgstr "Përdoruesi |Email"
-#: locale/model_attributes.rb:73
+#: locale/model_attributes.rb:76
msgid "User|Email confirmed"
msgstr "Përdoruesi|Emaili u konfirmua"
-#: locale/model_attributes.rb:71
+#: locale/model_attributes.rb:74
msgid "User|Hashed password"
msgstr "User|Hashed password"
-#: locale/model_attributes.rb:75
+#: locale/model_attributes.rb:78
msgid "User|Last daily track email"
msgstr "User|Last daily track email"
-#: locale/model_attributes.rb:70
+#: locale/model_attributes.rb:73
msgid "User|Name"
msgstr "Përdoruesi|Emri"
-#: locale/model_attributes.rb:72
+#: locale/model_attributes.rb:75
msgid "User|Salt"
msgstr "User|Salt"
-#: locale/model_attributes.rb:74
+#: locale/model_attributes.rb:77
msgid "User|Url name"
msgstr "Përdoruesi | Emri Url"
-#: app/views/public_body/show.rhtml:21
+#: app/views/public_body/show.rhtml:26
msgid "View FOI email address"
-msgstr "Shiko adresën e emailit për Informatë Zyrtare"
+msgstr "Shiko adresën e emailit për Informata Zyrtare"
#: app/views/public_body/view_email_captcha.rhtml:1
msgid "View FOI email address for '{{public_body_name}}'"
@@ -3438,9 +3989,13 @@ msgstr "Shiko adresën e emailit për Informatë Zyrtare {{public_body_name}}"
#: app/views/contact_mailer/user_message.rhtml:10
msgid "View Freedom of Information requests made by {{user_name}}:"
-msgstr ""
+msgstr "Shiko kërkesat për informata zyrtare të bëra nga {{user_name}}: "
+
+#: app/controllers/request_controller.rb:155
+msgid "View and search requests"
+msgstr "Shiko dhe kërko kërkesat"
-#: app/views/layouts/default.rhtml:89
+#: app/views/general/_topnav.rhtml:6
msgid "View authorities"
msgstr "Shiko autoritetet"
@@ -3448,11 +4003,11 @@ msgstr "Shiko autoritetet"
msgid "View email"
msgstr "Shiko adresën e emailit"
-#: app/views/layouts/default.rhtml:88
+#: app/views/general/_topnav.rhtml:5
msgid "View requests"
msgstr "Shiko kërkesat"
-#: app/models/info_request.rb:799
+#: app/models/info_request.rb:801
msgid "Waiting clarification."
msgstr "Duke pritur sqarim."
@@ -3464,14 +4019,20 @@ msgstr ""
"Duke pritur për <strong>rishqyrtim intern</strong> nga {{public_body_link}} "
"për trajtimin e kësaj kërkese."
-#: app/views/general/search.rhtml:149
+#: app/views/general/_advanced_search_tips.rhtml:33
msgid ""
"Waiting for the public authority to complete an internal review of their "
"handling of the request"
msgstr ""
+"Duke pritur që autoriteti publik të përfundoj rishikimin intern të trajtimit"
+" të tyre të kërkesës në fjalë"
-#: app/views/general/search.rhtml:142
+#: app/views/general/_advanced_search_tips.rhtml:26
msgid "Waiting for the public authority to reply"
+msgstr "Duke pritur që autoriteti publik të përgjigjet"
+
+#: app/models/request_mailer.rb:125
+msgid "Was the response you got to your FOI request any good?"
msgstr ""
#: app/views/public_body/view_email.rhtml:17
@@ -3482,7 +4043,7 @@ msgstr ""
#: app/views/request/followup_bad.rhtml:24
msgid ""
"We do not have a working {{law_used_full}} address for {{public_body_name}}."
-msgstr "Ne nuk kemi {{law_used_full}} adresë për {public_body_name}}."
+msgstr "Ne nuk kemi adresë për {public_body_name}}."
#: app/views/request/_describe_state.rhtml:107
msgid ""
@@ -3491,6 +4052,10 @@ msgid ""
" &ndash;\n"
"\tif you are {{user_link}} please <a href=\"{{url}}\">sign in</a> and let everyone know."
msgstr ""
+"Ne nuk e dimë nëse përgjigja e fundit në këtë kërkesë përmban\n"
+" informata apo jo\n"
+" &ndash;\n"
+" nëse ti je {{user_link}}, të lutem <a href=\"{{url}}\">kyçu </a> dhe bëje këtë të ditur për të tjerët."
#: app/views/user_mailer/confirm_login.rhtml:8
msgid ""
@@ -3500,17 +4065,25 @@ msgstr ""
"Ne nuk do ta zbulojmë adresën e emailit tënd askujt, përveç nëse ju e lejoni"
" këtë."
+#: app/views/user/_signup.rhtml:13
+msgid ""
+"We will not reveal your email address to anybody unless you or\n"
+" the law tell us to (<a href=\"%s\">details</a>). "
+msgstr ""
+"Ne nuk do t'ja zbulojmë adresën e emailit tënd askujt, përveç nëse ti\n"
+" e lejon këtë. (<a href=\"%s\">detajet</a>). "
+
#: app/views/user_mailer/changeemail_confirm.rhtml:10
msgid ""
"We will not reveal your email addresses to anybody unless you\n"
"or the law tell us to."
msgstr ""
-"Ne nuk do ta zbulojmë adresën e emailit tënd askujt, përveç nëse ju e lejoni"
-" këtë."
+"Ne nuk do t'ja zbulojmë adresën e emailit tënd askujt, përveç nëse ti e "
+"lejon këtë."
#: app/views/request/show.rhtml:61
msgid "We're waiting for"
-msgstr "Po presim për"
+msgstr "Po presim që"
#: app/views/request/show.rhtml:57
msgid "We're waiting for someone to read"
@@ -3540,7 +4113,7 @@ msgstr ""
"Ne të kemi dërguar një email, kliko në vegzën në te që të mund të ndryshon "
"fjalëkalimin tënd."
-#: app/views/request/_followup.rhtml:58
+#: app/views/request/_followup.rhtml:85
msgid "What are you doing?"
msgstr "Çfarë je duke bërë?"
@@ -3548,15 +4121,19 @@ msgstr "Çfarë je duke bërë?"
msgid "What best describes the status of this request now?"
msgstr "Çfarë përshkruan më së miri statusin e kësaj kërkese tani?"
+#: app/views/general/frontpage.rhtml:54
+msgid "What information has been released?"
+msgstr "Çfrarë informata janë publikuar?"
+
#: app/views/request_mailer/new_response.rhtml:9
msgid ""
"When you get there, please update the status to say if the response \n"
"contains any useful information."
msgstr ""
-"Kur të gjendesh atje, të lutem aktualizo statusin e kërkesës që të tregosh nëse pergjegja ka \n"
+"Kur të gjendesh atje, të lutem aktualizo statusin e kërkesës që të tregosh nëse pergjigja ka \n"
"informata të dobishme."
-#: app/views/request/show_response.rhtml:44
+#: app/views/request/show_response.rhtml:42
msgid ""
"When you receive the paper response, please help\n"
" others find out what it says:"
@@ -3576,62 +4153,72 @@ msgstr ""
msgid "Which of these is happening?"
msgstr "Cila nga këto po ndodh?"
-#: app/models/info_request_event.rb:313
-msgid "Withdrawn by requester"
-msgstr "E tërhequr nga kërkuesi"
+#: app/views/general/frontpage.rhtml:37
+msgid "Who can I request information from?"
+msgstr "Nga kush mund të kërkoj informata?"
-#: app/models/info_request.rb:809
+#: app/models/info_request.rb:811
msgid "Withdrawn by the requester."
msgstr "E tërhequr nga kërkuesi."
-#: app/controllers/request_controller.rb:549
+#: app/views/general/_localised_datepicker.rhtml:13
+msgid "Wk"
+msgstr "Java"
+
+#: app/views/help/alaveteli.rhtml:6
+msgid "Would you like to see a website like this in your country?"
+msgstr "A dëshiron të shohësh një ueb faqe si kjo në shtetin tënd?"
+
+#: app/views/request/_after_actions.rhtml:30
+msgid "Write a reply"
+msgstr "Shkruaj një përgjigje"
+
+#: app/controllers/request_controller.rb:555
msgid "Write a reply to "
msgstr "Shkruaj një përgjigje për "
-#: app/controllers/request_controller.rb:548
+#: app/controllers/request_controller.rb:554
msgid "Write your FOI follow up message to "
-msgstr ""
+msgstr "Shkruaj mesazhin tënd vazhdues të kërkesës për informata zyrtare për "
-#: app/views/request/new.rhtml:46
+#: app/views/request/new.rhtml:104
msgid "Write your request in <strong>simple, precise language</strong>."
msgstr ""
"Shkruaje kërkesën tënde me <strong>gjuhë të thjeshtë, dhe të saktë</strong>."
-#: app/models/info_request_event.rb:301
-msgid "Wrong Response"
-msgstr "përgjigje e gabuar."
-
#: app/views/comment/_single_comment.rhtml:10
msgid "You"
msgstr "Ti"
#: app/controllers/track_controller.rb:98
msgid "You are already being emailed updates about "
-msgstr ""
+msgstr "Ti tashmë je duke i pranuar me email aktualizimet në lidhje me "
-#: app/models/track_thing.rb:175
+#: app/models/track_thing.rb:248
msgid "You are already tracking requests to {{public_body_name}} by email"
msgstr ""
+"Ti tashmë je duke i përcjell kërkesat për {{public_body_name}} me email"
-#: app/models/track_thing.rb:207
-msgid "You are already tracking things matching '{{query}}' by email"
+#: app/models/track_thing.rb:280
+msgid "You are already tracking things matching this search by email"
msgstr ""
+"Ti tashmë je duke i përcjell me email gjërat që përputhen me këtë kërkim"
-#: app/models/track_thing.rb:191
+#: app/models/track_thing.rb:264
msgid "You are already tracking this person by email"
-msgstr ""
+msgstr "Ti tashmë je duke e përcjell këtë person me email"
-#: app/models/track_thing.rb:124
+#: app/models/track_thing.rb:197
msgid "You are already tracking this request by email"
-msgstr ""
+msgstr "Ti tashmë je duke e përcjell këtë kërkesë me email"
-#: app/models/track_thing.rb:156
+#: app/models/track_thing.rb:229
msgid "You are being emailed about any new successful responses"
msgstr "Ti je duke pranuar me email çdo përgjigje të re të suksesshme"
-#: app/models/track_thing.rb:140
+#: app/models/track_thing.rb:213
msgid "You are being emailed when there are new requests"
-msgstr ""
+msgstr "Ti tashmë je duke marrë email njoftues, sa herë që ka kërkesa të reja"
#: app/views/request/show.rhtml:88
msgid "You can <strong>complain</strong> by"
@@ -3642,27 +4229,37 @@ msgid ""
"You can get this page in computer-readable format as part of the main JSON\n"
"page for the request. See the <a href=\"{{api_path}}\">API documentation</a>."
msgstr ""
+"Ti mund ta merrësh këtë faqe në format të lexueshëm për kompjuter (computer readable) - JSON si\n"
+"pjesë e faqës kryesore për kërkesën. Shih <a href=\"{{api_path}}\">API dokumentacionin</a>."
-#: app/views/public_body/show.rhtml:40
+#: app/views/public_body/show.rhtml:46
msgid ""
"You can only request information about the environment from this authority."
msgstr ""
-"Ju vetëm mund të kërkoni informacione në lidhje me mjedisin nga ky "
-"autoritet."
-
-#: app/views/user/show.rhtml:122
-msgid "You have"
-msgstr "Ti ke"
+"Ti vetëm mund të kërkon informacione në lidhje me mjedisin nga ky autoritet."
#: app/views/request_mailer/new_response.rhtml:1
msgid "You have a new response to the {{law_used_full}} request "
-msgstr "Ti ke një përgjigje të re për kërkesën {{law_used_full}}"
+msgstr "Ti ke një përgjigje të re për kërkesën "
-#: app/controllers/user_controller.rb:492
-msgid "You have now changed the text about you on your profile."
+#: app/views/general/exception_caught.rhtml:18
+msgid ""
+"You have found a bug. Please <a href=\"{{contact_url}}\">contact us</a> to "
+"tell us about the problem"
msgstr ""
+"Ti e ke gjetë një lëshim teknik (bug). Të lutem <a "
+"href=\"{{contact_url}}\"> na kontakto</a> për të na lajmruar për problemin\""
+
+#: app/views/user/show.rhtml:136
+msgid "You have made no Freedom of Information requests using this site."
+msgstr ""
+"Nuk ke bërë kërkesa për informata zyrtare duke përdorur këtë ueb faqe."
+
+#: app/controllers/user_controller.rb:510
+msgid "You have now changed the text about you on your profile."
+msgstr "Ju keni ndryshuar tani tekstin për ju në profilin tuaj."
-#: app/controllers/user_controller.rb:310
+#: app/controllers/user_controller.rb:328
msgid "You have now changed your email address used on {{site_name}}"
msgstr ""
"Tash ke ndryshuar adresën tënde të emailit që përdoret në {{site_name}}"
@@ -3675,12 +4272,18 @@ msgid ""
"\n"
"Please click on the link below."
msgstr ""
+"Ke tentuar të regjistrohesh në {{site_name}}, kur ti\n"
+"veçse je i regjistruar. Emri dhe fjalëkalimi kanë mbetur si kanë qenë më parë. \n"
+"\n"
+"Të lutem kliko në vegzën e mëposhtme."
-#: app/views/comment/new.rhtml:59
+#: app/views/comment/new.rhtml:60
msgid ""
"You know what caused the error, and can <strong>suggest a solution</strong>,"
" such as a working email address."
msgstr ""
+"Ti e di se çfarë e shkaktoi gabim, dhe mund të <strong>sugjerosh një "
+"zgjidhje,</strong>p.sh. email adresë funksionale të autoritetit."
#: app/views/request/upload_response.rhtml:16
msgid ""
@@ -3704,42 +4307,48 @@ msgstr ""
msgid ""
"You may be able to find\n"
"one on their website, or by phoning them up and asking. If you manage\n"
-"to find one, then please <a href=\"%s\">send it to us</a>."
+"to find one, then please <a href=\"{{help_url}}\">send it to us</a>."
msgstr ""
-"Ti ke mundësi të gjejsh atë\n"
-"në ueb sajtin e tyre, ose duke iu telefonuar. Nëse keni arritur të gjeni adresën,\n"
-"atëherë të lutem <a href=\"%s\">na e dërgo të njejtën</a>."
+"Ti ke mundësi ta gjesh atë \n"
+"në ueb sajtin e tyre, ose duke iu telefonuar. Nëse ke arritur\n"
+"ta gjenë adresën, atëherë të lutem <a href=\"{{help_url}}\">na e dërgo të njejtën</a>."
-#: app/controllers/user_controller.rb:470
+#: app/controllers/user_controller.rb:488
msgid "You need to be logged in to change the text about you on your profile."
msgstr ""
+"Duhet të jesh i kyçur për të ndryshuar tekstin për vetën tënde në profil."
-#: app/controllers/user_controller.rb:371
+#: app/controllers/user_controller.rb:389
msgid "You need to be logged in to change your profile photo."
msgstr "Ti duhet të jesh i kyçur që të ndryshosh fotografinë e profilit tënd."
-#: app/controllers/user_controller.rb:433
+#: app/controllers/user_controller.rb:451
msgid "You need to be logged in to clear your profile photo."
msgstr ""
"Ti duhet të jesh i kyçur për të larguar (fshirë) fotografinë e profilit "
"tënd."
-#: app/controllers/request_controller.rb:559
+#: app/controllers/request_controller.rb:565
msgid ""
"You previously submitted that exact follow up message for this request."
-msgstr ""
+msgstr "Më parë ke dërguar të njejtin mesazh vazhdues për këtë kërkesë."
#: app/views/request/upload_response.rhtml:13
msgid ""
"You should have received a copy of the request by email, and you can respond\n"
"by <strong>simply replying</strong> to that email. For your convenience, here is the address:"
msgstr ""
+"Ti duhet të kesh marrë një kopje të kërkesës me e-mail, dhe mund të "
+"përgjigjesh duke <strong>u përgjigjur (reply)</strong> në atë email. Për "
+"komoditetin tënd, kjo është adresa:"
-#: app/views/request/show_response.rhtml:36
+#: app/views/request/show_response.rhtml:34
msgid ""
"You want to <strong>give your postal address</strong> to the authority in "
"private."
msgstr ""
+"Ti dëshiron t'ja <strong>jep adresën tënde postale </strong> autoritetit ne "
+"menyrë private"
#: app/views/user/banned.rhtml:9
msgid ""
@@ -3748,18 +4357,20 @@ msgid ""
"up\n"
"email alerts."
msgstr ""
+"Ti nuk do të mund të bësh kërkesa të reja, të dërgon mesazhe vazhduese, të shtosh shënime ose \n"
+"të dërgon mesazhe tek përdoruesit tjerë. Ti mund të vazhdosh ti shiqosh kërkesat tjera, dhe të vendosësh njoftimet me email."
#: app/controllers/track_controller.rb:154
msgid "You will no longer be emailed updates about "
-msgstr ""
+msgstr "Ti nuk do të merr më aktualizime me email për "
#: app/controllers/track_controller.rb:183
msgid "You will no longer be emailed updates for those alerts"
-msgstr "Ti nuk të merr më aktualizime me email për këto njoftime "
+msgstr "Ti nuk do të merr më aktualizime me email për këto njoftime "
#: app/controllers/track_controller.rb:111
msgid "You will now be emailed updates about "
-msgstr ""
+msgstr "Tani do të merr aktualizime me email për "
#: app/views/request_mailer/not_clarified_alert.rhtml:6
msgid ""
@@ -3768,13 +4379,25 @@ msgid ""
msgstr ""
"Ti do të merr përgjigje në kërkesën tënde vetëm në qoftë se e sqaroni atë."
-#: app/controllers/user_controller.rb:442
+#: app/models/request_mailer.rb:105
+msgid "You're long overdue a response to your FOI request - "
+msgstr ""
+
+#: app/controllers/user_controller.rb:460
msgid "You've now cleared your profile photo"
msgstr "Ke pastruar fotografinë e profilit tënd"
-#: app/views/user/show.rhtml:152
-msgid "Your "
-msgstr ""
+#: app/views/user/show.rhtml:141
+msgid "Your %d Freedom of Information request"
+msgid_plural "Your %d Freedom of Information requests"
+msgstr[0] "%d kërkesë e yte për informatë zyrtare"
+msgstr[1] "%d kërkesa tua për informata zyrtare"
+
+#: app/views/user/show.rhtml:169
+msgid "Your %d annotation"
+msgid_plural "Your %d annotations"
+msgstr[0] "%d shënim i yti"
+msgstr[1] "%d shënimet e tua"
#: app/views/user/_signup.rhtml:22
msgid ""
@@ -3784,34 +4407,48 @@ msgid ""
" are thinking of using a pseudonym, please \n"
" <a href=\"%s\">read this first</a>."
msgstr ""
+"<strong>Emri yt do të shfaqet publikisht </strong>\n"
+" (<a href=\"%s\">pse?</a>)\n"
+" në këtë ueb faqe dhe në këruesit e internetit (p.sh. Google). \n"
+" Nëse mendon ta përdorësh një pseudonim, të lutem\n"
+" <a href=\"%s\">së pari lexoje këtë</a>."
+
+#: app/views/user/show.rhtml:162
+msgid "Your annotations"
+msgstr "Shënimet tua"
#: app/views/contact_mailer/user_message.rhtml:3
msgid ""
"Your details have not been given to anyone, unless you choose to reply to this\n"
"message, which will then go directly to the person who wrote the message."
msgstr ""
+"Të dhënat tuaja nuk iu kanë dhënë askujt, përveç nëse ju vendos të përgjigjesh në këtë\n"
+"mesazh, i cili pastaj do të shkon direkt tek personi i cili shkroi mesazhin."
-#: app/views/user/_signin.rhtml:11 app/views/user/_signup.rhtml:9
#: app/views/user/signchangepassword_send_confirm.rhtml:13
+#: app/views/user/_signup.rhtml:9 app/views/user/_signin.rhtml:11
msgid "Your e-mail:"
-msgstr "Adresa e emailit tënd:"
+msgstr "Emaili yt:"
-#: app/views/user/show.rhtml:168
+#: app/views/user/show.rhtml:184
msgid "Your email subscriptions"
msgstr "Email abonimet e tua"
-#: app/controllers/request_controller.rb:556
+#: app/controllers/request_controller.rb:562
msgid ""
"Your follow up has not been sent because this request has been stopped to "
"prevent spam. Please <a href=\"%s\">contact us</a> if you really want to "
"send a follow up message."
msgstr ""
+"Mesazhi yt vazhdues nuk është dërguar përshkak se kërkesa ështe stopuar për "
+"të parandaluar spam emailat. Të lutem <a href=\"%s\">na kontakto</a> nëse "
+"vërtet dëshiron të dërgosh mesazh vazhdues."
-#: app/controllers/request_controller.rb:584
+#: app/controllers/request_controller.rb:590
msgid "Your follow up message has been sent on its way."
-msgstr ""
+msgstr "Mesazhi yt vazhdues është derguar."
-#: app/controllers/request_controller.rb:582
+#: app/controllers/request_controller.rb:588
msgid "Your internal review request has been sent on its way."
msgstr "Kërkesa për rishqyrtim intern është dërguar."
@@ -3823,7 +4460,7 @@ msgstr ""
"Mesazhi yt u dërgua. Faleminderit që na kontaktuat! Ne do t'ju përgjigjemi "
"së shpejti."
-#: app/controllers/user_controller.rb:349
+#: app/controllers/user_controller.rb:367
msgid "Your message to {{recipient_user_name}} has been sent!"
msgstr "Mesazhi yt për {{recipient_user_name}} është dërguar!"
@@ -3845,8 +4482,8 @@ msgid ""
"Your name, request and any responses will appear in <strong>search engines</strong>\n"
" (<a href=\"%s\">details</a>)."
msgstr ""
-"Emrin yt, kërkesa dhe çdo përgjigje do të shfaqen në <strong>kërkuesit e "
-"internetit (p.sh. Google)</strong> ( <a href=\"%s\">detaje</a> )."
+"Emri yt, kërkesa dhe çdo përgjigje që do të mirret, do të shfaqen në\n"
+"<strong>kërkuesit e internetit (p.sh. Google)</strong> (<a href=\"%s\">detajet</a>)."
#: app/views/user/_signup.rhtml:18
msgid "Your name:"
@@ -3856,7 +4493,7 @@ msgstr "Emri yt:"
msgid "Your original message is attached."
msgstr "Mesazhi yt origjinal është i bashkangjitur."
-#: app/controllers/user_controller.rb:231
+#: app/controllers/user_controller.rb:249
msgid "Your password has been changed."
msgstr "Fjalëkalimi yt është ndryshuar."
@@ -3869,6 +4506,8 @@ msgid ""
"Your photo will be shown in public <strong>on the Internet</strong>, \n"
" wherever you do something on {{site_name}}."
msgstr ""
+"Fotografia yte do të shfaqet në publikisht <strong>në internet</strong>,\n"
+" kurdo që të bëni diçka në {{site_name}}."
#: app/views/request_mailer/new_response_reminder_alert.rhtml:5
msgid ""
@@ -3878,7 +4517,7 @@ msgstr ""
"Kërkesa yte qe emëruar {{info_request}}. Nëse i lejoni të tjerër ta dijnë a "
"i keni marrë informatat në pergjigje, do të na mundësoni ta mbikqyrim "
-#: app/views/request/new.rhtml:109
+#: app/views/request/new.rhtml:113
msgid "Your request:"
msgstr "Kërkesa yte:"
@@ -3887,28 +4526,30 @@ msgid ""
"Your response will <strong>appear on the Internet</strong>, <a "
"href=\"%s\">read why</a> and answers to other questions."
msgstr ""
-"Përgjegja yte do të <strong>shfaqet në internet,</strong> <a "
+"Përgjigja yte do të <strong>shfaqet në internet,</strong> <a "
"href=\"%s\">lexoni pse</a> dhe përgjigjet për pyetje të tjera."
-#: app/views/comment/new.rhtml:62
+#: app/views/comment/new.rhtml:63
msgid ""
"Your thoughts on what the {{site_name}} <strong>administrators</strong> "
"should do about the request."
msgstr ""
+"Mendimet tua se çfare duhet <strong>administratorët e</strong> \n"
+"{{site_name}} të bëjnë me kërkesën."
#: app/models/track_mailer.rb:25
msgid "Your {{site_name}} email alert"
-msgstr ""
+msgstr "Njoftimet tuaja me email në {{site_name}}"
-#: app/models/outgoing_message.rb:69
+#: app/models/outgoing_message.rb:70
msgid "Yours faithfully,"
msgstr "Me nderime,"
-#: app/models/outgoing_message.rb:67
+#: app/models/outgoing_message.rb:68
msgid "Yours sincerely,"
msgstr "Sinqerisht,"
-#: app/views/request/new.rhtml:97
+#: app/views/request/new.rhtml:88
msgid ""
"a one line summary of the information you are requesting, \n"
"\t\t\te.g."
@@ -3916,23 +4557,30 @@ msgstr ""
"një përmbledhje në një rresht të informacionit që ti kërkon,\n"
"»» »p.sh."
-#: app/views/public_body/show.rhtml:31
+#: app/views/public_body/show.rhtml:37
msgid "admin"
msgstr "admin"
-#: app/views/public_body/show.rhtml:29
+#: app/views/request/_request_filter_form.rhtml:30
+msgid "all requests"
+msgstr "të gjitha kërkesat"
+
+#: app/views/public_body/show.rhtml:35
msgid "also called {{public_body_short_name}}"
msgstr "i quajtur edhe {{public_body_short_name}}"
-#: app/views/user/wrong_user.rhtml:5
-msgid "and sign in as "
-msgstr "dhe kyçu si"
+#: app/views/request/_request_filter_form.rhtml:25
+#: app/views/general/search.rhtml:114
+msgid "and"
+msgstr "dhe"
#: app/views/request/show.rhtml:59
msgid ""
"and update the status accordingly. Perhaps <strong>you</strong> might like "
"to help out by doing that?"
msgstr ""
+"dhe aktualizo statusin në përputhje me rrethanat. Ndoshta "
+"<strong>ti</strong> mund të ndihmosh duke vepruar kështu?"
#: app/views/request/show.rhtml:64
msgid "and update the status."
@@ -3942,39 +4590,51 @@ msgstr "dhe aktualizo statusin."
msgid "and we'll suggest <strong>what to do next</strong>"
msgstr "dhe ne do të sugjerojmë <strong>çfarë të bëjë pastaj</strong>"
-#: app/views/user/show.rhtml:153
-msgid "annotation"
-msgstr "shënim"
+#: app/views/general/frontpage.rhtml:60
+msgid "answered a request about"
+msgstr "i'u përgjigj kërkesës në lidhje me"
-#: app/views/user/show.rhtml:147
-msgid "annotations"
-msgstr "shënimet"
-
-#: app/models/track_thing.rb:138
+#: app/models/track_thing.rb:211
msgid "any <a href=\"/list\">new requests</a>"
-msgstr ""
+msgstr "any <a href=\"/list\">new requests</a>"
-#: app/models/track_thing.rb:154
+#: app/models/track_thing.rb:227
msgid "any <a href=\"/list/successful\">successful requests</a>"
-msgstr ""
+msgstr "ndonjë <a href=\"/list/successful\">kërkesë e re</a>"
+
+#: app/models/track_thing.rb:116
+msgid "anything"
+msgstr "çkado"
#: app/views/request_mailer/very_overdue_alert.rhtml:1
msgid "are long overdue."
msgstr "janë vonuar së tepërmi."
-#: app/controllers/public_body_controller.rb:111
+#: app/models/track_thing.rb:89 app/views/general/search.rhtml:55
+msgid "authorities"
+msgstr "autoritetet"
+
+#: app/models/track_thing.rb:104
+msgid "awaiting a response"
+msgstr "në pritje të një përgjigje"
+
+#: app/controllers/public_body_controller.rb:123
msgid "beginning with"
msgstr "duke filluar me"
+#: app/models/track_thing.rb:95
+msgid "between two dates"
+msgstr "në mes të dy datave"
+
#: app/views/request/show.rhtml:82
msgid "by"
msgstr "nga"
-#: app/views/request/_followup.rhtml:38
+#: app/views/request/_followup.rhtml:65
msgid "by <strong>{{date}}</strong>"
msgstr "nga <strong>{{date}}</strong>"
-#: app/views/request/_request_listing_via_event.rhtml:34
+#: app/views/request/_request_listing_via_event.rhtml:26
msgid "by {{public_body_name}} to {{info_request_user}} on {{date}}."
msgstr "nga {{public_body_name}} për {{info_request_user}} me {{date}}."
@@ -3990,30 +4650,34 @@ msgstr "censor rregulli"
msgid "comment"
msgstr "komenti"
-#: app/views/request/show_response.rhtml:41
+#: app/models/track_thing.rb:86
+#: app/views/request/_request_filter_form.rhtml:14
+#: app/views/general/search.rhtml:103
+msgid "comments"
+msgstr "komentet"
+
+#: app/views/request/show_response.rhtml:39
msgid ""
"containing your postal address, and asking them to reply to this request.\n"
" Or you could phone them."
msgstr ""
+"që përmban adresën tënde postale, dhe duke u kërkuar atyre të përgjigjen në këtë kërkesë. \n"
+" Ose ju mund t'iu telefononi atyre."
-#: app/models/info_request_event.rb:338
+#: app/models/info_request_event.rb:323
msgid "display_status only works for incoming and outgoing messages right now"
msgstr ""
"display_status tani për tani punon vetëm për mesazhet hyrëse dhe dalëse"
#: app/views/request_mailer/overdue_alert.rhtml:3
msgid "during term time"
-msgstr ""
-
-#: app/views/general/frontpage.rhtml:18
-msgid "e.g."
-msgstr "p.sh."
+msgstr "gjatë gjysmëvjetorit"
#: app/views/user/show.rhtml:96
msgid "edit text about you"
msgstr "edito tekstin në lidhje me ty"
-#: app/views/user/show.rhtml:171
+#: app/views/user/show.rhtml:187
msgid "email subscription"
msgstr "abonimet me email"
@@ -4021,11 +4685,15 @@ msgstr "abonimet me email"
msgid "even during holidays"
msgstr "madje edhe gjatë pushimeve"
+#: app/views/general/search.rhtml:56
+msgid "everything"
+msgstr "gjithçka"
+
#: locale/model_attributes.rb:17
msgid "exim log"
msgstr "exim log"
-#: locale/model_attributes.rb:59
+#: locale/model_attributes.rb:57
msgid "exim log done"
msgstr "exim log done"
@@ -4037,24 +4705,20 @@ msgstr "ka raportuar një"
msgid "have delayed."
msgstr "kanë vonuar."
-#: locale/model_attributes.rb:56
+#: locale/model_attributes.rb:54
msgid "holiday"
msgstr "festë"
-#: app/views/request/_followup.rhtml:36 app/views/request/show.rhtml:70
+#: app/views/request/_followup.rhtml:63 app/views/request/show.rhtml:70
#: app/views/request/show.rhtml:80
msgid "in term time"
-msgstr ""
-
-#: app/views/public_body/list.rhtml:42
-msgid "in total"
-msgstr "në total"
+msgstr "në gjysmëvjetor"
-#: locale/model_attributes.rb:62
+#: locale/model_attributes.rb:60
msgid "incoming message"
msgstr "mesazhi i ardhur"
-#: locale/model_attributes.rb:79
+#: locale/model_attributes.rb:82
msgid "info request"
msgstr "kërkesë për informatë"
@@ -4062,11 +4726,15 @@ msgstr "kërkesë për informatë"
msgid "info request event"
msgstr "info request event"
-#: app/views/user/set_profile_about_me.rhtml:3
#: app/views/user/signchangeemail.rhtml:3
+#: app/views/user/set_profile_about_me.rhtml:3
msgid "internal error"
msgstr "gabim i brendshëm i sistemit"
+#: app/views/general/search.rhtml:91
+msgid "internal reviews"
+msgstr "rishqyrtimet interne"
+
#: app/views/request/show.rhtml:100
msgid "is <strong>waiting for your clarification</strong>."
msgstr "është duke <strong>pritur për sqarim tuaj</strong>."
@@ -4084,6 +4752,16 @@ msgstr "ka lënë një shënim"
msgid "made."
msgstr "bërë."
+#: app/views/request/_request_filter_form.rhtml:13
+#: app/views/general/search.rhtml:102
+msgid "messages from authorities"
+msgstr "mesazhe nga autoritetet"
+
+#: app/views/request/_request_filter_form.rhtml:12
+#: app/views/general/search.rhtml:101
+msgid "messages from users"
+msgstr "mesazhe nga përdoruesit"
+
#: app/views/request/show.rhtml:74
msgid "no later than"
msgstr "jo më vonë se"
@@ -4095,18 +4773,16 @@ msgid ""
" a general followup. If you need to make a general followup, and know\n"
" an email which will go to the right place, please <a href=\"%s\">send it to us</a>."
msgstr ""
+"nuk ekziston më. Nëse je duke u përpjekur për të bërë\n"
+" Prej faqes së kërkesës, provo ti përgjigjesh një mesazhi të veçant, në vend se të dërgosh një mesazh vazhdues. Nëse keni nevojë të bëni një mesazh prëcjellës të përgjithshëm dhe e di një adresë të emailit që do të shkon ne vendin e duhur, të lutem <a href=\"%s\">na e dërgo</a>."
#: app/views/request/show.rhtml:72
msgid "normally"
msgstr "normalisht"
-#: app/views/user/show.rhtml:114
-msgid "only"
-msgstr "vetëm"
-
#: locale/model_attributes.rb:25
msgid "outgoing message"
-msgstr "Mesazhi dalës"
+msgstr "Mesazhi në largim"
#: app/views/user/sign.rhtml:11
msgid "please sign in as "
@@ -4116,7 +4792,7 @@ msgstr "Të lutem kyçu si"
msgid "please sign in or make a new account."
msgstr "të lutem kyçu ose krijo një llogari të re."
-#: locale/model_attributes.rb:49
+#: locale/model_attributes.rb:47
msgid "post redirect"
msgstr "ridrejto postën në tjetër adresë"
@@ -4128,10 +4804,6 @@ msgstr "fotografia e profilit"
msgid "public body"
msgstr "institucioni publik"
-#: locale/model_attributes.rb:47
-msgid "raw email"
-msgstr "raw email"
-
#: app/views/request_mailer/not_clarified_alert.rhtml:1
msgid "request."
msgstr "kërkesë."
@@ -4140,17 +4812,28 @@ msgstr "kërkesë."
msgid "requesting an internal review"
msgstr "kërko rishqyrtim intern"
+#: app/models/track_thing.rb:92 app/models/track_thing.rb:111
+#: app/models/track_thing.rb:113 app/views/general/search.rhtml:53
+msgid "requests"
+msgstr "kërkesat"
+
+#: app/models/track_thing.rb:112
+msgid "requests which are {{list_of_statuses}}"
+msgstr "kërkesat të cilat janë {{list_of_statuses}}"
+
#: app/views/request_mailer/requires_admin.rhtml:3
msgid ""
"response as needing administrator attention. Take a look, and reply to this\n"
"email to let them know what you are going to do about it."
msgstr ""
+"përgjigje që ka nevojë për vëmendjen e administratorit. Hidhni një sy, dhe përgjigju në këtë \n"
+"email, për ti njoftuar se çfarë do të bëni lidhur me të."
#: app/views/request/show.rhtml:102
msgid "send a follow up message"
-msgstr ""
+msgstr "Dërgo një mesazh përcjellës"
-#: app/views/request/_request_listing_via_event.rhtml:31
+#: app/views/request/_request_listing_via_event.rhtml:23
msgid "sent to {{public_body_name}} by {{info_request_user}} on {{date}}."
msgstr "dërguar {{public_body_name}} nga {{info_request_user}} me {{date}}."
@@ -4158,54 +4841,53 @@ msgstr "dërguar {{public_body_name}} nga {{info_request_user}} me {{date}}."
msgid "sign in"
msgstr "Kyçu"
-#: app/views/user/wrong_user.rhtml:4
-msgid "sign out"
-msgstr "Ç'kyçu"
+#: app/models/track_thing.rb:101
+msgid "successful"
+msgstr "e suksesshëme"
+
+#: app/views/request/_request_filter_form.rhtml:31
+#: app/views/general/search.rhtml:88
+msgid "successful requests"
+msgstr "kërkesat e suksesshme"
#: app/views/request_mailer/new_response.rhtml:2
msgid "that you made to"
msgstr "që ti ke bërë për"
-#: app/views/request_mailer/comment_on_alert.rhtml:6
+#: app/views/request/_followup.rhtml:23 app/views/request/_followup.rhtml:28
+#: app/views/request/_followup.rhtml:34
+msgid "the main FOI contact address for {{public_body}}"
+msgstr ""
+"adresa kryesore kontaktuese për dërgimin e kërkesave te {{public_body}}"
+
+#: app/views/request/_followup.rhtml:3
+msgid "the main FOI contact at {{public_body}}"
+msgstr "kontakti kryesor për kërkesa te {{public_body}}"
+
#: app/views/request_mailer/comment_on_alert_plural.rhtml:5
-#: app/views/request_mailer/new_response.rhtml:15
-#: app/views/request_mailer/new_response_reminder_alert.rhtml:8
-#: app/views/request_mailer/not_clarified_alert.rhtml:9
#: app/views/request_mailer/old_unclassified_updated.rhtml:8
+#: app/views/request_mailer/new_response_reminder_alert.rhtml:8
+#: app/views/request_mailer/very_overdue_alert.rhtml:11
#: app/views/request_mailer/overdue_alert.rhtml:9
#: app/views/request_mailer/stopped_responses.rhtml:16
-#: app/views/request_mailer/very_overdue_alert.rhtml:11
-#: app/views/track_mailer/event_digest.rhtml:66
+#: app/views/request_mailer/new_response.rhtml:15
+#: app/views/request_mailer/not_clarified_alert.rhtml:9
+#: app/views/request_mailer/comment_on_alert.rhtml:6
#: app/views/user_mailer/already_registered.rhtml:11
-#: app/views/user_mailer/changeemail_already_used.rhtml:10
-#: app/views/user_mailer/changeemail_confirm.rhtml:13
#: app/views/user_mailer/confirm_login.rhtml:11
+#: app/views/user_mailer/changeemail_confirm.rhtml:13
+#: app/views/user_mailer/changeemail_already_used.rhtml:10
+#: app/views/track_mailer/event_digest.rhtml:66
msgid "the {{site_name}} team"
-msgstr ""
-
-#: app/views/user/show.rhtml:140
-msgid "this person"
-msgstr "ky person"
-
-#: app/views/user/show.rhtml:113
-msgid ""
-"to change password, \n"
-" subscriptions and more"
-msgstr ""
-"për të ndryshuar, fjalëkalimin,\n"
-"abonimet dhe më shumë"
-
-#: app/views/request/new.rhtml:34
-msgid "to check that the info isn't already published."
-msgstr ""
+msgstr "ekipi i {{site_name}}"
#: app/views/request/show.rhtml:62
msgid "to read"
-msgstr "për të lexuar"
+msgstr "të lexoj"
#: app/views/request/show.rhtml:106
msgid "to send a follow up message."
-msgstr ""
+msgstr "për të dërguar një mesazh përcjellës."
#: app/views/request/show.rhtml:45
msgid "to {{public_body}}"
@@ -4217,86 +4899,160 @@ msgstr "përcjell gjënë"
#: app/views/request/_hidden_correspondence.rhtml:32
msgid "unexpected prominence on request event"
-msgstr ""
+msgstr "rëndësi (prominence) e papritur për kërkesën"
-#: app/views/request/_request_listing_via_event.rhtml:38
+#: app/views/request/_request_listing_via_event.rhtml:30
msgid "unknown event type indexed "
-msgstr "Indeksim i llojit të panjohur të ngjarjes "
+msgstr "Indeksim i llojit të panjohur të ngjarjes "
#: app/views/request/followup_bad.rhtml:29
msgid "unknown reason "
-msgstr "arsye e panjohur"
+msgstr "arsye e panjohur "
-#: app/models/info_request.rb:814 app/models/info_request_event.rb:333
+#: app/models/info_request_event.rb:318 app/models/info_request.rb:816
msgid "unknown status "
-msgstr "status i panjohur"
+msgstr "status i panjohur "
+
+#: app/views/request/_request_filter_form.rhtml:33
+#: app/views/general/search.rhtml:90
+msgid "unresolved requests"
+msgstr "kërkesat e pazgjidhura"
-#: app/views/user/show.rhtml:208
+#: app/views/user/show.rhtml:224
msgid "unsubscribe"
msgstr "ndërprej abonimin"
-#: app/views/user/show.rhtml:180 app/views/user/show.rhtml:194
+#: app/views/user/show.rhtml:196 app/views/user/show.rhtml:210
msgid "unsubscribe all"
msgstr "ndërpreji të gjitha abonimet"
+#: app/models/track_thing.rb:98
+msgid "unsuccessful"
+msgstr "e pasuksesshme"
+
+#: app/views/request/_request_filter_form.rhtml:32
+#: app/views/general/search.rhtml:89
+msgid "unsuccessful requests"
+msgstr "kërkesat e pasuksesshme"
+
#: app/views/request/show.rhtml:53
msgid "useful information."
msgstr "informata të dobishëme."
-#: locale/model_attributes.rb:68
+#: locale/model_attributes.rb:71
msgid "user"
msgstr "përdoruesi"
-#: locale/model_attributes.rb:66
+#: locale/model_attributes.rb:69
msgid "user info request sent alert"
msgstr "shfrytëzuesi info kërkesë dërguar alarm"
-#: app/views/user/show.rhtml:140
-msgid "you"
-msgstr "ti"
+#: app/models/track_thing.rb:83 app/views/general/search.rhtml:54
+msgid "users"
+msgstr "përdoruesit"
+
+#: app/views/request/list.rhtml:21
+msgid "{{count}} FOI requests found"
+msgstr "{{count}} Kërkesa për informata zyrtare u gjetën"
-#: app/views/request/new.rhtml:6
+#: app/views/request/new.rhtml:27
msgid ""
"{{existing_request_user}} already\n"
-" created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n"
-" or edit the details below to make a new but similar request."
+" created the same request on {{date}}. You can either view the <a href=\"{{existing_request}}\">existing request</a>,\n"
+" or edit the details below to make a new but similar request."
msgstr ""
-"{{existing_request_user}} tashmë ka krijuar të njëjtën kërkesë me {{date}}. Ju mund ta shikoni <a href=\"{{existing_request}}\">kërkesën ekzistuese</a> , \n"
-"apo të editosh të dhënat e mëposhtme për të bërë një kërkesë të re, por të ngjashme."
+"{{existing_request_user}} tashmë\n"
+" ka krijuar të njëjtën kërkesë me {{date}}. Ti mund ta shohësh <a href=\"{{existing_request}}\">kërkesën ekzistuese</a>,\n"
+" apo të editosh të dhënat e mëposhtme për të bërë një kërkesë të re, por të ngjashme."
-#: app/views/request/_after_actions.rhtml:20
+#: app/views/request/_after_actions.rhtml:23
msgid "{{info_request_user_name}} only:"
-msgstr "{{info_request_user_name}} vetëm:"
+msgstr "Vetëm për {{info_request_user_name}}:"
-#: app/views/general/frontpage.rhtml:51
+#: app/views/general/frontpage.rhtml:62
msgid "{{length_of_time}} ago"
msgstr "{{length_of_time}} më parë"
-#: app/views/request/_after_actions.rhtml:43
+#: app/models/track_thing.rb:122
+msgid "{{list_of_things}} matching text '{{search_query}}'"
+msgstr "{{list_of_things}} që përputhen me tekstin '{{search_query}}'"
+
+#: app/views/general/blog.rhtml:56
+msgid "{{number_of_comments}} comments"
+msgstr "{{number_of_comments}} komente"
+
+#: app/views/request/_after_actions.rhtml:45
msgid "{{public_body_name}} only:"
-msgstr "{{public_body_name}} vetëm:"
+msgstr "Vetëm për {{public_body_name}}:"
+
+#: app/views/track_mailer/event_digest.rhtml:21
+msgid "{{public_body}} sent a response to {{user_name}}"
+msgstr "{{public_body}} dërgoi një përgjigje për {{user_name}}"
+
+#: app/controllers/user_controller.rb:43
+msgid "{{search_results}} matching '{{query}}'"
+msgstr "{{search_results}} që përputhen me '{{query}}'"
+
+#: app/views/general/blog.rhtml:1
+msgid "{{site_name}} blog and tweets"
+msgstr "{{site_name}} blogjet dhe tweetat"
+
+#: app/views/general/frontpage.rhtml:38
+msgid ""
+"{{site_name}} covers requests to {{number_of_authorities}} authorities, "
+"including:"
+msgstr ""
+"{{site_name}} përfshinë kërkesat për {{number_of_authorities}} autoritete, "
+"duke përfshirë:"
#: app/views/public_body/view_email.rhtml:7
msgid ""
"{{site_name}} sends new requests to <strong>{{request_email}}</strong> for "
"this authority."
msgstr ""
+"{{site_name}} dërgon kërkesa të reja për <strong>{{request_email}}</strong> "
+"për këtë autoritet."
-#: app/models/user.rb:122
-msgid "{{user_name}} (Banned)"
+#: app/views/general/frontpage.rhtml:55
+msgid ""
+"{{site_name}} users have made {{number_of_requests}} requests, including:"
msgstr ""
+"Përdoruesit e {{site_name}} kanë bërë {{number_of_requests}} kërkesa, duke "
+"përfshirë:"
+
+#: app/models/user.rb:133
+msgid "{{user_name}} (Banned)"
+msgstr "{{user_name}} (Përjashtuar)"
+
+#: app/views/track_mailer/event_digest.rhtml:31
+msgid "{{user_name}} added an annotation"
+msgstr "{{user_name}} shtoi një shënim"
#: app/views/request_mailer/comment_on_alert.rhtml:1
msgid ""
"{{user_name}} has annotated your {{law_used_short}} \n"
"request. Follow this link to see what they wrote."
msgstr ""
-"{{user_name}} ka lënë shënim në kërkesën tënde {{law_used_short}}. Ndiqni "
-"këtë vegzë për të parë se çfarë ata shkruan."
+"{{user_name}} ka lënë shënim në kërkesën tënde. Ndiqni këtë vegzë për të "
+"parë se çfarë ata shkruan."
#: app/views/contact_mailer/user_message.rhtml:2
msgid "{{user_name}} has used {{site_name}} to send you the message below."
msgstr ""
+"{{user_name}} ka përdorur {{site_name}} për të dërguar mesazhin e posht "
+"shënuar."
+
+#: app/views/track_mailer/event_digest.rhtml:24
+msgid "{{user_name}} sent a follow up message to {{public_body}}"
+msgstr "{{user_name}} dërgoi mesazh vazhdues për {{public_body}}"
+
+#: app/views/track_mailer/event_digest.rhtml:28
+msgid "{{user_name}} sent a request to {{public_body}}"
+msgstr "{{user_name}} dërgoi një kërkesë për {{public_body}}"
+
+#: app/views/request/simple_correspondence.rhtml:42
+msgid "{{username}} left an annotation:"
+msgstr "{{username}} ka lënë një shënim:"
#: app/views/request/show.rhtml:36
msgid ""
@@ -4304,9 +5060,11 @@ msgid ""
"{{law_used_full}} request (<a href=\"{{request_admin_url}}\">admin</a>) to "
"{{public_body_link}} (<a href=\"{{public_body_admin_url}}\">admin</a>)"
msgstr ""
+"{{user}} (<a href=\"{{user_admin_url}}\">admin</a>) bëri këtë kërkesë (<a "
+"href=\"{{request_admin_url}}\">admin</a>) te {{public_body_link}} (<a "
+"href=\"{{public_body_admin_url}}\">admin</a>)"
#: app/views/request/show.rhtml:44
msgid "{{user}} made this {{law_used_full}} request"
-msgstr "{{user}} bëri këtë {{law_used_full}} kërkesë"
-
+msgstr "{{user}} bëri këtë kërkesë"
diff --git a/public/.gitignore b/public/.gitignore
index 0e08da146..9a6aa5fff 100644
--- a/public/.gitignore
+++ b/public/.gitignore
@@ -3,3 +3,5 @@
/foi-live-creation.png
/foi-user-use.png
/google*.html
+asktheeu-theme
+wordpress
diff --git a/public/images/arrow-left.png b/public/images/arrow-left.png
new file mode 100644
index 000000000..74d2fa253
--- /dev/null
+++ b/public/images/arrow-left.png
Binary files differ
diff --git a/public/images/arrow-right.png b/public/images/arrow-right.png
new file mode 100644
index 000000000..34dd75ef8
--- /dev/null
+++ b/public/images/arrow-right.png
Binary files differ
diff --git a/public/images/bighand.png b/public/images/bighand.png
new file mode 100644
index 000000000..92a4a6105
--- /dev/null
+++ b/public/images/bighand.png
Binary files differ
diff --git a/public/images/button-gradient-large.png b/public/images/button-gradient-large.png
new file mode 100644
index 000000000..93ebc6cbc
--- /dev/null
+++ b/public/images/button-gradient-large.png
Binary files differ
diff --git a/public/images/button-gradient.png b/public/images/button-gradient.png
new file mode 100644
index 000000000..8b29e89ba
--- /dev/null
+++ b/public/images/button-gradient.png
Binary files differ
diff --git a/public/images/button-preview.png b/public/images/button-preview.png
new file mode 100644
index 000000000..79b4ccd04
--- /dev/null
+++ b/public/images/button-preview.png
Binary files differ
diff --git a/public/images/button-search.png b/public/images/button-search.png
new file mode 100644
index 000000000..23945f4f0
--- /dev/null
+++ b/public/images/button-search.png
Binary files differ
diff --git a/public/images/calendar.png b/public/images/calendar.png
new file mode 100644
index 000000000..44981a41c
--- /dev/null
+++ b/public/images/calendar.png
Binary files differ
diff --git a/public/images/defaultprofilepic.png b/public/images/defaultprofilepic.png
new file mode 100644
index 000000000..affdaad3d
--- /dev/null
+++ b/public/images/defaultprofilepic.png
Binary files differ
diff --git a/public/images/email-16.png b/public/images/email-16.png
index 030eafde6..8692748e2 100644
--- a/public/images/email-16.png
+++ b/public/images/email-16.png
Binary files differ
diff --git a/public/images/flying-computer.png b/public/images/flying-computer.png
new file mode 100644
index 000000000..b1e1d59bb
--- /dev/null
+++ b/public/images/flying-computer.png
Binary files differ
diff --git a/public/images/home-grad.png b/public/images/home-grad.png
new file mode 100644
index 000000000..ff9887a11
--- /dev/null
+++ b/public/images/home-grad.png
Binary files differ
diff --git a/public/images/icon-foi.png b/public/images/icon-foi.png
new file mode 100644
index 000000000..138bf3b5c
--- /dev/null
+++ b/public/images/icon-foi.png
Binary files differ
diff --git a/public/images/icon-person.png b/public/images/icon-person.png
new file mode 100644
index 000000000..dfb35a849
--- /dev/null
+++ b/public/images/icon-person.png
Binary files differ
diff --git a/public/images/icon-publicbody.png b/public/images/icon-publicbody.png
new file mode 100644
index 000000000..0f3848ccf
--- /dev/null
+++ b/public/images/icon-publicbody.png
Binary files differ
diff --git a/public/images/link-icon.png b/public/images/link-icon.png
new file mode 100644
index 000000000..7d9237fcd
--- /dev/null
+++ b/public/images/link-icon.png
Binary files differ
diff --git a/public/images/littlehand.png b/public/images/littlehand.png
new file mode 100644
index 000000000..f7ec82045
--- /dev/null
+++ b/public/images/littlehand.png
Binary files differ
diff --git a/public/images/logo.png b/public/images/logo.png
new file mode 100644
index 000000000..1a865124f
--- /dev/null
+++ b/public/images/logo.png
Binary files differ
diff --git a/public/images/quote-marks.png b/public/images/quote-marks.png
new file mode 100644
index 000000000..752b7d4cf
--- /dev/null
+++ b/public/images/quote-marks.png
Binary files differ
diff --git a/public/images/quote.png b/public/images/quote.png
index d7e679c23..752b7d4cf 100644
--- a/public/images/quote.png
+++ b/public/images/quote.png
Binary files differ
diff --git a/public/images/rss-16.png b/public/images/rss-16.png
new file mode 100644
index 000000000..d61986a56
--- /dev/null
+++ b/public/images/rss-16.png
Binary files differ
diff --git a/public/images/rss-blue.png b/public/images/rss-blue.png
new file mode 100644
index 000000000..abc1b1859
--- /dev/null
+++ b/public/images/rss-blue.png
Binary files differ
diff --git a/public/images/rss-orange.png b/public/images/rss-orange.png
new file mode 100644
index 000000000..d0e6a949e
--- /dev/null
+++ b/public/images/rss-orange.png
Binary files differ
diff --git a/public/images/search-button.png b/public/images/search-button.png
new file mode 100644
index 000000000..f5d41d4f1
--- /dev/null
+++ b/public/images/search-button.png
Binary files differ
diff --git a/public/images/small-white-cross.png b/public/images/small-white-cross.png
new file mode 100644
index 000000000..3f78064d2
--- /dev/null
+++ b/public/images/small-white-cross.png
Binary files differ
diff --git a/public/images/start-button.png b/public/images/start-button.png
new file mode 100644
index 000000000..585931c35
--- /dev/null
+++ b/public/images/start-button.png
Binary files differ
diff --git a/public/images/status-complete.png b/public/images/status-complete.png
new file mode 100644
index 000000000..2ff49770a
--- /dev/null
+++ b/public/images/status-complete.png
Binary files differ
diff --git a/public/images/status-denied.png b/public/images/status-denied.png
new file mode 100644
index 000000000..1f768af5e
--- /dev/null
+++ b/public/images/status-denied.png
Binary files differ
diff --git a/public/images/status-error.png b/public/images/status-error.png
new file mode 100644
index 000000000..5865dd1e1
--- /dev/null
+++ b/public/images/status-error.png
Binary files differ
diff --git a/public/images/status-gone-postal.png b/public/images/status-gone-postal.png
new file mode 100644
index 000000000..00df771ac
--- /dev/null
+++ b/public/images/status-gone-postal.png
Binary files differ
diff --git a/public/images/status-internal-review.png b/public/images/status-internal-review.png
new file mode 100644
index 000000000..639f72797
--- /dev/null
+++ b/public/images/status-internal-review.png
Binary files differ
diff --git a/public/images/status-not-held.png b/public/images/status-not-held.png
new file mode 100644
index 000000000..9d20ac2e7
--- /dev/null
+++ b/public/images/status-not-held.png
Binary files differ
diff --git a/public/images/status-overdue.png b/public/images/status-overdue.png
new file mode 100644
index 000000000..637fed8d9
--- /dev/null
+++ b/public/images/status-overdue.png
Binary files differ
diff --git a/public/images/status-pending.png b/public/images/status-pending.png
new file mode 100644
index 000000000..dcf4009f3
--- /dev/null
+++ b/public/images/status-pending.png
Binary files differ
diff --git a/public/images/status-withdrawn.png b/public/images/status-withdrawn.png
new file mode 100644
index 000000000..d56aa213f
--- /dev/null
+++ b/public/images/status-withdrawn.png
Binary files differ
diff --git a/public/images/stripes-70-light.png b/public/images/stripes-70-light.png
new file mode 100644
index 000000000..7a0ee575d
--- /dev/null
+++ b/public/images/stripes-70-light.png
Binary files differ
diff --git a/public/images/stripes-70-light2.png b/public/images/stripes-70-light2.png
new file mode 100644
index 000000000..443442a48
--- /dev/null
+++ b/public/images/stripes-70-light2.png
Binary files differ
diff --git a/public/images/stripes-70.png b/public/images/stripes-70.png
new file mode 100644
index 000000000..fda1c339d
--- /dev/null
+++ b/public/images/stripes-70.png
Binary files differ
diff --git a/public/images/stripes.png b/public/images/stripes.png
new file mode 100644
index 000000000..fda1c339d
--- /dev/null
+++ b/public/images/stripes.png
Binary files differ
diff --git a/public/images/twitter-16.png b/public/images/twitter-16.png
new file mode 100644
index 000000000..e848b8f2e
--- /dev/null
+++ b/public/images/twitter-16.png
Binary files differ
diff --git a/public/images/ui-icons-theme.png b/public/images/ui-icons-theme.png
new file mode 100644
index 000000000..f619648da
--- /dev/null
+++ b/public/images/ui-icons-theme.png
Binary files differ
diff --git a/public/javascripts/ba-throttle-debounce.js b/public/javascripts/ba-throttle-debounce.js
new file mode 100644
index 000000000..07205508e
--- /dev/null
+++ b/public/javascripts/ba-throttle-debounce.js
@@ -0,0 +1,9 @@
+/*
+ * jQuery throttle / debounce - v1.1 - 3/7/2010
+ * http://benalman.com/projects/jquery-throttle-debounce-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this); \ No newline at end of file
diff --git a/public/javascripts/general.js b/public/javascripts/general.js
new file mode 100644
index 000000000..ab74cf318
--- /dev/null
+++ b/public/javascripts/general.js
@@ -0,0 +1,47 @@
+$(document).ready(function() {
+ // flash message for people coming from other countries
+ if(window.location.search.substring(1).search("country_name") == -1) {
+ if (!$.cookie('has_seen_country_message')) {
+ $.ajax({
+ url: "/country_message",
+ dataType: 'html',
+ success: function(country_message){
+ if (country_message != ''){
+ $('#other-country-notice').html(country_message);
+ $('body:not(.front) #other-country-notice').show()
+ }
+ }
+ })
+
+ }
+ }
+
+ $('#other-country-notice').click(function() {
+ $('#other-country-notice').hide();
+ $.cookie('has_seen_country_message', 1, {expires: 365, path: '/'});
+ });
+ // "link to this" widget
+ $('a.link_to_this').click(function() {
+ var box = $('div#link_box');
+ var location = window.location.protocol + "//" + window.location.hostname + $(this).attr('href');
+ box.width(location.length + " em");
+ box.find('input').val(location).attr('size', location.length + " em");
+ box.show();
+ box.find('input').select();
+ box.position({
+ my: "left top",
+ at: "left bottom",
+ of: this,
+ collision: "fit" });
+
+ });
+ $('.close-button').click(function() { $(this).parent().hide() });
+ $('div#variety-filter a').each(function() {
+ $(this).click(function() {
+ var form = $('form#search_form');
+ form.attr('action', $(this).attr('href'));
+ form.submit();
+ return false;
+ })
+ })
+}) \ No newline at end of file
diff --git a/public/javascripts/jquery-ui.min.js b/public/javascripts/jquery-ui.min.js
new file mode 100644
index 000000000..fb641f675
--- /dev/null
+++ b/public/javascripts/jquery-ui.min.js
@@ -0,0 +1,168 @@
+/*!
+ * jQuery UI 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(c,j){function k(a,b){var d=a.nodeName.toLowerCase();if("area"===d){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&l(a)}return(/input|select|textarea|button|object/.test(d)?!a.disabled:"a"==d?a.href||b:b)&&l(a)}function l(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.16",
+keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({propAttr:c.fn.prop||c.fn.attr,_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=
+this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,
+"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":
+"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,m,n){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(m)g-=parseFloat(c.curCSS(f,"border"+this+"Width",true))||0;if(n)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,
+outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){return k(a,!isNaN(c.attr(a,"tabindex")))},tabbable:function(a){var b=c.attr(a,
+"tabindex"),d=isNaN(b);return(d||b>=0)&&k(a,!d)}});c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&
+a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&
+c.ui.isOverAxis(b,e,i)}})}})(jQuery);
+;/*!
+ * jQuery UI Widget 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)try{b(d).triggerHandler("remove")}catch(e){}k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(d){}});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=
+function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):
+d;if(e&&d.charAt(0)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=
+b.extend(true,{},this.options,this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
+c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
+;/*
+ * jQuery UI Position 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Position
+ */
+(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
+left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
+k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
+m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
+d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
+a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
+g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
+;/*
+ * jQuery UI Tabs 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ */
+(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
+e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
+d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
+(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
+this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
+this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
+if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
+this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
+g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
+function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
+this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
+-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
+d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
+d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
+e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
+j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
+if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
+this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
+load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
+"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
+url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.16"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
+a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
+;/*
+ * jQuery UI Datepicker 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ * jquery.ui.core.js
+ */
+(function(d,C){function M(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=N(d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function N(a){return a.bind("mouseout",
+function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");b.length&&b.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(b){b=d(b.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(d.datepicker._isDisabledDatepicker(J.inline?a.parent()[0]:J.input[0])||!b.length)){b.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+b.addClass("ui-state-hover");b.hasClass("ui-datepicker-prev")&&b.addClass("ui-datepicker-prev-hover");b.hasClass("ui-datepicker-next")&&b.addClass("ui-datepicker-next-hover")}})}function H(a,b){d.extend(a,b);for(var c in b)if(b[c]==null||b[c]==C)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.16"}});var B=(new Date).getTime(),J;d.extend(M.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
+setDefaults:function(a){H(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,
+"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:N(d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
+function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b);b.settings.disabled&&this._disableDatepicker(a)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c==
+"focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():
+d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,
+b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),true);this._updateDatepicker(b);this._updateAlternate(b);b.settings.disabled&&this._disableDatepicker(a);b.dpDiv.css("display","block")}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=
+1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}H(a.settings,e||{});b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
+2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=
+d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=
+a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().removeClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,
+"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span"){b=b.children("."+this._inlineClass);b.children().addClass("ui-state-disabled");b.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=d.map(this._disabledInputs,function(f){return f==
+a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?
+d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true),i=this._getMinMaxDate(e,"min"),g=this._getMinMaxDate(e,"max");H(e.settings,f);if(i!==null&&f.dateFormat!==C&&f.minDate===C)e.settings.minDate=this._formatDate(e,i);if(g!==null&&f.dateFormat!==C&&f.maxDate===C)e.settings.maxDate=this._formatDate(e,g);this._attachments(d(a),e);this._autoSize(e);this._setDate(e,h);this._updateAlternate(e);
+this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");
+b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]&&d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]);if(a=d.datepicker._get(b,"onSelect")){c=d.datepicker._formatDate(b);a.apply(b.input?b.input[0]:null,[c,b])}else d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,
+a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=
+a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,
+"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==C?a.keyCode:a.charCode);
+return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",
+a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);if(d.datepicker._curInst&&d.datepicker._curInst!=b){d.datepicker._datepickerShowing&&d.datepicker._triggerOnClose(d.datepicker._curInst);d.datepicker._curInst.dpDiv.stop(true,true)}var c=d.datepicker._get(b,"beforeShow");c=c?c.apply(a,[a,b]):{};if(c!==false){H(b.settings,c);b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value=
+"";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);
+c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.datepicker._datepickerShowing=
+true;d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}}},_updateDatepicker:function(a){this.maxRows=4;var b=d.datepicker._getBorders(a.dpDiv);J=a;a.dpDiv.empty().append(this._generateHTML(a));var c=a.dpDiv.find("iframe.ui-datepicker-cover");c.length&&c.css({left:-b[0],top:-b[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});
+a.dpDiv.find("."+this._dayOverClass+" a").mouseover();b=this._getNumberOfMonths(a);c=b[1];a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");c>1&&a.dpDiv.addClass("ui-datepicker-multi-"+c).css("width",17*c+"em");a.dpDiv[(b[0]!=1||b[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&
+!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var e=a.yearshtml;setTimeout(function(){e===a.yearshtml&&a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);e=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),
+h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=
+this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_triggerOnClose:function(a){var b=this._get(a,"onClose");if(b)b.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a])},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);
+this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();d.datepicker._triggerOnClose(b);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
+_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
+0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e["selected"+(c=="M"?
+"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);
+this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");
+if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?
+b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=A+1<a.length&&a.charAt(A+1)==p)&&A++;return p},m=function(p){var D=
+o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&D?4:p=="o"?3:2)+"}");p=b.substring(q).match(p);if(!p)throw"Missing number at position "+q;q+=p[0].length;return parseInt(p[0],10)},n=function(p,D,K){p=d.map(o(p)?K:D,function(w,x){return[[x,w]]}).sort(function(w,x){return-(w[1].length-x[1].length)});var E=-1;d.each(p,function(w,x){w=x[1];if(b.substr(q,w.length).toLowerCase()==w.toLowerCase()){E=x[0];q+=w.length;return false}});if(E!=-1)return E+1;else throw"Unknown name at position "+q;},s=
+function(){if(b.charAt(q)!=a.charAt(A))throw"Unexpected literal at position "+q;q++},q=0,A=0;A<a.length;A++)if(k)if(a.charAt(A)=="'"&&!o("'"))k=false;else s();else switch(a.charAt(A)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();j=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();j=v.getMonth()+
+1;l=v.getDate();break;case "'":if(o("'"))s();else k=true;break;default:s()}if(q<b.length)throw"Extra/unparsed characters found in date: "+b.substring(q);if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,j-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=j||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",
+COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:
+null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,s){return i(o)?s[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",Math.round(((new Date(b.getFullYear(),b.getMonth(),b.getDate())).getTime()-
+(new Date(b.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=
+0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==C?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);
+var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;
+i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=
+Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>
+12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&
+a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
+new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));
+n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var s=this._get(a,"nextText");s=!h?s:this.formatDate(s,this._daylightSavingAdjust(new Date(m,
+g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+B+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+s+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+s+"</span></a>";j=this._get(a,"currentText");s=this._get(a,"gotoCurrent")&&
+a.currentDay?u:b;j=!h?j:this.formatDate(j,s,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+B+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,s)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
+B+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");s=this._get(a,"dayNames");this._get(a,"dayNamesShort");var q=this._get(a,"dayNamesMin"),A=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),D=this._get(a,"showOtherMonths"),K=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var E=this._getDefaultDate(a),w="",x=0;x<i[0];x++){var O=
+"";this.maxRows=4;for(var G=0;G<i[1];G++){var P=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",y="";if(l){y+='<div class="ui-datepicker-group';if(i[1]>1)switch(G){case 0:y+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:y+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:y+=" ui-datepicker-group-middle";t="";break}y+='">'}y+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&
+x==0?c?f:n:"")+(/all|right/.test(t)&&x==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,x>0||G>0,A,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var z=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var r=(t+h)%7;z+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+s[r]+'">'+q[r]+"</span></th>"}y+=z+"</tr></thead><tbody>";z=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
+z);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;z=Math.ceil((t+z)/7);this.maxRows=z=l?this.maxRows>z?this.maxRows:z:z;r=this._daylightSavingAdjust(new Date(m,g,1-t));for(var Q=0;Q<z;Q++){y+="<tr>";var R=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(r)+"</td>";for(t=0;t<7;t++){var I=p?p.apply(a.input?a.input[0]:null,[r]):[true,""],F=r.getMonth()!=g,L=F&&!K||!I[0]||k&&r<k||o&&r>o;R+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(r.getTime()==
+P.getTime()&&g==a.selectedMonth&&a._keyEvent||E.getTime()==r.getTime()&&E.getTime()==P.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!D?"":" "+I[1]+(r.getTime()==u.getTime()?" "+this._currentClass:"")+(r.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!F||D)&&I[2]?' title="'+I[2]+'"':"")+(L?"":' onclick="DP_jQuery_'+B+".datepicker._selectDay('#"+a.id+"',"+r.getMonth()+","+r.getFullYear()+', this);return false;"')+">"+(F&&!D?"&#xa0;":L?'<span class="ui-state-default">'+
+r.getDate()+"</span>":'<a class="ui-state-default'+(r.getTime()==b.getTime()?" ui-state-highlight":"")+(r.getTime()==u.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+'" href="#">'+r.getDate()+"</a>")+"</td>";r.setDate(r.getDate()+1);r=this._daylightSavingAdjust(r)}y+=R+"</tr>"}g++;if(g>11){g=0;m++}y+="</tbody></table>"+(l?"</div>"+(i[0]>0&&G==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");O+=y}w+=O}w+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
+"");a._keyEvent=false;return w},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" >";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&
+(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&l)?"&#xa0;":""));if(!a.yearshtml){a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var s=(new Date).getFullYear();i=function(q){q=q.match(/c[+-].*/)?c+parseInt(q.substring(1),10):q.match(/[+-].*/)?s+parseInt(q,10):parseInt(q,10);return isNaN(q)?s:q};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,
+e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+B+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" >";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=a.drawYear+(c=="Y"?b:0),f=a.drawMonth+
+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");if(b)b.apply(a.input?
+a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);c=this._daylightSavingAdjust(new Date(c,
+e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,
+"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=function(a){if(!this.length)return this;
+if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));return this.each(function(){typeof a==
+"string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new M;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.16";window["DP_jQuery_"+B]=d})(jQuery);
+; \ No newline at end of file
diff --git a/public/javascripts/jquery.cookie.js b/public/javascripts/jquery.cookie.js
index 6df1faca2..6a3e394b4 100644
--- a/public/javascripts/jquery.cookie.js
+++ b/public/javascripts/jquery.cookie.js
@@ -1,96 +1,41 @@
/**
- * Cookie plugin
+ * jQuery Cookie plugin
*
- * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
+ * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*/
+jQuery.cookie = function (key, value, options) {
-/**
- * Create a cookie with the given name and value and other optional parameters.
- *
- * @example $.cookie('the_cookie', 'the_value');
- * @desc Set the value of a cookie.
- * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
- * @desc Create a cookie with all available options.
- * @example $.cookie('the_cookie', 'the_value');
- * @desc Create a session cookie.
- * @example $.cookie('the_cookie', null);
- * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
- * used when the cookie was set.
- *
- * @param String name The name of the cookie.
- * @param String value The value of the cookie.
- * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
- * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
- * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
- * If set to null or omitted, the cookie will be a session cookie and will not be retained
- * when the the browser exits.
- * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
- * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
- * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
- * require a secure protocol (like HTTPS).
- * @type undefined
- *
- * @name $.cookie
- * @cat Plugins/Cookie
- * @author Klaus Hartl/klaus.hartl@stilbuero.de
- */
+ // key and at least value given, set cookie...
+ if (arguments.length > 1 && String(value) !== "[object Object]") {
+ options = jQuery.extend({}, options);
-/**
- * Get the value of a cookie with the given name.
- *
- * @example $.cookie('the_cookie');
- * @desc Get the value of a cookie.
- *
- * @param String name The name of the cookie.
- * @return The value of the cookie.
- * @type String
- *
- * @name $.cookie
- * @cat Plugins/Cookie
- * @author Klaus Hartl/klaus.hartl@stilbuero.de
- */
-jQuery.cookie = function(name, value, options) {
- if (typeof value != 'undefined') { // name and value given, set cookie
- options = options || {};
- if (value === null) {
- value = '';
+ if (value === null || value === undefined) {
options.expires = -1;
}
- var expires = '';
- if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
- var date;
- if (typeof options.expires == 'number') {
- date = new Date();
- date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
- } else {
- date = options.expires;
- }
- expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
- }
- // CAUTION: Needed to parenthesize options.path and options.domain
- // in the following expressions, otherwise they evaluate to undefined
- // in the packed version for some reason...
- var path = options.path ? '; path=' + (options.path) : '';
- var domain = options.domain ? '; domain=' + (options.domain) : '';
- var secure = options.secure ? '; secure' : '';
- document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
- } else { // only name given, get cookie
- var cookieValue = null;
- if (document.cookie && document.cookie != '') {
- var cookies = document.cookie.split(';');
- for (var i = 0; i < cookies.length; i++) {
- var cookie = jQuery.trim(cookies[i]);
- // Does this cookie string begin with the name we want?
- if (cookie.substring(0, name.length + 1) == (name + '=')) {
- cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
- break;
- }
- }
+
+ if (typeof options.expires === 'number') {
+ var days = options.expires, t = options.expires = new Date();
+ t.setDate(t.getDate() + days);
}
- return cookieValue;
+
+ value = String(value);
+
+ return (document.cookie = [
+ encodeURIComponent(key), '=',
+ options.raw ? value : encodeURIComponent(value),
+ options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+ options.path ? '; path=' + options.path : '',
+ options.domain ? '; domain=' + options.domain : '',
+ options.secure ? '; secure' : ''
+ ].join(''));
}
-}; \ No newline at end of file
+
+ // key and possibly options given, get cookie...
+ options = value || {};
+ var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
+ return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
+};
diff --git a/public/javascripts/jquery.fancybox-1.3.4.pack.js b/public/javascripts/jquery.fancybox-1.3.4.pack.js
new file mode 100755
index 000000000..1373ed083
--- /dev/null
+++ b/public/javascripts/jquery.fancybox-1.3.4.pack.js
@@ -0,0 +1,46 @@
+/*
+ * FancyBox - jQuery Plugin
+ * Simple and fancy lightbox alternative
+ *
+ * Examples and documentation at: http://fancybox.net
+ *
+ * Copyright (c) 2008 - 2010 Janis Skarnelis
+ * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
+ *
+ * Version: 1.3.4 (11/11/2010)
+ * Requires: jQuery v1.3+
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+;(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("<div/>")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>');
+F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)||
+c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick=
+false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('<div class="fancybox-inline-tmp" />').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel",
+function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("<img />").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+e.width+'" height="'+e.height+'"><param name="movie" value="'+c+
+'"></param>';P="";b.each(e.swf,function(x,H){C+='<param name="'+x+'" value="'+H+'"></param>';P+=" "+x+'="'+H+'"'});C+='<embed src="'+c+'" type="application/x-shockwave-flash" width="'+e.width+'" height="'+e.height+'"'+P+"></embed></object>";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win==
+"function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('<div style="width:'+a+";height:"+c+
+";overflow: "+(e.scrolling=="auto"?"auto":e.scrolling=="yes"?"scroll":"hidden")+';position:relative;"></div>');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor,
+opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length?
+d.titlePosition=="float"?'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+s+'</td><td id="fancybox-title-float-right"></td></tr></table>':'<div id="fancybox-title-'+d.titlePosition+'">'+s+"</div>":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding});
+y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height==
+i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents());
+f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode==
+37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto");
+s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('<iframe id="fancybox-frame" name="fancybox-frame'+(new Date).getTime()+'" frameborder="0" hspace="0" '+(b.browser.msie?'allowtransparency="true""':"")+' scrolling="'+e.scrolling+'" src="'+d.href+'"></iframe>').appendTo(j);
+f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c);
+j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type==
+"image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"),
+10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)};
+b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k=
+0,C=a.length;k<C;k++)if(typeof a[k]=="object")b(a[k]).data("fancybox",b.extend({},g,a[k]));else a[k]=b({}).data("fancybox",b.extend({content:a[k]},g));o=jQuery.merge(o,a)}else{if(typeof a=="object")b(a).data("fancybox",b.extend({},g,a));else a=b({}).data("fancybox",b.extend({content:a},g));o.push(a)}if(q>o.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+
+1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a<l.length){q=a;I()}else if(d.cyclic&&l.length>1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h=
+true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1;
+b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5-
+d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('<div id="fancybox-tmp"></div>'),t=b('<div id="fancybox-loading"><div></div></div>'),u=b('<div id="fancybox-overlay"></div>'),f=b('<div id="fancybox-wrap"></div>'));D=b('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(f);
+D.append(j=b('<div id="fancybox-content"></div>'),E=b('<a id="fancybox-close"></a>'),n=b('<div id="fancybox-title"></div>'),z=b('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),A=b('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()});
+b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(D)}}};
+b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",
+easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery); \ No newline at end of file
diff --git a/public/javascripts/jquery.form.js b/public/javascripts/jquery.form.js
new file mode 100644
index 000000000..bc0061418
--- /dev/null
+++ b/public/javascripts/jquery.form.js
@@ -0,0 +1,11 @@
+/*!
+ * jQuery Form Plugin
+ * version: 2.83 (11-JUL-2011)
+ * @requires jQuery v1.3.2 or later
+ *
+ * Examples and documentation at: http://malsup.com/jquery/form/
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+(function(a){function b(){var a="[jquery.form] "+Array.prototype.join.call(arguments,"");if(window.console&&window.console.log){window.console.log(a)}else if(window.opera&&window.opera.postError){window.opera.postError(a)}}a.fn.ajaxSubmit=function(c){function t(e){function C(c){if(o.aborted||B){return}try{z=w(n)}catch(d){b("cannot access response document: ",d);c=v}if(c===u&&o){o.abort("timeout");return}else if(c==v&&o){o.abort("server abort");return}if(!z||z.location.href==j.iframeSrc){if(!r)return}n.detachEvent?n.detachEvent("onload",C):n.removeEventListener("load",C,false);var e="success",f;try{if(r){throw"timeout"}var g=j.dataType=="xml"||z.XMLDocument||a.isXMLDoc(z);b("isXml="+g);if(!g&&window.opera&&(z.body==null||z.body.innerHTML=="")){if(--A){b("requeing onLoad callback, DOM not available");setTimeout(C,250);return}}var h=z.body?z.body:z.documentElement;o.responseText=h?h.innerHTML:null;o.responseXML=z.XMLDocument?z.XMLDocument:z;if(g)j.dataType="xml";o.getResponseHeader=function(a){var b={"content-type":j.dataType};return b[a]};if(h){o.status=Number(h.getAttribute("status"))||o.status;o.statusText=h.getAttribute("statusText")||o.statusText}var i=j.dataType||"";var l=/(json|script|text)/.test(i.toLowerCase());if(l||j.textarea){var p=z.getElementsByTagName("textarea")[0];if(p){o.responseText=p.value;o.status=Number(p.getAttribute("status"))||o.status;o.statusText=p.getAttribute("statusText")||o.statusText}else if(l){var q=z.getElementsByTagName("pre")[0];var t=z.getElementsByTagName("body")[0];if(q){o.responseText=q.textContent?q.textContent:q.innerHTML}else if(t){o.responseText=t.innerHTML}}}else if(j.dataType=="xml"&&!o.responseXML&&o.responseText!=null){o.responseXML=D(o.responseText)}try{y=F(o,j.dataType,j)}catch(c){e="parsererror";o.error=f=c||e}}catch(c){b("error caught: ",c);e="error";o.error=f=c||e}if(o.aborted){b("upload aborted");e=null}if(o.status){e=o.status>=200&&o.status<300||o.status===304?"success":"error"}if(e==="success"){j.success&&j.success.call(j.context,y,"success",o);k&&a.event.trigger("ajaxSuccess",[o,j])}else if(e){if(f==undefined)f=o.statusText;j.error&&j.error.call(j.context,o,e,f);k&&a.event.trigger("ajaxError",[o,j,f])}k&&a.event.trigger("ajaxComplete",[o,j]);if(k&&!--a.active){a.event.trigger("ajaxStop")}j.complete&&j.complete.call(j.context,o,e);B=true;if(j.timeout)clearTimeout(s);setTimeout(function(){if(!j.iframeTarget)m.remove();o.responseXML=null},100)}function x(){function h(){try{var a=w(n).readyState;b("state = "+a);if(a.toLowerCase()=="uninitialized")setTimeout(h,50)}catch(c){b("Server abort: ",c," (",c.name,")");C(v);s&&clearTimeout(s);s=undefined}}var c=g.attr("target"),e=g.attr("action");f.setAttribute("target",l);if(!d){f.setAttribute("method","POST")}if(e!=j.url){f.setAttribute("action",j.url)}if(!j.skipEncodingOverride&&(!d||/post/i.test(d))){g.attr({encoding:"multipart/form-data",enctype:"multipart/form-data"})}if(j.timeout){s=setTimeout(function(){r=true;C(u)},j.timeout)}var i=[];try{if(j.extraData){for(var k in j.extraData){i.push(a('<input type="hidden" name="'+k+'" />').attr("value",j.extraData[k]).appendTo(f)[0])}}if(!j.iframeTarget){m.appendTo("body");n.attachEvent?n.attachEvent("onload",C):n.addEventListener("load",C,false)}setTimeout(h,15);f.submit()}finally{f.setAttribute("action",e);if(c){f.setAttribute("target",c)}else{g.removeAttr("target")}a(i).remove()}}function w(a){var b=a.contentWindow?a.contentWindow.document:a.contentDocument?a.contentDocument:a.document;return b}var f=g[0],h,i,j,k,l,m,n,o,p,q,r,s;var t=!!a.fn.prop;if(e){for(i=0;i<e.length;i++){h=a(f[e[i].name]);h[t?"prop":"attr"]("disabled",false)}}if(a(":input[name=submit],:input[id=submit]",f).length){alert('Error: Form elements must not have name or id of "submit".');return}j=a.extend(true,{},a.ajaxSettings,c);j.context=j.context||j;l="jqFormIO"+(new Date).getTime();if(j.iframeTarget){m=a(j.iframeTarget);q=m.attr("name");if(q==null)m.attr("name",l);else l=q}else{m=a('<iframe name="'+l+'" src="'+j.iframeSrc+'" />');m.css({position:"absolute",top:"-1000px",left:"-1000px"})}n=m[0];o={aborted:0,responseText:null,responseXML:null,status:0,statusText:"n/a",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(c){var d=c==="timeout"?"timeout":"aborted";b("aborting upload... "+d);this.aborted=1;m.attr("src",j.iframeSrc);o.error=d;j.error&&j.error.call(j.context,o,d,c);k&&a.event.trigger("ajaxError",[o,j,d]);j.complete&&j.complete.call(j.context,o,d)}};k=j.global;if(k&&!(a.active++)){a.event.trigger("ajaxStart")}if(k){a.event.trigger("ajaxSend",[o,j])}if(j.beforeSend&&j.beforeSend.call(j.context,o,j)===false){if(j.global){a.active--}return}if(o.aborted){return}p=f.clk;if(p){q=p.name;if(q&&!p.disabled){j.extraData=j.extraData||{};j.extraData[q]=p.value;if(p.type=="image"){j.extraData[q+".x"]=f.clk_x;j.extraData[q+".y"]=f.clk_y}}}var u=1;var v=2;if(j.forceSync){x()}else{setTimeout(x,10)}var y,z,A=50,B;var D=a.parseXML||function(a,b){if(window.ActiveXObject){b=new ActiveXObject("Microsoft.XMLDOM");b.async="false";b.loadXML(a)}else{b=(new DOMParser).parseFromString(a,"text/xml")}return b&&b.documentElement&&b.documentElement.nodeName!="parsererror"?b:null};var E=a.parseJSON||function(a){return window["eval"]("("+a+")")};var F=function(b,c,d){var e=b.getResponseHeader("content-type")||"",f=c==="xml"||!c&&e.indexOf("xml")>=0,g=f?b.responseXML:b.responseText;if(f&&g.documentElement.nodeName==="parsererror"){a.error&&a.error("parsererror")}if(d&&d.dataFilter){g=d.dataFilter(g,c)}if(typeof g==="string"){if(c==="json"||!c&&e.indexOf("json")>=0){g=E(g)}else if(c==="script"||!c&&e.indexOf("javascript")>=0){a.globalEval(g)}}return g}}if(!this.length){b("ajaxSubmit: skipping submit process - no element selected");return this}var d,e,f,g=this;if(typeof c=="function"){c={success:c}}d=this.attr("method");e=this.attr("action");f=typeof e==="string"?a.trim(e):"";f=f||window.location.href||"";if(f){f=(f.match(/^([^#]+)/)||[])[1]}c=a.extend(true,{url:f,success:a.ajaxSettings.success,type:d||"GET",iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},c);var h={};this.trigger("form-pre-serialize",[this,c,h]);if(h.veto){b("ajaxSubmit: submit vetoed via form-pre-serialize trigger");return this}if(c.beforeSerialize&&c.beforeSerialize(this,c)===false){b("ajaxSubmit: submit aborted via beforeSerialize callback");return this}var i,j,k=this.formToArray(c.semantic);if(c.data){c.extraData=c.data;for(i in c.data){if(c.data[i]instanceof Array){for(var l in c.data[i]){k.push({name:i,value:c.data[i][l]})}}else{j=c.data[i];j=a.isFunction(j)?j():j;k.push({name:i,value:j})}}}if(c.beforeSubmit&&c.beforeSubmit(k,this,c)===false){b("ajaxSubmit: submit aborted via beforeSubmit callback");return this}this.trigger("form-submit-validate",[k,this,c,h]);if(h.veto){b("ajaxSubmit: submit vetoed via form-submit-validate trigger");return this}var m=a.param(k);if(c.type.toUpperCase()=="GET"){c.url+=(c.url.indexOf("?")>=0?"&":"?")+m;c.data=null}else{c.data=m}var n=[];if(c.resetForm){n.push(function(){g.resetForm()})}if(c.clearForm){n.push(function(){g.clearForm()})}if(!c.dataType&&c.target){var o=c.success||function(){};n.push(function(b){var d=c.replaceTarget?"replaceWith":"html";a(c.target)[d](b).each(o,arguments)})}else if(c.success){n.push(c.success)}c.success=function(a,b,d){var e=c.context||c;for(var f=0,h=n.length;f<h;f++){n[f].apply(e,[a,b,d||g,g])}};var p=a("input:file",this).length>0;var q="multipart/form-data";var r=g.attr("enctype")==q||g.attr("encoding")==q;if(c.iframe!==false&&(p||c.iframe||r)){if(c.closeKeepAlive){a.get(c.closeKeepAlive,function(){t(k)})}else{t(k)}}else{if(a.browser.msie&&d=="get"){var s=g[0].getAttribute("method");if(typeof s==="string")c.type=s}a.ajax(c)}this.trigger("form-submit-notify",[this,c]);return this};a.fn.ajaxForm=function(c){if(this.length===0){var d={s:this.selector,c:this.context};if(!a.isReady&&d.s){b("DOM not ready, queuing ajaxForm");a(function(){a(d.s,d.c).ajaxForm(c)});return this}b("terminating; zero elements found by selector"+(a.isReady?"":" (DOM not ready)"));return this}return this.ajaxFormUnbind().bind("submit.form-plugin",function(b){if(!b.isDefaultPrevented()){b.preventDefault();a(this).ajaxSubmit(c)}}).bind("click.form-plugin",function(b){var c=b.target;var d=a(c);if(!d.is(":submit,input:image")){var e=d.closest(":submit");if(e.length==0){return}c=e[0]}var f=this;f.clk=c;if(c.type=="image"){if(b.offsetX!=undefined){f.clk_x=b.offsetX;f.clk_y=b.offsetY}else if(typeof a.fn.offset=="function"){var g=d.offset();f.clk_x=b.pageX-g.left;f.clk_y=b.pageY-g.top}else{f.clk_x=b.pageX-c.offsetLeft;f.clk_y=b.pageY-c.offsetTop}}setTimeout(function(){f.clk=f.clk_x=f.clk_y=null},100)})};a.fn.ajaxFormUnbind=function(){return this.unbind("submit.form-plugin click.form-plugin")};a.fn.formToArray=function(b){var c=[];if(this.length===0){return c}var d=this[0];var e=b?d.getElementsByTagName("*"):d.elements;if(!e){return c}var f,g,h,i,j,k,l;for(f=0,k=e.length;f<k;f++){j=e[f];h=j.name;if(!h){continue}if(b&&d.clk&&j.type=="image"){if(!j.disabled&&d.clk==j){c.push({name:h,value:a(j).val()});c.push({name:h+".x",value:d.clk_x},{name:h+".y",value:d.clk_y})}continue}i=a.fieldValue(j,true);if(i&&i.constructor==Array){for(g=0,l=i.length;g<l;g++){c.push({name:h,value:i[g]})}}else if(i!==null&&typeof i!="undefined"){c.push({name:h,value:i})}}if(!b&&d.clk){var m=a(d.clk),n=m[0];h=n.name;if(h&&!n.disabled&&n.type=="image"){c.push({name:h,value:m.val()});c.push({name:h+".x",value:d.clk_x},{name:h+".y",value:d.clk_y})}}return c};a.fn.formSerialize=function(b){return a.param(this.formToArray(b))};a.fn.fieldSerialize=function(b){var c=[];this.each(function(){var d=this.name;if(!d){return}var e=a.fieldValue(this,b);if(e&&e.constructor==Array){for(var f=0,g=e.length;f<g;f++){c.push({name:d,value:e[f]})}}else if(e!==null&&typeof e!="undefined"){c.push({name:this.name,value:e})}});return a.param(c)};a.fn.fieldValue=function(b){for(var c=[],d=0,e=this.length;d<e;d++){var f=this[d];var g=a.fieldValue(f,b);if(g===null||typeof g=="undefined"||g.constructor==Array&&!g.length){continue}g.constructor==Array?a.merge(c,g):c.push(g)}return c};a.fieldValue=function(b,c){var d=b.name,e=b.type,f=b.tagName.toLowerCase();if(c===undefined){c=true}if(c&&(!d||b.disabled||e=="reset"||e=="button"||(e=="checkbox"||e=="radio")&&!b.checked||(e=="submit"||e=="image")&&b.form&&b.form.clk!=b||f=="select"&&b.selectedIndex==-1)){return null}if(f=="select"){var g=b.selectedIndex;if(g<0){return null}var h=[],i=b.options;var j=e=="select-one";var k=j?g+1:i.length;for(var l=j?g:0;l<k;l++){var m=i[l];if(m.selected){var n=m.value;if(!n){n=m.attributes&&m.attributes["value"]&&!m.attributes["value"].specified?m.text:m.value}if(j){return n}h.push(n)}}return h}return a(b).val()};a.fn.clearForm=function(){return this.each(function(){a("input,select,textarea",this).clearFields()})};a.fn.clearFields=a.fn.clearInputs=function(){var a=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;return this.each(function(){var b=this.type,c=this.tagName.toLowerCase();if(a.test(b)||c=="textarea"){this.value=""}else if(b=="checkbox"||b=="radio"){this.checked=false}else if(c=="select"){this.selectedIndex=-1}})};a.fn.resetForm=function(){return this.each(function(){if(typeof this.reset=="function"||typeof this.reset=="object"&&!this.reset.nodeType){this.reset()}})};a.fn.enable=function(a){if(a===undefined){a=true}return this.each(function(){this.disabled=!a})};a.fn.selected=function(b){if(b===undefined){b=true}return this.each(function(){var c=this.type;if(c=="checkbox"||c=="radio"){this.checked=b}else if(this.tagName.toLowerCase()=="option"){var d=a(this).parent("select");if(b&&d[0]&&d[0].type=="select-one"){d.find("option").selected(false)}this.selected=b}})};})(jQuery) \ No newline at end of file
diff --git a/public/javascripts/jquery.js b/public/javascripts/jquery.js
index 396646c84..48590ecb9 100644
--- a/public/javascripts/jquery.js
+++ b/public/javascripts/jquery.js
@@ -1,19 +1,18 @@
-/*
- * jQuery JavaScript Library v1.3
+/*!
+ * jQuery JavaScript Library v1.6.2
* http://jquery.com/
*
- * Copyright (c) 2009 John Resig
- * Dual licensed under the MIT and GPL licenses.
- * http://docs.jquery.com/License
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
*
- * Date: 2009-01-13 12:50:31 -0500 (Tue, 13 Jan 2009)
- * Revision: 6104
- */
-(function(){var l=this,g,x=l.jQuery,o=l.$,n=l.jQuery=l.$=function(D,E){return new n.fn.init(D,E)},C=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;n.fn=n.prototype={init:function(D,G){D=D||document;if(D.nodeType){this[0]=D;this.length=1;this.context=D;return this}if(typeof D==="string"){var F=C.exec(D);if(F&&(F[1]||!G)){if(F[1]){D=n.clean([F[1]],G)}else{var H=document.getElementById(F[3]);if(H){if(H.id!=F[3]){return n().find(D)}var E=n(H);E.context=document;E.selector=D;return E}D=[]}}else{return n(G).find(D)}}else{if(n.isFunction(D)){return n(document).ready(D)}}if(D.selector&&D.context){this.selector=D.selector;this.context=D.context}return this.setArray(n.makeArray(D))},selector:"",jquery:"1.3",size:function(){return this.length},get:function(D){return D===g?n.makeArray(this):this[D]},pushStack:function(E,G,D){var F=n(E);F.prevObject=this;F.context=this.context;if(G==="find"){F.selector=this.selector+(this.selector?" ":"")+D}else{if(G){F.selector=this.selector+"."+G+"("+D+")"}}return F},setArray:function(D){this.length=0;Array.prototype.push.apply(this,D);return this},each:function(E,D){return n.each(this,E,D)},index:function(D){return n.inArray(D&&D.jquery?D[0]:D,this)},attr:function(E,G,F){var D=E;if(typeof E==="string"){if(G===g){return this[0]&&n[F||"attr"](this[0],E)}else{D={};D[E]=G}}return this.each(function(H){for(E in D){n.attr(F?this.style:this,E,n.prop(this,D[E],F,H,E))}})},css:function(D,E){if((D=="width"||D=="height")&&parseFloat(E)<0){E=g}return this.attr(D,E,"curCSS")},text:function(E){if(typeof E!=="object"&&E!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(E))}var D="";n.each(E||this,function(){n.each(this.childNodes,function(){if(this.nodeType!=8){D+=this.nodeType!=1?this.nodeValue:n.fn.text([this])}})});return D},wrapAll:function(D){if(this[0]){var E=n(D,this[0].ownerDocument).clone();if(this[0].parentNode){E.insertBefore(this[0])}E.map(function(){var F=this;while(F.firstChild){F=F.firstChild}return F}).append(this)}return this},wrapInner:function(D){return this.each(function(){n(this).contents().wrapAll(D)})},wrap:function(D){return this.each(function(){n(this).wrapAll(D)})},append:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.appendChild(D)}})},prepend:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.insertBefore(D,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this)})},after:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this.nextSibling)})},end:function(){return this.prevObject||n([])},push:[].push,find:function(D){if(this.length===1&&!/,/.test(D)){var F=this.pushStack([],"find",D);F.length=0;n.find(D,this[0],F);return F}else{var E=n.map(this,function(G){return n.find(D,G)});return this.pushStack(/[^+>] [^+>]/.test(D)?n.unique(E):E,"find",D)}},clone:function(E){var D=this.map(function(){if(!n.support.noCloneEvent&&!n.isXMLDoc(this)){var H=this.cloneNode(true),G=document.createElement("div");G.appendChild(H);return n.clean([G.innerHTML])[0]}else{return this.cloneNode(true)}});var F=D.find("*").andSelf().each(function(){if(this[h]!==g){this[h]=null}});if(E===true){this.find("*").andSelf().each(function(H){if(this.nodeType==3){return}var G=n.data(this,"events");for(var J in G){for(var I in G[J]){n.event.add(F[H],J,G[J][I],G[J][I].data)}}})}return D},filter:function(D){return this.pushStack(n.isFunction(D)&&n.grep(this,function(F,E){return D.call(F,E)})||n.multiFilter(D,n.grep(this,function(E){return E.nodeType===1})),"filter",D)},closest:function(D){var E=n.expr.match.POS.test(D)?n(D):null;return this.map(function(){var F=this;while(F&&F.ownerDocument){if(E?E.index(F)>-1:n(F).is(D)){return F}F=F.parentNode}})},not:function(D){if(typeof D==="string"){if(f.test(D)){return this.pushStack(n.multiFilter(D,this,true),"not",D)}else{D=n.multiFilter(D,this)}}var E=D.length&&D[D.length-1]!==g&&!D.nodeType;return this.filter(function(){return E?n.inArray(this,D)<0:this!=D})},add:function(D){return this.pushStack(n.unique(n.merge(this.get(),typeof D==="string"?n(D):n.makeArray(D))))},is:function(D){return !!D&&n.multiFilter(D,this).length>0},hasClass:function(D){return !!D&&this.is("."+D)},val:function(J){if(J===g){var D=this[0];if(D){if(n.nodeName(D,"option")){return(D.attributes.value||{}).specified?D.value:D.text}if(n.nodeName(D,"select")){var H=D.selectedIndex,K=[],L=D.options,G=D.type=="select-one";if(H<0){return null}for(var E=G?H:0,I=G?H+1:L.length;E<I;E++){var F=L[E];if(F.selected){J=n(F).val();if(G){return J}K.push(J)}}return K}return(D.value||"").replace(/\r/g,"")}return g}if(typeof J==="number"){J+=""}return this.each(function(){if(this.nodeType!=1){return}if(n.isArray(J)&&/radio|checkbox/.test(this.type)){this.checked=(n.inArray(this.value,J)>=0||n.inArray(this.name,J)>=0)}else{if(n.nodeName(this,"select")){var M=n.makeArray(J);n("option",this).each(function(){this.selected=(n.inArray(this.value,M)>=0||n.inArray(this.text,M)>=0)});if(!M.length){this.selectedIndex=-1}}else{this.value=J}}})},html:function(D){return D===g?(this[0]?this[0].innerHTML:null):this.empty().append(D)},replaceWith:function(D){return this.after(D).remove()},eq:function(D){return this.slice(D,+D+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(D){return this.pushStack(n.map(this,function(F,E){return D.call(F,E,F)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=n.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild,D=this.length>1?I.cloneNode(true):I;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),G>0?D.cloneNode(true):I)}}if(F){n.each(F,y)}}return this;function K(N,O){return M&&n.nodeName(N,"table")&&n.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};n.fn.init.prototype=n.fn;function y(D,E){if(E.src){n.ajax({url:E.src,async:false,dataType:"script"})}else{n.globalEval(E.text||E.textContent||E.innerHTML||"")}if(E.parentNode){E.parentNode.removeChild(E)}}function e(){return +new Date}n.extend=n.fn.extend=function(){var I=arguments[0]||{},G=1,H=arguments.length,D=false,F;if(typeof I==="boolean"){D=I;I=arguments[1]||{};G=2}if(typeof I!=="object"&&!n.isFunction(I)){I={}}if(H==G){I=this;--G}for(;G<H;G++){if((F=arguments[G])!=null){for(var E in F){var J=I[E],K=F[E];if(I===K){continue}if(D&&K&&typeof K==="object"&&!K.nodeType){I[E]=n.extend(D,J||(K.length!=null?[]:{}),K)}else{if(K!==g){I[E]=K}}}}}return I};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,p=document.defaultView||{},r=Object.prototype.toString;n.extend({noConflict:function(D){l.$=o;if(D){l.jQuery=x}return n},isFunction:function(D){return r.call(D)==="[object Function]"},isArray:function(D){return r.call(D)==="[object Array]"},isXMLDoc:function(D){return D.documentElement&&!D.body||D.tagName&&D.ownerDocument&&!D.ownerDocument.body},globalEval:function(F){F=n.trim(F);if(F){var E=document.getElementsByTagName("head")[0]||document.documentElement,D=document.createElement("script");D.type="text/javascript";if(n.support.scriptEval){D.appendChild(document.createTextNode(F))}else{D.text=F}E.insertBefore(D,E.firstChild);E.removeChild(D)}},nodeName:function(E,D){return E.nodeName&&E.nodeName.toUpperCase()==D.toUpperCase()},each:function(F,J,E){var D,G=0,H=F.length;if(E){if(H===g){for(D in F){if(J.apply(F[D],E)===false){break}}}else{for(;G<H;){if(J.apply(F[G++],E)===false){break}}}}else{if(H===g){for(D in F){if(J.call(F[D],D,F[D])===false){break}}}else{for(var I=F[0];G<H&&J.call(I,G,I)!==false;I=F[++G]){}}}return F},prop:function(G,H,F,E,D){if(n.isFunction(H)){H=H.call(G,E)}return typeof H==="number"&&F=="curCSS"&&!b.test(D)?H+"px":H},className:{add:function(D,E){n.each((E||"").split(/\s+/),function(F,G){if(D.nodeType==1&&!n.className.has(D.className,G)){D.className+=(D.className?" ":"")+G}})},remove:function(D,E){if(D.nodeType==1){D.className=E!==g?n.grep(D.className.split(/\s+/),function(F){return !n.className.has(E,F)}).join(" "):""}},has:function(E,D){return n.inArray(D,(E.className||E).toString().split(/\s+/))>-1}},swap:function(G,F,H){var D={};for(var E in F){D[E]=G.style[E];G.style[E]=F[E]}H.call(G);for(var E in F){G.style[E]=D[E]}},css:function(F,D,H){if(D=="width"||D=="height"){var J,E={position:"absolute",visibility:"hidden",display:"block"},I=D=="width"?["Left","Right"]:["Top","Bottom"];function G(){J=D=="width"?F.offsetWidth:F.offsetHeight;var L=0,K=0;n.each(I,function(){L+=parseFloat(n.curCSS(F,"padding"+this,true))||0;K+=parseFloat(n.curCSS(F,"border"+this+"Width",true))||0});J-=Math.round(L+K)}if(n(F).is(":visible")){G()}else{n.swap(F,E,G)}return Math.max(0,J)}return n.curCSS(F,D,H)},curCSS:function(H,E,F){var K,D=H.style;if(E=="opacity"&&!n.support.opacity){K=n.attr(D,"opacity");return K==""?"1":K}if(E.match(/float/i)){E=v}if(!F&&D&&D[E]){K=D[E]}else{if(p.getComputedStyle){if(E.match(/float/i)){E="float"}E=E.replace(/([A-Z])/g,"-$1").toLowerCase();var L=p.getComputedStyle(H,null);if(L){K=L.getPropertyValue(E)}if(E=="opacity"&&K==""){K="1"}}else{if(H.currentStyle){var I=E.replace(/\-(\w)/g,function(M,N){return N.toUpperCase()});K=H.currentStyle[E]||H.currentStyle[I];if(!/^\d+(px)?$/i.test(K)&&/^\d/.test(K)){var G=D.left,J=H.runtimeStyle.left;H.runtimeStyle.left=H.currentStyle.left;D.left=K||0;K=D.pixelLeft+"px";D.left=G;H.runtimeStyle.left=J}}}}return K},clean:function(E,J,H){J=J||document;if(typeof J.createElement==="undefined"){J=J.ownerDocument||J[0]&&J[0].ownerDocument||document}if(!H&&E.length===1&&typeof E[0]==="string"){var G=/^<(\w+)\s*\/?>$/.exec(E[0]);if(G){return[J.createElement(G[1])]}}var F=[],D=[],K=J.createElement("div");n.each(E,function(O,Q){if(typeof Q==="number"){Q+=""}if(!Q){return}if(typeof Q==="string"){Q=Q.replace(/(<(\w+)[^>]*?)\/>/g,function(S,T,R){return R.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?S:T+"></"+R+">"});var N=n.trim(Q).toLowerCase();var P=!N.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!N.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||N.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!N.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!N.indexOf("<td")||!N.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!N.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!n.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];K.innerHTML=P[1]+Q+P[2];while(P[0]--){K=K.lastChild}if(!n.support.tbody){var M=!N.indexOf("<table")&&N.indexOf("<tbody")<0?K.firstChild&&K.firstChild.childNodes:P[1]=="<table>"&&N.indexOf("<tbody")<0?K.childNodes:[];for(var L=M.length-1;L>=0;--L){if(n.nodeName(M[L],"tbody")&&!M[L].childNodes.length){M[L].parentNode.removeChild(M[L])}}}if(!n.support.leadingWhitespace&&/^\s/.test(Q)){K.insertBefore(J.createTextNode(Q.match(/^\s*/)[0]),K.firstChild)}Q=n.makeArray(K.childNodes)}if(Q.nodeType){F.push(Q)}else{F=n.merge(F,Q)}});if(H){for(var I=0;F[I];I++){if(n.nodeName(F[I],"script")&&(!F[I].type||F[I].type.toLowerCase()==="text/javascript")){D.push(F[I].parentNode?F[I].parentNode.removeChild(F[I]):F[I])}else{if(F[I].nodeType===1){F.splice.apply(F,[I+1,0].concat(n.makeArray(F[I].getElementsByTagName("script"))))}H.appendChild(F[I])}}return D}return F},attr:function(I,F,J){if(!I||I.nodeType==3||I.nodeType==8){return g}var G=!n.isXMLDoc(I),K=J!==g;F=G&&n.props[F]||F;if(I.tagName){var E=/href|src|style/.test(F);if(F=="selected"&&I.parentNode){I.parentNode.selectedIndex}if(F in I&&G&&!E){if(K){if(F=="type"&&n.nodeName(I,"input")&&I.parentNode){throw"type property can't be changed"}I[F]=J}if(n.nodeName(I,"form")&&I.getAttributeNode(F)){return I.getAttributeNode(F).nodeValue}if(F=="tabIndex"){var H=I.getAttributeNode("tabIndex");return H&&H.specified?H.value:I.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i)?0:g}return I[F]}if(!n.support.style&&G&&F=="style"){return n.attr(I.style,"cssText",J)}if(K){I.setAttribute(F,""+J)}var D=!n.support.hrefNormalized&&G&&E?I.getAttribute(F,2):I.getAttribute(F);return D===null?g:D}if(!n.support.opacity&&F=="opacity"){if(K){I.zoom=1;I.filter=(I.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(J)+""=="NaN"?"":"alpha(opacity="+J*100+")")}return I.filter&&I.filter.indexOf("opacity=")>=0?(parseFloat(I.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}F=F.replace(/-([a-z])/ig,function(L,M){return M.toUpperCase()});if(K){I[F]=J}return I[F]},trim:function(D){return(D||"").replace(/^\s+|\s+$/g,"")},makeArray:function(F){var D=[];if(F!=null){var E=F.length;if(E==null||typeof F==="string"||n.isFunction(F)||F.setInterval){D[0]=F}else{while(E){D[--E]=F[E]}}}return D},inArray:function(F,G){for(var D=0,E=G.length;D<E;D++){if(G[D]===F){return D}}return -1},merge:function(G,D){var E=0,F,H=G.length;if(!n.support.getAll){while((F=D[E++])!=null){if(F.nodeType!=8){G[H++]=F}}}else{while((F=D[E++])!=null){G[H++]=F}}return G},unique:function(J){var E=[],D={};try{for(var F=0,G=J.length;F<G;F++){var I=n.data(J[F]);if(!D[I]){D[I]=true;E.push(J[F])}}}catch(H){E=J}return E},grep:function(E,I,D){var F=[];for(var G=0,H=E.length;G<H;G++){if(!D!=!I(E[G],G)){F.push(E[G])}}return F},map:function(D,I){var E=[];for(var F=0,G=D.length;F<G;F++){var H=I(D[F],F);if(H!=null){E[E.length]=H}}return E.concat.apply([],E)}});var B=navigator.userAgent.toLowerCase();n.browser={version:(B.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(B),opera:/opera/.test(B),msie:/msie/.test(B)&&!/opera/.test(B),mozilla:/mozilla/.test(B)&&!/(compatible|webkit)/.test(B)};n.each({parent:function(D){return D.parentNode},parents:function(D){return n.dir(D,"parentNode")},next:function(D){return n.nth(D,2,"nextSibling")},prev:function(D){return n.nth(D,2,"previousSibling")},nextAll:function(D){return n.dir(D,"nextSibling")},prevAll:function(D){return n.dir(D,"previousSibling")},siblings:function(D){return n.sibling(D.parentNode.firstChild,D)},children:function(D){return n.sibling(D.firstChild)},contents:function(D){return n.nodeName(D,"iframe")?D.contentDocument||D.contentWindow.document:n.makeArray(D.childNodes)}},function(D,E){n.fn[D]=function(F){var G=n.map(this,E);if(F&&typeof F=="string"){G=n.multiFilter(F,G)}return this.pushStack(n.unique(G),D,F)}});n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(D,E){n.fn[D]=function(){var F=arguments;return this.each(function(){for(var G=0,H=F.length;G<H;G++){n(F[G])[E](this)}})}});n.each({removeAttr:function(D){n.attr(this,D,"");if(this.nodeType==1){this.removeAttribute(D)}},addClass:function(D){n.className.add(this,D)},removeClass:function(D){n.className.remove(this,D)},toggleClass:function(E,D){if(typeof D!=="boolean"){D=!n.className.has(this,E)}n.className[D?"add":"remove"](this,E)},remove:function(D){if(!D||n.filter(D,[this]).length){n("*",this).add([this]).each(function(){n.event.remove(this);n.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){n(">*",this).remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(D,E){n.fn[D]=function(){return this.each(E,arguments)}});function j(D,E){return D[0]&&parseInt(n.curCSS(D[0],E,true),10)||0}var h="jQuery"+e(),u=0,z={};n.extend({cache:{},data:function(E,D,F){E=E==l?z:E;var G=E[h];if(!G){G=E[h]=++u}if(D&&!n.cache[G]){n.cache[G]={}}if(F!==g){n.cache[G][D]=F}return D?n.cache[G][D]:G},removeData:function(E,D){E=E==l?z:E;var G=E[h];if(D){if(n.cache[G]){delete n.cache[G][D];D="";for(D in n.cache[G]){break}if(!D){n.removeData(E)}}}else{try{delete E[h]}catch(F){if(E.removeAttribute){E.removeAttribute(h)}}delete n.cache[G]}},queue:function(E,D,G){if(E){D=(D||"fx")+"queue";var F=n.data(E,D);if(!F||n.isArray(G)){F=n.data(E,D,n.makeArray(G))}else{if(G){F.push(G)}}}return F},dequeue:function(G,F){var D=n.queue(G,F),E=D.shift();if(!F||F==="fx"){E=D[0]}if(E!==g){E.call(G)}}});n.fn.extend({data:function(D,F){var G=D.split(".");G[1]=G[1]?"."+G[1]:"";if(F===g){var E=this.triggerHandler("getData"+G[1]+"!",[G[0]]);if(E===g&&this.length){E=n.data(this[0],D)}return E===g&&G[1]?this.data(G[0]):E}else{return this.trigger("setData"+G[1]+"!",[G[0],F]).each(function(){n.data(this,D,F)})}},removeData:function(D){return this.each(function(){n.removeData(this,D)})},queue:function(D,E){if(typeof D!=="string"){E=D;D="fx"}if(E===g){return n.queue(this[0],D)}return this.each(function(){var F=n.queue(this,D,E);if(D=="fx"&&F.length==1){F[0].call(this)}})},dequeue:function(D){return this.each(function(){n.dequeue(this,D)})}});
-/*
- * Sizzle CSS Selector Engine - v0.9.1
- * Copyright 2009, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Jun 30 14:16:56 2011 -0400
*/
-(function(){var N=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,I=0,F=Object.prototype.toString;var E=function(ae,S,aa,V){aa=aa||[];S=S||document;if(S.nodeType!==1&&S.nodeType!==9){return[]}if(!ae||typeof ae!=="string"){return aa}var ab=[],ac,Y,ah,ag,Z,R,Q=true;N.lastIndex=0;while((ac=N.exec(ae))!==null){ab.push(ac[1]);if(ac[2]){R=RegExp.rightContext;break}}if(ab.length>1&&G.match.POS.exec(ae)){if(ab.length===2&&G.relative[ab[0]]){var U="",X;while((X=G.match.POS.exec(ae))){U+=X[0];ae=ae.replace(G.match.POS,"")}Y=E.filter(U,E(/\s$/.test(ae)?ae+"*":ae,S))}else{Y=G.relative[ab[0]]?[S]:E(ab.shift(),S);while(ab.length){var P=[];ae=ab.shift();if(G.relative[ae]){ae+=ab.shift()}for(var af=0,ad=Y.length;af<ad;af++){E(ae,Y[af],P)}Y=P}}}else{var ai=V?{expr:ab.pop(),set:D(V)}:E.find(ab.pop(),ab.length===1&&S.parentNode?S.parentNode:S);Y=E.filter(ai.expr,ai.set);if(ab.length>0){ah=D(Y)}else{Q=false}while(ab.length){var T=ab.pop(),W=T;if(!G.relative[T]){T=""}else{W=ab.pop()}if(W==null){W=S}G.relative[T](ah,W,M(S))}}if(!ah){ah=Y}if(!ah){throw"Syntax error, unrecognized expression: "+(T||ae)}if(F.call(ah)==="[object Array]"){if(!Q){aa.push.apply(aa,ah)}else{if(S.nodeType===1){for(var af=0;ah[af]!=null;af++){if(ah[af]&&(ah[af]===true||ah[af].nodeType===1&&H(S,ah[af]))){aa.push(Y[af])}}}else{for(var af=0;ah[af]!=null;af++){if(ah[af]&&ah[af].nodeType===1){aa.push(Y[af])}}}}}else{D(ah,aa)}if(R){E(R,S,aa,V)}return aa};E.matches=function(P,Q){return E(P,null,null,Q)};E.find=function(V,S){var W,Q;if(!V){return[]}for(var R=0,P=G.order.length;R<P;R++){var T=G.order[R],Q;if((Q=G.match[T].exec(V))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){Q[1]=(Q[1]||"").replace(/\\/g,"");W=G.find[T](Q,S);if(W!=null){V=V.replace(G.match[T],"");break}}}}if(!W){W=S.getElementsByTagName("*")}return{set:W,expr:V}};E.filter=function(S,ac,ad,T){var Q=S,Y=[],ah=ac,V,ab;while(S&&ac.length){for(var U in G.filter){if((V=G.match[U].exec(S))!=null){var Z=G.filter[U],R=null,X=0,aa,ag;ab=false;if(ah==Y){Y=[]}if(G.preFilter[U]){V=G.preFilter[U](V,ah,ad,Y,T);if(!V){ab=aa=true}else{if(V===true){continue}else{if(V[0]===true){R=[];var W=null,af;for(var ae=0;(af=ah[ae])!==g;ae++){if(af&&W!==af){R.push(af);W=af}}}}}}if(V){for(var ae=0;(ag=ah[ae])!==g;ae++){if(ag){if(R&&ag!=R[X]){X++}aa=Z(ag,V,X,R);var P=T^!!aa;if(ad&&aa!=null){if(P){ab=true}else{ah[ae]=false}}else{if(P){Y.push(ag);ab=true}}}}}if(aa!==g){if(!ad){ah=Y}S=S.replace(G.match[U],"");if(!ab){return[]}break}}}S=S.replace(/\s*,\s*/,"");if(S==Q){if(ab==null){throw"Syntax error, unrecognized expression: "+S}else{break}}Q=S}return ah};var G=E.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(P){return P.getAttribute("href")}},relative:{"+":function(T,Q){for(var R=0,P=T.length;R<P;R++){var S=T[R];if(S){var U=S.previousSibling;while(U&&U.nodeType!==1){U=U.previousSibling}T[R]=typeof Q==="string"?U||false:U===Q}}if(typeof Q==="string"){E.filter(Q,T,true)}},">":function(U,Q,V){if(typeof Q==="string"&&!/\W/.test(Q)){Q=V?Q:Q.toUpperCase();for(var R=0,P=U.length;R<P;R++){var T=U[R];if(T){var S=T.parentNode;U[R]=S.nodeName===Q?S:false}}}else{for(var R=0,P=U.length;R<P;R++){var T=U[R];if(T){U[R]=typeof Q==="string"?T.parentNode:T.parentNode===Q}}if(typeof Q==="string"){E.filter(Q,U,true)}}},"":function(S,Q,U){var R="done"+(I++),P=O;if(!Q.match(/\W/)){var T=Q=U?Q:Q.toUpperCase();P=L}P("parentNode",Q,R,S,T,U)},"~":function(S,Q,U){var R="done"+(I++),P=O;if(typeof Q==="string"&&!Q.match(/\W/)){var T=Q=U?Q:Q.toUpperCase();P=L}P("previousSibling",Q,R,S,T,U)}},find:{ID:function(Q,R){if(R.getElementById){var P=R.getElementById(Q[1]);return P?[P]:[]}},NAME:function(P,Q){return Q.getElementsByName?Q.getElementsByName(P[1]):null},TAG:function(P,Q){return Q.getElementsByTagName(P[1])}},preFilter:{CLASS:function(S,Q,R,P,U){S=" "+S[1].replace(/\\/g,"")+" ";for(var T=0;Q[T];T++){if(U^(" "+Q[T].className+" ").indexOf(S)>=0){if(!R){P.push(Q[T])}}else{if(R){Q[T]=false}}}return false},ID:function(P){return P[1].replace(/\\/g,"")},TAG:function(Q,P){for(var R=0;!P[R];R++){}return M(P[R])?Q[1]:Q[1].toUpperCase()},CHILD:function(P){if(P[1]=="nth"){var Q=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(P[2]=="even"&&"2n"||P[2]=="odd"&&"2n+1"||!/\D/.test(P[2])&&"0n+"+P[2]||P[2]);P[2]=(Q[1]+(Q[2]||1))-0;P[3]=Q[3]-0}P[0]="done"+(I++);return P},ATTR:function(Q){var P=Q[1];if(G.attrMap[P]){Q[1]=G.attrMap[P]}if(Q[2]==="~="){Q[4]=" "+Q[4]+" "}return Q},PSEUDO:function(T,Q,R,P,U){if(T[1]==="not"){if(T[3].match(N).length>1){T[3]=E(T[3],null,null,Q)}else{var S=E.filter(T[3],Q,R,true^U);if(!R){P.push.apply(P,S)}return false}}else{if(G.match.POS.test(T[0])){return true}}return T},POS:function(P){P.unshift(true);return P}},filters:{enabled:function(P){return P.disabled===false&&P.type!=="hidden"},disabled:function(P){return P.disabled===true},checked:function(P){return P.checked===true},selected:function(P){P.parentNode.selectedIndex;return P.selected===true},parent:function(P){return !!P.firstChild},empty:function(P){return !P.firstChild},has:function(R,Q,P){return !!E(P[3],R).length},header:function(P){return/h\d/i.test(P.nodeName)},text:function(P){return"text"===P.type},radio:function(P){return"radio"===P.type},checkbox:function(P){return"checkbox"===P.type},file:function(P){return"file"===P.type},password:function(P){return"password"===P.type},submit:function(P){return"submit"===P.type},image:function(P){return"image"===P.type},reset:function(P){return"reset"===P.type},button:function(P){return"button"===P.type||P.nodeName.toUpperCase()==="BUTTON"},input:function(P){return/input|select|textarea|button/i.test(P.nodeName)}},setFilters:{first:function(Q,P){return P===0},last:function(R,Q,P,S){return Q===S.length-1},even:function(Q,P){return P%2===0},odd:function(Q,P){return P%2===1},lt:function(R,Q,P){return Q<P[3]-0},gt:function(R,Q,P){return Q>P[3]-0},nth:function(R,Q,P){return P[3]-0==Q},eq:function(R,Q,P){return P[3]-0==Q}},filter:{CHILD:function(P,S){var V=S[1],W=P.parentNode;var U="child"+W.childNodes.length;if(W&&(!W[U]||!P.nodeIndex)){var T=1;for(var Q=W.firstChild;Q;Q=Q.nextSibling){if(Q.nodeType==1){Q.nodeIndex=T++}}W[U]=T-1}if(V=="first"){return P.nodeIndex==1}else{if(V=="last"){return P.nodeIndex==W[U]}else{if(V=="only"){return W[U]==1}else{if(V=="nth"){var Y=false,R=S[2],X=S[3];if(R==1&&X==0){return true}if(R==0){if(P.nodeIndex==X){Y=true}}else{if((P.nodeIndex-X)%R==0&&(P.nodeIndex-X)/R>=0){Y=true}}return Y}}}}},PSEUDO:function(V,R,S,W){var Q=R[1],T=G.filters[Q];if(T){return T(V,S,R,W)}else{if(Q==="contains"){return(V.textContent||V.innerText||"").indexOf(R[3])>=0}else{if(Q==="not"){var U=R[3];for(var S=0,P=U.length;S<P;S++){if(U[S]===V){return false}}return true}}}},ID:function(Q,P){return Q.nodeType===1&&Q.getAttribute("id")===P},TAG:function(Q,P){return(P==="*"&&Q.nodeType===1)||Q.nodeName===P},CLASS:function(Q,P){return P.test(Q.className)},ATTR:function(T,R){var P=G.attrHandle[R[1]]?G.attrHandle[R[1]](T):T[R[1]]||T.getAttribute(R[1]),U=P+"",S=R[2],Q=R[4];return P==null?false:S==="="?U===Q:S==="*="?U.indexOf(Q)>=0:S==="~="?(" "+U+" ").indexOf(Q)>=0:!R[4]?P:S==="!="?U!=Q:S==="^="?U.indexOf(Q)===0:S==="$="?U.substr(U.length-Q.length)===Q:S==="|="?U===Q||U.substr(0,Q.length+1)===Q+"-":false},POS:function(T,Q,R,U){var P=Q[2],S=G.setFilters[P];if(S){return S(T,R,Q,U)}}}};for(var K in G.match){G.match[K]=RegExp(G.match[K].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var D=function(Q,P){Q=Array.prototype.slice.call(Q);if(P){P.push.apply(P,Q);return P}return Q};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(J){D=function(T,S){var Q=S||[];if(F.call(T)==="[object Array]"){Array.prototype.push.apply(Q,T)}else{if(typeof T.length==="number"){for(var R=0,P=T.length;R<P;R++){Q.push(T[R])}}else{for(var R=0;T[R];R++){Q.push(T[R])}}}return Q}}(function(){var Q=document.createElement("form"),R="script"+(new Date).getTime();Q.innerHTML="<input name='"+R+"'/>";var P=document.documentElement;P.insertBefore(Q,P.firstChild);if(!!document.getElementById(R)){G.find.ID=function(T,U){if(U.getElementById){var S=U.getElementById(T[1]);return S?S.id===T[1]||S.getAttributeNode&&S.getAttributeNode("id").nodeValue===T[1]?[S]:g:[]}};G.filter.ID=function(U,S){var T=U.getAttributeNode&&U.getAttributeNode("id");return U.nodeType===1&&T&&T.nodeValue===S}}P.removeChild(Q)})();(function(){var P=document.createElement("div");P.appendChild(document.createComment(""));if(P.getElementsByTagName("*").length>0){G.find.TAG=function(Q,U){var T=U.getElementsByTagName(Q[1]);if(Q[1]==="*"){var S=[];for(var R=0;T[R];R++){if(T[R].nodeType===1){S.push(T[R])}}T=S}return T}}P.innerHTML="<a href='#'></a>";if(P.firstChild.getAttribute("href")!=="#"){G.attrHandle.href=function(Q){return Q.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var P=E;E=function(T,S,Q,R){S=S||document;if(!R&&S.nodeType===9){try{return D(S.querySelectorAll(T),Q)}catch(U){}}return P(T,S,Q,R)};E.find=P.find;E.filter=P.filter;E.selectors=P.selectors;E.matches=P.matches})()}if(document.documentElement.getElementsByClassName){G.order.splice(1,0,"CLASS");G.find.CLASS=function(P,Q){return Q.getElementsByClassName(P[1])}}function L(Q,W,V,Z,X,Y){for(var T=0,R=Z.length;T<R;T++){var P=Z[T];if(P){P=P[Q];var U=false;while(P&&P.nodeType){var S=P[V];if(S){U=Z[S];break}if(P.nodeType===1&&!Y){P[V]=T}if(P.nodeName===W){U=P;break}P=P[Q]}Z[T]=U}}}function O(Q,V,U,Y,W,X){for(var S=0,R=Y.length;S<R;S++){var P=Y[S];if(P){P=P[Q];var T=false;while(P&&P.nodeType){if(P[U]){T=Y[P[U]];break}if(P.nodeType===1){if(!X){P[U]=S}if(typeof V!=="string"){if(P===V){T=true;break}}else{if(E.filter(V,[P]).length>0){T=P;break}}}P=P[Q]}Y[S]=T}}}var H=document.compareDocumentPosition?function(Q,P){return Q.compareDocumentPosition(P)&16}:function(Q,P){return Q!==P&&(Q.contains?Q.contains(P):true)};var M=function(P){return P.documentElement&&!P.body||P.tagName&&P.ownerDocument&&!P.ownerDocument.body};n.find=E;n.filter=E.filter;n.expr=E.selectors;n.expr[":"]=n.expr.filters;E.selectors.filters.hidden=function(P){return"hidden"===P.type||n.css(P,"display")==="none"||n.css(P,"visibility")==="hidden"};E.selectors.filters.visible=function(P){return"hidden"!==P.type&&n.css(P,"display")!=="none"&&n.css(P,"visibility")!=="hidden"};E.selectors.filters.animated=function(P){return n.grep(n.timers,function(Q){return P===Q.elem}).length};n.multiFilter=function(R,P,Q){if(Q){R=":not("+R+")"}return E.matches(R,P)};n.dir=function(R,Q){var P=[],S=R[Q];while(S&&S!=document){if(S.nodeType==1){P.push(S)}S=S[Q]}return P};n.nth=function(T,P,R,S){P=P||1;var Q=0;for(;T;T=T[R]){if(T.nodeType==1&&++Q==P){break}}return T};n.sibling=function(R,Q){var P=[];for(;R;R=R.nextSibling){if(R.nodeType==1&&R!=Q){P.push(R)}}return P};return;l.Sizzle=E})();n.event={add:function(H,E,G,J){if(H.nodeType==3||H.nodeType==8){return}if(H.setInterval&&H!=l){H=l}if(!G.guid){G.guid=this.guid++}if(J!==g){var F=G;G=this.proxy(F);G.data=J}var D=n.data(H,"events")||n.data(H,"events",{}),I=n.data(H,"handle")||n.data(H,"handle",function(){return typeof n!=="undefined"&&!n.event.triggered?n.event.handle.apply(arguments.callee.elem,arguments):g});I.elem=H;n.each(E.split(/\s+/),function(L,M){var N=M.split(".");M=N.shift();G.type=N.slice().sort().join(".");var K=D[M];if(n.event.specialAll[M]){n.event.specialAll[M].setup.call(H,J,N)}if(!K){K=D[M]={};if(!n.event.special[M]||n.event.special[M].setup.call(H,J,N)===false){if(H.addEventListener){H.addEventListener(M,I,false)}else{if(H.attachEvent){H.attachEvent("on"+M,I)}}}}K[G.guid]=G;n.event.global[M]=true});H=null},guid:1,global:{},remove:function(J,G,I){if(J.nodeType==3||J.nodeType==8){return}var F=n.data(J,"events"),E,D;if(F){if(G===g||(typeof G==="string"&&G.charAt(0)==".")){for(var H in F){this.remove(J,H+(G||""))}}else{if(G.type){I=G.handler;G=G.type}n.each(G.split(/\s+/),function(L,N){var P=N.split(".");N=P.shift();var M=RegExp("(^|\\.)"+P.slice().sort().join(".*\\.")+"(\\.|$)");if(F[N]){if(I){delete F[N][I.guid]}else{for(var O in F[N]){if(M.test(F[N][O].type)){delete F[N][O]}}}if(n.event.specialAll[N]){n.event.specialAll[N].teardown.call(J,P)}for(E in F[N]){break}if(!E){if(!n.event.special[N]||n.event.special[N].teardown.call(J,P)===false){if(J.removeEventListener){J.removeEventListener(N,n.data(J,"handle"),false)}else{if(J.detachEvent){J.detachEvent("on"+N,n.data(J,"handle"))}}}E=null;delete F[N]}}})}for(E in F){break}if(!E){var K=n.data(J,"handle");if(K){K.elem=null}n.removeData(J,"events");n.removeData(J,"handle")}}},trigger:function(H,J,G,D){var F=H.type||H;if(!D){H=typeof H==="object"?H[h]?H:n.extend(n.Event(F),H):n.Event(F);if(F.indexOf("!")>=0){H.type=F=F.slice(0,-1);H.exclusive=true}if(!G){H.stopPropagation();if(this.global[F]){n.each(n.cache,function(){if(this.events&&this.events[F]){n.event.trigger(H,J,this.handle.elem)}})}}if(!G||G.nodeType==3||G.nodeType==8){return g}H.result=g;H.target=G;J=n.makeArray(J);J.unshift(H)}H.currentTarget=G;var I=n.data(G,"handle");if(I){I.apply(G,J)}if((!G[F]||(n.nodeName(G,"a")&&F=="click"))&&G["on"+F]&&G["on"+F].apply(G,J)===false){H.result=false}if(!D&&G[F]&&!H.isDefaultPrevented()&&!(n.nodeName(G,"a")&&F=="click")){this.triggered=true;try{G[F]()}catch(K){}}this.triggered=false;if(!H.isPropagationStopped()){var E=G.parentNode||G.ownerDocument;if(E){n.event.trigger(H,J,E,true)}}},handle:function(J){var I,D;J=arguments[0]=n.event.fix(J||l.event);var K=J.type.split(".");J.type=K.shift();I=!K.length&&!J.exclusive;var H=RegExp("(^|\\.)"+K.slice().sort().join(".*\\.")+"(\\.|$)");D=(n.data(this,"events")||{})[J.type];for(var F in D){var G=D[F];if(I||H.test(G.type)){J.handler=G;J.data=G.data;var E=G.apply(this,arguments);if(E!==g){J.result=E;if(E===false){J.preventDefault();J.stopPropagation()}}if(J.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(G){if(G[h]){return G}var E=G;G=n.Event(E);for(var F=this.props.length,I;F;){I=this.props[--F];G[I]=E[I]}if(!G.target){G.target=G.srcElement||document}if(G.target.nodeType==3){G.target=G.target.parentNode}if(!G.relatedTarget&&G.fromElement){G.relatedTarget=G.fromElement==G.target?G.toElement:G.fromElement}if(G.pageX==null&&G.clientX!=null){var H=document.documentElement,D=document.body;G.pageX=G.clientX+(H&&H.scrollLeft||D&&D.scrollLeft||0)-(H.clientLeft||0);G.pageY=G.clientY+(H&&H.scrollTop||D&&D.scrollTop||0)-(H.clientTop||0)}if(!G.which&&((G.charCode||G.charCode===0)?G.charCode:G.keyCode)){G.which=G.charCode||G.keyCode}if(!G.metaKey&&G.ctrlKey){G.metaKey=G.ctrlKey}if(!G.which&&G.button){G.which=(G.button&1?1:(G.button&2?3:(G.button&4?2:0)))}return G},proxy:function(E,D){D=D||function(){return E.apply(this,arguments)};D.guid=E.guid=E.guid||D.guid||this.guid++;return D},special:{ready:{setup:A,teardown:function(){}}},specialAll:{live:{setup:function(D,E){n.event.add(this,E[0],c)},teardown:function(F){if(F.length){var D=0,E=RegExp("(^|\\.)"+F[0]+"(\\.|$)");n.each((n.data(this,"events").live||{}),function(){if(E.test(this.type)){D++}});if(D<1){n.event.remove(this,F[0],c)}}}}}};n.Event=function(D){if(!this.preventDefault){return new n.Event(D)}if(D&&D.type){this.originalEvent=D;this.type=D.type;this.timeStamp=D.timeStamp}else{this.type=D}if(!this.timeStamp){this.timeStamp=e()}this[h]=true};function k(){return false}function t(){return true}n.Event.prototype={preventDefault:function(){this.isDefaultPrevented=t;var D=this.originalEvent;if(!D){return}if(D.preventDefault){D.preventDefault()}D.returnValue=false},stopPropagation:function(){this.isPropagationStopped=t;var D=this.originalEvent;if(!D){return}if(D.stopPropagation){D.stopPropagation()}D.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=t;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(E){var D=E.relatedTarget;while(D&&D!=this){try{D=D.parentNode}catch(F){D=this}}if(D!=this){E.type=E.data;n.event.handle.apply(this,arguments)}};n.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(E,D){n.event.special[D]={setup:function(){n.event.add(this,E,a,D)},teardown:function(){n.event.remove(this,E,a)}}});n.fn.extend({bind:function(E,F,D){return E=="unload"?this.one(E,F,D):this.each(function(){n.event.add(this,E,D||F,D&&F)})},one:function(F,G,E){var D=n.event.proxy(E||G,function(H){n(this).unbind(H,D);return(E||G).apply(this,arguments)});return this.each(function(){n.event.add(this,F,D,E&&G)})},unbind:function(E,D){return this.each(function(){n.event.remove(this,E,D)})},trigger:function(D,E){return this.each(function(){n.event.trigger(D,E,this)})},triggerHandler:function(D,F){if(this[0]){var E=n.Event(D);E.preventDefault();E.stopPropagation();n.event.trigger(E,F,this[0]);return E.result}},toggle:function(F){var D=arguments,E=1;while(E<D.length){n.event.proxy(F,D[E++])}return this.click(n.event.proxy(F,function(G){this.lastToggle=(this.lastToggle||0)%E;G.preventDefault();return D[this.lastToggle++].apply(this,arguments)||false}))},hover:function(D,E){return this.mouseenter(D).mouseleave(E)},ready:function(D){A();if(n.isReady){D.call(document,n)}else{n.readyList.push(D)}return this},live:function(F,E){var D=n.event.proxy(E);D.guid+=this.selector+F;n(document).bind(i(F,this.selector),this.selector,D);return this},die:function(E,D){n(document).unbind(i(E,this.selector),D?{guid:D.guid+this.selector+E}:null);return this}});function c(G){var D=RegExp("(^|\\.)"+G.type+"(\\.|$)"),F=true,E=[];n.each(n.data(this,"events").live||[],function(H,I){if(D.test(I.type)){var J=n(G.target).closest(I.data)[0];if(J){E.push({elem:J,fn:I})}}});n.each(E,function(){if(!G.isImmediatePropagationStopped()&&this.fn.call(this.elem,G,this.fn.data)===false){F=false}});return F}function i(E,D){return["live",E,D.replace(/\./g,"`").replace(/ /g,"|")].join(".")}n.extend({isReady:false,readyList:[],ready:function(){if(!n.isReady){n.isReady=true;if(n.readyList){n.each(n.readyList,function(){this.call(document,n)});n.readyList=null}n(document).triggerHandler("ready")}}});var w=false;function A(){if(w){return}w=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);n.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);n.ready()}});if(document.documentElement.doScroll&&!l.frameElement){(function(){if(n.isReady){return}try{document.documentElement.doScroll("left")}catch(D){setTimeout(arguments.callee,0);return}n.ready()})()}}}n.event.add(l,"load",n.ready)}n.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(E,D){n.fn[D]=function(F){return F?this.bind(D,F):this.trigger(D)}});n(l).bind("unload",function(){for(var D in n.cache){if(D!=1&&n.cache[D].handle){n.event.remove(n.cache[D].handle.elem)}}});(function(){n.support={};var E=document.documentElement,F=document.createElement("script"),J=document.createElement("div"),I="script"+(new Date).getTime();J.style.display="none";J.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var G=J.getElementsByTagName("*"),D=J.getElementsByTagName("a")[0];if(!G||!G.length||!D){return}n.support={leadingWhitespace:J.firstChild.nodeType==3,tbody:!J.getElementsByTagName("tbody").length,objectAll:!!J.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!J.getElementsByTagName("link").length,style:/red/.test(D.getAttribute("style")),hrefNormalized:D.getAttribute("href")==="/a",opacity:D.style.opacity==="0.5",cssFloat:!!D.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};F.type="text/javascript";try{F.appendChild(document.createTextNode("window."+I+"=1;"))}catch(H){}E.insertBefore(F,E.firstChild);if(l[I]){n.support.scriptEval=true;delete l[I]}E.removeChild(F);if(J.attachEvent&&J.fireEvent){J.attachEvent("onclick",function(){n.support.noCloneEvent=false;J.detachEvent("onclick",arguments.callee)});J.cloneNode(true).fireEvent("onclick")}n(function(){var K=document.createElement("div");K.style.width="1px";K.style.paddingLeft="1px";document.body.appendChild(K);n.boxModel=n.support.boxModel=K.offsetWidth===2;document.body.removeChild(K)})})();var v=n.support.cssFloat?"cssFloat":"styleFloat";n.props={"for":"htmlFor","class":"className","float":v,cssFloat:v,styleFloat:v,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};n.fn.extend({_load:n.fn.load,load:function(F,I,J){if(typeof F!=="string"){return this._load(F)}var H=F.indexOf(" ");if(H>=0){var D=F.slice(H,F.length);F=F.slice(0,H)}var G="GET";if(I){if(n.isFunction(I)){J=I;I=null}else{if(typeof I==="object"){I=n.param(I);G="POST"}}}var E=this;n.ajax({url:F,type:G,dataType:"html",data:I,complete:function(L,K){if(K=="success"||K=="notmodified"){E.html(D?n("<div/>").append(L.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(D):L.responseText)}if(J){E.each(J,[L.responseText,K,L])}}});return this},serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?n.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type))}).map(function(D,E){var F=n(this).val();return F==null?null:n.isArray(F)?n.map(F,function(H,G){return{name:E.name,value:H}}):{name:E.name,value:F}}).get()}});n.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(D,E){n.fn[E]=function(F){return this.bind(E,F)}});var q=e();n.extend({get:function(D,F,G,E){if(n.isFunction(F)){G=F;F=null}return n.ajax({type:"GET",url:D,data:F,success:G,dataType:E})},getScript:function(D,E){return n.get(D,null,E,"script")},getJSON:function(D,E,F){return n.get(D,E,F,"json")},post:function(D,F,G,E){if(n.isFunction(F)){G=F;F={}}return n.ajax({type:"POST",url:D,data:F,success:G,dataType:E})},ajaxSetup:function(D){n.extend(n.ajaxSettings,D)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(L){L=n.extend(true,L,n.extend(true,{},n.ajaxSettings,L));var V,E=/=\?(&|$)/g,Q,U,F=L.type.toUpperCase();if(L.data&&L.processData&&typeof L.data!=="string"){L.data=n.param(L.data)}if(L.dataType=="jsonp"){if(F=="GET"){if(!L.url.match(E)){L.url+=(L.url.match(/\?/)?"&":"?")+(L.jsonp||"callback")+"=?"}}else{if(!L.data||!L.data.match(E)){L.data=(L.data?L.data+"&":"")+(L.jsonp||"callback")+"=?"}}L.dataType="json"}if(L.dataType=="json"&&(L.data&&L.data.match(E)||L.url.match(E))){V="jsonp"+q++;if(L.data){L.data=(L.data+"").replace(E,"="+V+"$1")}L.url=L.url.replace(E,"="+V+"$1");L.dataType="script";l[V]=function(W){U=W;H();K();l[V]=g;try{delete l[V]}catch(X){}if(G){G.removeChild(S)}}}if(L.dataType=="script"&&L.cache==null){L.cache=false}if(L.cache===false&&F=="GET"){var D=e();var T=L.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+D+"$2");L.url=T+((T==L.url)?(L.url.match(/\?/)?"&":"?")+"_="+D:"")}if(L.data&&F=="GET"){L.url+=(L.url.match(/\?/)?"&":"?")+L.data;L.data=null}if(L.global&&!n.active++){n.event.trigger("ajaxStart")}var P=/^(\w+:)?\/\/([^\/?#]+)/.exec(L.url);if(L.dataType=="script"&&F=="GET"&&P&&(P[1]&&P[1]!=location.protocol||P[2]!=location.host)){var G=document.getElementsByTagName("head")[0];var S=document.createElement("script");S.src=L.url;if(L.scriptCharset){S.charset=L.scriptCharset}if(!V){var N=false;S.onload=S.onreadystatechange=function(){if(!N&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){N=true;H();K();G.removeChild(S)}}}G.appendChild(S);return g}var J=false;var I=L.xhr();if(L.username){I.open(F,L.url,L.async,L.username,L.password)}else{I.open(F,L.url,L.async)}try{if(L.data){I.setRequestHeader("Content-Type",L.contentType)}if(L.ifModified){I.setRequestHeader("If-Modified-Since",n.lastModified[L.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}I.setRequestHeader("X-Requested-With","XMLHttpRequest");I.setRequestHeader("Accept",L.dataType&&L.accepts[L.dataType]?L.accepts[L.dataType]+", */*":L.accepts._default)}catch(R){}if(L.beforeSend&&L.beforeSend(I,L)===false){if(L.global&&!--n.active){n.event.trigger("ajaxStop")}I.abort();return false}if(L.global){n.event.trigger("ajaxSend",[I,L])}var M=function(W){if(I.readyState==0){if(O){clearInterval(O);O=null;if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}}else{if(!J&&I&&(I.readyState==4||W=="timeout")){J=true;if(O){clearInterval(O);O=null}Q=W=="timeout"?"timeout":!n.httpSuccess(I)?"error":L.ifModified&&n.httpNotModified(I,L.url)?"notmodified":"success";if(Q=="success"){try{U=n.httpData(I,L.dataType,L)}catch(Y){Q="parsererror"}}if(Q=="success"){var X;try{X=I.getResponseHeader("Last-Modified")}catch(Y){}if(L.ifModified&&X){n.lastModified[L.url]=X}if(!V){H()}}else{n.handleError(L,I,Q)}K();if(L.async){I=null}}}};if(L.async){var O=setInterval(M,13);if(L.timeout>0){setTimeout(function(){if(I){if(!J){M("timeout")}if(I){I.abort()}}},L.timeout)}}try{I.send(L.data)}catch(R){n.handleError(L,I,null,R)}if(!L.async){M()}function H(){if(L.success){L.success(U,Q)}if(L.global){n.event.trigger("ajaxSuccess",[I,L])}}function K(){if(L.complete){L.complete(I,Q)}if(L.global){n.event.trigger("ajaxComplete",[I,L])}if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}return I},handleError:function(E,G,D,F){if(E.error){E.error(G,D,F)}if(E.global){n.event.trigger("ajaxError",[G,E,F])}},active:0,httpSuccess:function(E){try{return !E.status&&location.protocol=="file:"||(E.status>=200&&E.status<300)||E.status==304||E.status==1223}catch(D){}return false},httpNotModified:function(F,D){try{var G=F.getResponseHeader("Last-Modified");return F.status==304||G==n.lastModified[D]}catch(E){}return false},httpData:function(I,G,F){var E=I.getResponseHeader("content-type"),D=G=="xml"||!G&&E&&E.indexOf("xml")>=0,H=D?I.responseXML:I.responseText;if(D&&H.documentElement.tagName=="parsererror"){throw"parsererror"}if(F&&F.dataFilter){H=F.dataFilter(H,G)}if(typeof H==="string"){if(G=="script"){n.globalEval(H)}if(G=="json"){H=l["eval"]("("+H+")")}}return H},param:function(D){var F=[];function G(H,I){F[F.length]=encodeURIComponent(H)+"="+encodeURIComponent(I)}if(n.isArray(D)||D.jquery){n.each(D,function(){G(this.name,this.value)})}else{for(var E in D){if(n.isArray(D[E])){n.each(D[E],function(){G(E,this)})}else{G(E,n.isFunction(D[E])?D[E]():D[E])}}}return F.join("&").replace(/%20/g,"+")}});var m={},d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function s(E,D){var F={};n.each(d.concat.apply([],d.slice(0,D)),function(){F[this]=E});return F}n.fn.extend({show:function(I,K){if(I){return this.animate(s("show",3),I,K)}else{for(var G=0,E=this.length;G<E;G++){var D=n.data(this[G],"olddisplay");this[G].style.display=D||"";if(n.css(this[G],"display")==="none"){var F=this[G].tagName,J;if(m[F]){J=m[F]}else{var H=n("<"+F+" />").appendTo("body");J=H.css("display");if(J==="none"){J="block"}H.remove();m[F]=J}this[G].style.display=n.data(this[G],"olddisplay",J)}}return this}},hide:function(G,H){if(G){return this.animate(s("hide",3),G,H)}else{for(var F=0,E=this.length;F<E;F++){var D=n.data(this[F],"olddisplay");if(!D&&D!=="none"){n.data(this[F],"olddisplay",n.css(this[F],"display"))}this[F].style.display="none"}return this}},_toggle:n.fn.toggle,toggle:function(F,E){var D=typeof F==="boolean";return n.isFunction(F)&&n.isFunction(E)?this._toggle.apply(this,arguments):F==null||D?this.each(function(){var G=D?F:n(this).is(":hidden");n(this)[G?"show":"hide"]()}):this.animate(s("toggle",3),F,E)},fadeTo:function(D,F,E){return this.animate({opacity:F},D,E)},animate:function(H,E,G,F){var D=n.speed(E,G,F);return this[D.queue===false?"each":"queue"](function(){var J=n.extend({},D),L,K=this.nodeType==1&&n(this).is(":hidden"),I=this;for(L in H){if(H[L]=="hide"&&K||H[L]=="show"&&!K){return J.complete.call(this)}if((L=="height"||L=="width")&&this.style){J.display=n.css(this,"display");J.overflow=this.style.overflow}}if(J.overflow!=null){this.style.overflow="hidden"}J.curAnim=n.extend({},H);n.each(H,function(N,R){var Q=new n.fx(I,J,N);if(/toggle|show|hide/.test(R)){Q[R=="toggle"?K?"show":"hide":R](H)}else{var P=R.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),S=Q.cur(true)||0;if(P){var M=parseFloat(P[2]),O=P[3]||"px";if(O!="px"){I.style[N]=(M||1)+O;S=((M||1)/Q.cur(true))*S;I.style[N]=S+O}if(P[1]){M=((P[1]=="-="?-1:1)*M)+S}Q.custom(S,M,O)}else{Q.custom(S,R,"")}}});return true})},stop:function(E,D){var F=n.timers;if(E){this.queue([])}this.each(function(){for(var G=F.length-1;G>=0;G--){if(F[G].elem==this){if(D){F[G](true)}F.splice(G,1)}}});if(!D){this.dequeue()}return this}});n.each({slideDown:s("show",1),slideUp:s("hide",1),slideToggle:s("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(D,E){n.fn[D]=function(F,G){return this.animate(E,F,G)}});n.extend({speed:function(F,G,E){var D=typeof F==="object"?F:{complete:E||!E&&G||n.isFunction(F)&&F,duration:F,easing:E&&G||G&&!n.isFunction(G)&&G};D.duration=n.fx.off?0:typeof D.duration==="number"?D.duration:n.fx.speeds[D.duration]||n.fx.speeds._default;D.old=D.complete;D.complete=function(){if(D.queue!==false){n(this).dequeue()}if(n.isFunction(D.old)){D.old.call(this)}};return D},easing:{linear:function(F,G,D,E){return D+E*F},swing:function(F,G,D,E){return((-Math.cos(F*Math.PI)/2)+0.5)*E+D}},timers:[],timerId:null,fx:function(E,D,F){this.options=D;this.elem=E;this.prop=F;if(!D.orig){D.orig={}}}});n.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(n.fx.step[this.prop]||n.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(E){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var D=parseFloat(n.css(this.elem,this.prop,E));return D&&D>-10000?D:parseFloat(n.curCSS(this.elem,this.prop))||0},custom:function(H,G,F){this.startTime=e();this.start=H;this.end=G;this.unit=F||this.unit||"px";this.now=this.start;this.pos=this.state=0;var D=this;function E(I){return D.step(I)}E.elem=this.elem;n.timers.push(E);if(E()&&n.timerId==null){n.timerId=setInterval(function(){var J=n.timers;for(var I=0;I<J.length;I++){if(!J[I]()){J.splice(I--,1)}}if(!J.length){clearInterval(n.timerId);n.timerId=null}},13)}},show:function(){this.options.orig[this.prop]=n.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());n(this.elem).show()},hide:function(){this.options.orig[this.prop]=n.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(G){var F=e();if(G||F>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var D=true;for(var E in this.options.curAnim){if(this.options.curAnim[E]!==true){D=false}}if(D){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(n.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){n(this.elem).hide()}if(this.options.hide||this.options.show){for(var H in this.options.curAnim){n.attr(this.elem.style,H,this.options.orig[H])}}}if(D){this.options.complete.call(this.elem)}return false}else{var I=F-this.startTime;this.state=I/this.options.duration;this.pos=n.easing[this.options.easing||(n.easing.swing?"swing":"linear")](this.state,I,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};n.extend(n.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(D){n.attr(D.elem.style,"opacity",D.now)},_default:function(D){if(D.elem.style&&D.elem.style[D.prop]!=null){D.elem.style[D.prop]=D.now+D.unit}else{D.elem[D.prop]=D.now}}}});if(document.documentElement.getBoundingClientRect){n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}var F=this[0].getBoundingClientRect(),I=this[0].ownerDocument,E=I.body,D=I.documentElement,K=D.clientTop||E.clientTop||0,J=D.clientLeft||E.clientLeft||0,H=F.top+(self.pageYOffset||n.boxModel&&D.scrollTop||E.scrollTop)-K,G=F.left+(self.pageXOffset||n.boxModel&&D.scrollLeft||E.scrollLeft)-J;return{top:H,left:G}}}else{n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}n.offset.initialized||n.offset.initialize();var I=this[0],F=I.offsetParent,E=I,N=I.ownerDocument,L,G=N.documentElement,J=N.body,K=N.defaultView,D=K.getComputedStyle(I,null),M=I.offsetTop,H=I.offsetLeft;while((I=I.parentNode)&&I!==J&&I!==G){L=K.getComputedStyle(I,null);M-=I.scrollTop,H-=I.scrollLeft;if(I===F){M+=I.offsetTop,H+=I.offsetLeft;if(n.offset.doesNotAddBorder&&!(n.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(I.tagName))){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}E=F,F=I.offsetParent}if(n.offset.subtractsBorderForOverflowNotVisible&&L.overflow!=="visible"){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}D=L}if(D.position==="relative"||D.position==="static"){M+=J.offsetTop,H+=J.offsetLeft}if(D.position==="fixed"){M+=Math.max(G.scrollTop,J.scrollTop),H+=Math.max(G.scrollLeft,J.scrollLeft)}return{top:M,left:H}}}n.offset={initialize:function(){if(this.initialized){return}var K=document.body,E=document.createElement("div"),G,F,M,H,L,D,I=K.style.marginTop,J='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"cellpadding="0"cellspacing="0"><tr><td></td></tr></table>';L={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(D in L){E.style[D]=L[D]}E.innerHTML=J;K.insertBefore(E,K.firstChild);G=E.firstChild,F=G.firstChild,H=G.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(F.offsetTop!==5);this.doesAddBorderForTableAndCells=(H.offsetTop===5);G.style.overflow="hidden",G.style.position="relative";this.subtractsBorderForOverflowNotVisible=(F.offsetTop===-5);K.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(K.offsetTop===0);K.style.marginTop=I;K.removeChild(E);this.initialized=true},bodyOffset:function(D){n.offset.initialized||n.offset.initialize();var F=D.offsetTop,E=D.offsetLeft;if(n.offset.doesNotIncludeMarginInBodyOffset){F+=parseInt(n.curCSS(D,"marginTop",true),10)||0,E+=parseInt(n.curCSS(D,"marginLeft",true),10)||0}return{top:F,left:E}}};n.fn.extend({position:function(){var H=0,G=0,E;if(this[0]){var F=this.offsetParent(),I=this.offset(),D=/^body|html$/i.test(F[0].tagName)?{top:0,left:0}:F.offset();I.top-=j(this,"marginTop");I.left-=j(this,"marginLeft");D.top+=j(F,"borderTopWidth");D.left+=j(F,"borderLeftWidth");E={top:I.top-D.top,left:I.left-D.left}}return E},offsetParent:function(){var D=this[0].offsetParent||document.body;while(D&&(!/^body|html$/i.test(D.tagName)&&n.css(D,"position")=="static")){D=D.offsetParent}return n(D)}});n.each(["Left","Top"],function(E,D){var F="scroll"+D;n.fn[F]=function(G){if(!this[0]){return null}return G!==g?this.each(function(){this==l||this==document?l.scrollTo(!E?G:n(l).scrollLeft(),E?G:n(l).scrollTop()):this[F]=G}):this[0]==l||this[0]==document?self[E?"pageYOffset":"pageXOffset"]||n.boxModel&&document.documentElement[F]||document.body[F]:this[0][F]}});n.each(["Height","Width"],function(G,E){var D=G?"Left":"Top",F=G?"Right":"Bottom";n.fn["inner"+E]=function(){return this[E.toLowerCase()]()+j(this,"padding"+D)+j(this,"padding"+F)};n.fn["outer"+E]=function(I){return this["inner"+E]()+j(this,"border"+D+"Width")+j(this,"border"+F+"Width")+(I?j(this,"margin"+D)+j(this,"margin"+F):0)};var H=E.toLowerCase();n.fn[H]=function(I){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+E]||document.body["client"+E]:this[0]==document?Math.max(document.documentElement["client"+E],document.body["scroll"+E],document.documentElement["scroll"+E],document.body["offset"+E],document.documentElement["offset"+E]):I===g?(this.length?n.css(this[0],H):null):this.css(H,typeof I==="string"?I:I+"px")}})})(); \ No newline at end of file
+(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bC.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bR,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bX(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bX(a,c,d,e,"*",g));return l}function bW(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bN),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bA(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bv:bw;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bg(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function W(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(R.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(x,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,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=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.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);return 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}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.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();e.isArray(a)?E.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+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return 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(F.apply(this,arguments),"slice",F.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:E,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(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();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&&J()}}},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},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw 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(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},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,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(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(H)return H.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.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:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([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){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:|^on/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.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=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.
+shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,N(a.origType,a.selector),f.extend({},a,{handler:M,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,N(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?E:D):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=E;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=E;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=E,this.stopPropagation()},isDefaultPrevented:D,isPropagationStopped:D,isImmediatePropagationStopped:D};var F=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},G=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?G:F,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?G:F)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&K("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&K("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var H,I=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var L={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||D,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=x.exec(h),k="",j&&(k=j[0],h=h.replace(x,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,L[h]?(a.push(L[h]+k),h=h+k):h=(L[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+N(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+N(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=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]||k.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]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return 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]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return 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){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(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 b<c[3]-0},gt:function(a,b,c){return b>c[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=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||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.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":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=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.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:[]}},l.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&&(l.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 href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[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}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.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 k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var O=/Until$/,P=/^(?:parents|prevUntil|prevAll)/,Q=/,/,R=/^.[^:#\[\.,]*$/,S=Array.prototype.slice,T=f.expr.match.POS,U={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(W(this,a,!1),"not",a)},filter:function(a){return this.pushStack(W(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?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,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=T.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},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(V(c[0])||V(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),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return 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 X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/<tbody/i,ba=/<|&#?\w+;/,bb=/<(?:script|object|embed|option|style)/i,bc=/checked\s*(?:[^=]|=\s*.checked.)/i,bd=/\/(java|ecma)script/i,be=/^\s*<!(?:\[CDATA\[|\-\-)/,bf={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return 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){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(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(arguments[0]);a.push.apply(a,this.toArray());return 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);a.push.apply(a,f(arguments[0]).toArray());return 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){a=a==null?!1:a,b=b==null?a:b;return 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(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bc.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bg(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bm)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bb.test(a[0])&&(f.support.checkClone||!bc.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?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=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},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(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1></$2>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");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]==="<table>"&&!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&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.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<r;i++)bl(k[i]);else bl(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bd.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bn=/alpha\([^)]*\)/i,bo=/opacity=([^)]*)/,bp=/([A-Z]|^ms)/g,bq=/^-?\d+(?:px)?$/i,br=/^-?\d/,bs=/^[+\-]=/,bt=/[^+\-\.\de]+/g,bu={position:"absolute",visibility:"hidden",display:"block"},bv=["Left","Right"],bw=["Top","Bottom"],bx,by,bz;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bx(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bs.test(d)&&(d=+d.replace(bt,"")+parseFloat(f.css(a,c)),h="number"),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bx)return bx(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bA(a,b,d);f.swap(a,bu,function(){e=bA(a,b,d)});return e}},set:function(a,b){if(!bq.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.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;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,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.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.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;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("<div>").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return 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||bM.test(this.nodeName)||bG.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(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return 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){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[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","*":"*/*"},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}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),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._Deferred(),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=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,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(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.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]!=="*"?", */*; 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)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,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){status<2?w(-1,z):f.error(z)}}return v},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)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),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&&(ca.test(b.url)||e&&ca.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";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,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(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return 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 cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,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,cb&&delete cd[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=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cs(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cr("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cr("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cs(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cr("show",1),slideUp:cr("hide",1),slideToggle:cr("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cn||cp(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!cl&&(co?(cl=!0,g=function(){cl&&(co(g),e.tick())},co(g)):cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||cp(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var ct=/^t(?:able|d|h)$/i,cu=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cv(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!ct.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-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=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();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;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.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;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(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")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):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];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["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 h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file
diff --git a/public/robots.txt b/public/robots.txt
index 80dfd8ef7..029ae0dbf 100644
--- a/public/robots.txt
+++ b/public/robots.txt
@@ -8,6 +8,10 @@
# Crawl-delay: 1
# http://www.bing.com/community/blogs/webmaster/archive/2009/08/10/crawl-delay-and-the-bing-crawler-msnbot.aspx
+# This file uses the non-standard extension characters * and $, which are supported by Google and Yahoo!
+# http://code.google.com/web/controlcrawlindex/docs/robots_txt.html
+# http://help.yahoo.com/l/us/yahoo/search/webcrawler/slurp-02.html
+
User-agent: *
Disallow: /annotate/
Disallow: /new/
@@ -19,4 +23,4 @@ Disallow: /user/contact/
Disallow: /feed/
Disallow: /profile/
Disallow: /signin
-
+Disallow: /body/*/view_email$
diff --git a/public/stylesheets/admin-theme/images/ui-bg_flat_0_aaaaaa_40x100.png b/public/stylesheets/admin-theme/images/ui-bg_flat_0_aaaaaa_40x100.png
new file mode 100755
index 000000000..5b5dab2ab
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-bg_flat_0_aaaaaa_40x100.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-bg_flat_55_fbf9ee_40x100.png b/public/stylesheets/admin-theme/images/ui-bg_flat_55_fbf9ee_40x100.png
new file mode 100755
index 000000000..062f58072
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-bg_flat_55_fbf9ee_40x100.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-bg_flat_65_ffffff_40x100.png b/public/stylesheets/admin-theme/images/ui-bg_flat_65_ffffff_40x100.png
new file mode 100755
index 000000000..ac8b229af
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-bg_flat_65_ffffff_40x100.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-bg_flat_75_cccccc_40x100.png b/public/stylesheets/admin-theme/images/ui-bg_flat_75_cccccc_40x100.png
new file mode 100755
index 000000000..5473afffb
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-bg_flat_75_cccccc_40x100.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-bg_flat_75_dadada_40x100.png b/public/stylesheets/admin-theme/images/ui-bg_flat_75_dadada_40x100.png
new file mode 100755
index 000000000..7b7b0744d
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-bg_flat_75_dadada_40x100.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-bg_flat_75_e6e6e6_40x100.png b/public/stylesheets/admin-theme/images/ui-bg_flat_75_e6e6e6_40x100.png
new file mode 100755
index 000000000..5b4ca1a03
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-bg_flat_75_e6e6e6_40x100.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-bg_flat_75_ffffff_40x100.png b/public/stylesheets/admin-theme/images/ui-bg_flat_75_ffffff_40x100.png
new file mode 100755
index 000000000..ac8b229af
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-bg_flat_75_ffffff_40x100.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.png b/public/stylesheets/admin-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.png
new file mode 100755
index 000000000..0e05810ff
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-bg_inset-soft_95_fef1ec_1x100.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-icons_222222_256x240.png b/public/stylesheets/admin-theme/images/ui-icons_222222_256x240.png
new file mode 100755
index 000000000..b273ff111
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-icons_2e83ff_256x240.png b/public/stylesheets/admin-theme/images/ui-icons_2e83ff_256x240.png
new file mode 100755
index 000000000..09d1cdc85
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-icons_454545_256x240.png b/public/stylesheets/admin-theme/images/ui-icons_454545_256x240.png
new file mode 100755
index 000000000..59bd45b90
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-icons_454545_256x240.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-icons_888888_256x240.png b/public/stylesheets/admin-theme/images/ui-icons_888888_256x240.png
new file mode 100755
index 000000000..6d02426c1
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-icons_888888_256x240.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/images/ui-icons_cd0a0a_256x240.png b/public/stylesheets/admin-theme/images/ui-icons_cd0a0a_256x240.png
new file mode 100755
index 000000000..2ab019b73
--- /dev/null
+++ b/public/stylesheets/admin-theme/images/ui-icons_cd0a0a_256x240.png
Binary files differ
diff --git a/public/stylesheets/admin-theme/jquery-ui-1.8.15.custom.css b/public/stylesheets/admin-theme/jquery-ui-1.8.15.custom.css
new file mode 100755
index 000000000..ea0254a2b
--- /dev/null
+++ b/public/stylesheets/admin-theme/jquery-ui-1.8.15.custom.css
@@ -0,0 +1,375 @@
+/*
+ * jQuery UI CSS Framework 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden { display: none; }
+.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
+.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
+.ui-helper-clearfix { display: inline-block; }
+/* required comment for clearfix to work in Opera \*/
+* html .ui-helper-clearfix { height:1%; }
+.ui-helper-clearfix { display:block; }
+/* end clearfix */
+.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled { cursor: default !important; }
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
+
+
+/*
+ * jQuery UI CSS Framework 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=01_flat.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=01_flat.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=01_flat.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=01_flat.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=01_flat.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+ */
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: ; }
+.ui-widget .ui-widget { font-size: 1em; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
+.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
+.ui-widget-content a { color: #222222; }
+.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_flat_75_cccccc_40x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
+.ui-widget-header a { color: #222222; }
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_flat_75_e6e6e6_40x100.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_flat_75_dadada_40x100.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_65_ffffff_40x100.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
+.ui-widget :active { outline: none; }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_flat_55_fbf9ee_40x100.png) 50% 50% repeat-x; color: #363636; }
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_flat_95_fef1ec_40x100.png) 50% 50% repeat-x; color: #cd0a0a; }
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
+.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
+.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-off { background-position: -96px -144px; }
+.ui-icon-radio-on { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
+
+/* Overlays */
+.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
+.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
+ * jQuery UI Tabs 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Tabs#theming
+ */
+.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; }
+.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
+.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; }
+.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
+.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
+.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; }
+.ui-tabs .ui-tabs-hide { display: none !important; }
+/*
+ * jQuery UI Datepicker 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker#theming
+ */
+.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
+.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
+.ui-datepicker .ui-datepicker-prev { left:2px; }
+.ui-datepicker .ui-datepicker-next { right:2px; }
+.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
+.ui-datepicker .ui-datepicker-next-hover { right:1px; }
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
+.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
+.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
+.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year { width: 49%;}
+.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
+.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
+.ui-datepicker td { border: 0; padding: 1px; }
+.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
+.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
+.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi { width:auto; }
+.ui-datepicker-multi .ui-datepicker-group { float:left; }
+.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
+.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
+.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
+.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
+.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
+.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
+
+/* RTL support */
+.ui-datepicker-rtl { direction: rtl; }
+.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
+.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group { float:right; }
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
+
+/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+.ui-datepicker-cover {
+ display: none; /*sorry for IE5*/
+ display/**/: block; /*sorry for IE5*/
+ position: absolute; /*must have*/
+ z-index: -1; /*must have*/
+ filter: mask(); /*must have*/
+ top: -4px; /*must have*/
+ left: -4px; /*must have*/
+ width: 200px; /*must have*/
+ height: 200px; /*must have*/
+} \ No newline at end of file
diff --git a/public/stylesheets/admin.css b/public/stylesheets/admin.css
index fa729991c..7f8d646d3 100644
--- a/public/stylesheets/admin.css
+++ b/public/stylesheets/admin.css
@@ -50,10 +50,12 @@ form {
#tag_help {
float: right;
width: 25%;
-}
-#tag_help {
margin-top: 0;
}
+#public_body_form {
+ float: left;
+ width: 70%;
+}
.forms_on_one_line {
display: inline;
diff --git a/public/stylesheets/fancybox-x.png b/public/stylesheets/fancybox-x.png
new file mode 100755
index 000000000..c2130f869
--- /dev/null
+++ b/public/stylesheets/fancybox-x.png
Binary files differ
diff --git a/public/stylesheets/fancybox-y.png b/public/stylesheets/fancybox-y.png
new file mode 100755
index 000000000..7ef399b99
--- /dev/null
+++ b/public/stylesheets/fancybox-y.png
Binary files differ
diff --git a/public/stylesheets/fancybox.png b/public/stylesheets/fancybox.png
new file mode 100755
index 000000000..65e14f68f
--- /dev/null
+++ b/public/stylesheets/fancybox.png
Binary files differ
diff --git a/public/stylesheets/fonts.css b/public/stylesheets/fonts.css
new file mode 100644
index 000000000..f63b4b1f8
--- /dev/null
+++ b/public/stylesheets/fonts.css
@@ -0,0 +1,73 @@
+
+@font-face {
+ font-family: 'DeliciousBold';
+ src: url('./fonts/delicious-bold-webfont.eot');
+ src: url('./fonts/delicious-bold-webfont.eot?#iefix') format('embedded-opentype'),
+ url('./fonts/delicious-bold-webfont.woff') format('woff'),
+ url('./fonts/delicious-bold-webfont.ttf') format('truetype'),
+ url('./fonts/delicious-bold-webfont.svg#DeliciousBold') format('svg');
+ font-weight: normal;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'DeliciousBoldItalic';
+ src: url('./fonts/delicious-bolditalic-webfont.eot');
+ src: url('./fonts/delicious-bolditalic-webfont.eot?#iefix') format('embedded-opentype'),
+ url('./fonts/delicious-bolditalic-webfont.woff') format('woff'),
+ url('./fonts/delicious-bolditalic-webfont.ttf') format('truetype'),
+ url('./fonts/delicious-bolditalic-webfont.svg#DeliciousBoldItalic') format('svg');
+ font-weight: normal;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'DeliciousHeavyRegular';
+ src: url('./fonts/delicious-heavy-webfont.eot');
+ src: url('./fonts/delicious-heavy-webfont.eot?#iefix') format('embedded-opentype'),
+ url('./fonts/delicious-heavy-webfont.woff') format('woff'),
+ url('./fonts/delicious-heavy-webfont.ttf') format('truetype'),
+ url('./fonts/delicious-heavy-webfont.svg#DeliciousHeavyRegular') format('svg');
+ font-weight: normal;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'DeliciousItalic';
+ src: url('./fonts/delicious-italic-webfont.eot');
+ src: url('./fonts/delicious-italic-webfont.eot?#iefix') format('embedded-opentype'),
+ url('./fonts/delicious-italic-webfont.woff') format('woff'),
+ url('./fonts/delicious-italic-webfont.ttf') format('truetype'),
+ url('./fonts/delicious-italic-webfont.svg#DeliciousItalic') format('svg');
+ font-weight: normal;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'DeliciousRoman';
+ src: url('./fonts/delicious-roman-webfont.eot');
+ src: url('./fonts/delicious-roman-webfont.eot?#iefix') format('embedded-opentype'),
+ url('./fonts/delicious-roman-webfont.woff') format('woff'),
+ url('./fonts/delicious-roman-webfont.ttf') format('truetype'),
+ url('./fonts/delicious-roman-webfont.svg#DeliciousRoman') format('svg');
+ font-weight: normal;
+ font-style: normal;
+
+}
+
+@font-face {
+ font-family: 'DeliciousSmallCapsRegular';
+ src: url('./fonts/delicious-smallcaps-webfont.eot');
+ src: url('./fonts/delicious-smallcaps-webfont.eot?#iefix') format('embedded-opentype'),
+ url('./fonts/delicious-smallcaps-webfont.woff') format('woff'),
+ url('./fonts/delicious-smallcaps-webfont.ttf') format('truetype'),
+ url('./fonts/delicious-smallcaps-webfont.svg#DeliciousSmallCapsRegular') format('svg');
+ font-weight: normal;
+ font-style: normal;
+
+}
+
diff --git a/public/stylesheets/fonts/delicious-bold-webfont.eot b/public/stylesheets/fonts/delicious-bold-webfont.eot
new file mode 100755
index 000000000..90d2e95fa
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-bold-webfont.eot
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-bold-webfont.svg b/public/stylesheets/fonts/delicious-bold-webfont.svg
new file mode 100755
index 000000000..51a5d9080
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-bold-webfont.svg
@@ -0,0 +1,222 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : copyright 19941996 Jos Buivenga
+</metadata>
+<defs>
+<font id="DeliciousBold" horiz-adv-x="921" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="614" />
+<glyph unicode=" " horiz-adv-x="614" />
+<glyph unicode="&#x09;" horiz-adv-x="614" />
+<glyph unicode="&#xa0;" horiz-adv-x="614" />
+<glyph unicode="!" horiz-adv-x="540" d="M143 104.5q0 61.5 48.5 106.5t109.5 45t101 -37t40 -96q0 -61 -48 -107.5t-109.5 -46.5t-101.5 37t-40 98.5zM180 1049q0 254 29 356l221 29q-39 -217 -39 -416v-637h-184q-27 510 -27 668z" />
+<glyph unicode="&#x22;" horiz-adv-x="708" d="M109 1317l30 156h152l33 -156l-48 -342h-122zM377 1317l31 156h149l35 -156l-47 -342h-123z" />
+<glyph unicode="#" horiz-adv-x="1138" d="M98 416l29 196h168l27 226h-140l27 196h137l43 385h184l-43 -385h154l41 346h184l-41 -346h164l-16 -196h-170l-29 -226h135l-18 -196h-143l-52 -412h-186l53 412h-153l-52 -361h-186l53 361h-170zM479 612h154l29 226h-154z" />
+<glyph unicode="$" horiz-adv-x="888" d="M88 979q0 143 91 236.5t235 103.5v113h92v-115q78 -10 156.5 -53t123.5 -105l-122 -121q-63 70 -158 95v-377l123 -84q96 -63 143 -138t47 -198q0 -139 -87 -237.5t-226 -121.5v-127h-92v119q-76 2 -159 38t-140 87l102 162q106 -86 197 -94v387l-138 90 q-88 57 -138 147.5t-50 192.5zM307 989q0 -109 107 -178v319q-49 -12 -78 -51t-29 -90zM506 178q94 43 94 160q0 82 -94 147v-307z" />
+<glyph unicode="%" horiz-adv-x="1431" d="M90 1032q0 119 84 204t205 85q55 0 137 -35q31 -18 37 -20q39 -12 98 -13q154 0 322 66l153 -39l-643 -1280h-200l589 1167q-78 -61 -215 -61q10 -41 11 -74q0 -119 -84 -204t-205 -85t-205 85t-84 204zM266 1032q0 -45 33 -78.5t80 -33.5t80 33.5t33 78.5t-33 79t-80 34 t-80 -34t-33 -79zM756 258q0 119 85 204t203.5 85t203.5 -85t85 -204t-85 -204t-203.5 -85t-203.5 85t-85 204zM932 258q0 -45 33.5 -79t79 -34t79 34t33.5 79t-33.5 79t-79 34t-79 -34t-33.5 -79z" />
+<glyph unicode="&#x26;" horiz-adv-x="1290" d="M82 489q0 168 84 307.5t240 161.5q-55 20 -91 70.5t-36 108.5q0 129 109.5 204.5t244.5 75.5q154 0 263.5 -81t109.5 -228v-104h192v-177h-188v-600q0 -41 10 -61.5t47 -20.5q41 0 113 29l51 -139q-53 -27 -79 -38t-64.5 -19.5t-88.5 -8.5q-104 0 -154 71t-50 179v608 h-82q-162 0 -203 -10q-193 -53 -193 -319q0 -98 24 -226.5t77 -128.5q16 0 43.5 29t70.5 58.5t101 29.5q37 0 82 -10l-39 -144q-35 8 -61.5 -3t-46.5 -33l-39 -45q-19 -23 -48.5 -39.5t-66.5 -16.5q-113 0 -193 92.5t-109.5 204.5t-29.5 223zM489 1120q0 -117 173 -116h149 v57q0 92 -34 142t-120 50q-168 0 -168 -133z" />
+<glyph unicode="'" horiz-adv-x="425" d="M100 1317l33 156h150l34 -156l-47 -342h-125z" />
+<glyph unicode="(" horiz-adv-x="688" d="M76 678q0 281 149.5 522.5t399.5 394.5l26 -184q-182 -117 -287.5 -316.5t-105.5 -420.5q0 -473 393 -789l-22 -198q-279 211 -416 440t-137 551z" />
+<glyph unicode=")" horiz-adv-x="694" d="M41 -115q393 315 393 789q0 221 -104.5 420.5t-286.5 316.5l25 184q250 -154 399 -395.5t149 -521.5q0 -322 -137 -552t-416 -439z" />
+<glyph unicode="*" horiz-adv-x="868" d="M55 1100v190l273 -114l-64 221h318l-58 -221l271 114v-190l-236 -76l215 -332h-221l-127 209l-129 -209h-219l215 332z" />
+<glyph unicode="+" horiz-adv-x="964" d="M78 420v184h313v336h180v-336h316v-184h-316v-336h-180v336h-313z" />
+<glyph unicode="," horiz-adv-x="528" d="M27 -229q137 199 137 327q0 35 -4 52q61 49 123 49q43 0 89 -37t74 -82q-109 -213 -290 -397z" />
+<glyph unicode="-" horiz-adv-x="618" d="M86 430v184h440v-184h-440z" />
+<glyph unicode="." horiz-adv-x="528" d="M121 104q0 61 47 106.5t111 45.5q59 0 99 -37t40 -96q0 -63 -47 -108.5t-111 -45.5q-59 0 -99 38t-40 97z" />
+<glyph unicode="/" horiz-adv-x="729" d="M8 -289l522 1825h191l-522 -1825h-191z" />
+<glyph unicode="0" d="M49 500q0 233 104.5 383.5t307.5 150.5t307 -152.5t104 -381.5q0 -137 -42 -254t-138 -197t-231 -80q-199 0 -305.5 160t-106.5 371zM256 500q0 -141 56.5 -240.5t148.5 -99.5q205 0 205 340q0 154 -55.5 249t-149.5 95t-149.5 -94t-55.5 -250z" />
+<glyph unicode="1" d="M201 799v155q117 0 250 41l26 9h174v-1004h-213v799h-237z" />
+<glyph unicode="2" d="M111 160q141 80 307 259t166 306q0 57 -39 88t-99 31q-70 0 -145.5 -32t-126.5 -81l-45 172q59 61 155.5 96t184.5 35q152 0 242 -75.5t90 -225.5q0 -154 -102.5 -300t-247.5 -240h385v-193h-686z" />
+<glyph unicode="3" d="M131 -178q111 2 213 34.5t181 114.5t79 199q0 152 -239 152q-90 0 -199 -11v164l108 17q100 55 236 163q70 57 70 115q0 35 -27 57.5t-61 22.5q-41 0 -114 -27.5t-124 -56.5l-53 -29l-54 162q74 43 121 66.5t118 45t136 21.5q125 0 199 -67.5t74 -171.5q0 -94 -80 -182.5 t-170 -123.5q115 -10 193.5 -93t78.5 -193q0 -141 -56 -250t-152.5 -171.5t-214.5 -92t-251 -29.5h-12v164z" />
+<glyph unicode="4" d="M59 166q145 373 494 838h209v-816h117v-188h-121v-283h-205v283h-483zM281 188h272v502q-186 -281 -272 -502z" />
+<glyph unicode="5" d="M123 -176q113 0 217 33.5t182 116.5t78 198q0 72 -49 109.5t-121 37.5q-102 0 -278 -49l61 734h547v-185h-354l-19 -323q98 12 100 12q141 0 234.5 -82t93.5 -223q0 -170 -96 -297t-243 -187q-142 -57 -301 -57h-11h-41v162z" />
+<glyph unicode="6" d="M84 530q0 506 598 795l82 -145q-164 -102 -257 -187.5t-159 -224.5q106 43 189 43q137 0 229 -107.5t92 -248.5q0 -201 -99.5 -343.5t-291.5 -142.5q-104 0 -183 52.5t-120 139.5t-60.5 179t-19.5 190zM295 489q0 -47 8 -99t27.5 -107.5t58.5 -92t90 -36.5q168 0 168 307 q0 92 -52 139t-144 47q-51 0 -146 -37q-10 -51 -10 -121z" />
+<glyph unicode="7" d="M119 811v193h680v-115q0 -285 -129 -650.5t-305 -598.5l-183 92q166 236 286 531.5t128 547.5h-477z" />
+<glyph unicode="8" d="M72 334q0 117 54 196.5t161 145.5q-180 109 -181 280q0 154 101.5 244t257.5 90q162 0 253 -83t91 -238q0 -98 -49 -165t-142 -122q117 -59 179.5 -133t62.5 -189q0 -178 -115.5 -284.5t-295.5 -106.5q-156 0 -266.5 104.5t-110.5 260.5zM285 354q0 -82 51 -146.5 t131 -64.5q78 0 128 64.5t50 144.5q0 43 -16.5 78t-55 66.5t-59.5 44.5l-74 43q-155 -95 -155 -230zM313 948q0 -63 37 -103t103 -75q152 88 151 201q0 156 -149 155q-72 0 -107 -51t-35 -127z" />
+<glyph unicode="9" d="M68 545q0 201 98 345t289 144q115 0 194.5 -52t120.5 -143t57.5 -184.5t16.5 -201.5q0 -266 -193.5 -475t-468.5 -320l-57 160q338 168 453 413q-102 -39 -160 -38q-152 0 -251 100t-99 252zM279 541q0 -78 50 -132.5t126 -54.5q88 0 166 39q10 66 10 121 q0 49 -8.5 102.5t-28 111.5t-57 95t-91.5 37q-167 0 -167 -319z" />
+<glyph unicode=":" horiz-adv-x="528" d="M121 104q0 61 47 106.5t111 45.5q59 0 99 -37t40 -96q0 -63 -47 -108.5t-111 -45.5q-59 0 -99 38t-40 97zM121 694q0 63 47 108.5t111 45.5q59 0 99 -38t40 -97q0 -63 -47 -108.5t-111 -45.5q-59 0 -99 38t-40 97z" />
+<glyph unicode=";" horiz-adv-x="528" d="M23 -229q137 205 137 327q0 27 -6 52q61 49 122 49q43 0 89.5 -37t74.5 -82q-109 -213 -290 -397zM135 692q0 63 47 108.5t111 45.5q59 0 99 -38t40 -97q0 -63 -47 -108.5t-111 -45.5q-59 0 -99 38t-40 97z" />
+<glyph unicode="&#x3c;" horiz-adv-x="614" d="M33 512l403 410l146 -117l-295 -293l299 -293l-146 -117z" />
+<glyph unicode="=" horiz-adv-x="983" d="M86 270v185h811v-185h-811zM86 559v184h811v-184h-811z" />
+<glyph unicode="&#x3e;" horiz-adv-x="614" d="M29 219l297 293l-293 293l145 117l404 -410l-408 -410z" />
+<glyph unicode="?" horiz-adv-x="733" d="M129 104q0 61 47 106.5t111 45.5q59 0 99 -37t40 -96q0 -63 -47 -108.5t-111 -45.5q-59 0 -99 38t-40 97zM190 381v111q0 147 18.5 200t106.5 168l109 144q63 88 63 137q0 100 -79 100q-98 0 -197 -29v172q121 33 235.5 33t184 -74.5t69.5 -189.5q0 -49 -17 -98t-37 -78 l-58 -82l-148 -203q-66 -92 -65 -198v-113h-185z" />
+<glyph unicode="@" horiz-adv-x="1622" d="M92 727q0 297 221.5 525.5t515.5 228.5q315 0 505 -171t190 -481q0 -199 -139.5 -364.5t-333.5 -165.5q-66 0 -119 41t-55 104q-57 -45 -133 -82.5t-130 -37.5q-94 0 -136 94t-42 201q0 207 101.5 363.5t298.5 156.5q76 0 172 -86l14 57h172l-141 -575q-8 -33 -9 -48 q0 -53 41 -53q94 0 166 100.5t86 204.5q6 43 6 90q0 231 -140 355.5t-376 124.5q-227 0 -383.5 -178.5t-156.5 -407.5q0 -256 173 -421t429 -165q281 0 493 217l109 -98q-250 -287 -641 -287q-315 0 -536.5 221.5t-221.5 536.5zM614 590q0 -98 62 -98q55 0 219 92l82 340 q-98 59 -158 59q-66 0 -116 -74.5t-69.5 -160.5t-19.5 -158z" />
+<glyph unicode="A" horiz-adv-x="1044" d="M23 0l407 1290h184l410 -1290h-229l-123 371h-295l-123 -371h-231zM426 567h195l-97 398z" />
+<glyph unicode="B" horiz-adv-x="1028" d="M150 27v1263h335q170 0 288 -75.5t118 -237.5q0 -88 -48 -167t-126 -116q109 -16 176.5 -104t67.5 -201q0 -199 -134.5 -309.5t-337.5 -110.5q-122 1 -339 58zM373 774h110q84 0 135.5 47t51.5 131q0 92 -45 122t-142 30h-110v-330zM373 184q66 -18 112 -18 q117 0 184.5 55t67.5 168q0 117 -68.5 154t-193.5 37h-102v-396z" />
+<glyph unicode="C" horiz-adv-x="1017" d="M106 645q0 117 31 232.5t90.5 217t159.5 164t225 62.5q209 0 334 -92l-86 -154q-92 55 -248 55q-68 0 -124 -52t-88.5 -130t-51 -159.5t-18.5 -151.5q0 -78 12 -152.5t41 -151.5t89 -124t144 -47q139 0 246 78l103 -152q-66 -55 -165.5 -87t-191.5 -32 q-135 0 -235.5 59.5t-156.5 161t-83 215t-27 240.5z" />
+<glyph unicode="D" horiz-adv-x="1120" d="M150 0v1290h387q133 0 230 -55t150.5 -151.5t77 -205t23.5 -235.5q0 -125 -27.5 -235.5t-85 -204.5t-157 -148.5t-230.5 -54.5h-368zM371 193h147q274 0 275 446q0 459 -265 459h-157v-905z" />
+<glyph unicode="E" horiz-adv-x="929" d="M147 0v1290h697v-198h-473v-320h362v-201h-362v-368h493v-203h-717z" />
+<glyph unicode="F" horiz-adv-x="843" d="M145 0v1290h643v-196h-419v-322h331v-201h-331v-571h-224z" />
+<glyph unicode="G" horiz-adv-x="1073" d="M100 645q0 119 31 234.5t90.5 217t160.5 163t228 61.5q92 0 193.5 -28.5t167.5 -80.5l-88 -157q-117 78 -273 78q-96 0 -164.5 -92.5t-95 -200t-26.5 -203.5q0 -78 13 -153.5t43 -151.5t90 -123t144 -47q78 0 138 16v412h211v-559q-143 -61 -353 -62q-135 0 -237.5 59.5 t-159.5 159t-85 215t-28 242.5z" />
+<glyph unicode="H" horiz-adv-x="1122" d="M152 0v1290h223v-518h373v518h223v-1290h-223v571h-373v-571h-223z" />
+<glyph unicode="I" horiz-adv-x="487" d="M133 0v1290h221v-1290h-221z" />
+<glyph unicode="J" horiz-adv-x="501" d="M-6 -180q150 66 149 162v1308h219v-1319q0 -215 -317 -307z" />
+<glyph unicode="K" horiz-adv-x="993" d="M152 0v1290h223v-491l356 491h240l-471 -659l481 -541v-90h-205l-401 457v-457h-223z" />
+<glyph unicode="L" horiz-adv-x="782" d="M145 0v1290h215v-1093h404v-197h-619z" />
+<glyph unicode="M" horiz-adv-x="1519" d="M162 0v1290h262l307 -874l29 -115q8 55 28 115l308 874h262v-1290h-223v711l16 149l-299 -860h-184l-299 860l16 -149v-711h-223z" />
+<glyph unicode="N" horiz-adv-x="1134" d="M152 0v1290h262l286 -651q33 -74 60 -186v837h223v-1290h-215l-408 903q14 -84 15 -170v-733h-223z" />
+<glyph unicode="O" horiz-adv-x="1122" d="M102 645q0 119 27 234.5t79 216t144 163t209 62.5q119 0 211 -61.5t144.5 -164t78 -216t25.5 -234.5t-25.5 -234.5t-78 -216t-144.5 -164t-211 -61.5t-211 61.5t-144 164t-78 216t-26 234.5zM326 645q0 -84 11 -161.5t35.5 -152.5t74 -120t115 -45t114.5 45t73.5 120 t36 152.5t11.5 161.5t-11.5 162t-36 152.5t-73.5 119.5t-114.5 45t-115 -45t-74 -119.5t-35.5 -152.5t-11 -162z" />
+<glyph unicode="P" horiz-adv-x="1001" d="M133 0v1290h299q504 0 504 -409q0 -195 -126 -320t-321 -125q-59 0 -133 33v-469h-223zM356 659q76 -29 119 -28q102 0 170 74.5t68 177.5q0 109 -83 162t-198 53h-76v-439z" />
+<glyph unicode="Q" horiz-adv-x="1122" d="M102 645q0 119 27 234.5t79 216t144 163t209 62.5q119 0 211 -61.5t144.5 -164t78 -216t25.5 -234.5q0 -215 -79 -400.5t-236 -248.5q51 -31 76.5 -43t63.5 -21.5t85 -9.5l94 15l-39 -220q-49 -8 -74 -8q-51 0 -97 14.5t-95 50.5t-73.5 56t-81.5 77l-66 66 q-135 20 -228.5 132t-130.5 250t-37 290zM326 645q0 -84 11 -162t35.5 -152.5t74 -119.5t115 -45t114.5 45t73.5 119.5t36 152.5t11.5 162t-11.5 162t-36 152.5t-73.5 119.5t-114.5 45t-115 -45t-74 -119.5t-35.5 -152.5t-11 -162z" />
+<glyph unicode="R" horiz-adv-x="1034" d="M152 0v1290h297q254 0 372.5 -112.5t118.5 -296.5q0 -152 -87 -275t-224 -135l366 -381v-90h-200l-420 461v-461h-223zM375 655q63 -27 117 -26q104 0 162.5 73.5t58.5 180.5q0 215 -264 215h-74v-443z" />
+<glyph unicode="S" horiz-adv-x="888" d="M88 979q0 154 103.5 248t259.5 94q94 0 188 -44t147 -118l-122 -121q-90 98 -203 99q-68 0 -111 -40t-43 -108q0 -74 53.5 -130t128 -98t149.5 -91t128 -134t53 -200q0 -164 -114.5 -265.5t-280.5 -101.5q-78 0 -164 36t-145 89l102 162q119 -94 209 -94q78 0 126 49 t48 127q0 49 -38 95t-95 80t-122.5 79t-123 93t-95.5 125t-38 169z" />
+<glyph unicode="T" horiz-adv-x="829" d="M20 1085v205h789v-205h-285v-1085h-221v1085h-283z" />
+<glyph unicode="U" horiz-adv-x="1142" d="M150 506v784h223v-784q0 -340 198.5 -340t198.5 340v784h223v-784q0 -231 -102.5 -384t-319.5 -153t-319 153t-102 384z" />
+<glyph unicode="V" horiz-adv-x="1044" d="M12 1290h238l219 -772l53 -182l45 160l228 794h237l-399 -1290h-221z" />
+<glyph unicode="W" horiz-adv-x="1449" d="M18 1290h226l157 -723q16 -74 25 -188q4 119 23 190l169 721h213l170 -721q18 -72 23 -190q8 115 25 188l159 723h224l-295 -1290h-219l-175 782q-10 35 -18 115q-8 -78 -16 -115l-177 -782h-219z" />
+<glyph unicode="X" horiz-adv-x="1007" d="M14 0l359 659l-348 631h247l222 -424l217 424h237l-330 -620l377 -670h-258l-243 459l-232 -459h-248z" />
+<glyph unicode="Y" horiz-adv-x="964" d="M27 1290h239l215 -583l228 583h229l-344 -809v-481h-223v483z" />
+<glyph unicode="Z" horiz-adv-x="937" d="M72 0v174q197 408 479 913h-438v203h712v-178q-295 -508 -493 -909h547v-203h-807z" />
+<glyph unicode="[" horiz-adv-x="507" d="M31 -319v1816h370v-180h-182v-1456h182v-180h-370z" />
+<glyph unicode="\" horiz-adv-x="686" d="M-4 1536h192l523 -1825h-193z" />
+<glyph unicode="]" horiz-adv-x="509" d="M111 -139h180v1456h-180v180h368v-1816h-368v180z" />
+<glyph unicode="^" horiz-adv-x="1277" d="M113 643l448 819h152l448 -819h-215l-309 559l-309 -559h-215z" />
+<glyph unicode="_" d="M0 -123h922v-184h-922v184z" />
+<glyph unicode="`" horiz-adv-x="692" d="M55 1407l172 176q123 -168 342 -328l-98 -139q-258 137 -416 291z" />
+<glyph unicode="a" horiz-adv-x="954" d="M78 256q0 84 61 203l441 190v101q0 100 -119 100q-63 0 -136 -36t-124 -87l-74 129q63 76 160.5 127t191.5 51q145 0 231.5 -72.5t86.5 -213.5v-584q0 -53 39 -53q12 0 36 12l56 -109q-70 -43 -146 -43q-68 0 -117 39t-61 107q-96 -147 -254 -148q-135 0 -203.5 75 t-68.5 212zM281 258q0 -45 25.5 -79t68.5 -34q92 0 150.5 91.5t58.5 193.5v37l-287 -119q-16 -57 -16 -90z" />
+<glyph unicode="b" horiz-adv-x="1030" d="M158 102v1321h215v-493q35 41 94 72.5t108 31.5q178 0 275.5 -142t97.5 -331q0 -109 -22.5 -208t-69.5 -188t-134 -142.5t-204 -53.5q-184 0 -360 133zM373 201q82 -55 159 -56q57 0 99.5 43t62 111t27.5 127t8 115q0 49 -7 95t-23.5 96t-53.5 80t-88 30q-76 0 -184 -103 v-538z" />
+<glyph unicode="c" horiz-adv-x="843" d="M86 492q0 131 42 250.5t139.5 205.5t232.5 86q82 0 165 -32.5t130 -90.5l-109 -127q-80 70 -184 70q-66 0 -115 -63.5t-67.5 -138t-18.5 -140.5q0 -51 10.5 -108.5t33 -116t65.5 -97t98 -38.5q106 0 235 102l74 -148q-63 -59 -153.5 -98t-169.5 -39q-129 0 -225.5 82 t-139.5 198t-43 243z" />
+<glyph unicode="d" horiz-adv-x="1048" d="M90 457q0 115 19.5 212t62.5 182t125 134t195 49q37 0 84 -8t75 -16l29 -9v422h215v-1212q0 -51 11.5 -69.5t56.5 -18.5l-66 -154q-12 -1 -22 0q-65 0 -97 21q-55 39 -78 133q-31 -59 -92 -106.5t-147 -47.5q-166 0 -268.5 141.5t-102.5 346.5zM311 479q0 -45 6.5 -91 t21.5 -101.5t50 -91t86 -39.5q5 0 10 -1q87 0 140 105q55 111 55 211v342q-106 33 -180 33q-189 0 -189 -367z" />
+<glyph unicode="e" horiz-adv-x="964" d="M88 526q0 203 120 355.5t318 152.5q145 0 253 -118.5t112 -266.5q0 -23 1 -67.5t1 -67.5h-586q-2 -12 -2 -37q0 -66 17.5 -136.5t64.5 -129.5t115 -59q123 0 268 110l72 -139q-74 -61 -173.5 -107.5t-179.5 -46.5q-143 0 -237 89t-129 209t-35 259zM336 692h342 q-6 78 -49 130t-117 52q-131 0 -176 -182z" />
+<glyph unicode="f" horiz-adv-x="585" d="M27 850v154h131v114q0 63 21.5 116.5t54 86.5t73.5 58.5t82 38t74 19.5t53 9h23l36 -156q-8 0 -21 -2t-49 -13t-62.5 -28.5t-48 -54.5t-21.5 -84v-104h186v-181h-186v-823h-215v827z" />
+<glyph unicode="g" horiz-adv-x="931" d="M70 -145q0 70 56 125t128 86q-47 6 -84 50t-37 95q0 55 42 98t101 66q-84 35 -128 120t-44 179q0 164 99.5 262t263.5 98q98 0 168 -30h256v-185h-117q29 -94 29 -151q0 -127 -67.5 -213t-192.5 -117q-2 0 -29 -4t-41 -8l-10 -2q-10 -4 -15.5 -5.5t-15.5 -4.5t-16 -5 t-16.5 -7t-15.5 -9t-13.5 -11.5t-11.5 -13.5t-6 -15t-3 -20q0 -16 16.5 -25t45 -12t52 -3t56.5 1t39 1h66q109 0 183.5 -60.5t74.5 -167.5q0 -170 -139.5 -271.5t-317.5 -101.5q-145 0 -250.5 64t-105.5 197zM281 -117q0 -133 153 -133q96 0 169 55.5t73 145.5q0 78 -156 78 h-119q-4 -2 -12 -7.5l-29.5 -20.5t-37 -30.5t-28.5 -40t-13 -47.5zM315 696q0 -201 144 -200q74 0 105.5 54t31.5 132q0 80 -34 138.5t-107.5 58.5t-106.5 -52.5t-33 -130.5z" />
+<glyph unicode="h" horiz-adv-x="1062" d="M154 0v1423h215v-493q53 43 132 73.5t142 30.5q158 0 214 -78.5t56 -214.5v-741h-215v741q0 61 -15 83t-65 22q-61 0 -131.5 -34t-117.5 -71v-741h-215z" />
+<glyph unicode="i" horiz-adv-x="487" d="M102 1251q0 57 44 99.5t102 42.5q55 0 96 -38t41 -93q0 -57 -44 -99.5t-101 -42.5q-55 0 -96.5 38t-41.5 93zM137 0v1004h211v-1004h-211z" />
+<glyph unicode="j" horiz-adv-x="487" d="M-6 -244q59 20 102 65.5t43 104.5v1078h211v-1090q0 -57 -21.5 -105.5t-51 -79t-76.5 -58t-81 -41t-81 -27.5zM102 1251q0 57 44 99.5t102 42.5q55 0 96 -38t41 -93q0 -57 -44 -99.5t-101 -42.5q-55 0 -96.5 38t-41.5 93z" />
+<glyph unicode="k" horiz-adv-x="964" d="M156 0v1423h215v-745l282 326h265l-369 -429l407 -493v-82h-206l-379 471v-471h-215z" />
+<glyph unicode="l" horiz-adv-x="483" d="M125 420v1003h211v-1003q0 -182 70 -420h-222q-59 152 -59 420z" />
+<glyph unicode="m" horiz-adv-x="1579" d="M156 0v1004h215v-72q35 31 115.5 66.5t136.5 35.5q143 0 235 -119q2 2 28.5 18.5t38.5 22.5l38 22q27 15 44 22.5t41.5 16.5t47 13t43.5 4q291 0 291 -284v-750h-216v750q0 55 -18 76.5t-70 21.5q-86 0 -213 -92v-756h-215v721q0 127 -88 127q-53 0 -126.5 -39 t-112.5 -72v-737h-215z" />
+<glyph unicode="n" horiz-adv-x="1062" d="M154 0v1004h215v-74q53 43 132 73.5t142 30.5q158 0 214 -78.5t56 -214.5v-741h-215v741q0 61 -15 84t-65 23q-115 0 -249 -107v-741h-215z" />
+<glyph unicode="o" horiz-adv-x="999" d="M90 502q0 131 43 248.5t139.5 200.5t227.5 83t227 -83t139 -200.5t43 -248.5q0 -133 -43 -251t-139 -200t-227 -82t-227.5 82t-139.5 200t-43 251zM305 502q0 -143 53.5 -245.5t141.5 -102.5t141 102t53 246q0 141 -53 244.5t-141 103.5t-141.5 -103.5t-53.5 -244.5z" />
+<glyph unicode="p" horiz-adv-x="1056" d="M158 -358v1362h217v-74q96 104 221 104q178 0 275.5 -149.5t97.5 -337.5q0 -102 -17.5 -195.5t-57.5 -183.5t-120 -144.5t-190 -54.5q-154 0 -209 103v-430h-217zM375 489q0 -78 12 -145.5t60.5 -127.5t127.5 -60q55 0 92.5 41t52.5 106.5t21.5 117.5t6.5 105 q0 315 -173 316q-94 0 -200 -103v-250z" />
+<glyph unicode="q" horiz-adv-x="1054" d="M88 465q0 133 41 258t138.5 218t234.5 93q80 0 179 -19.5t159 -39.5l59 -19v-1314h-217v430q-33 -45 -92.5 -74t-116.5 -29q-133 0 -223 77t-126 184.5t-36 234.5zM307 492q0 -49 7.5 -99.5t23.5 -108t53 -93t90 -35.5q51 0 86 26q115 84 115 307v338q-12 4 -30.5 8.5 t-71.5 12.5q-27 4 -47.5 4t-34.5 -4q-55 -8 -94 -47t-59.5 -94.5t-29 -108.5t-8.5 -106z" />
+<glyph unicode="r" horiz-adv-x="653" d="M150 0v1004h217v-74q90 104 155 104l121 -30l-35 -203q-66 37 -114 37q-25 0 -56.5 -22.5t-52.5 -45.5l-20 -22v-748h-215z" />
+<glyph unicode="s" horiz-adv-x="858" d="M90 739q0 141 104.5 218t251.5 77q88 0 177.5 -36.5t134.5 -102.5l-113 -111q-37 37 -93 60.5t-110 23.5q-51 0 -95 -31.5t-44 -80.5q0 -57 96 -103l250 -127q68 -35 106 -102.5t38 -144.5q0 -147 -109 -228.5t-262 -81.5q-72 0 -156 36t-147 87l80 144q131 -94 229 -95 q66 0 110 29t44 92q0 70 -103 123l-278 145q-53 29 -82 86t-29 123z" />
+<glyph unicode="t" horiz-adv-x="626" d="M35 850v154h137v180h203v-180h182v-183h-178v-594q0 -72 51 -71l107 26l51 -151q-106 -51 -156 -58q-27 -4 -63 -4q-104 0 -154.5 71t-50.5 181v606z" />
+<glyph unicode="u" horiz-adv-x="1062" d="M152 258v746h215v-746q0 -53 17 -75.5t71 -22.5q104 0 241 102v742h215v-818q0 -68 41 -98l-65 -119q-47 4 -96.5 43t-61.5 80q-66 -49 -149.5 -86t-151.5 -37q-147 0 -211.5 71t-64.5 218z" />
+<glyph unicode="v" horiz-adv-x="925" d="M18 1004h232l219 -695q139 352 211 695h229q-143 -520 -368 -1004h-158z" />
+<glyph unicode="w" horiz-adv-x="1372" d="M12 1004h228l184 -682l162 682h205l176 -682q119 377 157 682h226q-66 -487 -297 -1004h-205l-103 369q-12 45 -25 113.5t-20 115.5l-8 47q-27 -178 -55 -276l-105 -369h-213z" />
+<glyph unicode="x" horiz-adv-x="868" d="M20 0l291 518l-272 486h242l151 -302l154 302h235l-272 -474l307 -530h-246l-180 340l-174 -340h-236z" />
+<glyph unicode="y" horiz-adv-x="929" d="M23 1004h227l180 -564q43 -137 53 -207q125 360 205 771h219q-33 -147 -79 -314.5t-115.5 -381.5t-158.5 -383t-175 -230q-33 -25 -86 -46.5t-90 -29.5l-37 -10l-47 162q90 29 139 71q47 41 113 158z" />
+<glyph unicode="z" horiz-adv-x="872" d="M70 0v170q221 379 432 641h-393v193h663v-175q-281 -356 -444 -634h487v-195h-745z" />
+<glyph unicode="{" horiz-adv-x="681" d="M61 518v141q66 0 113 58.5t47 148.5v357q0 168 62.5 227t160.5 59h144l35 -172h-156q-39 0 -49 -26.5t-10 -114.5v-356q0 -88 -46.5 -160t-93.5 -94q53 -33 96.5 -97.5t43.5 -152.5v-356q0 -86 12 -113t57 -27h146l-35 -172h-70h-69q-98 0 -163 58.5t-65 226.5v356 q0 90 -47 149.5t-113 59.5z" />
+<glyph unicode="|" horiz-adv-x="454" d="M135 -29v1569h184v-1569h-184z" />
+<glyph unicode="}" horiz-adv-x="681" d="M53 -160h146q45 0 57 27t12 113v356q0 88 42 152.5t96 97.5q-47 23 -92.5 94.5t-45.5 159.5v356q0 88 -10 114.5t-49 26.5h-156l35 172h143q98 0 161 -59t63 -227v-357q0 -90 47 -148.5t112 -58.5v-141q-66 0 -112.5 -59.5t-46.5 -149.5v-356q0 -168 -64.5 -226.5 t-163.5 -58.5h-71h-68z" />
+<glyph unicode="~" horiz-adv-x="1363" d="M285 459v207l22 32q14 20 64.5 53t105.5 33q84 0 220.5 -65.5t199.5 -65.5q109 0 178 119l6 12v-217l-21 -30q-13 -18 -61.5 -49t-101.5 -31q-94 0 -230.5 66.5t-191.5 66.5q-35 0 -67.5 -13.5t-54 -33t-38 -39t-24.5 -33.5z" />
+<glyph unicode="&#xa1;" horiz-adv-x="540" d="M94 852q0 61 48 107.5t109.5 46.5t101.5 -37t40 -98.5t-48 -107.5t-109.5 -46t-101.5 38t-40 97zM104 -459q41 211 41 414v639h185q27 -510 26 -668q0 -254 -30 -356z" />
+<glyph unicode="&#xa2;" horiz-adv-x="843" d="M86 492q0 231 102 368q109 154 277 172v137h92v-139q70 -8 129 -37.5t84 -54.5l25 -27l-109 -129q-53 47 -129 66v-690q41 10 88 33.5t72 41.5l26 21l74 -148q-115 -104 -260 -131v-127h-92v123q-150 12 -254 138q-125 145 -125 383zM301 512q0 -127 45 -226.5 t119 -125.5v688q-68 -23 -116 -110t-48 -226z" />
+<glyph unicode="&#xa3;" horiz-adv-x="905" d="M25 745l59 148h78v252q0 141 105.5 207.5t240.5 66.5q150 0 242 -78l-56 -149q-86 51 -174 51q-143 0 -143 -127v-223h260v-184h-260v-195q0 -154 -37 -328h100l90 -30q38 -12 73 -13q96 0 167 97l18 28l43 -172q-2 -4 -7 -10l-20 -25q-15 -18 -32.5 -31.5t-46.5 -31.5 t-58.5 -25.5t-68.5 -11.5q-9 -1 -17 -1l-61 11l-106 29h-332q80 352 80 524v195z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1110" d="M6 463l78 172h111v55v58h-181l82 176h123q33 217 180.5 353t378.5 136q197 0 344 -141l-75 -168q-68 70 -128.5 98.5t-150.5 28.5q-270 0 -338 -307h551l-82 -174h-491q-7 -36 -8 -70q0 -23 3 -45h445l-82 -174h-336q51 -303 318 -303q156 0 319 192v-241 q-139 -133 -330 -134q-205 0 -346 130.5t-172 357.5h-213z" />
+<glyph unicode="&#xa5;" horiz-adv-x="974" d="M31 1290h241l220 -583l221 583h231l-211 -487h197v-187h-277l-49 -114h326v-187h-334v-315h-221v315h-324v187h316l-50 114h-266v187h189z" />
+<glyph unicode="&#xa7;" horiz-adv-x="860" d="M25 -158l77 160q160 -100 306 -100q72 0 111.5 33.5t39.5 91.5q0 43 -40 77.5t-150 88.5q-10 4 -56.5 26.5t-61.5 30.5t-54 30.5t-55 41.5l-38 45q-23 27 -30.5 57.5t-7.5 67.5q0 98 62 172.5t163 105.5q-217 96 -217 242q0 141 100 225t256 84q158 0 326 -94l-84 -160 q-150 74 -246 74q-66 0 -102.5 -35t-36.5 -90q0 -10 4 -20.5t12 -19.5t15.5 -16.5t21.5 -15.5t20.5 -12t22.5 -11.5t18 -9.5l63 -30l73 -37l67 -38q45 -26 68.5 -48.5t50.5 -52t39 -62.5t12 -70q0 -96 -62.5 -179t-154.5 -113q59 -33 97 -57.5t75 -72t37 -98.5 q0 -154 -100.5 -245t-266.5 -91q-167 0 -374 125zM276 514q0 -41 32 -74.5t85 -33.5q84 0 134.5 36.5t50.5 92.5q0 43 -38 73.5t-94 30.5q-76 0 -123 -35t-47 -90z" />
+<glyph unicode="&#xa8;" horiz-adv-x="786" d="M76 1276q0 57 43 103t100 46q47 0 81 -32.5t34 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -76.5 30t-31.5 75zM422 1276q0 57 43 103t100 46q47 0 80 -32.5t33 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -75.5 30t-30.5 75z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1800" d="M242 503.5q0 274.5 194.5 468t467 193.5t467 -193.5t194.5 -468t-194.5 -468t-467 -193.5t-467 193.5t-194.5 468zM403 504q0 -207 146.5 -353.5t353.5 -146.5t353.5 146.5t146.5 353.5t-146.5 353.5t-353.5 146.5t-353.5 -146.5t-146.5 -353.5zM600 514q0 150 85 253 t230 103q55 0 121 -29.5t111 -70.5l-82 -108q-88 63 -147 63q-72 0 -111 -67.5t-39 -143.5q0 -92 38 -162.5t122 -70.5q66 0 143 59l62 -117q-100 -88 -211 -88q-158 0 -240 107.5t-82 271.5z" />
+<glyph unicode="&#xaa;" horiz-adv-x="774" d="M70 936q0 66 47 151l336 146v78q0 76 -93 75q-98 0 -196 -94l-58 99q49 57 123 96t146 39q111 0 176 -54.5t65 -162.5v-445q0 -39 29 -39q18 0 29 9l43 -82q-55 -33 -111 -33q-53 0 -90 29.5t-47 80.5q-74 -113 -193 -112q-206 0 -206 219zM225 936q0 -35 18.5 -59.5 t51.5 -24.5q70 0 115 68.5t45 146.5v27l-219 -88q-11 -56 -11 -70z" />
+<glyph unicode="&#xab;" horiz-adv-x="1024" d="M27 496l403 409l145 -117l-296 -288l301 -297l-146 -117zM387 496l404 409l145 -117l-295 -288l299 -297l-145 -117z" />
+<glyph unicode="&#xac;" horiz-adv-x="1095" d="M82 717v184h850v-555l-182 -35v406h-668z" />
+<glyph unicode="&#xad;" horiz-adv-x="618" d="M86 430v184h440v-184h-440z" />
+<glyph unicode="&#xae;" horiz-adv-x="1800" d="M242 503.5q0 274.5 194.5 468t467 193.5t467 -193.5t194.5 -468t-194.5 -468t-467 -193.5t-467 193.5t-194.5 468zM403 504q0 -207 146.5 -353.5t353.5 -146.5t353.5 146.5t146.5 353.5t-146.5 353.5t-353.5 146.5t-353.5 -146.5t-146.5 -353.5zM692 147v725h178 q125 0 203 -58t78 -179q0 -76 -39 -141.5t-106 -87.5l176 -183v-76h-138l-192 205v-205h-160zM852 530q16 -8 41 -8q47 0 71.5 33t24.5 80q0 94 -119 94h-18v-199z" />
+<glyph unicode="&#xaf;" horiz-adv-x="686" d="M43 1143v182h598v-182h-598z" />
+<glyph unicode="&#xb0;" horiz-adv-x="720" d="M49 1038q0 125 89 214t214 89t214 -89t89 -214t-89 -214t-214 -89t-214 89t-89 214zM205 1038.5q0 -61.5 43 -104.5t104.5 -43t104.5 43t43 104.5t-43 104.5t-104.5 43t-104.5 -43t-43 -104.5z" />
+<glyph unicode="&#xb1;" horiz-adv-x="915" d="M78 487v172h313v271h180v-271h316v-172h-316v-225h-180v225h-313zM98 0v170h768v-170h-768z" />
+<glyph unicode="&#xb2;" d="M111 160q141 80 307 259t166 306q0 57 -39 88t-99 31q-70 0 -145.5 -32t-126.5 -81l-45 172q59 61 155.5 96t184.5 35q152 0 242 -75.5t90 -225.5q0 -154 -102.5 -300t-247.5 -240h385v-193h-686z" />
+<glyph unicode="&#xb3;" d="M131 -178q111 2 213 34.5t181 114.5t79 199q0 152 -239 152q-90 0 -199 -11v164l108 17q100 55 236 163q70 57 70 115q0 35 -27 57.5t-61 22.5q-41 0 -114 -27.5t-124 -56.5l-53 -29l-54 162q74 43 121 66.5t118 45t136 21.5q125 0 199 -67.5t74 -171.5q0 -94 -80 -182.5 t-170 -123.5q115 -10 193.5 -93t78.5 -193q0 -141 -56 -250t-152.5 -171.5t-214.5 -92t-251 -29.5h-12v164z" />
+<glyph unicode="&#xb4;" horiz-adv-x="692" d="M86 1255q96 70 182 152t123 129l37 47l172 -176q-184 -170 -416 -291z" />
+<glyph unicode="&#xb5;" horiz-adv-x="1058" d="M57 -371q92 145 93 277q0 45 -9.5 127t-9.5 141v49v781h215v-791q0 -53 84 -53q51 0 97 16.5t68.5 30.5t78.5 57v740h215v-818q0 -39 22.5 -47t55.5 15l67 -134q-78 -51 -155 -51q-59 0 -116.5 27t-78.5 76q-141 -102 -242 -103q-51 0 -88 19q12 -90 13 -152 q0 -80 -50 -164z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1112" d="M61 778q-11 61 -11 122.5t11 122.5q23 122 125.5 207t255.5 85q45 0 95.5 -4t113 -11.5t94.5 -9.5v80h177v-78l106 19l-8 -168l-100 -23q-2 -340 -73 -715.5t-202 -642.5l-188 78q139 256 209.5 598t74.5 678q-27 2 -77 9.5t-91 11.5t-75 4q-116 -4 -116 -193 q0 -18 1 -39q14 -199 119 -221q9 -2 18 -1q64 0 152 71q-94 -272 -271 -273q-133 0 -225 85t-115 208z" />
+<glyph unicode="&#xb7;" horiz-adv-x="528" d="M121 492q0 63 47 108t111 45q59 0 99 -38t40 -97q0 -63 -47 -108.5t-111 -45.5q-59 0 -99 38.5t-40 97.5z" />
+<glyph unicode="&#xb8;" horiz-adv-x="823" d="M375 -299q66 35 95.5 53.5t53 42t23.5 47.5q0 33 -40 37q-10 1 -20 1q-30 0 -61 -9l-39 -14l2 141h246q84 -61 84 -154q0 -78 -73 -142t-165 -103z" />
+<glyph unicode="&#xb9;" d="M201 799v155q117 0 250 41l26 9h174v-1004h-213v799h-237z" />
+<glyph unicode="&#xba;" horiz-adv-x="802" d="M94 1118.5q0 157.5 82 281.5t229.5 124t230.5 -124t83 -281.5t-83 -280.5t-230.5 -123t-229.5 123t-82 280.5zM258 1118.5q0 -108.5 41 -186.5t107 -78q68 0 108.5 78t40.5 186.5t-41 187t-108 78.5q-66 0 -107 -78.5t-41 -187z" />
+<glyph unicode="&#xbb;" horiz-adv-x="1024" d="M98 788l146 117l407 -409l-403 -410l-146 117l295 289zM459 788l145 117l408 -409l-404 -410l-145 117l297 289z" />
+<glyph unicode="&#xbc;" horiz-adv-x="2537" d="M201 799v155q117 0 250 41l26 9h174v-1004h-213v799h-237zM743 -256l869 1769h198l-868 -1769h-199zM1675 166q145 373 494 838h209v-816h116v-188h-120v-283h-205v283h-483zM1896 188h273v502q-187 -281 -273 -502z" />
+<glyph unicode="&#xbd;" horiz-adv-x="2537" d="M201 799v155q117 0 250 41l26 9h174v-1004h-213v799h-237zM743 -256l869 1769h198l-868 -1769h-199zM1726 160q141 80 307.5 259t166.5 306q0 57 -39 88t-99 31q-70 0 -145.5 -32t-126.5 -81l-45 172q59 61 155.5 96t184.5 35q152 0 242 -75.5t90 -225.5 q0 -154 -102.5 -300t-248.5 -240h385v-193h-686z" />
+<glyph unicode="&#xbe;" horiz-adv-x="2537" d="M131 -178q111 2 213 34.5t181 114.5t79 199q0 152 -239 152q-90 0 -199 -11v164l108 17q100 55 236 163q70 57 70 115q0 35 -27 57.5t-61 22.5q-41 0 -114 -27.5t-124 -56.5l-53 -29l-54 162q74 43 121 66.5t118 45t136 21.5q125 0 199 -67.5t74 -171.5q0 -94 -80 -182.5 t-170 -123.5q115 -10 193.5 -93t78.5 -193q0 -141 -56 -250t-152.5 -171.5t-214.5 -92t-251 -29.5h-12v164zM743 -256l869 1769h198l-868 -1769h-199zM1675 166q145 373 494 838h209v-816h116v-188h-120v-283h-205v283h-483zM1896 188h273v502q-187 -281 -273 -502z" />
+<glyph unicode="&#xbf;" horiz-adv-x="733" d="M57 -150q0 49 17.5 98.5t36 78t57.5 82.5l149 202q63 88 64 199v113h184v-111q0 -150 -17.5 -202t-105.5 -167l-108 -143q-63 -82 -64 -137q0 -100 78 -101q100 0 197 29v-172q-135 -33 -236 -33q-115 0 -183.5 73.5t-68.5 190.5zM330 881q0 61 48 107t109.5 46 t101.5 -36.5t40 -98t-48.5 -106.5t-109.5 -45t-101 37t-40 96z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1044" d="M23 0l407 1290h184l410 -1290h-229l-123 371h-295l-123 -371h-231zM262 1659l172 176q121 -168 342 -328l-98 -139q-254 133 -416 291zM426 567h195l-97 398z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1044" d="M23 0l407 1290h184l410 -1290h-229l-123 371h-295l-123 -371h-231zM262 1507q96 70 182 152t123 129l37 47l172 -176q-184 -170 -416 -291zM426 567h195l-97 398z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1044" d="M23 0l407 1290h184l410 -1290h-229l-123 371h-295l-123 -371h-231zM174 1505q195 135 346 334q14 -20 41 -53t117 -121t188 -158l-98 -139q-109 57 -248 188q-111 -119 -248 -190zM426 567h195l-97 398z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1044" d="M23 0l407 1290h184l410 -1290h-229l-123 371h-295l-123 -371h-231zM115 1581q90 72 149.5 102.5t118.5 30.5q63 0 146 -43t120 -43q45 0 70.5 12.5t99.5 61.5l88 -129q-90 -84 -141 -108.5t-131 -24.5q-47 0 -129 43t-129 43q-72 0 -184 -82zM426 567h195l-97 398z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1044" d="M23 0l407 1290h184l410 -1290h-229l-123 371h-295l-123 -371h-231zM215 1528q0 59 44 104t101 45q47 0 80 -32.5t33 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75zM426 567h195l-97 398zM561 1528q0 59 44 104t102 45q45 0 78.5 -32.5t33.5 -77.5 q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1044" d="M23 0l407 1290h184l410 -1290h-229l-123 371h-295l-123 -371h-231zM283 1581q0 98 71.5 169t167.5 71t166 -72t70 -168q0 -98 -71 -169t-169 -71t-166.5 71t-68.5 169zM426 567h195l-97 398zM438 1581q0 -33 24.5 -58.5t55.5 -25.5q33 0 57.5 25.5t24.5 58.5t-23.5 57.5 t-52.5 24.5q-37 0 -61.5 -24.5t-24.5 -57.5z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1497" d="M18 0l408 1290h178l84 -262v262h698v-198h-473v-320h363v-201h-363v-368h494v-203h-717v393h-309l-131 -393h-232zM436 590h201l-100 375z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1017" d="M106 645q0 162 52.5 311.5t171.5 257t282 107.5q94 0 177 -23.5t120 -46.5l37 -22l-86 -154q-90 55 -248 55q-57 0 -120.5 -48t-102.5 -128q-59 -129 -59 -317q0 -78 12 -152.5t41 -151.5t89 -124t144 -47q135 0 246 78l103 -152q-90 -76 -236 -106q63 -59 64 -136 q0 -78 -73 -142t-165 -103l-106 100q66 35 95 53.5t53 42t24 47.5q0 33 -40 37q-10 1 -20 1q-30 0 -61 -9l-39 -14v131q-94 29 -165 97.5t-111 160.5t-59.5 191.5t-19.5 205.5z" />
+<glyph unicode="&#xc8;" horiz-adv-x="929" d="M147 0v1290h697v-198h-473v-320h362v-201h-362v-368h493v-203h-717zM244 1659l172 176q127 -174 342 -328l-99 -139q-253 133 -415 291z" />
+<glyph unicode="&#xc9;" horiz-adv-x="929" d="M147 0v1290h697v-198h-473v-320h362v-201h-362v-368h493v-203h-717zM244 1507q98 70 183 152t122 129l37 47l172 -176q-156 -156 -416 -291z" />
+<glyph unicode="&#xca;" horiz-adv-x="929" d="M147 0v1290h697v-198h-473v-320h362v-201h-362v-368h493v-203h-717zM152 1505q190 131 348 334q14 -20 40.5 -53t117 -121t186.5 -158l-99 -139q-111 59 -247 188q-111 -119 -246 -190z" />
+<glyph unicode="&#xcb;" horiz-adv-x="929" d="M147 0v1290h697v-198h-473v-320h362v-201h-362v-368h493v-203h-717zM201 1528q0 59 43 104t100 45q47 0 80 -32.5t33 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -75.5 30t-30.5 75zM547 1528q0 59 43 104t100 45q47 0 80 -32.5t33 -77.5q0 -57 -46 -100.5t-104 -43.5 q-45 0 -75.5 30t-30.5 75z" />
+<glyph unicode="&#xcc;" horiz-adv-x="487" d="M-12 1659l172 176q121 -168 342 -328l-101 -139q-253 135 -413 291zM133 0v1290h221v-1290h-221z" />
+<glyph unicode="&#xcd;" horiz-adv-x="487" d="M-12 1507q96 70 182 152t123 129l37 47l172 -176q-182 -168 -416 -291zM133 0v1290h221v-1290h-221z" />
+<glyph unicode="&#xce;" horiz-adv-x="487" d="M-106 1505q190 131 348 334q14 -20 40.5 -53t116.5 -121t187 -158l-99 -139q-111 59 -247 188q-113 -121 -246 -190zM133 0v1290h221v-1290h-221z" />
+<glyph unicode="&#xcf;" horiz-adv-x="487" d="M-61 1528q0 59 43 104t100 45q47 0 81 -32.5t34 -77.5q0 -57 -46.5 -100.5t-103.5 -43.5q-45 0 -76.5 30t-31.5 75zM133 0v1290h221v-1290h-221zM285 1528q0 59 43 104t100 45q47 0 81 -32.5t34 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -76.5 30t-31.5 75z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1134" d="M152 0v1290h262l286 -651q33 -74 60 -186v837h223v-1290h-215l-408 903q14 -84 15 -170v-733h-223zM168 1581q92 72 150.5 102.5t119.5 30.5q63 0 145.5 -43t118.5 -43q45 0 73 12.5t97 61.5l89 -129q-90 -84 -141.5 -108.5t-129.5 -24.5q-47 0 -130 43t-128 43 q-74 0 -186 -82z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1122" d="M102 645q0 119 27 234.5t79 216t144 163t209 62.5q119 0 211 -61.5t144.5 -164t78 -216t25.5 -234.5t-25.5 -234.5t-78 -216t-144.5 -164t-211 -61.5t-211 61.5t-144 164t-78 216t-26 234.5zM297 1659l172 176q121 -168 342 -328l-98 -139q-254 133 -416 291zM326 645 q0 -84 11 -161.5t35.5 -152.5t74 -120t115 -45t114.5 45t73.5 120t36 152.5t11.5 161.5t-11.5 162t-36 152.5t-73.5 119.5t-114.5 45t-115 -45t-74 -119.5t-35.5 -152.5t-11 -162z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1122" d="M102 645q0 119 27 234.5t79 216t144 163t209 62.5q119 0 211 -61.5t144.5 -164t78 -216t25.5 -234.5t-25.5 -234.5t-78 -216t-144.5 -164t-211 -61.5t-211 61.5t-144 164t-78 216t-26 234.5zM301 1507q96 70 182 152t123 129l37 47l172 -176q-184 -170 -416 -291z M326 645q0 -84 11 -162t35.5 -152.5t74 -119.5t115 -45t114.5 45t73.5 119.5t36 152.5t11.5 162t-11.5 162t-36 152.5t-73.5 119.5t-114.5 45t-115 -45t-74 -119.5t-35.5 -152.5t-11 -162z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1122" d="M102 645q0 119 27 234.5t79 216t144 163t209 62.5q119 0 211 -61.5t144.5 -164t78 -216t25.5 -234.5t-25.5 -234.5t-78 -216t-144.5 -164t-211 -61.5t-211 61.5t-144 164t-78 216t-26 234.5zM219 1505q195 135 346 334q14 -20 41 -53t117 -121t188 -158l-98 -139 q-109 57 -248 188q-111 -119 -248 -190zM326 645q0 -84 11 -161.5t35.5 -152.5t74 -120t115 -45t114.5 45t73.5 120t36 152.5t11.5 161.5t-11.5 162t-36 152.5t-73.5 119.5t-114.5 45t-115 -45t-74 -119.5t-35.5 -152.5t-11 -162z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1122" d="M102 645q0 119 27 234.5t79 216t144 163t209 62.5q119 0 211 -61.5t144.5 -164t78 -216t25.5 -234.5t-25.5 -234.5t-78 -216t-144.5 -164t-211 -61.5t-211 61.5t-144 164t-78 216t-26 234.5zM156 1581q92 72 150.5 102.5t119.5 30.5q63 0 146 -43t120 -43q45 0 72 12.5 t96 61.5l88 -129q-90 -84 -140 -108.5t-130 -24.5q-47 0 -129 43t-129 43q-74 0 -184 -82zM326 645q0 -84 11 -161.5t35.5 -152.5t74 -120t115 -45t114.5 45t73.5 120t36 152.5t11.5 161.5t-11.5 162t-36 152.5t-73.5 119.5t-114.5 45t-115 -45t-74 -119.5t-35.5 -152.5 t-11 -162z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1122" d="M102 645q0 119 27 234.5t79 216t144 163t209 62.5q119 0 211 -61.5t144.5 -164t78 -216t25.5 -234.5t-25.5 -234.5t-78 -216t-144.5 -164t-211 -61.5t-211 61.5t-144 164t-78 216t-26 234.5zM260 1528q0 59 43 104t100 45q47 0 80 -32.5t33 -77.5q0 -57 -46 -100.5 t-103 -43.5q-45 0 -76 30t-31 75zM326 645q0 -84 11 -161.5t35.5 -152.5t74 -120t115 -45t114.5 45t73.5 120t36 152.5t11.5 161.5t-11.5 162t-36 152.5t-73.5 119.5t-114.5 45t-115 -45t-74 -119.5t-35.5 -152.5t-11 -162zM606 1528q0 59 43 104t101 45q47 0 79.5 -32.5 t32.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -76 30t-31 75z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1122" d="M102 655q0 111 26 221.5t77 214t143 167t213 63.5q66 0 133 -23l68 236h102l-82 -283q121 -90 179.5 -259t58.5 -345q0 -113 -24.5 -225.5t-76 -217t-144.5 -170t-214 -65.5q-72 0 -139 25l-80 -281h-102l94 332q-119 90 -175.5 261t-56.5 349zM326 635q0 -254 71 -373 l242 846q-33 16 -78 16q-235 0 -235 -489zM477 184q39 -18 84 -18q236 0 236 481q0 262 -76 385z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1142" d="M150 506v784h223v-784q0 -340 198.5 -340t198.5 340v784h223v-784q0 -231 -102.5 -384t-319.5 -153t-319 153t-102 384zM309 1659l172 176q125 -170 344 -328l-100 -139q-252 133 -416 291z" />
+<glyph unicode="&#xda;" horiz-adv-x="1142" d="M150 506v784h223v-784q0 -340 198.5 -340t198.5 340v784h223v-784q0 -231 -102.5 -384t-319.5 -153t-319 153t-102 384zM319 1507q98 70 183.5 152t122.5 129l37 47l172 -176q-156 -156 -414 -291z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1142" d="M150 506v784h223v-784q0 -340 198.5 -340t198.5 340v784h223v-784q0 -231 -102.5 -384t-319.5 -153t-319 153t-102 384zM225 1505q195 135 346 334q14 -20 41 -53t117 -121t189 -158l-99 -139q-111 59 -248 188q-111 -119 -247 -190z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1142" d="M150 506v784h223v-784q0 -340 198.5 -340t198.5 340v784h223v-784q0 -231 -102.5 -384t-319.5 -153t-319 153t-102 384zM270 1528q0 59 44 104t102 45q47 0 79.5 -32.5t32.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75zM616 1528q0 59 44.5 104t101.5 45 q45 0 78.5 -32.5t33.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75z" />
+<glyph unicode="&#xdd;" horiz-adv-x="964" d="M27 1290h239l215 -583l228 583h229l-344 -809v-481h-223v483zM385 1583q96 70 182 152t123 129l37 47l172 -176q-184 -170 -416 -291z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1171" d="M27 846v158h129v131q0 143 113.5 226t260.5 83q180 0 299 -95.5t119 -271.5q0 -31 -5 -66.5t-11 -59.5l-18 -66q-11 -43 -15 -62q-68 31 -135 31q-113 0 -113 -98q0 -12 6.5 -24.5t14.5 -21t22.5 -18.5t22.5 -15t26.5 -14.5t20.5 -11.5l250 -135q57 -31 91 -88t34 -125 q0 -158 -103.5 -246t-265.5 -88q-172 0 -324 99l86 161q111 -76 246 -75q68 0 111 30.5t43 94.5q0 72 -92 120l-273 144q-129 68 -129 207q0 117 74 196.5t190 79.5q31 0 48 -2q8 31 8 70q0 168 -215 168q-68 0 -120 -42t-52 -110v-1110h-215v827z" />
+<glyph unicode="&#xe0;" horiz-adv-x="954" d="M78 256q0 84 61 203l441 190v101q0 100 -119 100q-63 0 -136 -36t-124 -87l-74 129q63 76 160.5 127t191.5 51q145 0 231.5 -72.5t86.5 -213.5v-584q0 -53 39 -53q12 0 36 12l56 -109q-70 -43 -146 -43q-68 0 -117 39t-61 107q-96 -147 -254 -148q-135 0 -203.5 75 t-68.5 212zM229 1407l172 176q123 -168 342 -328l-98 -139q-258 137 -416 291zM281 258q0 -45 25.5 -79t68.5 -34q92 0 150.5 91.5t58.5 193.5v37l-287 -119q-16 -57 -16 -90z" />
+<glyph unicode="&#xe1;" horiz-adv-x="954" d="M78 256q0 84 61 203l441 190v101q0 100 -119 100q-63 0 -136 -36t-124 -87l-74 129q63 76 160.5 127t191.5 51q145 0 231.5 -72.5t86.5 -213.5v-584q0 -53 39 -53q12 0 36 12l56 -109q-70 -43 -146 -43q-68 0 -117 39t-61 107q-96 -147 -254 -148q-135 0 -203.5 75 t-68.5 212zM240 1255q98 70 183 152t122 129l37 47l172 -176q-156 -156 -416 -291zM281 258q0 -45 25.5 -79t68.5 -34q92 0 150.5 91.5t58.5 193.5v37l-287 -119q-16 -57 -16 -90z" />
+<glyph unicode="&#xe2;" horiz-adv-x="954" d="M78 256q0 84 61 203l441 190v101q0 100 -119 100q-63 0 -136 -36t-124 -87l-74 129q63 76 160.5 127t191.5 51q145 0 231.5 -72.5t86.5 -213.5v-584q0 -53 39 -53q12 0 36 12l56 -109q-70 -43 -146 -43q-68 0 -117 39t-61 107q-96 -147 -254 -148q-135 0 -203.5 75 t-68.5 212zM133 1253q186 127 348 334q14 -20 41 -53t117 -121t186 -158l-98 -139q-117 61 -248 187q-115 -119 -246 -189zM281 258q0 -45 25.5 -79t68.5 -34q92 0 150.5 91.5t58.5 193.5v37l-287 -119q-16 -57 -16 -90z" />
+<glyph unicode="&#xe3;" horiz-adv-x="954" d="M74 1329q92 72 150.5 102.5t119.5 30.5q63 0 145 -43t119 -43q45 0 73 12.5t97 61.5l88 -129q-90 -84 -140 -108.5t-130 -24.5q-47 0 -129 43t-129 43q-74 0 -186 -82zM78 256q0 84 61 203l441 190v101q0 100 -119 100q-63 0 -136 -36t-124 -87l-74 129q63 76 160.5 127 t191.5 51q145 0 231.5 -72.5t86.5 -213.5v-584q0 -53 39 -53q12 0 36 12l56 -109q-70 -43 -146 -43q-68 0 -117 39t-61 107q-96 -147 -254 -148q-135 0 -203.5 75t-68.5 212zM281 258q0 -45 25.5 -79t68.5 -34q92 0 150.5 91.5t58.5 193.5v37l-287 -119q-16 -57 -16 -90z " />
+<glyph unicode="&#xe4;" horiz-adv-x="954" d="M78 256q0 84 61 203l441 190v101q0 100 -119 100q-63 0 -136 -36t-124 -87l-74 129q63 76 160.5 127t191.5 51q145 0 231.5 -72.5t86.5 -213.5v-584q0 -53 39 -53q12 0 36 12l56 -109q-70 -43 -146 -43q-68 0 -117 39t-61 107q-96 -147 -254 -148q-135 0 -203.5 75 t-68.5 212zM180 1276q0 57 44 103t102 46q47 0 79.5 -32.5t32.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75zM281 258q0 -45 25.5 -79t68.5 -34q92 0 150.5 91.5t58.5 193.5v37l-287 -119q-16 -57 -16 -90zM526 1276q0 57 44 103t102 46q47 0 79.5 -32.5 t32.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75z" />
+<glyph unicode="&#xe5;" horiz-adv-x="954" d="M78 256q0 84 61 203l441 190v101q0 100 -119 100q-63 0 -136 -36t-124 -87l-74 129q63 76 160.5 127t191.5 51q145 0 231.5 -72.5t86.5 -213.5v-584q0 -53 39 -53q12 0 36 12l56 -109q-70 -43 -146 -43q-68 0 -117 39t-61 107q-96 -147 -254 -148q-135 0 -203.5 75 t-68.5 212zM240 1349.5q0 98.5 71.5 169t167.5 70.5t166 -70.5t70 -169t-71 -169t-169 -70.5t-166.5 70.5t-68.5 169zM281 258q0 -45 25.5 -79t68.5 -34q92 0 150.5 91.5t58.5 193.5v37l-287 -119q-16 -57 -16 -90zM393 1349.5q0 -32.5 25.5 -57t56.5 -24.5q33 0 57.5 24.5 t24.5 57t-23.5 57.5t-52.5 25q-37 0 -62.5 -25t-25.5 -57.5z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1511" d="M102 264q0 66 50 189l462 190v98q-16 41 -46.5 73t-67.5 32q-61 0 -137 -49t-132 -109l-88 146q68 84 169.5 142t201.5 58q182 0 260 -108q115 109 273 108q152 0 255 -118.5t109 -272.5l4 -135h-588q0 -53 10.5 -109.5t32 -114t64.5 -94t100 -36.5q137 0 256 71l74 -155 q-156 -100 -340 -101q-102 0 -188 50.5t-142 138.5l-129 -111q-90 -78 -186 -78q-129 0 -203 82t-74 213zM315 258q0 -43 21.5 -71.5t64.5 -28.5q20 0 45 9t54.5 29.5t47 34t49.5 41t38 31.5q-18 72 -23 164l-272 -117q-25 -74 -25 -92zM856 686h332q-10 68 -50 118 t-103.5 50t-109.5 -50t-69 -118z" />
+<glyph unicode="&#xe7;" horiz-adv-x="843" d="M86 492q0 133 40 251.5t137 204.5t237 86q76 0 127 -15t73 -32l95 -72l-109 -131q-90 70 -184 70q-76 0 -138.5 -95t-62.5 -247q0 -147 58.5 -254.5t148.5 -107.5q49 0 117.5 33.5t115.5 72.5l76 -152q-88 -74 -199 -112q74 -59 74 -146q0 -78 -72.5 -142t-164.5 -103 l-107 100q66 35 95.5 53.5t53 42t23.5 47.5q0 33 -40 37q-10 1 -20 1q-30 0 -59 -9l-41 -14v137q-92 37 -156.5 124t-91 181.5t-26.5 190.5z" />
+<glyph unicode="&#xe8;" horiz-adv-x="960" d="M88 526q0 203 120 355.5t318 152.5q145 0 253 -118.5t112 -266.5q0 -23 1 -67.5t1 -67.5h-586q-2 -12 -2 -37q0 -66 17.5 -136.5t64.5 -129.5t115 -59q123 0 268 110l72 -139q-74 -61 -173.5 -107.5t-179.5 -46.5q-143 0 -237 89t-129 209t-35 259zM252 1407l172 176 q127 -174 342 -328l-98 -139q-254 133 -416 291zM336 692h342q-6 78 -49 130t-117 52q-131 0 -176 -182z" />
+<glyph unicode="&#xe9;" horiz-adv-x="960" d="M88 526q0 203 120 355.5t318 152.5q145 0 253 -118.5t112 -266.5q0 -23 1 -67.5t1 -67.5h-586q-2 -12 -2 -37q0 -66 17.5 -136.5t64.5 -129.5t115 -59q123 0 268 110l72 -139q-74 -61 -173.5 -107.5t-179.5 -46.5q-143 0 -237 89t-129 209t-35 259zM276 1255 q96 70 182.5 152t123.5 129l36 47l173 -176q-184 -170 -416 -291zM336 692h342q-6 78 -49 130t-117 52q-131 0 -176 -182z" />
+<glyph unicode="&#xea;" horiz-adv-x="960" d="M88 526q0 203 120 355.5t318 152.5q145 0 253 -118.5t112 -266.5q0 -23 1 -67.5t1 -67.5h-586q-2 -12 -2 -37q0 -66 17.5 -136.5t64.5 -129.5t115 -59q123 0 268 110l72 -139q-74 -61 -173.5 -107.5t-179.5 -46.5q-143 0 -237 89t-129 209t-35 259zM164 1253 q193 131 346 334q14 -20 41 -53t117 -121t188 -158l-98 -139q-117 61 -248 187q-115 -119 -248 -189zM336 692h342q-6 78 -49 130t-117 52q-131 0 -176 -182z" />
+<glyph unicode="&#xeb;" horiz-adv-x="960" d="M88 526q0 203 120 355.5t318 152.5q145 0 253 -118.5t112 -266.5q0 -23 1 -67.5t1 -67.5h-586q-2 -12 -2 -37q0 -66 17.5 -136.5t64.5 -129.5t115 -59q123 0 268 110l72 -139q-74 -61 -173.5 -107.5t-179.5 -46.5q-143 0 -237 89t-129 209t-35 259zM217 1276q0 57 44 103 t99 46q47 0 81 -32.5t34 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75zM336 692h342q-6 78 -49 130t-117 52q-131 0 -176 -182zM563 1276q0 57 44 103t100 46q47 0 80.5 -32.5t33.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75z" />
+<glyph unicode="&#xec;" horiz-adv-x="487" d="M-16 1407l172 176q127 -174 342 -328l-99 -139q-259 135 -415 291zM137 0v1004h213v-1004h-213z" />
+<glyph unicode="&#xed;" horiz-adv-x="487" d="M-10 1255q98 70 183 152t122 129l37 47l172 -176q-156 -156 -416 -291zM137 0v1004h213v-1004h-213z" />
+<glyph unicode="&#xee;" horiz-adv-x="487" d="M-98 1253q186 127 348 334q14 -20 40.5 -53t117 -121t186.5 -158l-98 -139q-117 61 -248 187q-115 -119 -248 -189zM137 0v1004h213v-1004h-213z" />
+<glyph unicode="&#xef;" horiz-adv-x="487" d="M-55 1276q0 57 44 103t101 46q47 0 80 -32.5t33 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -76.5 30t-31.5 75zM137 0v1004h213v-1004h-213zM291 1276q0 57 44 103t101 46q47 0 80 -32.5t33 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -76.5 30t-31.5 75z" />
+<glyph unicode="&#xf1;" horiz-adv-x="1062" d="M141 1329q90 72 149.5 102.5t119.5 30.5q63 0 146 -43t120 -43q45 0 72.5 12.5t97.5 61.5l88 -129q-90 -84 -141.5 -108.5t-130.5 -24.5q-45 0 -128 43t-131 43q-72 0 -184 -82zM154 0v1004h215v-74q53 43 132 73.5t142 30.5q158 0 214 -78.5t56 -214.5v-741h-215v741 q0 61 -15 84t-65 23q-115 0 -249 -107v-741h-215z" />
+<glyph unicode="&#xf2;" horiz-adv-x="999" d="M90 502q0 131 43 248.5t139.5 200.5t227.5 83t227 -83t139 -200.5t43 -248.5q0 -133 -43 -251t-139 -200t-227 -82t-227.5 82t-139.5 200t-43 251zM250 1407l172 176q125 -170 344 -328l-100 -139q-258 137 -416 291zM305 502q0 -143 53.5 -245.5t141.5 -102.5t141 102 t53 246q0 141 -53 244.5t-141 103.5t-141.5 -103.5t-53.5 -244.5z" />
+<glyph unicode="&#xf3;" horiz-adv-x="999" d="M90 502q0 131 43 248.5t139.5 200.5t227.5 83t227 -83t139 -200.5t43 -248.5q0 -133 -43 -251t-139 -200t-227 -82t-227.5 82t-139.5 200t-43 251zM250 1255q96 70 182 152t123 129l37 47l172 -176q-184 -170 -416 -291zM305 502q0 -143 53.5 -245.5t141.5 -102.5 t141 102t53 246q0 141 -53 244.5t-141 103.5t-141.5 -103.5t-53.5 -244.5z" />
+<glyph unicode="&#xf4;" horiz-adv-x="999" d="M90 502q0 131 43 248.5t139.5 200.5t227.5 83t227 -83t139 -200.5t43 -248.5q0 -133 -43 -251t-139 -200t-227 -82t-227.5 82t-139.5 200t-43 251zM162 1253q186 127 348 334q14 -20 41 -53t117 -121t186 -158l-98 -139q-117 61 -248 187q-115 -119 -248 -189zM305 502 q0 -143 53.5 -245.5t141.5 -102.5t141 102t53 246q0 141 -53 244.5t-141 103.5t-141.5 -103.5t-53.5 -244.5z" />
+<glyph unicode="&#xf5;" horiz-adv-x="999" d="M90 502q0 131 43 248.5t139.5 200.5t227.5 83t227 -83t139 -200.5t43 -248.5q0 -133 -43 -251t-139 -200t-227 -82t-227.5 82t-139.5 200t-43 251zM113 1329q90 72 149.5 102.5t118.5 30.5q63 0 146 -43t120 -43q45 0 70.5 12.5t99.5 61.5l88 -129q-90 -84 -141 -108.5 t-131 -24.5q-47 0 -129 43t-129 43q-72 0 -185 -82zM305 502q0 -143 53.5 -245.5t141.5 -102.5t141 102t53 246q0 141 -53 244.5t-141 103.5t-141.5 -103.5t-53.5 -244.5z" />
+<glyph unicode="&#xf6;" horiz-adv-x="999" d="M90 502q0 131 43 248.5t139.5 200.5t227.5 83t227 -83t139 -200.5t43 -248.5q0 -133 -43 -251t-139 -200t-227 -82t-227.5 82t-139.5 200t-43 251zM199 1276q0 57 44 103t101 46q45 0 79 -32.5t34 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -76.5 30t-31.5 75zM305 502 q0 -143 53.5 -245.5t141.5 -102.5t141 102t53 246q0 141 -53 244.5t-141 103.5t-141.5 -103.5t-53.5 -244.5zM545 1276q0 57 44 103t99 46q47 0 81 -32.5t34 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -76.5 30t-31.5 75z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1001" d="M96 420v184h807v-184h-807zM342 213q0 63 47 108.5t111 45.5q59 0 99 -38t40 -98q0 -61 -47 -106t-111 -45q-59 0 -99 37t-40 96zM342 799q0 63 47 108t111 45q59 0 99 -37.5t40 -97.5q0 -63 -47 -108t-111 -45q-59 0 -99 38t-40 97z" />
+<glyph unicode="&#xf8;" horiz-adv-x="999" d="M90 500q0 129 42 246.5t138.5 202.5t229.5 85q49 0 96 -12l49 172h103l-60 -213q111 -68 166 -202t55 -279q0 -205 -107.5 -368t-301.5 -163q-49 0 -99 13l-57 -205h-102l69 246q-111 68 -166 201t-55 276zM305 500q0 -182 64 -275l176 619q-20 6 -45 6q-59 0 -100.5 -36 t-59.5 -94t-26.5 -111.5t-8.5 -108.5zM453 160q18 -8 47 -8q59 0 100 35.5t59.5 94t26.5 110.5t8 108q0 184 -65 278z" />
+<glyph unicode="&#xf9;" horiz-adv-x="1058" d="M152 258v746h215v-746q0 -53 17 -75.5t71 -22.5q104 0 241 102v742h215v-818q0 -68 41 -98l-65 -119q-47 4 -96.5 43t-61.5 80q-66 -49 -149.5 -86t-151.5 -37q-147 0 -211.5 71t-64.5 218zM276 1407l173 176q121 -168 342 -328l-99 -139q-260 135 -416 291z" />
+<glyph unicode="&#xfa;" horiz-adv-x="1058" d="M152 258v746h215v-746q0 -53 17 -75.5t71 -22.5q104 0 241 102v742h215v-818q0 -68 41 -98l-65 -119q-47 4 -96.5 43t-61.5 80q-66 -49 -149.5 -86t-151.5 -37q-147 0 -211.5 71t-64.5 218zM268 1255q96 70 182.5 152t122.5 129l37 47l172 -176q-156 -156 -415 -291z" />
+<glyph unicode="&#xfb;" horiz-adv-x="1058" d="M152 258v746h215v-746q0 -53 17 -75.5t71 -22.5q104 0 241 102v742h215v-818q0 -68 41 -98l-65 -119q-47 4 -96.5 43t-61.5 80q-66 -49 -149.5 -86t-151.5 -37q-147 0 -211.5 71t-64.5 218zM176 1253q184 127 346 334q14 -20 41 -53t117 -121t188 -158l-100 -139 q-119 63 -246 187q-125 -125 -248 -189z" />
+<glyph unicode="&#xfc;" horiz-adv-x="1058" d="M152 258v746h215v-746q0 -53 17 -75.5t71 -22.5q104 0 241 102v742h215v-818q0 -68 41 -98l-65 -119q-47 4 -96.5 43t-61.5 80q-66 -49 -149.5 -86t-151.5 -37q-147 0 -211.5 71t-64.5 218zM223 1276q0 57 43 103t101 46q47 0 80.5 -32.5t33.5 -77.5q0 -57 -46 -100.5 t-103 -43.5q-45 0 -77 30t-32 75zM569 1276q0 57 43 103t101 46q47 0 79.5 -32.5t32.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -76 30t-31 75z" />
+<glyph unicode="&#xfd;" horiz-adv-x="929" d="M23 1004h227l180 -564q43 -137 53 -207q125 360 205 771h219q-33 -147 -79 -314.5t-115.5 -381.5t-158.5 -383t-175 -230q-33 -25 -86 -46.5t-90 -29.5l-37 -10l-47 162q90 29 139 71q47 41 113 158zM367 1296q96 70 182 152t123 129l37 47l172 -176q-184 -170 -416 -291 z" />
+<glyph unicode="&#xff;" horiz-adv-x="929" d="M23 1004h227l180 -564q43 -137 53 -207q125 360 205 771h219q-33 -147 -79 -314.5t-115.5 -381.5t-158.5 -383t-175 -230q-33 -25 -86 -46.5t-90 -29.5l-37 -10l-47 162q90 29 139 71q47 41 113 158zM182 1276q0 57 44 103t100 46q47 0 80.5 -32.5t33.5 -77.5 q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75zM528 1276q0 57 43 103t101 46q47 0 80.5 -32.5t33.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75z" />
+<glyph unicode="&#x152;" horiz-adv-x="1290" d="M102 653q0 106 25 212t74 204t137 159.5t203 61.5h663v-198h-473v-320h363v-201h-363v-368h494v-203h-684q-117 0 -206 63.5t-137 165t-72 208.5t-24 216zM319 633q0 -408 189 -440v903q-189 -35 -189 -463z" />
+<glyph unicode="&#x153;" horiz-adv-x="1558" d="M102 494q0 129 43 248.5t139.5 205.5t229.5 86q178 0 285 -139q123 139 303 139q152 0 255 -118.5t109 -272.5l7 -135h-590q0 -72 17.5 -147.5t67.5 -141t122 -65.5q139 0 256 71l73 -155q-162 -100 -354 -101q-156 0 -272 133q-113 -133 -279 -133q-129 0 -226.5 83 t-141.5 200t-44 242zM317 493.5q0 -55.5 8.5 -107.5t28 -108.5t60.5 -91t100 -34.5q121 0 174 165q-23 96 -22 185q0 100 22 178q-49 170 -174 170q-57 0 -99 -37t-61.5 -96.5t-28 -113.5t-8.5 -109.5zM913 686h332q-10 68 -51 118t-104.5 50t-107.5 -49t-69 -119z" />
+<glyph unicode="&#x178;" horiz-adv-x="964" d="M27 1290h239l215 -583l228 583h229l-344 -809v-481h-223v483zM186 1528q0 59 43 104t101 45q47 0 79.5 -32.5t32.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -76 30t-31 75zM532 1528q0 59 43 104t101 45q47 0 79.5 -32.5t32.5 -77.5q0 -57 -46 -100.5t-103 -43.5 q-45 0 -76 30t-31 75z" />
+<glyph unicode="&#x2c6;" horiz-adv-x="823" d="M92 1253q193 131 346 334q14 -20 41 -53t117 -121t188 -158l-98 -139q-117 61 -248 187q-115 -119 -248 -189z" />
+<glyph unicode="&#x2dc;" horiz-adv-x="778" d="M-14 1329q92 72 150.5 102.5t117.5 30.5q63 0 146 -43t120 -43q45 0 73 12.5t97 61.5l88 -129q-90 -84 -141 -108.5t-129 -24.5q-47 0 -130 43t-128 43q-74 0 -187 -82z" />
+<glyph unicode="&#x2013;" horiz-adv-x="733" d="M0 430v184h733v-184h-733z" />
+<glyph unicode="&#x2014;" horiz-adv-x="1245" d="M0 432v184h1245v-184h-1245z" />
+<glyph unicode="&#x2018;" horiz-adv-x="546" d="M70 1006q109 213 290 397l127 -88q-137 -195 -137 -328q0 -18 4 -51q-61 -49 -121 -49q-43 0 -87.5 37t-75.5 82z" />
+<glyph unicode="&#x2019;" horiz-adv-x="552" d="M63 891q137 199 138 330q0 25 -6 49q68 51 122 51q43 0 88.5 -37t75.5 -82q-109 -209 -291 -399z" />
+<glyph unicode="&#x201a;" horiz-adv-x="528" d="M27 -229q137 199 137 327q0 35 -4 52q61 49 123 49q43 0 89 -37t74 -82q-109 -213 -290 -397z" />
+<glyph unicode="&#x201c;" horiz-adv-x="913" d="M66 1006q109 213 290 397l127 -88q-137 -195 -137 -328q0 -18 4 -51q-61 -49 -121 -49q-43 0 -87.5 37t-75.5 82zM440 1006q117 221 293 397l127 -88q-137 -195 -137 -328q0 -18 4 -51q-61 -49 -123 -49q-80 0 -164 119z" />
+<glyph unicode="&#x201d;" horiz-adv-x="913" d="M59 891q137 199 138 330q0 25 -7 49q68 51 123 51q43 0 88 -37t76 -82q-109 -209 -291 -399zM434 891q139 203 139 330q0 25 -6 49q63 51 123 51q41 0 88 -37t76 -82q-109 -209 -291 -399z" />
+<glyph unicode="&#x201e;" horiz-adv-x="888" d="M27 -223q137 195 137 327q0 35 -4 52q61 49 123 49q41 0 88 -37t75 -82q-109 -213 -290 -397zM371 -223q137 195 137 327q0 18 -4 52q61 49 121 49q43 0 88 -37t75 -82q-109 -213 -290 -397z" />
+<glyph unicode="&#x2022;" horiz-adv-x="868" d="M63 645.5q0 151.5 109 260t260.5 108.5t261 -108.5t109.5 -260t-109.5 -260.5t-261 -109t-260.5 109t-109 260.5z" />
+<glyph unicode="&#x2026;" horiz-adv-x="1236" d="M100 104.5q0 61.5 47.5 106.5t110.5 45q59 0 99 -37t40 -96q0 -61 -47 -107.5t-108.5 -46.5t-101.5 37t-40 98.5zM451 104.5q0 61.5 47 106.5t110 45q59 0 99.5 -37t40.5 -96q0 -61 -47.5 -107.5t-109 -46.5t-101 37t-39.5 98.5zM797 104.5q0 61.5 47 106.5t110 45 q59 0 99.5 -37t40.5 -96q0 -61 -47.5 -107.5t-108.5 -46.5t-101 37t-40 98.5z" />
+<glyph unicode="&#x2039;" horiz-adv-x="614" d="M33 512l403 410l146 -117l-295 -289l299 -297l-146 -117z" />
+<glyph unicode="&#x203a;" horiz-adv-x="614" d="M29 219l297 293l-293 293l145 117l404 -410l-408 -410z" />
+<glyph unicode="&#x2122;" horiz-adv-x="1642" d="M145 1278v129h500v-129h-182v-684h-137v684h-181zM713 596v813h166l192 -551l19 -72q6 35 18 72l192 551h166v-813h-139v448l8 95l-186 -543h-117l-188 543l10 -95v-448h-141z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1004" d="M0 1005h1005v-1005h-1005v1005z" />
+<glyph unicode="&#xfb01;" horiz-adv-x="1069" d="M37 846v158h127v92q0 96 38 166.5t101.5 107.5t133 54.5t147.5 17.5q51 0 107.5 -8.5t119.5 -25.5t104 -55t41 -91q0 -61 -44 -100.5t-105 -39.5q-59 0 -86 29t-38 64.5t-24 44.5q-45 27 -112 26q-66 0 -116 -60.5t-50 -178.5v-43h188v-181h-188v-823h-217v827zM713 0 v1004h211v-1004h-211z" />
+<glyph unicode="&#xfb02;" horiz-adv-x="1069" d="M37 846v158h129v73q0 174 100.5 264.5t253.5 90.5q119 0 191 -91l4 -4v84h211v-1001q0 -182 69 -420h-221q-59 152 -59 420v774q-51 74 -156 74q-100 0 -139 -57.5t-39 -163.5v-43h188v-181h-188v-823h-215v827z" />
+<glyph unicode="&#xfb03;" horiz-adv-x="1658" d="M27 850v154h131v114q0 63 21.5 116.5t54 86.5t73.5 58.5t82 38t74 19.5t53 9h23l36 -156q-8 0 -21 -2t-49 -13t-62.5 -28.5t-48 -54.5t-21.5 -84v-104h186v-181h-186v-823h-215v827zM612 850v154h131v114q0 63 21.5 116.5t54.5 86.5t74 58.5t82 38t73.5 19.5t53.5 9h22 l37 -156q-8 0 -21.5 -2t-49 -13t-62.5 -28.5t-48.5 -54.5t-21.5 -84v-104h187v-181h-187v-823h-215v827zM1274 1251q0 57 44 99.5t101 42.5q55 0 96 -38t41 -93q0 -57 -44 -99.5t-101 -42.5q-55 0 -96 38t-41 93zM1309 0v1004h211v-1004h-211z" />
+<glyph unicode="&#xfb04;" horiz-adv-x="1654" d="M27 850v154h131v114q0 63 21.5 116.5t54 86.5t73.5 58.5t82 38t74 19.5t53 9h23l36 -156q-8 0 -21 -2t-49 -13t-62.5 -28.5t-48 -54.5t-21.5 -84v-104h186v-181h-186v-823h-215v827zM612 850v154h131v114q0 63 21.5 116.5t54.5 86.5t74 58.5t82 38t73.5 19.5t53.5 9h22 l37 -156q-8 0 -21.5 -2t-49 -13t-62.5 -28.5t-48.5 -54.5t-21.5 -84v-104h187v-181h-187v-823h-215v827zM1296 420v1003h211v-1003q0 -182 70 -420h-221q-60 152 -60 420z" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/public/stylesheets/fonts/delicious-bold-webfont.ttf b/public/stylesheets/fonts/delicious-bold-webfont.ttf
new file mode 100755
index 000000000..2ec5d3e49
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-bold-webfont.ttf
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-bold-webfont.woff b/public/stylesheets/fonts/delicious-bold-webfont.woff
new file mode 100755
index 000000000..b47277ef1
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-bold-webfont.woff
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-bolditalic-webfont.eot b/public/stylesheets/fonts/delicious-bolditalic-webfont.eot
new file mode 100755
index 000000000..8e8957864
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-bolditalic-webfont.eot
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-bolditalic-webfont.svg b/public/stylesheets/fonts/delicious-bolditalic-webfont.svg
new file mode 100755
index 000000000..7368c90f2
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-bolditalic-webfont.svg
@@ -0,0 +1,222 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : 40 I1995 Jos Buivenga
+</metadata>
+<defs>
+<font id="DeliciousBoldItalic" horiz-adv-x="921" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="614" />
+<glyph unicode=" " horiz-adv-x="614" />
+<glyph unicode="&#x09;" horiz-adv-x="614" />
+<glyph unicode="&#xa0;" horiz-adv-x="614" />
+<glyph unicode="!" horiz-adv-x="514" d="M74 104.5q0 61.5 50 105.5t114 44q61 0 101 -37t40 -96q0 -61 -50 -106.5t-114 -45.5q-61 0 -101 37t-40 98.5zM168 381l14 309q6 160 10.5 223.5t21.5 176t50 217.5l31 102l237 27q-100 -254 -135 -602q-20 -219 -45 -453h-184z" />
+<glyph unicode="&#x22;" horiz-adv-x="583" d="M166 999l4 314l51 137h141l11 -147l-90 -304h-117zM453 999l4 314l51 137h141l10 -147l-90 -304h-116z" />
+<glyph unicode="#" horiz-adv-x="1138" d="M106 412l29 206h164l25 216h-140l37 206h129l39 379h189l-39 -379h137l41 344h188l-41 -344h160l-18 -206h-164l-27 -216h129l-18 -206h-138l-51 -412h-188l51 412h-139l-51 -359h-189l51 359h-166zM487 618h140l26 216h-139z" />
+<glyph unicode="$" horiz-adv-x="878" d="M37 92l121 164q78 -68 170 -82l61 393l-131 99q-124 91 -124 240q0 25 3 52q16 147 114.5 246t250.5 113l16 106h123l-16 -110q59 -12 116.5 -48t85.5 -65l27 -29l-137 -114q-45 45 -123 59l-55 -364l75 -54q164 -119 164 -292q0 -164 -100 -283t-256 -148l-21 -131h-122 l18 127q-68 8 -133.5 38t-95.5 57zM367 954q0 -63 61 -120l43 272q-104 -39 -104 -152zM455 197q102 53 102 159q0 68 -59 127z" />
+<glyph unicode="%" horiz-adv-x="1431" d="M90 1032q0 119 84 204t205 85q104 0 182 -66l311 64l144 -39l-451 -1280h-200l401 1106h-109q10 -41 11 -74q0 -119 -84 -204t-205 -85t-205 85t-84 204zM266 1032q0 -45 33 -78.5t80 -33.5t80 33.5t33 78.5t-33 79t-80 34t-80 -34t-33 -79zM756 256q0 121 85 205 t203.5 84t203.5 -84t85 -205t-85 -205t-203.5 -84t-203.5 84t-85 205zM932 256q0 -47 33.5 -80t79 -33t79 33t33.5 80t-33.5 80t-79 33t-79 -33t-33.5 -80z" />
+<glyph unicode="&#x26;" horiz-adv-x="1800" d="M117 590q0 262 184 457.5t451 246.5l28 -182q-201 -53 -325 -217q-100 -132 -101 -284q0 -38 6 -76q309 252 551 469q105 95 105 170q0 51 -49 97q-47 44 -97 62l54 115q12 -2 32.5 -8t72.5 -31t92 -53.5t73 -79.5t33 -111q0 -141 -166 -280l-631 -533q135 -199 401 -198 q236 0 420.5 164.5t184.5 398.5q0 78 -21 133h-137l-25 115q86 41 148 41q156 0 209 -80t53 -221q0 -209 -128 -381t-317.5 -262.5t-392.5 -92.5h-10q-182 0 -338 71q-160 73 -260 217.5t-100 332.5z" />
+<glyph unicode="'" horiz-adv-x="301" d="M164 999l6 314l51 137h141l11 -147l-90 -304h-119z" />
+<glyph unicode="(" horiz-adv-x="716" d="M140 522q11 213 86 410.5t226.5 379t356.5 306.5l-2 -205q-199 -125 -331 -348t-157 -461q-5 -52 -5 -103q0 -183 69 -354q39 -84 69.5 -123.5t137.5 -146.5l-98 -139q-211 174 -289 383q-64 163 -64 345q0 28 1 56z" />
+<glyph unicode=")" horiz-adv-x="696" d="M-33 -117q129 102 172 144.5t109 128.5q154 205 199 455q19 103 19 200q0 140 -39 268q-67 217 -226 340l47 195q229 -170 327 -427q69 -181 70 -376q0 -81 -12 -164q-41 -283 -209 -538q-129 -197 -389 -388z" />
+<glyph unicode="*" horiz-adv-x="808" d="M74 758l229 264l-227 76l69 176l205 -100l-31 208h322l-102 -208l217 100l49 -176l-250 -82l145 -307h-202l-82 192l-164 -199z" />
+<glyph unicode="+" horiz-adv-x="964" d="M92 418v188h299v322h180v-322h301v-188h-301v-322h-180v322h-299z" />
+<glyph unicode="," horiz-adv-x="528" d="M-55 -201q106 129 141 211q18 41 25 133l25 11q15 6 49 15t51 9q37 -2 70.5 -31.5t47.5 -56.5l15 -29l-70 -110q-45 -72 -262 -246z" />
+<glyph unicode="-" horiz-adv-x="618" d="M106 436v172h406v-172h-406z" />
+<glyph unicode="." horiz-adv-x="528" d="M74 104.5q0 61.5 50 105.5t114 44q61 0 101 -37t40 -96q0 -61 -50 -106.5t-114 -45.5q-61 0 -101 37t-40 98.5z" />
+<glyph unicode="/" horiz-adv-x="755" d="M-154 -303l793 1853h201l-805 -1853h-189z" />
+<glyph unicode="0" d="M49 383q0 104 32 215t90 210t155.5 162.5t214.5 63.5q168 0 249.5 -116.5t81.5 -284.5q0 -152 -51 -299.5t-165.5 -256t-268.5 -108.5q-168 0 -253 122t-85 292zM264 399q0 -98 32 -168.5t103 -70.5q90 0 151.5 78.5t84 178t22.5 204.5q0 217 -141 217q-80 0 -139.5 -75 t-86 -172.5t-26.5 -191.5z" />
+<glyph unicode="1" d="M231 791l25 167q133 0 260 43h164l-143 -1001h-199l115 791h-222z" />
+<glyph unicode="2" d="M102 178q180 92 357 275q182 197 182 303q0 35 -24.5 58.5t-71.5 23.5q-94 0 -260 -97l-82 148q84 59 120.5 81.5t104.5 43t147 20.5q233 0 277 -182q8 -35 8 -71q0 -56 -19 -114q-32 -97 -99.5 -185.5t-135 -155t-143.5 -125.5h344l-31 -201h-661z" />
+<glyph unicode="3" d="M53 -182q135 12 250 51q274 102 275 338q0 47 -33 72.5t-66 29.5t-86 4q-98 0 -184 -10l-14 178q33 4 78.5 8.5t58.5 6.5l223 161q88 66 88 129q0 25 -17.5 40.5t-45.5 15.5q-41 0 -166 -54l-119 -51l-64 152l115 53q201 92 281 92q111 0 172 -57t61 -170 q0 -68 -49 -134.5t-98 -103.5t-127 -86q211 -31 211 -237q0 -172 -96.5 -307.5t-254.5 -204.5q-168 -72 -358 -72z" />
+<glyph unicode="4" d="M37 0l16 170l58 86q229 356 473 662l69 86h215l-127 -824h121l-33 -180h-124q-55 -242 -127 -352l-162 69q31 66 80 283h-459zM293 180h237l74 475q-61 -86 -311 -475z" />
+<glyph unicode="5" d="M63 -180q143 0 275 59q113 49 183.5 134t70.5 196q0 106 -179 106q-65 0 -155 -14l-78 -14l164 717h533l-29 -193h-334l-76 -313q43 6 92 6q119 0 201 -67.5t82 -188.5q0 -178 -103.5 -311.5t-267.5 -204.5q-162 -74 -348 -74z" />
+<glyph unicode="6" d="M96 381q0 426 346 719q152 127 359 223l65 -145q-166 -100 -227 -150q-162 -123 -256 -311q-35 -70 -58.5 -168t-23.5 -176q0 -88 32 -150.5t93 -62.5q72 0 123 63.5t69.5 140t18.5 150.5q0 86 -62 110q-57 22 -166 21h-20l174 168q104 0 194.5 -77t90.5 -218 q0 -215 -125 -383t-326 -168q-86 0 -147.5 38t-93 101.5t-46 131t-14.5 143.5z" />
+<glyph unicode="7" d="M84 -250q193 219 350.5 505t204.5 548h-473l31 201h682l-25 -168q-43 -285 -229.5 -636.5t-395.5 -582.5z" />
+<glyph unicode="8" d="M66 287q0 119 72.5 222t183.5 165q-129 94 -129 231q0 162 114.5 273.5t278.5 111.5q137 0 219 -69q84 -70 84 -191q0 -203 -244 -352q88 -39 141.5 -111.5t53.5 -167.5q0 -49 -19 -114q-43 -145 -162.5 -231.5t-273.5 -86.5q-139 0 -229 90.5t-90 229.5zM283 315 q0 -68 36.5 -114.5t100.5 -46.5q80 0 139 76.5t59 158.5q0 39 -16 69.5t-29.5 43t-56.5 40t-53 33.5q-180 -98 -180 -260zM399 907q0 -72 93 -129q18 8 55 29q53 27 96 85t43 112q0 104 -121 104q-72 0 -119 -63.5t-47 -137.5z" />
+<glyph unicode="9" d="M74 -176q166 100 227 149q162 123 256 312q35 70 59.5 169t24.5 175q0 213 -127 213q-68 0 -118 -63.5t-71.5 -141.5t-21.5 -150q0 -86 62 -109q57 -22 166 -22h20l-174 -168q-104 0 -194.5 77t-90.5 218q0 215 124 383t327 168q115 0 186.5 -68.5t94 -154.5t22.5 -190 q0 -410 -348 -719q-137 -121 -359 -224z" />
+<glyph unicode=":" horiz-adv-x="528" d="M74 104.5q0 61.5 50 105.5t114 44q61 0 101 -37t40 -96q0 -61 -50 -106.5t-114 -45.5q-61 0 -101 37t-40 98.5zM158 682q0 61 50 105t114 44q59 0 99 -36.5t40 -96.5q0 -61 -50.5 -106t-113.5 -45q-59 0 -99 38t-40 97z" />
+<glyph unicode=";" horiz-adv-x="528" d="M-55 -201q106 129 141 211q18 41 25 133l25 11q15 6 49 15t51 9q37 -2 70.5 -31.5t47.5 -56.5l15 -29l-70 -110q-45 -72 -262 -246zM158 682q0 61 50 105t114 44q59 0 99 -36.5t40 -96.5q0 -61 -50.5 -106t-113.5 -45q-59 0 -99 38t-40 97z" />
+<glyph unicode="&#x3c;" horiz-adv-x="614" d="M53 512l371 397l137 -116l-266 -277l268 -285l-135 -116z" />
+<glyph unicode="=" horiz-adv-x="983" d="M90 293v172h782v-172h-782zM90 549v172h782v-172h-782z" />
+<glyph unicode="&#x3e;" horiz-adv-x="614" d="M51 231l268 285l-266 277l137 116l371 -397l-375 -397z" />
+<glyph unicode="?" horiz-adv-x="813" d="M92 104.5q0 61.5 50.5 105.5t113.5 44q61 0 101 -37t40 -96q0 -61 -50 -106.5t-114 -45.5q-61 0 -101 37t-40 98.5zM193 1362l122 131q51 -70 105 -70h160q82 0 136 -31.5t71.5 -76.5t25.5 -95q3 -20 3 -38q0 -26 -7 -47q-8 -43 -40 -99.5t-55.5 -86t-83 -97.5t-65.5 -74 q-94 -111 -119.5 -158t-37.5 -126l-17 -113h-184l12 113q18 172 88 256l185 231l33 41l39.5 48t26.5 46q14 29 13 62q0 59 -51 59h-152q-113 0 -202 117z" />
+<glyph unicode="@" horiz-adv-x="1622" d="M92 727q0 297 221.5 525.5t515.5 228.5q326 0 510.5 -175.5t184.5 -476.5q0 -55 -13 -110q-33 -168 -165 -294t-295 -126h-6q-64 0 -114 41q-52 43 -54 104l-53 -35q-32 -22 -105 -56q-62 -29 -106 -28q-8 0 -15 1q-113 14 -149 171q-16 67 -16 132q0 87 28 170 q49 166 131 253t244 87q35 0 77.5 -21.5t69.5 -44.5l25 -20l14 57h172l-141 -575q-9 -22 -9 -44q0 -12 3 -24q8 -33 38 -33q100 0 170 105.5t82 199.5q6 43 6 90q0 227 -139 353.5t-377 126.5q-225 0 -382.5 -178.5t-157.5 -407.5q0 -242 159.5 -407.5t403.5 -178.5 q18 -1 35 -1q283 0 497 218l109 -98q-252 -287 -636 -287h-5q-319 4 -538.5 222.5t-219.5 535.5zM641 758q-26 -104 -26 -168q0 -97 62 -97q11 0 23 3q27 6 76 28.5t84 40.5l35 19l82 340q-98 59 -158 59q-123 0 -178 -225z" />
+<glyph unicode="A" horiz-adv-x="1052" d="M-41 0l602 1290h195l200 -1290h-231l-53 371h-305l-166 -371h-242zM442 567h209l-47 398z" />
+<glyph unicode="B" horiz-adv-x="1017" d="M84 29l192 1261h322q160 0 258 -66.5t98 -215.5q0 -109 -63.5 -193t-145.5 -121q188 -47 189 -252q0 -29 -6 -59q-31 -193 -174.5 -303.5t-341.5 -110.5q-90 1 -328 60zM330 184q68 -18 98 -18q123 0 202 76.5t79 199.5q0 45 -18.5 74t-55.5 41t-66.5 15t-76.5 3h-99z M424 774h90h6q88 0 150 59q63 60 63 150q0 72 -32.5 97.5t-120.5 25.5h-107z" />
+<glyph unicode="C" horiz-adv-x="1007" d="M94 481q0 70 15 170q18 115 68 230.5t125 215t181.5 162t223.5 62.5q209 0 319 -90l6 -4l-108 -156q-86 55 -236 55q-68 0 -134.5 -56t-109.5 -124q-57 -88 -91 -219t-34 -244q0 -127 49.5 -223t161.5 -96q117 0 254 82l86 -156q-70 -55 -172 -88t-194 -33 q-215 0 -312.5 140.5t-97.5 371.5z" />
+<glyph unicode="D" horiz-adv-x="1126" d="M82 0l201 1290h374q231 0 328 -174q65 -117 65 -293q0 -86 -16 -186q-49 -309 -210.5 -473t-372.5 -164h-369zM338 201h131q100 0 174 65.5t111 169t53 201.5t16 190q0 262 -192 263h-154z" />
+<glyph unicode="E" horiz-adv-x="911" d="M82 0l199 1290h675l-28 -198h-451l-49 -318h332l-31 -205h-334l-57 -366h469l-31 -203h-694z" />
+<glyph unicode="F" horiz-adv-x="845" d="M82 0l197 1290h620l-27 -196h-397l-51 -322h317l-28 -203h-318l-90 -569h-223z" />
+<glyph unicode="G" horiz-adv-x="1060" d="M94 481q0 139 43 285.5t119 270.5t194.5 204t256.5 80q98 0 180 -23.5t114 -48.5l33 -22l-110 -156q-88 55 -236 55q-63 0 -133 -57t-111 -123q-57 -88 -91 -219t-34 -244q0 -78 16.5 -144.5t68 -119.5t128.5 -53l136 16l65 408h215l-88 -563q-186 -57 -352 -58 q-215 0 -314.5 140.5t-99.5 371.5z" />
+<glyph unicode="H" horiz-adv-x="1120" d="M84 0l201 1290h225l-80 -518h350l84 518h228l-201 -1290h-229l92 571h-353l-90 -571h-227z" />
+<glyph unicode="I" horiz-adv-x="485" d="M61 0l189 1290h225l-190 -1290h-224z" />
+<glyph unicode="J" horiz-adv-x="487" d="M-119 -170l51 20q115 43 129 136l189 1304h225l-194 -1327q-16 -117 -93 -182q-100 -88 -278 -117z" />
+<glyph unicode="K" horiz-adv-x="931" d="M78 0l198 1290h228l-70 -475l170 170q103 103 103 227q0 26 -5 54l213 41l7 -24q4 -15 7 -59q1 -15 1 -29q0 -29 -4 -57q-6 -42 -32 -96.5t-69 -97.5l-315 -313l401 -537v-94h-215l-321 449l-68 -449h-229z" />
+<glyph unicode="L" horiz-adv-x="761" d="M86 0l205 1290h221l-174 -1093h389l-27 -197h-614z" />
+<glyph unicode="M" horiz-adv-x="1517" d="M82 0l205 1290h270l178 -831q12 -53 13 -148q18 88 51 154l418 825h274l-205 -1290h-233l100 635l41 225q-74 -213 -98 -264l-295 -596h-191l-139 641l-22 219l-33 -215l-101 -645h-233z" />
+<glyph unicode="N" horiz-adv-x="1132" d="M82 0l201 1290h262l196 -702l29 -156q0 164 8 219l99 639h229l-201 -1290h-217l-250 899q-2 -86 -14 -166l-115 -733h-227z" />
+<glyph unicode="O" horiz-adv-x="1120" d="M119 483q0 98 20.5 208t66.5 222.5t109.5 202.5t158.5 147.5t206 57.5q131 0 217 -83t116.5 -191.5t30.5 -237.5q0 -98 -20 -207.5t-66.5 -223.5t-111 -204t-159.5 -147.5t-206 -57.5q-100 0 -174 47t-112.5 125t-57 163t-18.5 179zM338 430q0 -256 164 -256 q88 0 155.5 78t101.5 194.5t49 220t15 185.5q0 264 -164 264q-88 0 -154.5 -80t-100 -197.5t-50 -223t-16.5 -185.5z" />
+<glyph unicode="P" horiz-adv-x="991" d="M82 0l199 1290h288q238 0 341 -121q82 -96 83 -227q0 -34 -6 -70q-29 -193 -162 -315.5t-321 -122.5q-29 0 -58.5 7.5t-46.5 13.5l-16 8l-76 -463h-225zM410 655q51 -23 98 -22q98 0 166.5 70.5t89.5 183.5q5 29 5 53q0 61 -32 101q-45 56 -186 57h-72z" />
+<glyph unicode="Q" horiz-adv-x="1071" d="M94 483q0 125 33 263.5t96.5 270.5t176 218t253.5 86q102 0 178 -49t114 -130t55.5 -165t17.5 -172q0 -330 -143.5 -569.5t-419.5 -368.5l63 -35q54 -28 137 -28q122 0 306 61l-48 -248l-30 -6q-20 -4 -81 -9q-38 -3 -75 -4q-22 0 -44 2q-58 3 -135 24q-76 20 -142 57 l-205 116l-25 115l215 98q-147 51 -222 179t-75 294zM315 475q0 -272 238 -315q242 207 242 665q0 289 -160 289q-88 0 -154.5 -69.5t-100.5 -176t-49.5 -207t-15.5 -186.5z" />
+<glyph unicode="R" horiz-adv-x="1017" d="M82 0l199 1290h288q182 0 303 -80t121 -264q0 -166 -95 -303t-253 -166l279 -383l-15 -94h-198l-324 449l-8 4l-72 -453h-225zM410 659q55 -25 90 -24q113 0 189.5 86t76.5 205q0 164 -217 164h-72z" />
+<glyph unicode="S" horiz-adv-x="878" d="M37 92l121 164q96 -84 202 -84q78 0 137.5 54.5t59.5 129.5q0 84 -80 144l-219 166q-124 91 -124 240q0 25 3 52q18 160 134 261.5t288 101.5q152 0 283 -137l12 -13l-137 -114q-63 63 -172 63q-74 0 -126 -46t-52 -120q0 -76 79 -135l168 -121q164 -119 164 -292 q0 -186 -126 -311.5t-312 -125.5q-80 0 -155.5 31t-110.5 61z" />
+<glyph unicode="T" horiz-adv-x="800" d="M92 1075l33 211h784l-32 -211h-279l-164 -1075h-223l164 1075h-283z" />
+<glyph unicode="U" horiz-adv-x="1114" d="M126 317q-4 35 -4 70q0 64 13 129l119 774h227l-123 -788q-10 -104 -10 -163q0 -67 33 -115q35 -50 111 -50q193 0 245 342l121 774h227l-122 -794q-23 -147 -79.5 -261t-163 -190t-249.5 -76q-113 0 -190.5 48.5t-110.5 125t-44 174.5z" />
+<glyph unicode="V" horiz-adv-x="991" d="M115 1290h239l135 -954l224 440q57 113 57 275v239h231v-237q0 -201 -81 -357l-371 -696h-225z" />
+<glyph unicode="W" horiz-adv-x="1517" d="M158 1290h241l35 -721l-2 -190q33 147 53 201l281 710h217l45 -743l4 -168q37 96 68 162l114 231q86 176 86 301q-2 119 -2 217h232v-237q0 -135 -105 -353l-348 -700h-215l-47 768q-1 13 -1 31q0 55 9 159q-16 -88 -41 -157l-50 -134l-98 -258l-110 -292 q-43 -117 -41 -117h-227z" />
+<glyph unicode="X" horiz-adv-x="1013" d="M10 0v94l416 572l-268 624h248l182 -420l293 420h184v-92l-385 -534l289 -664h-258l-191 453l-319 -453h-191z" />
+<glyph unicode="Y" horiz-adv-x="880" d="M55 1165l154 154q129 -82 209 -246q49 -104 61 -262q35 154 138.5 304.5t232.5 217.5l143 -151q-61 -39 -113.5 -87t-94.5 -114t-73.5 -120t-60.5 -141l-46 -138q-17 -51 -38 -154l-28 -143q-8 -41 -26 -150l-21 -135h-224l74 471q-14 127 -20 164q-20 164 -86 314 t-181 216z" />
+<glyph unicode="Z" horiz-adv-x="909" d="M49 180l574 901h-390l19 209h670l-21 -184l-577 -895h546l-30 -211h-789z" />
+<glyph unicode="[" horiz-adv-x="589" d="M12 -319l264 1818h355l-29 -192h-168l-209 -1434h168l-28 -192h-353z" />
+<glyph unicode="\" horiz-adv-x="686" d="M12 1550h189l493 -1853h-188z" />
+<glyph unicode="]" horiz-adv-x="595" d="M-14 -319l28 192h168l209 1434h-168l27 192h354l-266 -1818h-352z" />
+<glyph unicode="^" horiz-adv-x="1277" d="M119 655l442 795h152q190 -365 444 -795h-221l-299 531l-299 -531h-219z" />
+<glyph unicode="_" d="M0 -154h922v-122h-922v122z" />
+<glyph unicode="`" horiz-adv-x="518" d="M88 1403l180 156q90 -154 264 -295l-108 -125q-195 112 -336 264z" />
+<glyph unicode="a" horiz-adv-x="1003" d="M98 266q0 111 32 238t92.5 248.5t165 201.5t233.5 80q104 0 299 -37l-103 -739q-9 -48 -9 -77q0 -35 19 -36l50 11l45 -140q-92 -47 -168 -47q-66 0 -106 49q-32 39 -32 84q0 11 2 23l9 57q-4 -8 -14.5 -22.5t-43 -51t-67.5 -65.5t-90.5 -51.5t-112.5 -22.5 q-201 0 -201 297zM322 218q0 -19 12 -31.5t41 -12.5q66 0 156 119t108 209l55 332q-47 4 -69 4q-72 0 -132.5 -64.5t-96.5 -160t-55 -187.5t-19 -162v-46z" />
+<glyph unicode="b" horiz-adv-x="1038" d="M102 109l201 1314h217l-76 -493q10 12 29 29.5t73 46t105 28.5q152 0 224.5 -101.5t72.5 -273.5q0 -119 -33.5 -238.5t-97 -221t-166 -166t-227.5 -64.5q-74 0 -154 35t-123 70zM317 197q45 -41 129 -41q74 0 134.5 77.5t88 160.5t40.5 157q10 72 10 125q0 166 -109 166 q-98 0 -207 -125z" />
+<glyph unicode="c" horiz-adv-x="849" d="M92 381q0 133 45 265t119 218q72 82 162 126t160 44q33 0 61.5 -4t50 -9t43 -14.5t33.5 -16.5t26.5 -18t19.5 -17l15 -15l11 -10l-129 -137q-41 57 -148 57q-72 0 -145.5 -94t-98.5 -250q-8 -70 -8 -98q0 -111 40 -180.5t110 -69.5q43 0 99 31.5t93 64.5l35 33l100 -123 q-6 -8 -17 -21.5t-48 -46.5t-76 -58.5t-95 -47t-110 -21.5q-180 0 -276 140q-72 102 -72 272z" />
+<glyph unicode="d" horiz-adv-x="1024" d="M92 395q0 246 141.5 442.5t335.5 196.5q96 0 179 -73q25 143 24 219q0 86 -45 186l170 80q90 -133 90 -293q0 -35 -6 -70l-109 -684q-29 -184 -133 -307t-280 -123q-180 0 -273.5 121t-93.5 305zM313 383q0 -229 152 -229q37 0 67.5 15t52 49t35 59.5t24.5 79l14.5 70.5 t11.5 69l45 276q-84 70 -144 70q-115 0 -186.5 -147.5t-71.5 -311.5z" />
+<glyph unicode="e" horiz-adv-x="894" d="M92 373q0 156 54.5 303t174 252.5t279.5 105.5q262 0 262 -246q0 -86 -56 -156.5t-148.5 -115.5t-175.5 -71.5t-169 -43.5v-28q0 -74 34 -148.5t97 -74.5q59 0 120 25.5t91 49.5l31 25l92 -123q-16 -18 -47 -44t-126 -70t-193 -44q-160 0 -240 119t-80 285zM338 586 q307 72 307 215q0 55 -65 55q-86 0 -148.5 -85t-93.5 -185z" />
+<glyph unicode="f" horiz-adv-x="550" d="M16 -299q111 205 138 524l45 602l-121 21l24 156h115q0 72 10.5 137t34 132.5t73.5 108.5t120 41q33 0 64.5 -5t45.5 -11l17 -6l-25 -168h-63q-14 0 -25.5 -9.5t-18 -27.5t-11.5 -35.5t-7 -44t-3 -43t-1 -40.5v-29h137v-181h-151l-62 -714q-10 -129 -63 -239t-148 -249z " />
+<glyph unicode="g" horiz-adv-x="907" d="M-33 -188q0 90 79 186t159 147l78 52l88 -123l-52 -46q-31 -28 -82 -89.5t-51 -94.5q0 -61 109 -61q102 0 198.5 61.5t96.5 141.5q0 59 -34 96t-103 37l-11 76q49 37 65.5 60.5t37.5 84.5q-113 -63 -178 -64q-133 0 -199 86.5t-66 221.5q0 201 106.5 325.5t305.5 124.5 l315 -35q-12 -205 -52 -432t-109 -342q63 -20 100 -85.5t37 -137.5q0 -98 -52.5 -177t-132 -125t-165.5 -70.5t-164 -24.5q-324 0 -324 207zM317 594q0 -117 93 -117q70 0 117.5 63.5t64.5 143.5q14 66 22 162q-61 12 -127 12q-84 0 -127 -76.5t-43 -187.5z" />
+<glyph unicode="h" horiz-adv-x="1042" d="M84 0l217 1423h219l-92 -581q4 8 13.5 20l38 46t60 59.5t80 46t97.5 20.5q119 0 175 -42t57 -109v-13q0 -63 -9 -139l-66 -422q-18 -121 -52 -184.5t-124 -155.5l-131 109q49 63 64.5 109t32.5 147l65 409q3 20 3 36q0 29 -10 40q-15 18 -60 19q-57 0 -143.5 -82 t-127.5 -160l-90 -596h-217z" />
+<glyph unicode="i" horiz-adv-x="477" d="M66 0l151 1004h217l-153 -1004h-215zM213 1251q0 78 74 121q33 20 73 21q55 0 95.5 -38t40.5 -93q0 -25 -11 -50q-23 -57 -77 -79q-27 -12 -58 -13q-78 0 -119 66q-18 32 -18 65z" />
+<glyph unicode="j" horiz-adv-x="477" d="M-119 -240l56 25q41 18 74.5 58t39.5 85l166 1076h215l-160 -1057q-20 -143 -90.5 -213t-181.5 -107l-96 -33zM213 1251q0 78 74 121q33 20 73 21q55 0 95.5 -38t40.5 -93q0 -25 -11 -50q-23 -57 -77 -79q-27 -12 -58 -13q-78 0 -119 66q-18 32 -18 65z" />
+<glyph unicode="k" horiz-adv-x="980" d="M84 0l217 1423h215l-121 -788q6 2 24.5 3t38 4t36.5 9q92 27 161.5 71t69.5 99q0 33 -19.5 44.5t-76.5 11.5l-17 141q76 16 148 16q96 0 143 -55t47 -137q0 -141 -111.5 -231.5t-248.5 -90.5l362 -520h-278l-305 465l-72 -465h-213z" />
+<glyph unicode="l" horiz-adv-x="493" d="M123 426l143 997h217l-145 -1009q-11 -86 -11 -155q0 -24 2 -46q5 -84 17 -131l12 -47l-206 -58q-41 124 -41 276q0 82 12 173z" />
+<glyph unicode="m" horiz-adv-x="1576" d="M86 0l158 1004h223l-31 -162q117 193 303 192q211 0 211 -178q123 178 291 178q143 0 187 -76q29 -50 30 -130q0 -41 -8 -91l-113 -737h-219l119 750q2 15 2 27q0 65 -63 65q-94 0 -240 -191l-12 -18l-101 -633h-217l121 750q6 22 6 39q0 16 -5 27q-11 24 -62.5 24 t-136.5 -82t-128 -150l-96 -608h-219z" />
+<glyph unicode="n" horiz-adv-x="1060" d="M84 0l158 1004h217l-29 -162q49 80 126 136t161 56q113 0 170 -43t60 -109q1 -18 1 -37q0 -51 -6 -108l-115 -737h-219l119 750q3 21 3 36q0 27 -9 38q-14 17 -57 18q-111 0 -271 -244l-92 -598h-217z" />
+<glyph unicode="o" horiz-adv-x="999" d="M92 395q0 141 55.5 284.5t170 249t260.5 105.5q166 0 248.5 -127t82.5 -303q0 -102 -32.5 -211.5t-92 -205t-154.5 -157t-206 -61.5q-166 0 -249 126t-83 300zM305 365q0 -207 137 -207q68 0 120 53t80 132t41 154.5t13 137.5q0 209 -137 209q-68 0 -120 -53.5 t-79.5 -133t-41 -155.5t-13.5 -137z" />
+<glyph unicode="p" horiz-adv-x="1095" d="M70 -358l147 942l-137 -78l31 192l137 86l33 220h219l-11 -74q143 104 220 104q96 0 164.5 -46t96 -118.5t39.5 -159.5q5 -35 4 -70q0 -50 -9 -99q-14 -102 -45 -195.5t-83.5 -182.5t-137.5 -141.5t-191 -52.5q-133 0 -189 109l-69 -436h-219zM413 350q1 -43 10 -75.5 t25.5 -60.5t44 -42t66.5 -14q158 0 221 374q11 75 11 132q0 178 -107 178q-61 0 -225 -119q-2 -14 -10.5 -54t-13.5 -72l-12 -79q-7 -47 -9 -86l-2 -54q1 -14 1 -28z" />
+<glyph unicode="q" horiz-adv-x="1058" d="M94 367q0 143 57.5 293.5t175 262t261.5 111.5q170 0 383 -65l-203 -1327h-219l69 436q-33 -45 -94 -77t-116 -32q-168 0 -241 111t-73 287zM317 362q0 -199 119 -198q78 0 136.5 72.5t86 165t41.5 206.5l31 217q-70 16 -106 17q-88 0 -151.5 -46t-95.5 -122t-46.5 -153 t-14.5 -159z" />
+<glyph unicode="r" horiz-adv-x="710" d="M88 0l154 1004h215l-23 -152l21 35l29 44l29 36q22 27 37 37t38.5 20t48.5 10q86 0 135 -116l-143 -179q-2 4 -6.5 11.5t-18.5 17.5t-31 8q-66 -4 -153 -145l-29 -45l-90 -586h-213z" />
+<glyph unicode="s" horiz-adv-x="843" d="M45 92l113 154q113 -88 200 -88q145 0 162 110q2 8 2 16q0 54 -76 93l-204 115q-61 35 -95 103q-24 50 -23 112q0 23 3 49q23 135 131.5 206.5t251.5 71.5q53 0 103.5 -15t85 -35.5t61 -42t39.5 -36.5l12 -16l-123 -115q-74 76 -201 76q-66 0 -106.5 -35t-40.5 -76 q0 -20 14.5 -38.5t28.5 -27.5t45 -26l180 -96q127 -68 128 -218q0 -43 -11 -93q-27 -115 -128 -193t-265 -78q-66 0 -137.5 31t-110.5 61z" />
+<glyph unicode="t" horiz-adv-x="688" d="M127 840l25 164h124l23 178h197l-25 -178h174l-31 -181h-165l-91 -602q0 -2 -1 -7t-1 -9q0 -49 35 -49q68 0 154 71l63 -147q-125 -111 -258 -111q-201 0 -200 199q0 18 4 59l88 596z" />
+<glyph unicode="u" horiz-adv-x="1038" d="M108 156q-1 11 -1 21q0 43 10 89l114 738h218l-117 -750q-3 -21 -3 -36q0 -27 9 -39q14 -17 57 -17q104 0 271 244l92 598h217l-131 -836q-4 -31 8 -50.5t29 -23.5l14 -4l-78 -121q-10 -1 -22 -1h-14q-22 1 -67.5 15.5t-64.5 47.5q-15 25 -15 67q0 29 7 66 q-53 -78 -135 -136.5t-164 -58.5q-86 0 -140.5 25.5t-72.5 67t-21 94.5z" />
+<glyph unicode="v" horiz-adv-x="866" d="M68 1004h227l115 -719l206 358q28 45 28 119q0 77 -13 135q-12 53 -27 84l207 43l11 -29q7 -18 18.5 -74.5t13.5 -111.5v-13q0 -51 -14 -115q-16 -73 -54 -136l-325 -545h-193z" />
+<glyph unicode="w" horiz-adv-x="1355" d="M76 1004h229l72 -711l262 711h213l68 -711l145 282q37 72 54 124q16 49 17 117q0 78 -32 163l207 45q4 -10 9 -28.5t12 -75t7 -111.5t-17 -130t-54 -138l-307 -541h-203l-58 682q-25 -121 -51 -184l-211 -498h-213z" />
+<glyph unicode="x" horiz-adv-x="864" d="M-14 0v86l338 432l-222 486h238l133 -336l94 96q20 23 31.5 38t24 42.5t10.5 61.5t-19 77l203 43q2 -8 7 -22.5t12 -56.5q4 -28 4 -54q0 -13 -1 -27q-3 -39 -21.5 -87t-55.5 -85l-205 -202l238 -492h-244l-141 334l-248 -334h-176z" />
+<glyph unicode="y" horiz-adv-x="880" d="M-18 -225q106 45 173.5 100t120.5 150l-200 979h229l123 -728l61 109q168 287 168 358q0 113 -43 236l211 45q41 -113 41 -246q0 -121 -67 -237l-336 -584q-78 -137 -177.5 -215t-252.5 -125z" />
+<glyph unicode="z" horiz-adv-x="843" d="M18 0l13 184q248 348 499 627h-430l25 193h709l-21 -173q-281 -301 -522 -632h483l-22 -199h-734z" />
+<glyph unicode="{" horiz-adv-x="720" d="M68 504l24 170q59 0 103.5 44t67 120.5t33.5 141t18.5 146.5t9.5 95q23 168 90 228t159 60h144l6 -184h-143q-39 0 -52.5 -26.5t-25.5 -116.5l-51 -346q-23 -154 -148 -254q77 -80 77 -194q0 -29 -5 -60l-49 -346q-10 -53 -10 -82q0 -12 1 -21q6 -27 45 -26h148l-61 -185 h-130q-188 0 -187 208q0 42 7 91l49 344q3 24 4 46q0 60 -26 97q-35 50 -98 50z" />
+<glyph unicode="|" horiz-adv-x="454" d="M135 -29v1569h184v-1569h-184z" />
+<glyph unicode="}" horiz-adv-x="630" d="M-47 -147h133q29 0 41 5t24.5 35.5t22.5 100.5l51 346q20 145 146 250q-76 84 -76 200q0 28 4 58l51 346q10 66 10 96q0 19 -4 25q-8 10 -30 10h-160l61 184h133q184 0 184 -207q0 -42 -7 -94l-50 -344q-4 -26 -4 -49q0 -57 26 -92q36 -49 99 -49l-24 -170 q-61 0 -114.5 -56.5t-66.5 -148.5l-51 -344q-25 -170 -93.5 -228.5t-160.5 -58.5h-139z" />
+<glyph unicode="~" horiz-adv-x="1140" d="M254 387l47 256q10 10 34.5 37t35 35t32 21.5t48 17.5t65.5 4q78 0 193.5 -53.5t169.5 -53.5q47 0 93 40t144 175l-57 -284q-12 -10 -32.5 -30t-29 -27t-25 -18t-31.5 -14.5t-38.5 -6.5t-56.5 -3q-76 0 -192.5 53.5t-170.5 53.5q-47 0 -90 -37t-139 -166z" />
+<glyph unicode="&#xa1;" horiz-adv-x="514" d="M8 -428q100 252 135 600q18 219 45 453h185l-15 -310q-16 -326 -45 -462q-14 -76 -39 -154l-30 -102zM162 886.5q0 61.5 50 105.5t114 44q61 0 101 -36.5t40 -96.5q0 -61 -50 -106t-114 -45q-61 0 -101 36.5t-40 98z" />
+<glyph unicode="&#xa2;" horiz-adv-x="849" d="M92 381q0 133 45 265t119 218q117 135 274 166l21 139h123l-21 -141q25 -4 47.5 -10t40 -14.5t30.5 -15.5t24.5 -17t17.5 -17l14 -14l11 -10l-127 -135q-27 33 -86 47l-101 -678q106 25 164 102l100 -123q-14 -16 -39.5 -39.5t-102.5 -70.5t-150 -60l-19 -123h-123 l19 125q-133 20 -209 134q-72 102 -72 272zM309 408q0 -180 92 -236l99 659q-61 -35 -112.5 -118.5t-70.5 -206.5q-8 -69 -8 -98z" />
+<glyph unicode="&#xa3;" horiz-adv-x="905" d="M25 745l59 148h78v252q0 141 105.5 207.5t240.5 66.5q150 0 242 -78l-56 -149q-86 51 -174 51q-143 0 -143 -127v-223h260v-184h-260v-195q0 -154 -37 -328h100l90 -30q38 -12 73 -13q96 0 167 97l18 28l43 -172q-2 -4 -7 -10l-20 -25q-15 -18 -32.5 -31.5t-46.5 -31.5 t-58.5 -25.5t-68.5 -11.5q-9 -1 -17 -1l-61 11l-106 29h-332q80 352 80 524v195z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1110" d="M-31 463l107 172h110q0 14 9 55q0 6 3 28.5t5 29.5h-180l110 176h121q68 217 238 353t401 136q195 0 321 -141l-102 -168q-55 70 -111.5 98.5t-148.5 28.5q-268 0 -385 -307h532l-106 -174h-477q-18 -55 -23 -115h428l-108 -174h-320q2 -156 74 -229.5t197 -73.5 q156 0 348 192l-37 -241q-164 -133 -352 -134q-203 0 -325 130q-116 124 -116 336v22h-213z" />
+<glyph unicode="&#xa5;" horiz-adv-x="880" d="M35 293l31 190h274l-16 131h-261l31 191h193q-72 268 -232 360l154 154q129 -82 209 -246q47 -100 61 -280q27 154 133.5 313.5t237.5 226.5l143 -151q-195 -123 -307 -377h211l-31 -191h-252q-25 -86 -34 -131h288l-30 -190h-297q-10 -53 -25.5 -151.5t-23.5 -141.5 h-224l47 293h-280z" />
+<glyph unicode="&#xa7;" horiz-adv-x="860" d="M25 -158l77 160q160 -100 306 -100q72 0 111.5 33.5t39.5 91.5q0 43 -40 77.5t-150 88.5q-10 4 -56.5 26.5t-61.5 30.5t-54 30.5t-55 41.5l-38 45q-23 27 -30.5 57.5t-7.5 67.5q0 98 62 172.5t163 105.5q-217 96 -217 242q0 141 100 225t256 84q158 0 326 -94l-84 -160 q-150 74 -246 74q-66 0 -102.5 -35t-36.5 -90q0 -10 4 -20.5t12 -19.5t15.5 -16.5t21.5 -15.5t20.5 -12t22.5 -11.5t18 -9.5l63 -30l73 -37l67 -38q45 -26 68.5 -48.5t50.5 -52t39 -62.5t12 -70q0 -96 -62.5 -179t-154.5 -113q59 -33 97 -57.5t75 -72t37 -98.5 q0 -154 -100.5 -245t-266.5 -91q-167 0 -374 125zM276 514q0 -41 32 -74.5t85 -33.5q84 0 134.5 36.5t50.5 92.5q0 43 -38 73.5t-94 30.5q-76 0 -123 -35t-47 -90z" />
+<glyph unicode="&#xa8;" horiz-adv-x="638" d="M76 1276q0 57 43 103t100 46q47 0 81 -32.5t34 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -76.5 30t-31.5 75zM422 1276q0 57 43 103t100 46q47 0 80 -32.5t33 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -75.5 30t-30.5 75z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1800" d="M246 502q0 174 88 327.5t241 241.5q150 86 328 86q176 0 330 -86q154 -90 240 -242q88 -147 88 -327q0 -186 -91 -334q-88 -152 -243 -240q-154 -86 -324 -86q-174 0 -323 86q-154 88 -242 238q-92 152 -92 336zM410 502q0 -137 67 -254q66 -113 179.5 -177.5 t246.5 -66.5q205 0 346 141q150 145 150 357q0 131 -66 246q-88 154 -260 219q-92 31 -170 30q-131 0 -248 -67q-115 -68 -180 -182q-65 -109 -65 -246zM600 514q0 154 86 255t229 101q113 -2 232 -100l-82 -108q-86 63 -147 63q-51 0 -100.5 -53.5t-49.5 -157.5 q0 -94 40 -163.5t120 -69.5q63 0 143 59l62 -117q-100 -88 -211 -88q-139 0 -230.5 96.5t-91.5 282.5z" />
+<glyph unicode="&#xaa;" horiz-adv-x="743" d="M158 969q0 82 24.5 179t70.5 189.5t126 153.5t176 61q70 0 227 -28l-77 -561q-7 -36 -8 -59q0 -28 16 -27l37 8l34 -107q-70 -35 -129 -35q-49 0 -78 37q-25 31 -25 66q0 7 1 14l6 45l-11 -17q-7 -11 -31.5 -39t-51.5 -49.5t-69 -39t-85 -17.5q-153 1 -153 226zM328 958 q0 -23 1 -33t10 -18t30 -8q49 0 118.5 90t81.5 158l43 252q-37 4 -55 4q-53 0 -99 -49t-73 -122t-42 -143.5t-15 -121.5v-9z" />
+<glyph unicode="&#xab;" horiz-adv-x="970" d="M37 500l457 393l131 -121l-330 -276l244 -285l-162 -113zM385 500l457 393l133 -121l-332 -276l246 -285l-162 -113z" />
+<glyph unicode="&#xac;" horiz-adv-x="1095" d="M82 717v184h850v-555l-182 -35v406h-668z" />
+<glyph unicode="&#xad;" horiz-adv-x="618" d="M106 436v172h406v-172h-406z" />
+<glyph unicode="&#xae;" horiz-adv-x="1800" d="M242 500q0 174 88 327.5t241 241.5q150 86 328 86t328 -86q154 -88 241.5 -241.5t87.5 -327.5q0 -184 -90 -334q-92 -156 -243 -240q-150 -86 -324 -86t-324 86q-156 88 -241 240q-92 156 -92 334zM406 500q0 -135 65 -254q70 -117 182 -180q111 -61 246 -64h6 q127 0 242 66.5t180.5 177t65.5 254.5q0 131 -66 245q-41 76 -110 132q-59 55 -148 88q-92 31 -170 30q-131 0 -248 -67q-115 -68 -180 -182.5t-65 -245.5zM692 147v725h178q141 0 211 -65.5t70 -171.5q0 -76 -40 -142.5t-105 -86.5l176 -183v-76h-138l-182 193l-10 12v-205 h-160zM852 530q20 -8 41 -8q45 0 70.5 32t25.5 81q0 94 -119 94h-18v-199z" />
+<glyph unicode="&#xaf;" horiz-adv-x="630" d="M45 1174l29 120h565l-29 -120h-565z" />
+<glyph unicode="&#xb0;" horiz-adv-x="638" d="M68 1044q18 115 113 197t210 82q119 0 192 -86q58 -69 58 -158q0 -23 -4 -47q-18 -115 -113.5 -196.5t-210.5 -81.5q-119 0 -191 86q-58 69 -58 158q0 22 4 46zM219 1032q-2 -11 -2 -22q0 -39 25 -68q31 -37 84 -37q57 0 103 41t56 98q2 11 2 22q0 39 -24 69 q-31 37 -84 36q-57 0 -103.5 -41t-56.5 -98z" />
+<glyph unicode="&#xb1;" horiz-adv-x="915" d="M78 487v172h313v271h180v-271h316v-172h-316v-225h-180v225h-313zM98 0v170h768v-170h-768z" />
+<glyph unicode="&#xb2;" d="M102 178q180 92 357 275q182 197 182 303q0 35 -24.5 58.5t-71.5 23.5q-94 0 -260 -97l-82 148q84 59 120.5 81.5t104.5 43t147 20.5q233 0 277 -182q8 -35 8 -71q0 -56 -19 -114q-32 -97 -99.5 -185.5t-135 -155t-143.5 -125.5h344l-31 -201h-661z" />
+<glyph unicode="&#xb3;" d="M53 -182q135 12 250 51q274 102 275 338q0 47 -33 72.5t-66 29.5t-86 4q-98 0 -184 -10l-14 178q33 4 78.5 8.5t58.5 6.5l223 161q88 66 88 129q0 25 -17.5 40.5t-45.5 15.5q-41 0 -166 -54l-119 -51l-64 152l115 53q201 92 281 92q111 0 172 -57t61 -170 q0 -68 -49 -134.5t-98 -103.5t-127 -86q211 -31 211 -237q0 -172 -96.5 -307.5t-254.5 -204.5q-168 -72 -358 -72z" />
+<glyph unicode="&#xb4;" horiz-adv-x="573" d="M92 1270q98 61 187.5 134t130.5 114l39 41l139 -164q-156 -131 -420 -256z" />
+<glyph unicode="&#xb5;" horiz-adv-x="1058" d="M57 -371q92 145 93 277q0 45 -9.5 127t-9.5 141v49v781h215v-791q0 -53 84 -53q51 0 97 16.5t68.5 30.5t78.5 57v740h215v-818q0 -39 22.5 -47t55.5 15l67 -134q-78 -51 -155 -51q-59 0 -116.5 27t-78.5 76q-141 -102 -242 -103q-51 0 -88 19q12 -90 13 -152 q0 -80 -50 -164z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1132" d="M109 901q23 193 161 316q121 107 280 106q24 0 48 -2l264 -25q0 6 4 32l8 50h181q-4 -39 -13 -75l103 20l-39 -180l-107 -25q-90 -235 -90 -419q0 -92 23 -173q19 -88 19 -179q0 -76 -13 -154q-29 -174 -84 -267l-205 82q109 274 110 433q0 40 -7 73q-20 94 -21 192 q0 197 82 414l-205 19h-8q-73 0 -126 -103q-42 -81 -42 -164q0 -29 5 -58q19 -114 126 -118q10 -23 -92 -204q-33 -5 -63 -5q-130 0 -218 85q-87 85 -87 246q1 39 6 83z" />
+<glyph unicode="&#xb7;" horiz-adv-x="559" d="M139 514q0 61 50.5 105.5t113.5 44.5q59 0 99 -37t40 -97q0 -61 -49 -106t-112 -45q-61 0 -101.5 37t-40.5 98z" />
+<glyph unicode="&#xb8;" horiz-adv-x="823" d="M346 -262q176 61 177 118q0 21 -16 25q-13 4 -31.5 -1t-36.5 -13l-32 -15q-15 -7 -18 -8l23 154h209q49 -39 63 -96q3 -13 3 -26q0 -60 -63 -122q-77 -76 -173 -116z" />
+<glyph unicode="&#xb9;" d="M231 791l25 167q133 0 260 43h164l-143 -1001h-199l115 791h-222z" />
+<glyph unicode="&#xba;" horiz-adv-x="788" d="M170 1065q0 172 103.5 328.5t265.5 156.5q127 0 189.5 -97t62.5 -230q0 -106 -41 -214t-129.5 -188t-198.5 -80q-125 0 -188.5 95.5t-63.5 228.5zM332 1040q0 -158 104 -157q51 0 91 40t60.5 101t31 118.5t10.5 104.5q0 158 -103 158q-68 0 -114.5 -70.5t-63 -148.5 t-16.5 -146z" />
+<glyph unicode="&#xbb;" horiz-adv-x="1046" d="M63 219l332 277l-245 284l161 113l342 -401l-456 -394zM414 219l329 277l-243 284l162 113l339 -401l-456 -394z" />
+<glyph unicode="&#xbc;" horiz-adv-x="2844" d="M231 791l25 167q133 0 260 43h164l-143 -1001h-199l115 791h-222zM598 -268l1145 1794h213l-1145 -1794h-213zM1960 0l16 170l58 86q229 356 473 662l69 86h215l-127 -824h121l-32 -180h-125q-55 -242 -127 -352l-162 69q31 66 80 283h-459zM2216 180h238l73 475 q-61 -86 -311 -475z" />
+<glyph unicode="&#xbd;" horiz-adv-x="2844" d="M231 791l25 167q133 0 260 43h164l-143 -1001h-199l115 791h-222zM598 -268l1145 1794h213l-1145 -1794h-213zM2025 178q180 92 357 275q182 197 182 303q0 35 -24.5 58.5t-71.5 23.5q-94 0 -260 -97l-82 148q84 59 121 81.5t104.5 43t147.5 20.5q233 0 276 -182 q8 -35 8 -71q0 -56 -19 -114q-32 -97 -99.5 -185.5t-135 -155t-143.5 -125.5h344l-31 -201h-661z" />
+<glyph unicode="&#xbe;" horiz-adv-x="2844" d="M53 -182q135 12 250 51q274 102 275 338q0 47 -33 72.5t-66 29.5t-86 4q-98 0 -184 -10l-14 178q33 4 78.5 8.5t58.5 6.5l223 161q88 66 88 129q0 25 -17.5 40.5t-45.5 15.5q-41 0 -166 -54l-119 -51l-64 152l115 53q201 92 281 92q111 0 172 -57t61 -170 q0 -68 -49 -134.5t-98 -103.5t-127 -86q211 -31 211 -237q0 -172 -96.5 -307.5t-254.5 -204.5q-168 -72 -358 -72zM598 -268l1145 1794h213l-1145 -1794h-213zM1960 0l16 170l58 86q229 356 473 662l69 86h215l-127 -824h121l-32 -180h-125q-55 -242 -127 -352l-162 69 q31 66 80 283h-459zM2216 180h238l73 475q-61 -86 -311 -475z" />
+<glyph unicode="&#xbf;" horiz-adv-x="829" d="M38 -195q3 37 5 66q8 43 40 99.5t55.5 86t83 97t65.5 73.5q94 111 119.5 158t37.5 127l17 113h184l-12 -113q-18 -168 -88 -256l-185 -231q-4 -4 -32.5 -39t-40 -50.5t-25.5 -45t-16 -54.5q0 -68 53 -67h152q113 0 202 -117l6 -8l-122 -131q-51 70 -107 69h-158 q-66 0 -114.5 21.5t-71.5 54.5t-37 72q-12 32 -12 62q0 6 1 13zM455 885q0 61 50 106t113 45q61 0 101.5 -36.5t40.5 -98.5q0 -59 -50.5 -104t-113.5 -45q-61 0 -101 37t-40 96z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1052" d="M-41 0l602 1290h195l200 -1290h-231l-53 371h-305l-166 -371h-242zM442 567h209l-47 398zM455 1669l180 156q90 -154 264 -295l-108 -125q-195 112 -336 264z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1052" d="M-41 0l602 1290h195l200 -1290h-231l-53 371h-305l-166 -371h-242zM442 567h209l-47 398zM479 1536q98 61 187.5 134t128.5 114l41 41l139 -164q-184 -145 -420 -256z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1052" d="M-41 0l602 1290h195l200 -1290h-231l-53 371h-305l-166 -371h-242zM352 1546q268 141 414 258q115 -145 264 -274l-135 -121q-117 109 -164 162q-156 -92 -282 -156zM442 567h209l-47 398z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1052" d="M-41 0l602 1290h195l200 -1290h-231l-53 371h-305l-166 -371h-242zM295 1587q123 100 229 109q11 1 22 1q69 0 148 -34q86 -31 120 -31q9 0 13 2q25 9 25 44q0 20 -8 48l178 -34q1 -11 1 -22q0 -64 -32 -114q-47 -76 -153 -81q-12 -1 -24 -1l-120 25q-8 4 -26.5 12.5 t-25.5 12.5t-21.5 9t-25.5 8t-26.5 5t-33.5 2q-61 0 -177 -86zM442 567h209l-47 398z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1052" d="M-41 0l602 1290h195l200 -1290h-231l-53 371h-305l-166 -371h-242zM397 1542q0 57 44 103.5t100 46.5q47 0 80.5 -33t33.5 -78q0 -57 -46 -100t-103 -43q-45 0 -77 29.5t-32 74.5zM442 567h209l-47 398zM743 1542q0 57 43 103.5t101 46.5q47 0 80.5 -33t33.5 -78 q0 -57 -46 -100t-103 -43q-45 0 -77 29.5t-32 74.5z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1052" d="M-41 0l602 1290h195l200 -1290h-231l-53 371h-305l-166 -371h-242zM442 567h209l-47 398zM487 1616q14 88 86 149.5t160 61.5t144 -67q44 -53 43 -119q0 -17 -2 -35q-14 -88 -85 -150.5t-161 -62.5t-145 66q-43 53 -43 120q0 18 3 37zM629 1595q0 -23 17.5 -40t37.5 -17 q41 0 66.5 28.5t25.5 63.5q0 23 -17.5 39.5t-37.5 16.5q-41 0 -66.5 -27t-25.5 -64z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1476" d="M-41 0l619 1290h202l23 -260l41 260h672l-33 -207h-436l-52 -307h328l-33 -211h-327l-58 -356h459l-35 -209h-692l63 391h-301l-192 -391h-248zM492 596h200l-51 346z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1007" d="M94 481q0 70 15 170q18 115 68 230.5t125 215t181.5 162t223.5 62.5q209 0 319 -90l6 -4l-108 -156q-86 55 -236 55q-68 0 -134.5 -56t-109.5 -124q-57 -88 -91 -219t-34 -244q0 -127 49.5 -223t161.5 -96q117 0 254 82l86 -156q-111 -88 -274 -113q31 -33 41 -75 q3 -13 3 -26q0 -60 -63 -122q-77 -76 -174 -116l-102 100q174 61 174 118q0 21 -15 25q-13 4 -31.5 -1t-36.5 -13l-33 -15q-15 -7 -17 -8l23 146q-271 83 -271 491z" />
+<glyph unicode="&#xc8;" horiz-adv-x="911" d="M82 0l199 1290h675l-28 -198h-451l-49 -318h332l-31 -205h-334l-57 -366h469l-31 -203h-694zM449 1669l180 156q88 -154 264 -295l-109 -125q-216 125 -335 264z" />
+<glyph unicode="&#xc9;" horiz-adv-x="911" d="M82 0l199 1290h675l-28 -198h-451l-49 -318h332l-31 -205h-334l-57 -366h469l-31 -203h-694zM408 1536q98 61 187 134t130 114l39 41l139 -164q-184 -145 -420 -256z" />
+<glyph unicode="&#xca;" horiz-adv-x="911" d="M82 0l199 1290h675l-28 -198h-451l-49 -318h332l-31 -205h-334l-57 -366h469l-31 -203h-694zM311 1546q268 141 414 258q115 -145 262 -274l-133 -121q-117 109 -164 162q-156 -92 -282 -156z" />
+<glyph unicode="&#xcb;" horiz-adv-x="911" d="M82 0l199 1290h675l-28 -198h-451l-49 -318h332l-31 -205h-334l-57 -366h469l-31 -203h-694zM375 1542q0 57 44 103.5t99 46.5q47 0 81 -33t34 -78q0 -57 -46 -100t-104 -43q-45 0 -76.5 29.5t-31.5 74.5zM721 1542q0 57 43 103.5t100 46.5q47 0 81 -33t34 -78 q0 -57 -46 -100t-104 -43q-47 0 -77.5 29.5t-30.5 74.5z" />
+<glyph unicode="&#xcc;" horiz-adv-x="485" d="M63 0l189 1290h225l-190 -1290h-224zM129 1669l180 156q88 -154 264 -295l-108 -125q-217 125 -336 264z" />
+<glyph unicode="&#xcd;" horiz-adv-x="485" d="M61 0l177 1290h198l-178 -1290h-197zM176 1483q80 57 152.5 125.5t105.5 107.5l33 39l113 -153q-127 -127 -342 -242z" />
+<glyph unicode="&#xce;" horiz-adv-x="485" d="M61 1546q266 141 414 258q113 -145 262 -274l-135 -121q-117 109 -164 162q-152 -90 -280 -156zM70 0l190 1290h223l-188 -1290h-225z" />
+<glyph unicode="&#xcf;" horiz-adv-x="485" d="M63 0l189 1290h225l-190 -1290h-224zM96 1542q0 57 43 103.5t101 46.5q47 0 80.5 -33t33.5 -78q0 -57 -46 -100t-103 -43q-45 0 -77 29.5t-32 74.5zM442 1542q0 57 43 103.5t101 46.5q47 0 79.5 -33t32.5 -78q0 -57 -46 -100t-103 -43q-45 0 -76 29.5t-31 74.5z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1132" d="M82 0l201 1290h262l196 -702l29 -156q0 164 8 219l99 639h229l-201 -1290h-217l-250 899q-2 -86 -14 -166l-115 -733h-227zM369 1587q123 100 229 109q11 1 22 1q69 0 148 -34q86 -31 119 -31q9 0 14 2q25 9 25 44q0 20 -8 48l178 -34q1 -12 1 -23q0 -67 -32 -113 q-47 -76 -154 -81q-12 -1 -23 -1q-58 0 -118 25q-10 4 -32 14l-30 15q-9 4 -26.5 9t-35 8t-38.5 3q-61 0 -176 -86z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1120" d="M119 483q0 125 34.5 265.5t100 271.5t177.5 216t249 85q131 0 217 -83t116.5 -191.5t30.5 -237.5q0 -125 -34.5 -265.5t-100 -271.5t-177 -217t-249.5 -86q-100 0 -173.5 47t-113.5 125t-58.5 163t-18.5 179zM338 430q0 -256 164 -256q88 0 155.5 78t101.5 194.5t49 220 t15 185.5q0 264 -164 264q-86 0 -153.5 -80t-101 -197.5t-50 -223t-16.5 -185.5zM483 1669l181 156q90 -154 264 -295l-109 -125q-195 112 -336 264z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1120" d="M119 483q0 125 34.5 265.5t100 271.5t177.5 216t249 85q131 0 217 -83t116.5 -191.5t30.5 -237.5q0 -125 -34.5 -265.5t-100 -271.5t-177 -217t-249.5 -86q-100 0 -173.5 47t-113.5 125t-58.5 163t-18.5 179zM338 430q0 -256 164 -256q88 0 155.5 78t101.5 194.5t49 220 t15 185.5q0 264 -164 264q-86 0 -153.5 -80t-101 -197.5t-50 -223t-16.5 -185.5zM504 1536q98 61 187 134t128 114l41 41l139 -164q-156 -131 -419 -256z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1120" d="M119 483q0 125 34.5 265.5t100 271.5t177.5 216t249 85q131 0 217 -83t116.5 -191.5t30.5 -237.5q0 -125 -34.5 -265.5t-100 -271.5t-177 -217t-249.5 -86q-100 0 -173.5 47t-113.5 125t-58.5 163t-18.5 179zM338 430q0 -256 164 -256q88 0 155.5 78t101.5 194.5t49 220 t15 185.5q0 264 -164 264q-86 0 -153.5 -80t-101 -197.5t-50 -223t-16.5 -185.5zM373 1546q266 141 413 258q115 -145 263 -274l-134 -121q-96 86 -165 162q-119 -74 -281 -156z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1120" d="M119 483q0 125 34.5 265.5t100 271.5t177.5 216t249 85q131 0 217 -83t116.5 -191.5t30.5 -237.5q0 -125 -34.5 -265.5t-100 -271.5t-177 -217t-249.5 -86q-100 0 -173.5 47t-113.5 125t-58.5 163t-18.5 179zM338 430q0 -256 164 -256q88 0 155.5 78t101.5 194.5t49 220 t15 185.5q0 264 -164 264q-86 0 -153.5 -80t-101 -197.5t-50 -223t-16.5 -185.5zM350 1587q123 100 230 109q10 1 21 1q68 0 151 -34q83 -31 116 -31q9 0 15 2q25 9 24 44q0 20 -8 48l178 -34q1 -12 1 -23q0 -67 -31 -113q-47 -76 -154 -81q-12 -1 -23 -1q-58 0 -118 25 q-10 4 -32 14l-31 15q-9 4 -26.5 9t-35 8t-37.5 3q-61 0 -176 -86z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1120" d="M119 483q0 125 34.5 265.5t100 271.5t177.5 216t249 85q131 0 217 -83t116.5 -191.5t30.5 -237.5q0 -125 -34.5 -265.5t-100 -271.5t-177 -217t-249.5 -86q-100 0 -173.5 47t-113.5 125t-58.5 163t-18.5 179zM338 430q0 -256 164 -256q88 0 155.5 78t101.5 194.5t49 220 t15 185.5q0 264 -164 264q-86 0 -153.5 -80t-101 -197.5t-50 -223t-16.5 -185.5zM438 1542q0 57 43 103.5t101 46.5q47 0 79.5 -33t32.5 -78q0 -57 -46 -100t-103 -43q-45 0 -76 29.5t-31 74.5zM784 1542q0 57 43 103.5t101 46.5q47 0 79.5 -33t32.5 -78q0 -57 -46 -100 t-103 -43q-45 0 -76 29.5t-31 74.5z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1120" d="M117 -299l153 344q-152 135 -151 438q0 125 34.5 265.5t100 271.5t177.5 216t249 85q82 0 141 -31l115 258h102l-137 -311q143 -137 143 -428q0 -125 -34.5 -265.5t-100 -271.5t-178.5 -217t-250 -86q-72 0 -131 27l-131 -295h-102zM338 430q0 -106 27 -168l370 836 q-35 18 -76 18q-86 0 -153.5 -79t-101 -196.5t-50 -224t-16.5 -186.5zM434 188q31 -14 68 -14q88 0 155.5 78t101.5 193.5t49 220t15 186.5q0 96 -22 160z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1114" d="M126 317q-4 35 -4 70q0 64 13 129l119 774h227l-123 -788q-10 -104 -10 -163q0 -67 33 -115q35 -50 111 -50q193 0 245 342l121 774h227l-122 -794q-23 -147 -79.5 -261t-163 -190t-249.5 -76q-113 0 -190.5 48.5t-110.5 125t-44 174.5zM492 1669l180 156 q88 -154 262 -295l-109 -125q-212 123 -333 264z" />
+<glyph unicode="&#xda;" horiz-adv-x="1114" d="M126 317q-4 35 -4 70q0 64 13 129l119 774h227l-123 -788q-10 -104 -10 -163q0 -67 33 -115q35 -50 111 -50q193 0 245 342l121 774h227l-122 -794q-23 -147 -79.5 -261t-163 -190t-249.5 -76q-113 0 -190.5 48.5t-110.5 125t-44 174.5zM469 1536q98 61 187 134t130 114 l39 41l140 -164q-184 -145 -420 -256z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1114" d="M126 317q-4 35 -4 70q0 64 13 129l119 774h227l-123 -788q-10 -104 -10 -163q0 -67 33 -115q35 -50 111 -50q193 0 245 342l121 774h227l-122 -794q-23 -147 -79.5 -261t-163 -190t-249.5 -76q-113 0 -190.5 48.5t-110.5 125t-44 174.5zM371 1546q266 141 413 258 q113 -145 263 -274l-136 -121q-102 94 -163 162q-152 -90 -281 -156z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1114" d="M126 317q-4 35 -4 70q0 64 13 129l119 774h227l-123 -788q-10 -104 -10 -163q0 -67 33 -115q35 -50 111 -50q193 0 245 342l121 774h227l-122 -794q-23 -147 -79.5 -261t-163 -190t-249.5 -76q-113 0 -190.5 48.5t-110.5 125t-44 174.5zM412 1542q0 57 44 103.5t101 46.5 q47 0 80 -33t33 -78q0 -57 -46 -100t-104 -43q-45 0 -76.5 29.5t-31.5 74.5zM758 1542q0 57 44 103.5t101 46.5q45 0 79 -33t34 -78q0 -57 -46 -100t-104 -43q-45 0 -76.5 29.5t-31.5 74.5z" />
+<glyph unicode="&#xdd;" horiz-adv-x="880" d="M55 1165l154 154q129 -82 209 -246q49 -104 61 -262q35 154 138.5 304.5t232.5 217.5l143 -151q-61 -39 -113.5 -87t-94.5 -114t-73.5 -120t-60.5 -141l-46 -138q-17 -51 -38 -154l-28 -143q-8 -41 -26 -150l-21 -135h-224l74 471q-14 127 -20 164q-20 164 -86 314 t-181 216zM799 1587q98 61 187 134t130 114l39 41l139 -164q-156 -131 -420 -256z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1122" d="M2 -307q12 18 32.5 55t59.5 161t51 257q45 477 58 649l-135 33l26 156h125l19 135q20 162 172 244q119 65 244 66q34 0 69 -5q117 -18 191.5 -95t86.5 -206q2 -16 2 -33q0 -118 -75 -270q-86 18 -123 18q-57 0 -88 -33q-33 -35 -33 -78q0 -54 96 -110l183 -111 q111 -68 110 -217q-2 -160 -122 -250t-283 -90q-66 0 -129.5 25.5t-94.5 50.5l-30 25l106 161q70 -66 150 -65q68 0 114.5 27.5t55.5 68.5q1 7 1 14q0 56 -77 103l-182 108q-63 37 -98 117q-24 56 -23 112q0 24 4 48q23 133 121 201.5t207 68.5q13 45 12 81q0 47 -21 80 q-37 58 -137 58q-72 0 -130 -44t-64 -107l-25 -240l-78 -809q-14 -160 -203 -436l-8 -12z" />
+<glyph unicode="&#xe0;" horiz-adv-x="1003" d="M98 266q0 111 32 238t92.5 248.5t165 201.5t233.5 80q104 0 299 -37l-103 -739q-9 -48 -9 -77q0 -35 19 -36l50 11l45 -140q-92 -47 -168 -47q-66 0 -106 49q-32 39 -32 84q0 11 2 23l9 57q-4 -8 -14.5 -22.5t-43 -51t-67.5 -65.5t-90.5 -51.5t-112.5 -22.5 q-201 0 -201 297zM322 218q0 -19 12 -31.5t41 -12.5q66 0 156 119t108 209l55 332q-47 4 -69 4q-72 0 -132.5 -64.5t-96.5 -160t-55 -187.5t-19 -162v-46zM444 1403l181 156q90 -154 264 -295l-109 -125q-195 112 -336 264z" />
+<glyph unicode="&#xe1;" horiz-adv-x="1003" d="M98 266q0 111 32 238t92.5 248.5t165 201.5t233.5 80q104 0 299 -37l-103 -739q-9 -48 -9 -77q0 -35 19 -36l50 11l45 -140q-92 -47 -168 -47q-66 0 -106 49q-32 39 -32 84q0 11 2 23l9 57q-4 -8 -14.5 -22.5t-43 -51t-67.5 -65.5t-90.5 -51.5t-112.5 -22.5 q-201 0 -201 297zM322 218q0 -19 12 -31.5t41 -12.5q66 0 156 119t108 209l55 332q-47 4 -69 4q-72 0 -132.5 -64.5t-96.5 -160t-55 -187.5t-19 -162v-46zM473 1270q98 61 187.5 134t130.5 114l38 41l140 -164q-156 -131 -420 -256z" />
+<glyph unicode="&#xe2;" horiz-adv-x="1003" d="M98 266q0 111 32 238t92.5 248.5t165 201.5t233.5 80q104 0 299 -37l-103 -739q-9 -48 -9 -77q0 -35 19 -36l50 11l45 -140q-92 -47 -168 -47q-66 0 -106 49q-32 39 -32 84q0 11 2 23l9 57q-4 -8 -14.5 -22.5t-43 -51t-67.5 -65.5t-90.5 -51.5t-112.5 -22.5 q-201 0 -201 297zM317 1280q266 141 414 258q113 -145 262 -274l-135 -121q-117 109 -164 162q-152 -90 -280 -156zM322 218q0 -19 12 -31.5t41 -12.5q66 0 156 119t108 209l55 332q-47 4 -69 4q-72 0 -132.5 -64.5t-96.5 -160t-55 -187.5t-19 -162v-46z" />
+<glyph unicode="&#xe3;" horiz-adv-x="1003" d="M98 266q0 111 32 238t92.5 248.5t165 201.5t233.5 80q104 0 299 -37l-103 -739q-9 -48 -9 -77q0 -35 19 -36l50 11l45 -140q-92 -47 -168 -47q-66 0 -106 49q-32 39 -32 84q0 11 2 23l9 57q-4 -8 -14.5 -22.5t-43 -51t-67.5 -65.5t-90.5 -51.5t-112.5 -22.5 q-201 0 -201 297zM276 1321q123 100 230 109q10 1 21 0q68 0 151 -33q83 -31 116 -31q9 0 15 2q25 9 25 44q0 20 -9 48l179 -35q1 -14 1 -27q0 -62 -32 -108q-47 -76 -154 -82q-12 -1 -23 -1q-58 0 -118 26l-30 14q-26 12 -32 14.5t-25.5 9.5t-36.5 9t-38 2q-61 0 -176 -86z M322 218q0 -19 12 -31.5t41 -12.5q66 0 156 119t108 209l55 332q-47 4 -69 4q-72 0 -132.5 -64.5t-96.5 -160t-55 -187.5t-19 -162v-46z" />
+<glyph unicode="&#xe4;" horiz-adv-x="1003" d="M98 266q0 111 32 238t92.5 248.5t165 201.5t233.5 80q104 0 299 -37l-103 -739q-9 -48 -9 -77q0 -35 19 -36l50 11l45 -140q-92 -47 -168 -47q-66 0 -106 49q-32 39 -32 84q0 11 2 23l9 57q-4 -8 -14.5 -22.5t-43 -51t-67.5 -65.5t-90.5 -51.5t-112.5 -22.5 q-201 0 -201 297zM322 218q0 -19 12 -31.5t41 -12.5q66 0 156 119t108 209l55 332q-47 4 -69 4q-72 0 -132.5 -64.5t-96.5 -160t-55 -187.5t-19 -162v-46zM393 1276q0 57 43 103t101 46q47 0 80.5 -32.5t33.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-47 0 -78 30t-31 75z M739 1276q0 57 43 103t101 46q47 0 79.5 -32.5t32.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -76 30t-31 75z" />
+<glyph unicode="&#xe5;" horiz-adv-x="1003" d="M98 266q0 111 32 238t92.5 248.5t165 201.5t233.5 80q104 0 299 -37l-103 -739q-9 -48 -9 -77q0 -35 19 -36l50 11l45 -140q-92 -47 -168 -47q-66 0 -106 49q-32 39 -32 84q0 11 2 23l9 57q-4 -8 -14.5 -22.5t-43 -51t-67.5 -65.5t-90.5 -51.5t-112.5 -22.5 q-201 0 -201 297zM322 218q0 -19 12 -31.5t41 -12.5q66 0 156 119t108 209l55 332q-47 4 -69 4q-72 0 -132.5 -64.5t-96.5 -160t-55 -187.5t-19 -162v-46zM494 1356q14 88 86.5 149.5t158.5 61.5q88 0 144 -67q44 -53 44 -120q0 -18 -3 -37q-14 -86 -85 -148t-161 -62 t-144 66q-43 53 -43 120q0 18 3 37zM635 1335q0 -23 17.5 -41t37.5 -18q41 0 66.5 29.5t25.5 64.5q0 23 -17 39t-38 16q-41 0 -66.5 -26.5t-25.5 -63.5z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1361" d="M98 266q0 115 33 244t94.5 249t166 197.5t229.5 77.5q76 0 266 -41q88 41 184 41q262 0 262 -246q0 -86 -56 -157.5t-148.5 -115.5t-174.5 -70.5t-170 -43.5v-28q0 -74 34 -148.5t97 -74.5q61 0 129 28.5t113 71.5l92 -123q-66 -70 -168 -114t-198 -44q-193 0 -277 185 q-135 -184 -307 -185q-201 0 -201 297zM319 238q0 -33 11.5 -48.5t44.5 -15.5q45 0 98 54.5t90 111.5v33q0 268 146 467q-14 0 -43 -1t-41 -1q-76 0 -138.5 -70t-96.5 -170t-52.5 -195t-18.5 -165zM809 586q307 70 307 215q0 55 -65 55q-84 0 -146.5 -84t-95.5 -186z" />
+<glyph unicode="&#xe7;" horiz-adv-x="849" d="M92 381q0 133 45 265t119 218q72 82 162 126t160 44q33 0 61.5 -4t50 -9t43 -14.5t33.5 -16.5t26.5 -18t19.5 -17l15 -15l11 -10l-129 -137q-41 57 -148 57q-72 0 -145.5 -94t-98.5 -250q-8 -70 -8 -98q0 -111 40 -180.5t110 -69.5q43 0 99 31.5t93 64.5l35 33l100 -123 q-12 -16 -36.5 -42t-95 -77t-140.5 -68q35 -37 43 -75q3 -13 3 -26q0 -60 -63 -122q-77 -76 -173 -116l-103 100q174 61 175 118q0 21 -16 25q-13 4 -31.5 -1t-36.5 -13l-32 -15q-15 -7 -18 -8l23 154h10q-82 37 -131 111q-72 102 -72 272z" />
+<glyph unicode="&#xe8;" horiz-adv-x="894" d="M92 373q0 156 54.5 303t174 252.5t279.5 105.5q262 0 262 -246q0 -86 -56 -156.5t-148.5 -115.5t-175.5 -71.5t-169 -43.5v-28q0 -74 34 -148.5t97 -74.5q59 0 120 25.5t91 49.5l31 25l92 -123q-16 -18 -47 -44t-126 -70t-193 -44q-160 0 -240 119t-80 285zM338 586 q307 72 307 215q0 55 -65 55q-86 0 -148.5 -85t-93.5 -185zM393 1403l180 156q90 -154 265 -295l-109 -125q-195 112 -336 264z" />
+<glyph unicode="&#xe9;" horiz-adv-x="894" d="M92 373q0 156 54.5 303t174 252.5t279.5 105.5q262 0 262 -246q0 -86 -56 -156.5t-148.5 -115.5t-175.5 -71.5t-169 -43.5v-28q0 -74 34 -148.5t97 -74.5q59 0 120 25.5t91 49.5l31 25l92 -123q-16 -18 -47 -44t-126 -70t-193 -44q-160 0 -240 119t-80 285zM338 586 q307 72 307 215q0 55 -65 55q-86 0 -148.5 -85t-93.5 -185zM389 1270q98 61 187.5 134t128.5 114l40 41l140 -164q-156 -131 -420 -256z" />
+<glyph unicode="&#xea;" horiz-adv-x="894" d="M92 373q0 156 54.5 303t174 252.5t279.5 105.5q262 0 262 -246q0 -86 -56 -156.5t-148.5 -115.5t-175.5 -71.5t-169 -43.5v-28q0 -74 34 -148.5t97 -74.5q59 0 120 25.5t91 49.5l31 25l92 -123q-16 -18 -47 -44t-126 -70t-193 -44q-160 0 -240 119t-80 285zM219 1280 q268 141 414 258q115 -145 262 -274l-133 -121q-117 109 -164 162q-156 -92 -283 -156zM338 586q307 72 307 215q0 55 -65 55q-86 0 -148.5 -85t-93.5 -185z" />
+<glyph unicode="&#xeb;" horiz-adv-x="894" d="M92 373q0 156 54.5 303t174 252.5t279.5 105.5q262 0 262 -246q0 -86 -56 -156.5t-148.5 -115.5t-175.5 -71.5t-169 -43.5v-28q0 -74 34 -148.5t97 -74.5q59 0 120 25.5t91 49.5l31 25l92 -123q-16 -18 -47 -44t-126 -70t-193 -44q-160 0 -240 119t-80 285zM313 1276 q0 57 44 103t102 46q47 0 79.5 -32.5t32.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75zM338 586q307 72 307 215q0 55 -65 55q-86 0 -148.5 -85t-93.5 -185zM659 1276q0 57 44.5 103t101.5 46q47 0 80 -32.5t33 -77.5q0 -57 -46.5 -100.5t-103.5 -43.5 q-45 0 -77 30t-32 75z" />
+<glyph unicode="&#xec;" horiz-adv-x="477" d="M66 0l135 1004h186l-135 -1004h-186zM76 1403l180 156q90 -154 264 -295l-108 -125q-195 112 -336 264z" />
+<glyph unicode="&#xed;" horiz-adv-x="477" d="M66 0l135 1004h186l-135 -1004h-186zM98 1270q215 137 355 289l139 -164q-158 -133 -420 -256z" />
+<glyph unicode="&#xee;" horiz-adv-x="477" d="M66 1280q268 141 413 258q115 -145 262 -274l-133 -121q-117 109 -166 162q-133 -82 -280 -156zM145 0l138 1004h184l-135 -1004h-187z" />
+<glyph unicode="&#xef;" horiz-adv-x="477" d="M66 1276q0 57 44 103t99 46q47 0 81 -32.5t34 -77.5q0 -57 -46.5 -100.5t-103.5 -43.5q-45 0 -76.5 30t-31.5 75zM106 0l138 1004h186l-137 -1004h-187zM412 1276q0 57 44 103t99 46q47 0 81 -32.5t34 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -76.5 30t-31.5 75z" />
+<glyph unicode="&#xf1;" horiz-adv-x="1060" d="M84 0l158 1004h217l-29 -162q49 80 126 136t161 56q113 0 170 -43t60 -109q1 -18 1 -37q0 -51 -6 -108l-115 -737h-219l119 750q3 21 3 36q0 27 -9 38q-14 17 -57 18q-111 0 -271 -244l-92 -598h-217zM285 1321q123 100 229 109q10 1 21 0q68 0 151 -33q83 -31 117 -31 q9 0 14 2q25 9 25 44q0 20 -8 48l178 -35q1 -14 1 -27q0 -62 -32 -108q-47 -76 -154 -82q-12 -1 -23 -1q-58 0 -118 26l-30 14q-26 12 -32 14.5t-25 9.5t-36.5 9t-38.5 2q-61 0 -176 -86z" />
+<glyph unicode="&#xf2;" horiz-adv-x="999" d="M92 395q0 141 55.5 284.5t170 249t260.5 105.5q166 0 248.5 -127t82.5 -303q0 -102 -32.5 -211.5t-92 -205t-154.5 -157t-206 -61.5q-166 0 -249 126t-83 300zM305 365q0 -207 137 -207q68 0 120 53t80 132t41 154.5t13 137.5q0 209 -137 209q-68 0 -120 -53.5 t-79.5 -133t-41 -155.5t-13.5 -137zM395 1403l180 156q90 -154 265 -295l-109 -125q-195 112 -336 264z" />
+<glyph unicode="&#xf3;" horiz-adv-x="999" d="M92 395q0 141 55.5 284.5t170 249t260.5 105.5q166 0 248.5 -127t82.5 -303q0 -102 -32.5 -211.5t-92 -205t-154.5 -157t-206 -61.5q-166 0 -249 126t-83 300zM305 365q0 -207 137 -207q68 0 120 53t80 132t41 154.5t13 137.5q0 209 -137 209q-68 0 -120 -53.5 t-79.5 -133t-41 -155.5t-13.5 -137zM406 1270q98 61 187 134t128 114l41 41l139 -164q-184 -145 -420 -256z" />
+<glyph unicode="&#xf4;" horiz-adv-x="999" d="M92 395q0 141 55.5 284.5t170 249t260.5 105.5q166 0 248.5 -127t82.5 -303q0 -102 -32.5 -211.5t-92 -205t-154.5 -157t-206 -61.5q-166 0 -249 126t-83 300zM272 1280q268 141 414 258q115 -145 262 -274l-133 -121q-117 109 -164 162q-156 -92 -282 -156zM305 365 q0 -207 137 -207q68 0 120 53t80 132t41 154.5t13 137.5q0 209 -137 209q-68 0 -120 -53.5t-79.5 -133t-41 -155.5t-13.5 -137z" />
+<glyph unicode="&#xf5;" horiz-adv-x="999" d="M92 395q0 141 55.5 284.5t170 249t260.5 105.5q166 0 248.5 -127t82.5 -303q0 -102 -32.5 -211.5t-92 -205t-154.5 -157t-206 -61.5q-166 0 -249 126t-83 300zM260 1321q123 100 229 109q11 1 22 0q70 0 151 -33q6 -2 25.5 -9.5t28.5 -10.5t28.5 -8t25.5 -4t23 3 q25 9 24 44q0 20 -8 48l180 -35q1 -11 1 -21q0 -64 -32 -114q-51 -76 -155 -82q-12 -1 -23 -1q-58 0 -118 26q-8 4 -27 12t-26 12.5t-21.5 9.5t-25.5 8t-26.5 5t-33.5 2q-61 0 -176 -86zM305 365q0 -207 137 -207q68 0 120 53t80 132t41 154.5t13 137.5q0 209 -137 209 q-68 0 -120 -53.5t-79.5 -133t-41 -155.5t-13.5 -137z" />
+<glyph unicode="&#xf6;" horiz-adv-x="999" d="M92 395q0 141 55.5 284.5t170 249t260.5 105.5q166 0 248.5 -127t82.5 -303q0 -102 -32.5 -211.5t-92 -205t-154.5 -157t-206 -61.5q-166 0 -249 126t-83 300zM305 365q0 -207 137 -207q68 0 120 53t80 132t41 154.5t13 137.5q0 209 -137 209q-68 0 -120 -53.5 t-79.5 -133t-41 -155.5t-13.5 -137zM340 1276q0 57 43 103t100 46q47 0 80 -32.5t33 -77.5q0 -57 -46 -100.5t-104 -43.5q-45 0 -75.5 30t-30.5 75zM684 1276q0 57 44 103t101 46q47 0 80 -32.5t33 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1001" d="M96 420v184h807v-184h-807zM342 213q0 63 47 108.5t111 45.5q59 0 99 -38t40 -98q0 -61 -47 -106t-111 -45q-59 0 -99 37t-40 96zM342 799q0 63 47 108t111 45q59 0 99 -37.5t40 -97.5q0 -63 -47 -108t-111 -45q-59 0 -99 38t-40 97z" />
+<glyph unicode="&#xf8;" horiz-adv-x="999" d="M92 395q0 141 55.5 284.5t170 249t260.5 105.5q59 0 102 -16l80 178h102l-100 -221q147 -113 147 -371q0 -102 -32.5 -211.5t-92 -205t-154.5 -157t-206 -61.5q-61 0 -105 17l-94 -209h-102l113 254q-144 112 -144 364zM305 365q0 -80 23 -134l272 609q-29 4 -41 4 q-68 0 -120 -53.5t-79.5 -132t-41 -154.5t-13.5 -139zM399 164q18 -6 43 -6q68 0 120 52t80 132t41 154.5t13 138.5q0 88 -24 137z" />
+<glyph unicode="&#xf9;" horiz-adv-x="1038" d="M105 156q-1 11 0 21q0 43 10 89l114 738h217l-116 -750q-3 -21 -3 -36q0 -27 9 -39q14 -17 57 -17q104 0 271 244l92 598h217l-131 -836q-4 -31 8 -50.5t27 -23.5l16 -4l-78 -121q-10 -1 -22 -1h-14q-22 1 -67.5 15.5t-64.5 47.5q-15 25 -15 67q0 29 7 66 q-53 -78 -135 -136.5t-164 -58.5q-86 0 -140.5 25.5t-73 67t-21.5 94.5zM436 1403l180 156q90 -154 265 -295l-109 -125q-195 112 -336 264z" />
+<glyph unicode="&#xfa;" horiz-adv-x="1038" d="M105 156q-1 11 0 21q0 43 10 89l114 738h217l-116 -750q-3 -21 -3 -36q0 -27 9 -39q14 -17 57 -17q104 0 271 244l92 598h217l-131 -836q-4 -31 8 -50.5t27 -23.5l16 -4l-78 -121q-10 -1 -22 -1h-14q-22 1 -67.5 15.5t-64.5 47.5q-15 25 -15 67q0 29 7 66 q-53 -78 -135 -136.5t-164 -58.5q-86 0 -140.5 25.5t-73 67t-21.5 94.5zM446 1270q215 137 355 289l139 -164q-158 -133 -420 -256z" />
+<glyph unicode="&#xfb;" horiz-adv-x="1038" d="M105 156q-1 11 0 21q0 43 10 89l114 738h217l-116 -750q-3 -21 -3 -36q0 -27 9 -39q14 -17 57 -17q104 0 271 244l92 598h217l-131 -836q-4 -31 8 -50.5t27 -23.5l16 -4l-78 -121q-10 -1 -22 -1h-14q-22 1 -67.5 15.5t-64.5 47.5q-15 25 -15 67q0 29 7 66 q-53 -78 -135 -136.5t-164 -58.5q-86 0 -140.5 25.5t-73 67t-21.5 94.5zM307 1280q268 141 414 258q115 -145 264 -274l-135 -121q-117 109 -164 162q-156 -92 -283 -156z" />
+<glyph unicode="&#xfc;" horiz-adv-x="1038" d="M105 156q-1 11 0 21q0 43 10 89l114 738h217l-116 -750q-3 -21 -3 -36q0 -27 9 -39q14 -17 57 -17q104 0 271 244l92 598h217l-131 -836q-4 -31 8 -50.5t27 -23.5l16 -4l-78 -121q-10 -1 -22 -1h-14q-22 1 -67.5 15.5t-64.5 47.5q-15 25 -15 67q0 29 7 66 q-53 -78 -135 -136.5t-164 -58.5q-86 0 -140.5 25.5t-73 67t-21.5 94.5zM348 1276q0 57 44 103t100 46q47 0 80.5 -32.5t33.5 -77.5q0 -57 -46 -100.5t-103 -43.5q-45 0 -77 30t-32 75zM694 1276q0 57 43 103t101 46q47 0 80.5 -32.5t33.5 -77.5q0 -57 -46 -100.5 t-103 -43.5q-47 0 -78 30t-31 75z" />
+<glyph unicode="&#xfd;" horiz-adv-x="880" d="M-18 -225q106 45 173.5 100t120.5 150l-200 979h229l123 -728l61 109q168 287 168 358q0 113 -43 236l211 45q41 -113 41 -246q0 -121 -67 -237l-336 -584q-78 -137 -177.5 -215t-252.5 -125zM776 1288q98 61 187.5 134t130.5 114l39 41l139 -164q-156 -131 -420 -256z " />
+<glyph unicode="&#xff;" horiz-adv-x="880" d="M-18 -225q106 45 173.5 100t120.5 150l-200 979h229l123 -728l61 109q170 291 170 358q0 109 -45 236l211 45q41 -113 41 -246q0 -121 -67 -237l-336 -584q-78 -137 -177.5 -215t-252.5 -125zM188 1276q0 57 44 103t100 46q47 0 80.5 -32.5t33.5 -77.5q0 -57 -46 -100.5 t-103 -43.5q-45 0 -77 30t-32 75zM535 1276q0 57 43 103t100 46q47 0 80 -32.5t33 -77.5q0 -57 -45.5 -100.5t-102.5 -43.5q-47 0 -77.5 30t-30.5 75z" />
+<glyph unicode="&#x152;" horiz-adv-x="1286" d="M150 750q76 297 256 444q119 96 258 96h667l-33 -207h-467l-49 -307h359l-33 -211h-358l-56 -356h486l-33 -209h-674q-225 0 -313 233q-44 118 -44 257q1 122 34 260zM352 627q-16 -104 -16 -184q0 -219 125 -242l139 882q-96 -27 -157.5 -155.5t-90.5 -300.5z" />
+<glyph unicode="&#x153;" horiz-adv-x="1486" d="M100 506q35 207 169 367.5t327 160.5q166 0 262 -133q139 133 322 133q121 0 197.5 -62.5t76.5 -183.5q0 -86 -57.5 -156.5t-152.5 -117.5t-182 -75.5t-181 -49.5v-8q-2 -82 35.5 -152.5t101.5 -70.5q119 0 270 161l101 -143q-199 -209 -404 -209q-164 0 -254 125 q-135 -125 -295 -125q-135 0 -220 85t-111 205q-14 67 -14 136q0 56 9 113zM324 494q-11 -74 -12 -132q0 -206 143 -206q125 0 198 163q-2 18 -2 54q0 166 62 313q-18 158 -135 158q-98 0 -163.5 -101.5t-90.5 -248.5zM907 586q311 70 312 215q0 47 -70 47q-78 0 -143.5 -79 t-98.5 -183z" />
+<glyph unicode="&#x178;" horiz-adv-x="880" d="M55 1165l154 154q129 -82 209 -246q49 -104 61 -262q35 154 138.5 304.5t232.5 217.5l143 -151q-61 -39 -113.5 -87t-94.5 -114t-73.5 -120t-60.5 -141l-46 -138q-17 -51 -38 -154l-28 -143q-8 -41 -26 -150l-21 -135h-224l74 471q-14 127 -20 164q-20 164 -86 314 t-181 216zM240 1542q0 57 44 103.5t101 46.5q47 0 80 -33t33 -78q0 -57 -46 -100t-104 -43q-45 0 -76.5 29.5t-31.5 74.5zM586 1542q0 57 44 103.5t101 46.5q47 0 80 -33t33 -78q0 -57 -46 -100t-104 -43q-45 0 -76.5 29.5t-31.5 74.5z" />
+<glyph unicode="&#x2c6;" horiz-adv-x="737" d="M70 1280q266 141 413 258q113 -145 262 -274l-135 -121q-117 109 -164 162q-152 -90 -280 -156z" />
+<glyph unicode="&#x2dc;" horiz-adv-x="763" d="M20 1321q123 100 230 109q10 1 21 0q68 0 151 -33q83 -31 116 -31q9 0 15 2q25 9 25 44q0 20 -9 48l179 -35q1 -14 1 -27q0 -62 -32 -108q-47 -76 -154 -82q-12 -1 -23 -1q-58 0 -118 26l-30 14q-26 12 -32 14.5t-25.5 9.5t-36.5 9t-38 2q-61 0 -176 -86z" />
+<glyph unicode="&#x2013;" horiz-adv-x="733" d="M0 461v123h733v-123h-733z" />
+<glyph unicode="&#x2014;" horiz-adv-x="1245" d="M0 463v123h1245v-123h-1245z" />
+<glyph unicode="&#x2018;" horiz-adv-x="559" d="M174 999l70 111q45 72 262 246l92 -94q-100 -119 -141 -211q-18 -41 -25 -133l-25 -11q-15 -6 -49 -15t-51 -9q-39 2 -71.5 31.5t-47.5 56.5z" />
+<glyph unicode="&#x2019;" horiz-adv-x="610" d="M172 944q106 129 141 211q18 41 25 133l26 10q15 6 48.5 15.5t50.5 9.5q37 -2 70.5 -31.5t48.5 -58.5l14 -27l-70 -110q-45 -72 -262 -246z" />
+<glyph unicode="&#x201a;" horiz-adv-x="528" d="M16 -209q57 68 85 104.5t59 106.5q27 61 27 117q0 7 -1 14q82 45 121 45q29 0 64 -28.5t55 -57.5l18 -29q-98 -164 -307 -366z" />
+<glyph unicode="&#x201c;" horiz-adv-x="944" d="M178 999l70 111q45 72 262 246l92 -94q-100 -119 -141 -211q-18 -41 -25 -134l-25 -10q-15 -6 -49 -15t-51 -9q-39 2 -71.5 31.5t-46.5 56.5zM541 999l69 111q45 72 262 246l93 -94q-100 -119 -142 -211q-18 -41 -24 -133l-26 -11q-15 -6 -49 -15t-50 -9q-39 2 -72 31.5 t-47 56.5z" />
+<glyph unicode="&#x201d;" horiz-adv-x="942" d="M168 944q106 129 141 211q18 41 25 133l25 10q15 6 49 15.5t51 9.5q37 -2 70.5 -31.5t48.5 -58.5l14 -27l-70 -110q-45 -72 -262 -246zM530 944q106 129 142 211q18 41 24 133l26 10q15 6 49 15.5t50 9.5q37 -2 71 -31.5t48 -58.5l14 -27l-69 -110q-45 -72 -262 -246z " />
+<glyph unicode="&#x201e;" horiz-adv-x="933" d="M-55 -195q106 123 141 211q18 41 25 134l25 10q15 6 49 15t51 9q39 -2 71.5 -31.5t46.5 -58.5l15 -26l-70 -111q-45 -72 -262 -246zM307 -195q106 123 142 211q18 41 24 134l26 10q15 6 49 15t50 9q39 -2 71.5 -31.5t47.5 -58.5l14 -26l-69 -111q-45 -72 -263 -246z" />
+<glyph unicode="&#x2022;" horiz-adv-x="868" d="M80 645.5q0 145.5 103.5 248.5t249 103t249.5 -103t104 -248.5t-104 -249t-249.5 -103.5t-249 103.5t-103.5 249z" />
+<glyph unicode="&#x2026;" horiz-adv-x="1204" d="M70 104.5q0 61.5 50 105.5t113 44q61 0 101.5 -37t40.5 -96q0 -61 -50.5 -106.5t-113.5 -45.5q-61 0 -101 37t-40 98.5zM422 104.5q0 61.5 50 105.5t114 44q61 0 101 -37t40 -96q0 -61 -50 -106.5t-114 -45.5q-61 0 -101 37t-40 98.5zM770 104.5q0 61.5 50 105.5t114 44 q61 0 101 -37t40 -96q0 -61 -50 -106.5t-114 -45.5q-61 0 -101 37t-40 98.5z" />
+<glyph unicode="&#x2039;" horiz-adv-x="589" d="M37 500l430 393l127 -121l-313 -276l229 -285l-152 -113z" />
+<glyph unicode="&#x203a;" horiz-adv-x="665" d="M63 219l314 277l-230 284l152 113l322 -401l-431 -394z" />
+<glyph unicode="&#x2122;" horiz-adv-x="1583" d="M219 1282l21 135h495l-20 -135h-176l-103 -676h-143l104 676h-178zM717 608l129 813h170l112 -524l9 -92q10 55 32 96l263 520h174l-131 -813h-146l64 400l24 143q-45 -135 -61 -168l-187 -375h-118l-88 404l-15 139l-20 -137l-64 -406h-147z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1025" d="M0 1025h1025v-1025h-1025v1025z" />
+<glyph unicode="&#xfb01;" horiz-adv-x="1056" d="M16 -299q111 205 138 524l45 602l-121 21l24 156h115l4 92q8 176 129 267t307 91q51 0 117 -13.5t132.5 -39t100.5 -75.5q19 -28 18 -60q0 -25 -11 -54q-23 -57 -80 -79q-25 -12 -55 -13q-78 0 -119 66q-18 29 -18 67q0 10 1 21q-57 8 -110 8q-16 0 -32 -1 q-69 -3 -119 -51t-52 -136l-2 -90h137v-181h-151l-62 -714q-10 -129 -63 -239t-148 -249zM604 0l141 1004h216l-140 -1004h-217z" />
+<glyph unicode="&#xfb02;" horiz-adv-x="1056" d="M18 -299q111 205 138 524l45 602l-121 21l24 156h115l6 102q10 199 118 268.5t310 69.5q82 0 173.5 -19.5t140.5 -38.5l51 -18l-144 -954q-11 -82 -11 -155q0 -126 34 -224l-209 -58q-40 122 -40 269q0 85 14 180l118 823q-61 31 -135 31q-86 0 -147.5 -57.5 t-63.5 -126.5l-4 -92h137v-181h-151l-62 -714q-10 -129 -63 -239t-148 -249z" />
+<glyph unicode="&#xfb03;" horiz-adv-x="1579" d="M16 -299q111 205 138 524l45 602l-121 21l24 156h115q0 72 10.5 137t34 132.5t73.5 108.5t120 41q33 0 64.5 -5t45.5 -11l17 -6l-25 -168h-63q-14 0 -25.5 -9.5t-18 -27.5t-11.5 -35.5t-7 -44t-3 -43t-1 -40.5v-29h137v-181h-151l-62 -714q-10 -129 -63 -239t-148 -249z M567 -299q111 205 138 524l45 602l-121 21l24 156h115q0 72 10 137t34 132.5t74 108.5t120 41q33 0 64.5 -5t45.5 -11l17 -6l-25 -168h-64q-14 0 -25 -9.5t-17.5 -27.5t-11.5 -35.5t-7 -44t-3 -43t-1 -40.5v-29h137v-181h-151l-62 -714q-10 -129 -63.5 -239t-147.5 -249z M1167 0l152 1004h217l-154 -1004h-215zM1315 1251q0 78 74 121q33 20 73 21q55 0 95 -38t40 -93q0 -25 -10 -50q-23 -57 -78 -79q-27 -12 -57 -13q-78 0 -119 66q-18 32 -18 65z" />
+<glyph unicode="&#xfb04;" horiz-adv-x="1595" d="M16 -299q111 205 138 524l45 602l-121 21l24 156h115q0 72 10.5 137t34 132.5t73.5 108.5t120 41q33 0 64.5 -5t45.5 -11l17 -6l-25 -168h-63q-14 0 -25.5 -9.5t-18 -27.5t-11.5 -35.5t-7 -44t-3 -43t-1 -40.5v-29h137v-181h-151l-62 -714q-10 -129 -63 -239t-148 -249z M567 -299q111 205 138 524l45 602l-121 21l24 156h115q0 72 10 137t34 132.5t74 108.5t120 41q33 0 64.5 -5t45.5 -11l17 -6l-25 -168h-64q-14 0 -25 -9.5t-17.5 -27.5t-11.5 -35.5t-7 -44t-3 -43t-1 -40.5v-29h137v-181h-151l-62 -714q-10 -129 -63.5 -239t-147.5 -249z M1225 426l143 997h217l-145 -1009q-11 -86 -11 -155q0 -24 2 -46q5 -84 17 -131l12 -47l-207 -58q-41 124 -41 276q1 82 13 173z" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/public/stylesheets/fonts/delicious-bolditalic-webfont.ttf b/public/stylesheets/fonts/delicious-bolditalic-webfont.ttf
new file mode 100755
index 000000000..ef25c0adc
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-bolditalic-webfont.ttf
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-bolditalic-webfont.woff b/public/stylesheets/fonts/delicious-bolditalic-webfont.woff
new file mode 100755
index 000000000..068f460de
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-bolditalic-webfont.woff
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-heavy-webfont.eot b/public/stylesheets/fonts/delicious-heavy-webfont.eot
new file mode 100755
index 000000000..782a01422
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-heavy-webfont.eot
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-heavy-webfont.svg b/public/stylesheets/fonts/delicious-heavy-webfont.svg
new file mode 100755
index 000000000..64e0eb347
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-heavy-webfont.svg
@@ -0,0 +1,222 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : copyright 19941996 Jos Buivenga
+</metadata>
+<defs>
+<font id="DeliciousHeavyRegular" horiz-adv-x="921" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="614" />
+<glyph unicode=" " horiz-adv-x="614" />
+<glyph unicode="&#x09;" horiz-adv-x="614" />
+<glyph unicode="&#xa0;" horiz-adv-x="614" />
+<glyph unicode="!" horiz-adv-x="540" d="M115 123q0 68 56 114t130 46q72 0 125 -43t53 -108.5t-57 -113t-131 -47.5q-70 0 -123 43t-53 109zM139 1022q0 262 39 381l305 37q-55 -254 -55 -430v-600h-258l-13 192q-9 131 -13.5 226.5t-4.5 193.5z" />
+<glyph unicode="&#x22;" horiz-adv-x="708" d="M68 1305l38 168h160l47 -99v-401h-196zM385 971v403l51 99h154l45 -168l-55 -332z" />
+<glyph unicode="#" horiz-adv-x="1138" d="M68 356l36 262h115l29 216h-96l36 262h95l43 321h264l-43 -321h143l37 278h264l-37 -278h107l-25 -262h-118l-29 -216h88l-27 -262h-98l-47 -350h-258l45 350h-146l-43 -307h-258l39 307h-116zM481 618h146l28 216h-145z" />
+<glyph unicode="$" horiz-adv-x="888" d="M47 954q0 170 117 270q114 97 284 97h7l8 113l92 -9l-8 -114q82 -18 164 -68.5t129 -116.5l-170 -151q-53 61 -142 86l-18 -270l117 -74q113 -74 173 -157t60 -206q0 -168 -118.5 -271t-288.5 -114l-9 -121l-92 9l8 118q-158 27 -288 140l135 213q92 -70 172 -92l20 280 l-106 70q-117 78 -181.5 161.5t-64.5 206.5zM346 963q0 -68 76 -119l14 223q-37 -6 -63.5 -35.5t-26.5 -68.5zM471 233q88 25 88 123q0 47 -72 105z" />
+<glyph unicode="%" horiz-adv-x="1431" d="M49 1003.5q0 131.5 93.5 224.5t224.5 93q80 0 153 -39q4 -4 16 -11l17 -11q43 -20 145 -21q180 0 377 80l197 -49l-885 -1272h-272l757 1081q-68 -45 -190 -45q2 -10 2 -30q0 -131 -93 -224.5t-224 -93.5t-224.5 93t-93.5 224.5zM289 999.5q0 -32.5 22.5 -55t55 -22.5 t55 22.5t22.5 55t-22.5 55t-55 22.5t-55 -22.5t-22.5 -55zM735 287q0 131 93.5 224t224.5 93t224 -93t93 -224t-93 -224.5t-224 -93.5t-224.5 93.5t-93.5 224.5zM975 282.5q0 -32.5 22.5 -55t55 -22.5t55 22.5t22.5 55t-22.5 55t-55 22.5t-55 -22.5t-22.5 -55z" />
+<glyph unicode="&#x26;" horiz-adv-x="1290" d="M43 500q0 158 82 281.5t231 148.5q-53 18 -85.5 70.5t-32.5 111.5q0 143 122.5 224t272.5 81q166 0 290 -86t124 -246v-81h192v-244h-188v-463q0 -31 1 -42t12 -24.5t38 -13.5q41 0 74 19l69 -201q-137 -66 -246 -66q-121 0 -183 77t-62 200v514h-195q-59 0 -100 -21.5 t-61.5 -47t-31 -80t-11.5 -86t-1 -97.5q0 -217 60 -217q10 0 71.5 45t122.5 45q35 0 70 -12v-191q-47 0 -80 -20.5t-49.5 -44t-51 -44t-83.5 -20.5q-94 0 -169 51.5t-117 132t-63.5 170t-21.5 177.5zM530 1098q0 -94 131 -94h109v36q0 78 -23.5 115t-95.5 37 q-121 0 -121 -94z" />
+<glyph unicode="'" horiz-adv-x="425" d="M59 1305l41 168h215l43 -168l-71 -330h-158z" />
+<glyph unicode="(" horiz-adv-x="688" d="M35 676q0 293 159.5 526.5t432.5 396.5l37 -239q-172 -119 -268.5 -300t-96.5 -388q0 -444 354 -733l-45 -238q-145 106 -242.5 199.5t-177 209t-116.5 255t-37 311.5z" />
+<glyph unicode=")" horiz-adv-x="694" d="M29 1360q172 -119 268 -300t96 -388q0 -444 -354 -733l45 -238q197 143 313.5 268t188 302.5t71.5 404.5q0 293 -159.5 526.5t-431.5 396.5z" />
+<glyph unicode="*" horiz-adv-x="868" d="M18 1053l41 268l240 -141l-82 229h412l-82 -229l244 141l38 -268l-211 -82l220 -293h-316l-98 180l-92 -180h-299l194 293z" />
+<glyph unicode="+" horiz-adv-x="964" d="M45 391v242h305v299h262v-299h308v-242h-308v-301h-262v301h-305z" />
+<glyph unicode="," horiz-adv-x="528" d="M27 -229q115 152 114 247q0 18 -16 156q90 68 162 68q45 0 101 -46t93 -96q-154 -289 -309 -428z" />
+<glyph unicode="-" horiz-adv-x="618" d="M45 408v227h520v-227h-520z" />
+<glyph unicode="." horiz-adv-x="528" d="M80 131q0 72 56.5 122t129.5 50q70 0 123 -46t53 -116q0 -72 -56 -122t-130 -50q-70 0 -123 46t-53 116z" />
+<glyph unicode="/" horiz-adv-x="729" d="M8 -289l443 1825h276l-442 -1825h-277z" />
+<glyph unicode="0" d="M45 501.5q0 227.5 104.5 380t311.5 152.5t311.5 -152.5t104.5 -380t-104.5 -380t-311.5 -152.5t-311.5 152.5t-104.5 380zM317 502q0 -283 144 -283q68 0 105.5 73t37.5 210q0 281 -143.5 281t-143.5 -281z" />
+<glyph unicode="1" d="M158 737v219q111 0 276 48h219v-1004h-293v737h-202z" />
+<glyph unicode="2" d="M74 193q143 92 306 249.5t163 268.5q0 37 -29 54t-68 17q-72 0 -153.5 -32.5t-140.5 -79.5l-68 219q68 68 176.5 106.5t208.5 38.5q164 0 268.5 -78.5t104.5 -238.5q0 -127 -99.5 -248t-234.5 -215h360v-254h-751z" />
+<glyph unicode="3" d="M90 -133q72 2 148.5 19.5t151.5 50t123 94t48 139.5q0 39 -17.5 64.5t-51 36t-61.5 13.5t-66 3q-119 0 -238 -13v228l129 10q188 102 254 166q33 33 33 70q0 45 -49 45q-72 0 -308 -107l-71 203q92 55 208.5 99t198.5 44q131 0 222.5 -69.5t91.5 -194.5q0 -88 -59.5 -165 t-143.5 -116q96 -23 160.5 -102.5t64.5 -175.5q0 -147 -61.5 -258t-166 -172.5t-227 -91t-260.5 -29.5h-53v209z" />
+<glyph unicode="4" d="M43 201q188 414 489 803h271v-750h78v-254h-82v-283h-283v283h-461zM319 254h193v348q-20 -25 -98.5 -164t-94.5 -184z" />
+<glyph unicode="5" d="M82 -133q106 0 208.5 27.5t185.5 102.5t83 185q0 51 -41 79t-96 28q-145 0 -307 -45l90 760h596v-252h-355l-20 -240q47 10 88 10q145 0 243.5 -84t98.5 -227q0 -176 -106.5 -305t-260.5 -188q-148 -56 -314 -56h-11h-82v205z" />
+<glyph unicode="6" d="M59 537q0 147 52.5 274t148.5 223t205.5 167t249.5 134l108 -182q-295 -176 -405 -350q90 37 135 37q150 0 241 -111t91 -262q0 -215 -98.5 -356.5t-303.5 -141.5q-147 0 -246.5 89t-138.5 212.5t-39 266.5zM350 500q0 -90 31 -185.5t102 -95.5q121 0 121 242 q0 152 -133 151q-39 0 -113 -28q-8 -53 -8 -84z" />
+<glyph unicode="7" d="M78 745v259h762v-148q0 -276 -136.5 -631.5t-324.5 -593.5l-234 140q160 217 282 482t140 492h-489z" />
+<glyph unicode="8" d="M31 352q0 178 219 320q-184 129 -184 266q0 166 119.5 259t289.5 93q164 0 269.5 -89t105.5 -251q0 -133 -188 -260q113 -59 176 -132t63 -181q0 -188 -130 -298t-322 -110q-168 0 -293 108.5t-125 274.5zM326 373q0 -63 40 -112.5t101 -49.5q63 0 100 46t37 112 q0 82 -158 180q-120 -90 -120 -176zM354 932q0 -72 101 -135q111 72 110 153q0 109 -110 109q-101 0 -101 -127z" />
+<glyph unicode="9" d="M45 537q0 215 98.5 356t302.5 141q147 0 247 -89t138.5 -212t38.5 -266q0 -500 -673 -807l-95 193q299 158 410 348q-84 -37 -135 -37q-150 0 -241 110.5t-91 262.5zM330 543q0 -74 28.5 -113t100.5 -39q39 0 112 29q8 53 9 84q0 90 -31 184t-103 94q-41 0 -66.5 -23.5 t-35.5 -67.5t-12 -72.5t-2 -75.5z" />
+<glyph unicode=":" horiz-adv-x="528" d="M80 131q0 72 56.5 122t129.5 50q70 0 123 -46t53 -116q0 -72 -56 -122t-130 -50q-70 0 -123 46t-53 116zM80 721q0 74 56.5 124t129.5 50q70 0 123 -46t53 -116q0 -74 -56 -124t-130 -50q-70 0 -123 46t-53 116z" />
+<glyph unicode=";" horiz-adv-x="528" d="M20 -229q115 145 115 247q0 18 -16 156q90 68 162 68q47 0 102 -45t92 -97q-154 -289 -309 -428zM94 719q0 74 56.5 124t130.5 50q70 0 123 -46t53 -116q0 -74 -56.5 -124t-130.5 -50q-70 0 -123 46t-53 116z" />
+<glyph unicode="&#x3c;" horiz-adv-x="614" d="M33 512l352 432l207 -168l-199 -262l201 -270l-207 -164z" />
+<glyph unicode="=" horiz-adv-x="983" d="M35 248v219h893v-219h-893zM35 545v219h893v-219h-893z" />
+<glyph unicode="&#x3e;" horiz-adv-x="614" d="M31 244l207 -164l354 432l-352 432l-207 -168l198 -262z" />
+<glyph unicode="?" horiz-adv-x="733" d="M80 122.5q0 65.5 56.5 113t129.5 47.5q70 0 123 -43t53 -108.5t-57 -113t-129 -47.5q-70 0 -123 43t-53 108.5zM137 410v110q0 121 17.5 193.5t83.5 140.5l106 111q86 90 86 151q0 29 -15.5 43.5t-31.5 16.5t-49 2q-90 0 -187 -27v227q188 43 277 43q137 0 216 -82 t79 -219q0 -119 -113 -241l-127 -138q-92 -98 -92 -221v-110h-250z" />
+<glyph unicode="@" horiz-adv-x="1622" d="M51 721q0 311 236.5 535.5t550.5 224.5q195 0 357.5 -71t266 -215t103.5 -339q0 -180 -152.5 -348t-322.5 -168q-82 0 -127 35t-74 104q-147 -121 -242 -121q-109 0 -159 79t-50 196q0 182 85 316t251 134q94 0 174 -79l8 51h222l-66 -424q-2 -10 -5 -27.5t-5 -32 t-2 -26.5q0 -45 43 -45q68 0 114 118.5t46 206.5q0 207 -132.5 310.5t-343.5 103.5q-205 0 -352 -154.5t-147 -361.5q0 -240 169 -379t414 -139q154 0 259.5 44t236.5 150l113 -141q-160 -147 -314.5 -218t-355.5 -71q-324 0 -561.5 216.5t-237.5 535.5zM672 657 q0 -78 39 -77q29 0 54.5 6t34.5 10t43 21.5t40 21.5l28 186q-86 43 -114 43q-125 0 -125 -211z" />
+<glyph unicode="A" horiz-adv-x="1044" d="M12 0l361 1290h301l362 -1290h-317l-66 266h-258l-65 -266h-318zM428 506h193l-97 393z" />
+<glyph unicode="B" horiz-adv-x="1028" d="M109 31v1259h413q182 0 296 -84t114 -260q0 -74 -49 -151.5t-119 -96.5q102 -16 169.5 -104t67.5 -193q0 -207 -149.5 -319.5t-362.5 -112.5q-110 1 -380 62zM414 227q66 -14 71 -14q96 0 153.5 47t57.5 141q0 39 -13 68t-32.5 43t-51.5 21.5t-56.5 9.5t-61.5 2h-67v-318 zM414 776h67q150 0 150 142q0 117 -109 116h-108v-258z" />
+<glyph unicode="C" horiz-adv-x="1017" d="M66 645q0 168 59 318.5t187 254t300 103.5q90 0 190.5 -24.5t162.5 -73.5l-113 -205q-94 47 -240 47q-82 0 -140 -81t-79.5 -174t-21.5 -173q0 -70 9 -133.5t33.5 -130t77 -106.5t125.5 -40q129 0 242 74l133 -203q-72 -59 -178 -94t-205 -35q-139 0 -246.5 57.5 t-170 155t-94 214t-31.5 249.5z" />
+<glyph unicode="D" horiz-adv-x="1120" d="M109 0v1290h428q272 0 397 -177t125 -462q0 -170 -57.5 -314t-183.5 -240.5t-300 -96.5h-409zM412 258h106q70 0 118 37t71.5 98.5t34 120.5t10.5 125q0 76 -6.5 131t-26 121.5t-68.5 103.5t-123 37h-116v-774z" />
+<glyph unicode="E" horiz-adv-x="929" d="M106 0v1290h748v-262h-442v-225h340v-266h-340v-271h465v-266h-771z" />
+<glyph unicode="F" horiz-adv-x="843" d="M104 0v1290h695v-262h-389v-225h307v-266h-307v-537h-306z" />
+<glyph unicode="G" horiz-adv-x="1073" d="M59 645q0 170 59.5 320.5t188.5 252t303 101.5q102 0 216 -33t188 -92l-117 -201q-137 72 -287 72q-82 0 -141 -81t-81.5 -174t-22.5 -173q0 -70 10 -134.5t35.5 -130t78 -105.5t125.5 -40q72 0 97 9v395h293v-588q-162 -74 -394 -74q-139 0 -247.5 56.5t-173 152.5 t-97.5 215t-33 252z" />
+<glyph unicode="H" horiz-adv-x="1122" d="M111 0v1290h305v-487h291v487h305v-1290h-305v539h-291v-539h-305z" />
+<glyph unicode="I" horiz-adv-x="487" d="M92 0v1290h303v-1290h-303z" />
+<glyph unicode="J" horiz-adv-x="501" d="M-29 -125q49 16 90 52t41 79v1284h301v-1294q0 -74 -29.5 -131.5t-87 -95t-111.5 -60t-130 -45.5z" />
+<glyph unicode="K" horiz-adv-x="993" d="M111 0v1290h305v-438l235 438h342l-389 -649l379 -504v-137h-264l-303 440v-440h-305z" />
+<glyph unicode="L" horiz-adv-x="782" d="M104 0v1290h297v-1028h365v-262h-662z" />
+<glyph unicode="M" horiz-adv-x="1519" d="M111 0v1290h331l287 -784q20 -55 31 -135q10 80 31 135l284 784h334v-1290h-305v565l16 156l-243 -721h-236l-244 721l19 -156v-565h-305z" />
+<glyph unicode="N" horiz-adv-x="1134" d="M111 0v1290h329l224 -508q37 -80 55 -176v684h305v-1290h-281l-344 764q16 -82 17 -166v-598h-305z" />
+<glyph unicode="O" horiz-adv-x="1122" d="M61 645q0 115 27 227.5t82 216t156.5 168t234.5 64.5t234.5 -64.5t157 -168t82 -216t26.5 -227.5t-26.5 -227.5t-82 -216t-157 -168t-234.5 -64.5t-234.5 64.5t-156.5 168t-82 216t-27 227.5zM367 645.5q0 -65.5 2 -113t13 -109t31.5 -99t57.5 -65.5t90 -28t90 28 t57.5 67t32 100t13.5 108.5t2 110.5q0 66 -2 113t-13.5 107.5t-32 99.5t-57.5 66.5t-90 27.5t-90 -27.5t-57.5 -66.5t-31.5 -99.5t-13 -107.5t-2 -112.5z" />
+<glyph unicode="P" horiz-adv-x="1001" d="M106 0v1290h340q238 0 384.5 -98t146.5 -326q0 -186 -133 -319t-320 -133q-66 0 -112 28v-442h-306zM412 688q61 -25 82 -24q178 0 178 204q0 96 -56.5 131t-158.5 35h-45v-346z" />
+<glyph unicode="Q" horiz-adv-x="1122" d="M61 645q0 121 29 235.5t85 216t156.5 163t229.5 61.5t229.5 -61.5t157 -163t85 -216t28.5 -235.5q0 -199 -76 -379t-231 -256q63 -72 139 -71q72 0 168 30l-45 -288q-20 -4 -60 -5q-156 0 -261 75t-206 222q-113 16 -198.5 85t-133.5 166.5t-72 203.5t-24 217zM367 645 q0 -49 1 -79.5t6 -87t17 -93.5t32.5 -76t55.5 -58.5t82 -19.5q55 0 94 32t58.5 73t30 107.5t11.5 104.5t1 97q0 49 -1 80t-6.5 87t-17.5 93t-32.5 76t-55.5 58.5t-82 19.5t-82 -19.5t-55.5 -58.5t-32.5 -76t-17 -93t-6 -87t-1 -80z" />
+<glyph unicode="R" horiz-adv-x="1034" d="M111 0v1290h338q152 0 265 -36.5t190 -135t77 -252.5q0 -125 -67.5 -230.5t-182.5 -148.5l270 -350v-137h-256l-329 451v-451h-305zM416 682q47 -14 76 -14q84 0 132 57t48 143q0 88 -43 127t-133 39h-80v-352z" />
+<glyph unicode="S" horiz-adv-x="888" d="M47 954q0 168 116 267.5t288 99.5q106 0 214.5 -54.5t174.5 -140.5l-170 -151q-37 41 -95.5 68.5t-113.5 27.5q-45 0 -80 -31.5t-35 -76.5q0 -53 53.5 -98.5t128 -85.5t150.5 -90t129 -136t53 -199q0 -176 -128 -280.5t-308 -104.5q-84 0 -182.5 42t-169.5 104l135 213 q137 -100 219 -101q59 0 96 35t37 94q0 37 -38 74t-95 68.5t-122.5 77t-123 93.5t-95.5 122.5t-38 162.5z" />
+<glyph unicode="T" horiz-adv-x="829" d="M23 1022v268h786v-268h-244v-1022h-303l2 1022h-241z" />
+<glyph unicode="U" horiz-adv-x="1142" d="M109 514v776h305v-776q0 -147 37.5 -215t119.5 -68t120 68t38 215v776h305v-776q0 -104 -23.5 -195.5t-73.5 -172t-144.5 -129t-221.5 -48.5t-221 48.5t-144 129t-73.5 172t-23.5 195.5z" />
+<glyph unicode="V" horiz-adv-x="1044" d="M10 1290h328l158 -696q14 -59 30 -182q18 129 31 182l158 696h325l-364 -1290h-301z" />
+<glyph unicode="W" horiz-adv-x="1449" d="M12 1290h312l82 -585l22 -209q10 139 27 209l133 585h274l133 -585l31 -205q8 133 18 205l82 585h312l-250 -1290h-305l-138 690l-20 137q-10 -90 -20 -137l-138 -690h-305z" />
+<glyph unicode="X" horiz-adv-x="1007" d="M10 0l299 664l-289 626h342l130 -364l131 364h331l-274 -626l317 -664h-354l-149 399l-142 -399h-342z" />
+<glyph unicode="Y" horiz-adv-x="964" d="M4 1290h326l151 -502l154 502h326l-326 -807v-483h-305l2 483z" />
+<glyph unicode="Z" horiz-adv-x="937" d="M31 0v211q193 375 450 813h-409v266h794v-215q-262 -428 -467 -807h506v-268h-874z" />
+<glyph unicode="[" horiz-adv-x="507" d="M57 -319v1816h394v-250h-123v-1317h123v-249h-394z" />
+<glyph unicode="\" horiz-adv-x="686" d="M10 1536h277l391 -1825h-277z" />
+<glyph unicode="]" horiz-adv-x="509" d="M57 -70v-249h394v1816h-394v-250h123v-1317h-123z" />
+<glyph unicode="^" horiz-adv-x="1277" d="M84 643l453 819h198l453 -819h-309l-242 469l-246 -469h-307z" />
+<glyph unicode="_" d="M0 -92h922v-246h-922v246z" />
+<glyph unicode="`" horiz-adv-x="692" d="M39 1393l205 202q164 -193 331 -319l-114 -174q-221 121 -422 291z" />
+<glyph unicode="a" horiz-adv-x="954" d="M37 274q0 82 74 218l450 180v43q0 39 -34.5 60.5t-75.5 21.5q-127 0 -248 -95l-105 168q76 72 179.5 118t201.5 46q158 0 258.5 -75.5t100.5 -227.5v-534q0 -53 24 -54q12 0 29 9l45 -140q-86 -43 -158 -43q-78 0 -123 45t-55 117q-27 -74 -98.5 -118t-151.5 -44 q-313 0 -313 305zM315 279q0 -31 23.5 -51.5t56.5 -20.5q84 0 128 63.5t44 151.5v55l-233 -96q-19 -55 -19 -102z" />
+<glyph unicode="b" horiz-adv-x="1030" d="M117 115v1308h297v-493q100 104 190 104q182 0 283.5 -142t101.5 -331q0 -117 -26.5 -220t-81 -188t-148.5 -134.5t-217 -49.5q-192 1 -399 146zM414 250q53 -37 110 -37q164 0 164 328q0 248 -131 247q-74 0 -143 -104v-434z" />
+<glyph unicode="c" horiz-adv-x="843" d="M45 494q0 217 122 378.5t333 161.5q80 0 166 -34.5t145 -90.5l-133 -174q-70 55 -176 56q-55 0 -93 -53.5t-52.5 -114t-14.5 -113.5q0 -55 14.5 -119.5t54.5 -122t97 -57.5q109 0 217 88l106 -190q-68 -59 -160.5 -99.5t-176.5 -40.5q-205 0 -327 157t-122 368z" />
+<glyph unicode="d" horiz-adv-x="1048" d="M49 471q0 117 22.5 213t72 177t137.5 127t211 46q63 0 147 -30v419h297v-1185q0 -27 2 -44.5t15.5 -33t37.5 -15.5l-61 -176q-12 0 -32.5 -1t-33.5 -1q-61 0 -109 36t-67 106q-25 -59 -92.5 -100.5t-134.5 -41.5q-193 0 -302.5 152.5t-109.5 351.5zM352 489 q0 -274 133 -274q57 0 94 50t48.5 105.5t11.5 112.5v279q-63 29 -139 29q-37 0 -63.5 -13.5t-42 -42t-25 -52.5t-12.5 -69t-4 -63.5t-1 -61.5z" />
+<glyph unicode="e" horiz-adv-x="964" d="M47 524q0 211 135 360.5t344 149.5q162 0 279 -116.5t121 -278.5q4 -111 4 -164h-584q-2 -10 -2 -33q0 -86 38 -157.5t118 -71.5q162 0 282 88l86 -184q-76 -63 -182 -106.5t-197 -43.5q-150 0 -253 84t-146 206t-43 267zM367 664h284q-2 68 -39 121t-100 53 q-57 0 -98 -56.5t-47 -117.5z" />
+<glyph unicode="f" horiz-adv-x="585" d="M16 791v213h101v94q0 96 43 167.5t104.5 104.5t123 52.5t104.5 21.5l43 2l45 -211q-6 -2 -17.5 -4t-40 -13.5t-50 -26.5t-40 -43t-18.5 -63v-81h153v-240h-153v-764h-297v774z" />
+<glyph unicode="g" horiz-adv-x="931" d="M37 -121q0 61 56.5 118.5t119.5 80.5q-45 12 -80 51t-35 86q0 82 138 160q-74 35 -123.5 119t-49.5 159q0 172 112 276.5t292 104.5q98 0 176 -30h252v-216l-96 25q41 -72 41 -164q0 -127 -82 -214t-207 -111q-4 0 -31.5 -4.5t-44 -8.5t-39 -12t-34 -21.5t-11.5 -29.5 q0 -8 7.5 -15.5t19.5 -10.5l25 -6q13 -3 33 -3h32h30h21h66q125 0 204.5 -54.5t79.5 -172.5q0 -182 -148.5 -287t-334.5 -105q-68 0 -132.5 14.5t-124.5 45.5t-96 89t-36 136zM322 -92q0 -88 112 -88q82 0 140.5 43t58.5 108q0 8 -4 14.5t-12.5 10.5t-15.5 6t-20.5 3 t-20.5 1h-21h-19h-108q-90 -55 -90 -98zM356 674q0 -147 103 -148q94 0 94 138q0 145 -98.5 145t-98.5 -135z" />
+<glyph unicode="h" horiz-adv-x="1062" d="M113 0v1423h297v-493q147 104 233 104q94 0 158.5 -26.5t96.5 -73.5t44 -96.5t12 -112.5v-725h-297v725q0 63 -51 63q-33 0 -64.5 -9t-47 -17t-47.5 -30l-37 -25v-707h-297z" />
+<glyph unicode="i" horiz-adv-x="487" d="M61 1268q0 72 57.5 123t129 51t125 -47t53.5 -117q0 -74 -56.5 -123t-129.5 -49q-72 0 -125.5 46t-53.5 116zM96 0v1004h293v-1004h-293z" />
+<glyph unicode="j" horiz-adv-x="487" d="M-35 -193q82 37 107.5 67t25.5 79v1051h293v-1065q0 -80 -31.5 -139.5t-93 -98.5t-112 -59.5t-125.5 -42.5zM61 1268q0 72 57.5 123t129 51t125 -47t53.5 -117q0 -74 -56.5 -123t-129.5 -49q-72 0 -125.5 46t-53.5 116z" />
+<glyph unicode="k" horiz-adv-x="964" d="M115 0v1423h297v-673l198 254h334l-352 -429l362 -446v-129h-262l-280 379v-379h-297z" />
+<glyph unicode="l" horiz-adv-x="483" d="M84 436v987h293v-987q0 -117 16.5 -225.5t32.5 -159.5l14 -51h-286q-70 157 -70 436z" />
+<glyph unicode="m" horiz-adv-x="1579" d="M115 0v1006h297v-76q135 104 235 104q160 0 230 -96l6 -8q156 104 256 104q332 0 331 -303v-731h-296v711q0 80 -52 80q-45 0 -90 -16.5t-67 -33.5l-23 -18v-723h-297v705q0 49 -11 66t-38 17q-35 0 -67.5 -10t-46 -18t-41 -29.5t-29.5 -23.5v-707h-297z" />
+<glyph unicode="n" horiz-adv-x="1062" d="M113 0v1004h297v-74q147 104 233 104q94 0 158.5 -26.5t96.5 -73.5t44 -96.5t12 -112.5v-725h-297v725q0 63 -51 63q-33 0 -64.5 -9t-47 -17t-47.5 -30l-37 -25v-707h-297z" />
+<glyph unicode="o" horiz-adv-x="999" d="M49 502q0 127 45 243.5t151.5 202.5t254 86t254 -86t151.5 -202.5t45 -243.5t-45 -244t-151.5 -203t-254 -86t-254 86t-151.5 203t-45 244zM346 502q0 -133 41 -210t112.5 -77t112.5 77t41 210t-41 208.5t-112.5 75.5t-112.5 -75.5t-41 -208.5z" />
+<glyph unicode="p" horiz-adv-x="1056" d="M113 -358v1362h299l-2 -74q12 12 31.5 29.5t75.5 46t106 28.5q125 0 216 -82t129 -191.5t38 -223.5q0 -98 -18.5 -187.5t-61.5 -180.5t-132 -145.5t-214 -54.5q-94 0 -168 72v-399h-299zM412 485q0 -276 159 -276q33 0 56.5 15.5t38 47t22.5 58t11 73t3 62.5v55 q0 268 -131 268q-29 0 -56.5 -10t-36.5 -15t-36.5 -30.5t-29.5 -27.5v-220z" />
+<glyph unicode="q" horiz-adv-x="1054" d="M47 459q0 94 25.5 190t77 184.5t143.5 144.5t209 56q78 0 187.5 -21.5t178.5 -41.5l72 -23v-1306h-299v405q-84 -78 -168 -78q-150 0 -250 77t-138 182.5t-38 230.5zM348 481q0 -272 133 -272q61 0 99 52t49.5 108.5t11.5 111.5v293q-74 18 -116 18q-12 0 -21 -1 q-47 -8 -80 -42t-48.5 -83.5t-21.5 -93.5t-6 -91z" />
+<glyph unicode="r" horiz-adv-x="653" d="M109 0v1004h299v-74q88 104 139 104q27 0 53.5 -7t38.5 -15l14 -8l-39 -291q-72 31 -129 30q-23 0 -43 -7t-28 -15l-8 -8v-713h-297z" />
+<glyph unicode="s" horiz-adv-x="858" d="M49 733q4 123 107.5 212t289.5 89q106 0 197.5 -43t130.5 -86l37 -43l-156 -143q-111 84 -213 84q-98 0 -98 -58q0 -12 5 -22t18.5 -19.5t20.5 -13.5t30 -14l96 -43q74 -33 103.5 -47.5t84 -50t77 -68.5t39.5 -84q14 -41 14 -90q0 -11 -1 -23q-14 -178 -186 -256 q-94 -45 -223 -45q-74 0 -160 36t-135 71l-51 35l108 198q162 -104 244 -104q113 0 113 74q0 43 -80 79q-29 14 -110 49t-118.5 56.5t-90 61.5t-73.5 91q-20 47 -20 106v11z" />
+<glyph unicode="t" horiz-adv-x="626" d="M35 791v213h96v180h285v-180h168v-236h-164v-475q0 -61 33 -72q16 -6 32 -6q32 0 68 21l63 -203q-88 -37 -120 -47q-49 -16 -127 -17q-127 0 -186.5 80t-59.5 195v524z" />
+<glyph unicode="u" horiz-adv-x="1062" d="M111 274v730h297v-730q0 -35 15 -48t50 -13q66 0 182 80v711h297v-795q0 -51 52 -84l-95 -156q-121 14 -194 119q-162 -119 -287 -119q-317 0 -317 305z" />
+<glyph unicode="v" horiz-adv-x="925" d="M16 1004h322l135 -586q96 285 127 586h315q-141 -582 -348 -1004h-213z" />
+<glyph unicode="w" horiz-adv-x="1372" d="M16 1004h314q92 -457 92 -586l135 586h270l138 -586q84 344 84 586h307q-66 -555 -277 -1004h-262q-100 324 -127 504q-20 -143 -125 -504h-276z" />
+<glyph unicode="x" horiz-adv-x="868" d="M4 0l275 518l-269 486h330l92 -216l96 216h326l-270 -476l280 -528h-334l-98 262l-104 -262h-324z" />
+<glyph unicode="y" horiz-adv-x="929" d="M18 1004h316q137 -459 149 -658q78 283 125 658h305q-29 -154 -70.5 -323t-106 -380t-152.5 -376t-181 -226q-37 -25 -96 -46.5t-102 -29.5l-41 -10l-68 217q72 25 113 50.5t57.5 46t46.5 73.5l13 20z" />
+<glyph unicode="z" horiz-adv-x="872" d="M51 0v197q154 283 357 553h-324v254h709v-209q-217 -270 -371 -541h405v-254h-776z" />
+<glyph unicode="{" horiz-adv-x="681" d="M31 481v215q74 0 116.5 40t42.5 120v340q0 313 265 313h141l51 -227h-119q-43 0 -56 -20.5t-13 -75.5v-357q0 -131 -127 -243q127 -113 127 -240v-356q0 -55 13 -74.5t56 -19.5h121l-51 -228h-70h-69q-268 0 -269 312v339q0 80 -42.5 121t-116.5 41z" />
+<glyph unicode="|" horiz-adv-x="454" d="M94 -29v1569h266v-1569h-266z" />
+<glyph unicode="}" horiz-adv-x="681" d="M31 -104l51 -228h70h69q270 0 271 312v339q0 80 41.5 121t115.5 41v215q-74 0 -115.5 40t-41.5 120v340q0 313 -267 313h-141l-51 -227h119q43 0 57 -20.5t14 -75.5v-357q0 -133 125 -243q-125 -111 -125 -240v-356q0 -53 -14 -73.5t-57 -20.5h-121z" />
+<glyph unicode="~" horiz-adv-x="1363" d="M274 463v209q10 16 27.5 39.5t71 62.5t104.5 39q92 0 229.5 -66.5t190.5 -66.5q41 0 90 28.5t78 57.5l27 27v-224q-8 -16 -24.5 -38.5t-67 -61.5t-103.5 -39q-102 0 -239.5 66.5t-182.5 66.5q-74 0 -107 -16t-94 -84z" />
+<glyph unicode="&#xa1;" horiz-adv-x="540" d="M70 -465q53 262 53 430v600h260l11 -194l12.5 -222.5t5.5 -195.5q0 -262 -39 -381zM74 844q0 68 56 114t130 46q72 0 125 -43t53 -107q0 -68 -57 -115t-131 -47q-70 0 -123 43t-53 109z" />
+<glyph unicode="&#xa2;" horiz-adv-x="843" d="M45 494q0 221 109 364q66 82 153.5 127t175.5 49v135h92v-141q74 -10 132.5 -42t80.5 -58l23 -27l-145 -158q-31 25 -91 39v-561q82 23 150 78l106 -190q-113 -98 -256 -132v-129h-92v121q-176 2 -303 142q-135 150 -135 383zM342 510q0 -115 41 -197t100 -98v573 q-53 -14 -97 -82.5t-44 -195.5z" />
+<glyph unicode="&#xa3;" horiz-adv-x="905" d="M25 727l96 195v198q0 109 67.5 180.5t149.5 95t170 23.5q166 0 291 -100l-82 -211q-119 66 -197 66q-53 0 -77.5 -17.5t-24.5 -62.5v-172h260v-252h-260v-148q0 -96 -29 -268h55q70 -16 99 -31q38 -12 72 -11q114 0 202 122l60 -211q-2 -4 -9 -10l-25 -27 q-19 -20 -40 -35.5t-54.5 -36t-67.5 -29t-80 -15.5q-15 -2 -31 -2q-30 0 -60 9l-102 23h-375q88 422 88 532v154z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1110" d="M-12 436l98 217h68v37l2 41h-156l104 219h80q43 205 200 334t394 129q125 0 213 -40t180 -124l-112 -235q-90 90 -148.5 118.5t-142.5 28.5q-217 0 -285 -211h547l-102 -219h-479q-4 -16 -5 -78h447l-105 -219h-305q55 -207 267 -207q53 0 83.5 8.5t91 55.5t144.5 145 v-321q-90 -80 -152.5 -110t-177.5 -30q-211 0 -362.5 123t-192.5 338h-194z" />
+<glyph unicode="&#xa5;" horiz-adv-x="974" d="M4 1290h330l153 -502l152 502h322l-179 -440h158v-232h-252l-47 -116h299v-232h-305v-270h-303v270h-291v232h283l-48 116h-235v232h141z" />
+<glyph unicode="&#xa7;" horiz-adv-x="860" d="M20 -160l111 207q137 -76 274 -76q51 0 82 22.5t35 57.5q2 16 -17.5 35.5t-56 40t-68.5 35.5l-76 33q-44 18 -56 24q-104 51 -163.5 113.5t-59.5 159.5q0 92 55 172.5t143 105.5q-68 16 -129 79.5t-61 137.5q0 154 113.5 244t283.5 90t350 -109l-110 -196q-8 8 -26.5 18 t-81.5 26q-49 12 -105 12q-15 0 -31 -1q-98 -6 -98 -78q0 -8 10 -19t29 -22l39 -21q20 -11 42.5 -21.5t39.5 -17.5l32 -13l17 -7q55 -27 97 -52t87 -63t69.5 -85t24.5 -103q0 -90 -50 -173t-128 -111q74 -25 122 -83.5t48 -125.5q0 -164 -112.5 -261.5t-295.5 -97.5 q-100 0 -182 26.5t-197 96.5zM279 506q2 -31 35.5 -55.5t80.5 -24.5q100 0 135 35q33 33 33 87q0 35 -32.5 60t-88.5 25q-92 0 -130 -36q-34 -32 -34 -81q1 -5 1 -10z" />
+<glyph unicode="&#xa8;" horiz-adv-x="786" d="M43 1276q0 72 50 122t118 50q66 0 113 -47t47 -115q0 -33 -13 -63q-18 -49 -61 -79t-94 -30q-66 0 -113 47t-47 115zM410 1276q0 72 50 122t118 50q63 0 111 -47t48 -115q0 -33 -12 -63q-20 -49 -63.5 -79t-92.5 -30q-66 0 -112.5 47t-46.5 115z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1800" d="M242 500q0 178 86 329q86 150 243 240q164 88 328 88q170 0 328 -88q162 -94 243 -240q86 -152 86 -329q0 -184 -90 -334q-96 -160 -243 -240q-150 -86 -324 -86t-324 86q-147 80 -241 240q-92 160 -92 334zM406 500q0 -135 65 -254q70 -117 182 -180q111 -61 246 -64h6 q127 0 242 66.5t180.5 177t65.5 254.5q0 131 -66 245q-41 76 -110 132q-59 55 -148 88q-92 31 -170 30q-131 0 -248 -67q-115 -68 -180 -182.5t-65 -245.5zM559 514q0 158 96.5 266.5t259.5 108.5q66 0 131.5 -29t98.5 -57l33 -31l-121 -137l-17 12q-8 6 -17 10.5l-15.5 7.5 t-15.5 4t-14 3t-16 2h-15h-15h-14q-33 0 -71 -39t-38 -123q0 -80 31.5 -130t87.5 -50q82 0 162 65l96 -155q-14 -14 -40 -35t-95.5 -54.5t-128.5 -33.5q-158 0 -260.5 102.5t-102.5 292.5z" />
+<glyph unicode="&#xaa;" horiz-adv-x="774" d="M39 948q0 63 55 166l342 137v33q0 29 -26.5 45.5t-57.5 16.5q-94 0 -186 -72l-80 127q55 55 134 90t155 35q119 0 195.5 -57.5t76.5 -174.5v-405q0 -39 19 -39q14 0 22 6l35 -106q-70 -33 -121 -33q-57 0 -93 33.5t-42 89.5q-20 -55 -74.5 -89t-116.5 -34 q-237 0 -237 231zM250 952q0 -25 18.5 -40t42.5 -15q63 0 97 49t34 115v41l-178 -72q-14 -43 -14 -78z" />
+<glyph unicode="&#xab;" horiz-adv-x="1024" d="M72 512l280 432l207 -168l-147 -266l149 -266l-207 -164zM518 510l240 434l207 -168l-127 -262l129 -270l-207 -164z" />
+<glyph unicode="&#xac;" horiz-adv-x="1095" d="M51 668v233h922v-545l-264 -53v365h-658z" />
+<glyph unicode="&#xad;" horiz-adv-x="618" d="M45 408v227h520v-227h-520z" />
+<glyph unicode="&#xae;" horiz-adv-x="1800" d="M242 500q0 178 86 329q86 150 243 240q164 88 328 88q170 0 328 -88q162 -94 243 -240q86 -152 86 -329q0 -184 -90 -334q-96 -160 -243 -240q-150 -86 -324 -86t-324 86q-147 80 -241 240q-92 160 -92 334zM406 500q0 -135 65 -254q70 -117 182 -180q111 -61 246 -64h6 q127 0 242 66.5t180.5 177t65.5 254.5q0 131 -66 245q-41 76 -110 132q-59 55 -148 88q-92 31 -170 30q-131 0 -248 -67q-115 -68 -180 -182.5t-65 -245.5zM651 129v760h219q139 0 230.5 -64.5t91.5 -197.5q0 -70 -40 -142.5t-101 -89.5l151 -123v-143h-176q-14 14 -143 172 l10 -172h-242zM893 535q6 -2 18 -3q61 0 62 80q0 66 -64 66l-16 -2v-141z" />
+<glyph unicode="&#xaf;" horiz-adv-x="686" d="M2 1143v182h680v-182h-680z" />
+<glyph unicode="&#xb0;" horiz-adv-x="720" d="M49 1030q0 129 91 220t220 91t220.5 -91t91.5 -218q0 -129 -91.5 -220t-220.5 -91t-220 91t-91 218zM254 1034q0 -43 30.5 -73.5t73.5 -30.5t74 30.5t31 73.5t-31 74t-74 31t-73.5 -31t-30.5 -74z" />
+<glyph unicode="&#xb1;" horiz-adv-x="915" d="M78 487v234h246v209h262v-209h243v-234h-243v-200h-262v200h-246zM86 0v231h737v-231h-737z" />
+<glyph unicode="&#xb2;" d="M74 193q143 92 306 249.5t163 268.5q0 37 -29 54t-68 17q-72 0 -153.5 -32.5t-140.5 -79.5l-68 219q68 68 176.5 106.5t208.5 38.5q164 0 268.5 -78.5t104.5 -238.5q0 -127 -99.5 -248t-234.5 -215h360v-254h-751z" />
+<glyph unicode="&#xb3;" d="M90 -133q72 2 148.5 19.5t151.5 50t123 94t48 139.5q0 39 -17.5 64.5t-51 36t-61.5 13.5t-66 3q-119 0 -238 -13v228l129 10q188 102 254 166q33 33 33 70q0 45 -49 45q-72 0 -308 -107l-71 203q92 55 208.5 99t198.5 44q131 0 222.5 -69.5t91.5 -194.5q0 -88 -59.5 -165 t-143.5 -116q96 -23 160.5 -102.5t64.5 -175.5q0 -147 -61.5 -258t-166 -172.5t-227 -91t-260.5 -29.5h-53v209z" />
+<glyph unicode="&#xb4;" horiz-adv-x="692" d="M88 1284l115 -174q221 121 422 291l-205 203q-164 -193 -332 -320z" />
+<glyph unicode="&#xb5;" horiz-adv-x="1062" d="M27 -358q66 113 102 219q33 90 33 213q-51 76 -51 200v730h297v-730q0 -35 15 -48t50 -13q66 0 182 80v711h297v-795q0 -51 52 -84l-95 -156q-121 14 -194 119q-162 -119 -287 -119l-61 11q35 -45 34 -115q0 -39 -10 -94.5t-18 -92.5l-11 -36h-335z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1112" d="M39 885q0 180 98.5 307t304.5 127q49 0 144.5 -16.5t126.5 -18.5l-8 86h249l4 -86l84 19v-222l-81 -22q-6 -330 -80 -682t-215 -625l-269 103q147 258 229.5 573t88.5 625l-16 5q-9 3 -36.5 11t-53 11t-57.5 2t-54 -9q-55 -23 -74 -109q-6 -30 -6 -59q0 -56 23 -107 q36 -79 116 -79h68q-10 -20 -28.5 -52t-81 -90.5t-132.5 -70.5q-26 -5 -51 -5q-41 0 -78 13q-59 20 -98 62.5t-67 98.5t-39 109.5t-11 100.5z" />
+<glyph unicode="&#xb7;" horiz-adv-x="528" d="M80 520q0 72 56.5 122t129.5 50q70 0 123 -46t53 -116q0 -72 -57 -123t-129 -51q-70 0 -123 47t-53 117z" />
+<glyph unicode="&#xb8;" horiz-adv-x="823" d="M305 -274q193 66 201 110q6 39 -34 42q-6 0 -13 1q-34 0 -70 -14l-41 -17v152h301q111 -70 111 -162q0 -143 -287 -244z" />
+<glyph unicode="&#xb9;" d="M158 737v219q111 0 276 48h219v-1004h-293v737h-202z" />
+<glyph unicode="&#xba;" horiz-adv-x="802" d="M63 1120q0 154 89.5 279t253 125t254 -125t90.5 -279q0 -156 -90.5 -280.5t-254 -124.5t-253 124.5t-89.5 280.5zM289 1120q0 -102 31.5 -160.5t85.5 -58.5q55 0 85.5 58.5t30.5 161t-30.5 158.5t-85.5 56q-53 0 -85 -57.5t-32 -157.5z" />
+<glyph unicode="&#xbb;" horiz-adv-x="1024" d="M63 244l207 -164l242 430l-240 434l-206 -168l127 -262zM469 244l207 -164l282 432l-280 432l-207 -168l147 -266z" />
+<glyph unicode="&#xbc;" horiz-adv-x="2537" d="M158 737v219q111 0 276 48h219v-1004h-293v737h-202zM698 -256l869 1769h288l-868 -1769h-289zM1659 201q188 414 489 803h271v-750h78v-254h-82v-283h-283v283h-461zM1935 254h193v348q-20 -25 -98.5 -164t-94.5 -184z" />
+<glyph unicode="&#xbd;" horiz-adv-x="2537" d="M158 737v219q111 0 276 48h219v-1004h-293v737h-202zM698 -256l869 1769h288l-868 -1769h-289zM1690 193q143 92 306 249.5t163 268.5q0 37 -29 54t-68 17q-72 0 -153.5 -32.5t-141.5 -79.5l-67 219q68 68 176.5 106.5t208.5 38.5q164 0 268.5 -78.5t104.5 -238.5 q0 -127 -99.5 -248t-234.5 -215h360v-254h-751z" />
+<glyph unicode="&#xbe;" horiz-adv-x="2537" d="M90 -133q72 2 148.5 19.5t151.5 50t123 94t48 139.5q0 39 -17.5 64.5t-51 36t-61.5 13.5t-66 3q-119 0 -238 -13v228l129 10q188 102 254 166q33 33 33 70q0 45 -49 45q-72 0 -308 -107l-71 203q92 55 208.5 99t198.5 44q131 0 222.5 -69.5t91.5 -194.5q0 -88 -59.5 -165 t-143.5 -116q96 -23 160.5 -102.5t64.5 -175.5q0 -147 -61.5 -258t-166 -172.5t-227 -91t-260.5 -29.5h-53v209zM698 -256l869 1769h288l-868 -1769h-289zM1659 201q188 414 489 803h271v-750h78v-254h-82v-283h-283v283h-461zM1935 254h193v348q-20 -25 -98.5 -164 t-94.5 -184z" />
+<glyph unicode="&#xbf;" horiz-adv-x="733" d="M39 -117q0 125 111 242l129 137q90 96 90 221v111h249v-111q0 -121 -17 -193.5t-83 -139.5l-106 -111q-86 -90 -86 -152q0 -29 16 -43t32.5 -16t47.5 -2q90 0 186 27v-228q-184 -43 -276 -43q-137 0 -215 82t-78 219zM313 872.5q0 65.5 57.5 112.5t129 47t125 -43 t53.5 -108.5t-57.5 -112.5t-129 -47t-125 43t-53.5 108.5z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1044" d="M12 0l361 1290h301l362 -1290h-317l-66 266h-258l-65 -266h-318zM246 1645l205 202q164 -193 331 -319l-114 -174q-221 121 -422 291zM428 506h193l-97 393z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1044" d="M12 0l361 1290h301l362 -1290h-317l-66 266h-258l-65 -266h-318zM264 1536l115 -174q221 121 422 291l-205 202q-164 -192 -332 -319zM428 506h193l-97 393z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1044" d="M12 0l361 1290h301l362 -1290h-317l-66 266h-258l-65 -266h-318zM115 1542l94 57q98 61 285 242q164 -164 284 -239l94 -58l-137 -186q-121 68 -241 188q-117 -117 -242 -188zM428 506h193l-97 393z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1044" d="M12 0l361 1290h301l362 -1290h-317l-66 266h-258l-65 -266h-318zM129 1591q78 72 126 97.5t128 25.5q68 0 154 -33.5t112 -33.5q57 0 127 67l117 -137l-26 -26q-22 -22 -26 -25l-26 -22q-20 -17 -30 -22l-29 -17q-20 -11 -35.5 -14t-38.5 -7t-47 -4q-55 0 -138 33.5 t-120 33.5q-70 0 -144 -65zM428 506h193l-97 393z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1044" d="M12 0l361 1290h301l362 -1290h-317l-66 266h-258l-65 -266h-318zM174 1559q0 72 50 122t118 50q63 0 110.5 -46.5t47.5 -115.5q0 -31 -11 -62q-20 -49 -63 -79.5t-94 -30.5q-66 0 -112 47t-46 115zM428 506h193l-97 393zM539 1559q0 72 50 122t118 50q66 0 112.5 -46.5 t46.5 -115.5q0 -33 -12 -62q-18 -49 -61 -79.5t-95 -30.5q-66 0 -112.5 47t-46.5 115z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1044" d="M12 0l361 1290h301l362 -1290h-317l-66 266h-258l-65 -266h-318zM272 1595q0 104 74 179t180 75q104 0 179 -74.5t75 -179.5q0 -106 -74.5 -180t-179.5 -74q-106 0 -180 74t-74 180zM428 506h193l-97 393zM471 1595.5q0 -22.5 16.5 -39t39 -16.5t39 16.5t16.5 39 t-16.5 39t-39 16.5t-39 -16.5t-16.5 -39z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1497" d="M12 0l357 1290h307l98 -352v352h656v-262h-406v-225h295v-266h-295v-271h424v-266h-688l-80 289h-270l-80 -289h-318zM451 530h188l-94 369z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1017" d="M66 645q0 115 32.5 229.5t96 217t172 166t245.5 63.5q211 0 346 -94l7 -4l-113 -205q-96 47 -240 47q-43 0 -97 -39t-87 -106q-57 -106 -57 -283q0 -68 9 -130.5t32.5 -130t76 -108.5t127.5 -41q131 0 242 74l133 -203q-94 -80 -248 -114q86 -63 86 -146 q0 -143 -286 -244l-166 132q193 66 198 110q6 39 -33 42q-6 0 -13 1q-34 0 -70 -14l-41 -17v152h2q-96 35 -167 105.5t-111 161.5t-58 185.5t-18 192.5z" />
+<glyph unicode="&#xc8;" horiz-adv-x="929" d="M106 0v1290h748v-262h-442v-225h340v-266h-340v-271h465v-266h-771zM215 1645l205 202q160 -193 332 -319l-115 -174q-215 117 -422 291z" />
+<glyph unicode="&#xc9;" horiz-adv-x="929" d="M106 0v1290h748v-262h-442v-225h340v-266h-340v-271h465v-266h-771zM248 1536l114 -174q221 121 422 291l-204 202q-164 -192 -332 -319z" />
+<glyph unicode="&#xca;" horiz-adv-x="929" d="M92 1542l94 57q100 61 285 242q164 -164 285 -239l94 -58l-137 -186q-121 68 -242 188q-117 -117 -242 -188zM106 0v1290h748v-262h-442v-225h340v-266h-340v-271h465v-266h-771z" />
+<glyph unicode="&#xcb;" horiz-adv-x="929" d="M106 0v1290h748v-262h-442v-225h340v-266h-340v-271h465v-266h-771zM139 1561q0 72 50.5 122t117.5 50q63 0 111.5 -47.5t48.5 -114.5q0 -35 -12 -62q-20 -49 -63.5 -79.5t-92.5 -30.5q-66 0 -113 47t-47 115zM506 1561q0 72 50 122t118 50q63 0 110 -47.5t47 -114.5 q0 -31 -10 -62q-20 -51 -63 -80.5t-94 -29.5q-66 0 -112 47t-46 115z" />
+<glyph unicode="&#xcc;" horiz-adv-x="487" d="M-31 1645l205 202q164 -193 332 -319l-115 -174q-221 121 -422 291zM92 0v1290h303v-1290h-303z" />
+<glyph unicode="&#xcd;" horiz-adv-x="487" d="M-20 1536l114 -174q221 121 422 291l-205 202q-163 -192 -331 -319zM92 0v1290h303v-1290h-303z" />
+<glyph unicode="&#xce;" horiz-adv-x="487" d="M-137 1542l94 57q100 61 285 242q164 -164 284 -239l95 -58l-138 -186q-121 68 -241 188q-117 -117 -242 -188zM92 0v1290h303v-1290h-303z" />
+<glyph unicode="&#xcf;" horiz-adv-x="487" d="M-98 1559q0 72 50 122t118 50q66 0 112.5 -47.5t46.5 -114.5q0 -33 -12 -62q-18 -51 -61 -80.5t-95 -29.5q-66 0 -112.5 47t-46.5 115zM92 0v1290h303v-1290h-303zM268 1559q0 72 50.5 122t117.5 50q66 0 113 -47.5t47 -114.5q0 -33 -12 -62q-18 -49 -62.5 -79.5 t-93.5 -30.5q-66 0 -113 47t-47 115z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1134" d="M111 0v1290h329l224 -508q37 -80 55 -176v684h305v-1290h-281l-344 764q16 -82 17 -166v-598h-305zM178 1591q78 72 126 97.5t130 25.5q68 0 153 -33.5t111 -33.5q57 0 127 67l117 -137l-26 -26q-22 -22 -26 -25l-26 -22q-20 -17 -29 -22l-29 -17q-19 -11 -36 -14l-38 -7 q-22 -4 -46 -4q-55 0 -138 33.5t-120 33.5q-72 0 -145 -65z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1122" d="M61 645q0 115 27 227.5t82 216t156.5 168t234.5 64.5t234.5 -64.5t157 -168t82 -216t26.5 -227.5t-26.5 -227.5t-82 -216t-157 -168t-234.5 -64.5t-234.5 64.5t-156.5 168t-82 216t-27 227.5zM274 1645l205 202q164 -193 332 -319l-115 -174q-221 121 -422 291z M367 645.5q0 -65.5 2 -113t13 -109t31.5 -99t57.5 -65.5t90 -28t90 28t57.5 67t32 100t13.5 108.5t2 110.5q0 66 -2 113t-13.5 107.5t-32 99.5t-57.5 66.5t-90 27.5t-90 -27.5t-57.5 -66.5t-31.5 -99.5t-13 -107.5t-2 -112.5z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1122" d="M61 645q0 115 27 227.5t82 216t156.5 168t234.5 64.5t234.5 -64.5t157 -168t82 -216t26.5 -227.5t-26.5 -227.5t-82 -216t-157 -168t-234.5 -64.5t-234.5 64.5t-156.5 168t-82 216t-27 227.5zM336 1536l115 -174q221 121 421 291l-204 202q-164 -192 -332 -319z M367 645.5q0 -65.5 2 -113t13 -109t31.5 -99t57.5 -65.5t90 -28t90 28t57.5 67t32 100t13.5 108.5t2 110.5q0 66 -2 113t-13.5 107.5t-32 99.5t-57.5 66.5t-90 27.5t-90 -27.5t-57.5 -66.5t-31.5 -99.5t-13 -107.5t-2 -112.5z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1122" d="M61 645q0 115 27 227.5t82 216t156.5 168t234.5 64.5t234.5 -64.5t157 -168t82 -216t26.5 -227.5t-26.5 -227.5t-82 -216t-157 -168t-234.5 -64.5t-234.5 64.5t-156.5 168t-82 216t-27 227.5zM160 1542l94 57q98 61 285 242q164 -164 284 -239l95 -58l-138 -186 q-121 68 -241 188q-117 -117 -242 -188zM367 645.5q0 -65.5 2 -113t13 -109t31.5 -99t57.5 -65.5t90 -28t90 28t57.5 67t32 100t13.5 108.5t2 110.5q0 66 -2 113t-13.5 107.5t-32 99.5t-57.5 66.5t-90 27.5t-90 -27.5t-57.5 -66.5t-31.5 -99.5t-13 -107.5t-2 -112.5z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1122" d="M61 645q0 115 27 227.5t82 216t156.5 168t234.5 64.5t234.5 -64.5t157 -168t82 -216t26.5 -227.5t-26.5 -227.5t-82 -216t-157 -168t-234.5 -64.5t-234.5 64.5t-156.5 168t-82 216t-27 227.5zM170 1591q78 72 126 97.5t130 25.5q68 0 154 -33.5t112 -33.5q25 0 55.5 16 t51.5 33l18 18l117 -137l-26 -26q-22 -22 -26 -25l-26 -22q-20 -17 -30 -22l-28 -17q-19 -11 -36 -14l-38 -7q-22 -4 -46 -4q-55 0 -138 33.5t-120 33.5q-72 0 -146 -65zM367 645.5q0 -65.5 2 -113t13 -108.5t31.5 -99t57.5 -66t90 -28t90 28t57.5 67t32 100t13.5 108.5 t2 110.5q0 66 -2 113t-13.5 107.5t-32 99.5t-57.5 66.5t-90 27.5t-90 -27.5t-57.5 -66.5t-31.5 -99.5t-13 -107.5t-2 -112.5z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1122" d="M61 645q0 115 27 227.5t82 216t156.5 168t234.5 64.5t234.5 -64.5t157 -168t82 -216t26.5 -227.5t-26.5 -227.5t-82 -216t-157 -168t-234.5 -64.5t-234.5 64.5t-156.5 168t-82 216t-27 227.5zM219 1561q0 72 50 122t118 50q66 0 113 -47.5t47 -114.5q0 -35 -12 -62 q-18 -49 -61.5 -79.5t-94.5 -30.5q-66 0 -113 47t-47 115zM367 645.5q0 -65.5 2 -113t13 -109t31.5 -99t57.5 -65.5t90 -28t90 28t57.5 67t32 100t13.5 108.5t2 110.5q0 66 -2 113t-13.5 107.5t-32 99.5t-57.5 66.5t-90 27.5t-90 -27.5t-57.5 -66.5t-31.5 -99.5t-13 -107.5 t-2 -112.5zM586 1561q0 72 50 122t118 50q63 0 111 -47.5t48 -114.5q0 -35 -12 -62q-20 -49 -63 -79.5t-95 -30.5q-66 0 -111.5 47t-45.5 115z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1122" d="M61 653q0 113 28 223.5t83 214t156.5 167t232.5 63.5q74 0 133 -18l68 231h102l-78 -272q139 -84 207 -258.5t68 -356.5q0 -113 -26.5 -225.5t-82 -217t-157 -170t-234.5 -65.5q-72 0 -139 21l-80 -277h-102l92 320q-137 86 -204 262t-67 358zM367 635q0 -217 49 -311 l207 725q-31 10 -62 10q-66 0 -107.5 -39t-59 -110.5t-22.5 -131t-5 -143.5zM494 244q31 -12 67 -13q45 0 79 18.5t54.5 53.5t33.5 72t18.5 90t7.5 91t2 91q0 227 -54 324z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1142" d="M109 514v776h305v-776q0 -147 37.5 -215t119.5 -68t120 68t38 215v776h305v-776q0 -104 -23.5 -195.5t-73.5 -172t-144.5 -129t-221.5 -48.5t-221 48.5t-144 129t-73.5 172t-23.5 195.5zM297 1645l205 202q164 -193 332 -319l-115 -174q-221 121 -422 291z" />
+<glyph unicode="&#xda;" horiz-adv-x="1142" d="M109 514v776h305v-776q0 -147 37.5 -215t119.5 -68t120 68t38 215v776h305v-776q0 -104 -23.5 -195.5t-73.5 -172t-144.5 -129t-221.5 -48.5t-221 48.5t-144 129t-73.5 172t-23.5 195.5zM319 1536l115 -174q221 121 422 291l-205 202q-164 -192 -332 -319z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1142" d="M109 514v776h305v-776q0 -147 37.5 -215t119.5 -68t120 68t38 215v776h305v-776q0 -104 -23.5 -195.5t-73.5 -172t-144.5 -129t-221.5 -48.5t-221 48.5t-144 129t-73.5 172t-23.5 195.5zM170 1542l94 57q100 61 285 242q164 -164 285 -239l94 -58l-137 -186 q-121 68 -242 188q-117 -117 -242 -188z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1142" d="M109 514v776h305v-776q0 -147 37.5 -215t119.5 -68t120 68t38 215v776h305v-776q0 -104 -23.5 -195.5t-73.5 -172t-144.5 -129t-221.5 -48.5t-221 48.5t-144 129t-73.5 172t-23.5 195.5zM231 1560.5q0 69.5 50.5 121t117.5 51.5q63 0 110.5 -47.5t47.5 -114.5 q0 -29 -10 -64q-20 -49 -63.5 -79.5t-94.5 -30.5q-66 0 -112 47t-46 116.5zM596 1561q0 70 50 121t118 51q66 0 113 -47.5t47 -114.5q0 -33 -13 -64q-18 -49 -61 -79.5t-94 -30.5q-66 0 -113 48t-47 116z" />
+<glyph unicode="&#xdd;" horiz-adv-x="964" d="M4 1290h326l151 -502l154 502h326l-326 -807v-483h-305l2 483zM367 1618l114 -174q221 121 422 291l-205 202q-163 -192 -331 -319z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1171" d="M27 786v218h88v108q0 106 66.5 184t157.5 113t191 35q207 0 333 -105.5t126 -279.5q0 -51 -20.5 -99.5t-44 -81t-39.5 -68.5q-10 -22 -10 -47q0 -15 4 -32q10 -43 55 -94l96 -115q55 -66 79 -120t24 -130q0 -127 -100.5 -215t-262.5 -88q-176 2 -283 80l101 232 q35 -23 85 -42.5t107 -20.5h4q55 0 80 32q16 19 16 45q0 51 -63 129l-88 104q-101 118 -101 211q0 9 1 17q4 33 31.5 72.5t52 92t24.5 121.5q0 82 -45 119t-149 37q-55 0 -93 -36t-38 -91v-1073h-297v768z" />
+<glyph unicode="&#xe0;" horiz-adv-x="954" d="M37 274q0 82 74 218l450 180v43q0 39 -34.5 60.5t-75.5 21.5q-127 0 -248 -95l-105 168q76 72 179.5 118t201.5 46q158 0 258.5 -75.5t100.5 -227.5v-534q0 -53 24 -54q12 0 29 9l45 -140q-86 -43 -158 -43q-78 0 -123 45t-55 117q-27 -74 -98.5 -118t-151.5 -44 q-313 0 -313 305zM213 1393l205 202q164 -193 332 -319l-115 -174q-221 121 -422 291zM315 279q0 -31 23.5 -51.5t56.5 -20.5q84 0 128 63.5t44 151.5v55l-233 -96q-19 -55 -19 -102z" />
+<glyph unicode="&#xe1;" horiz-adv-x="954" d="M37 274q0 82 74 218l450 180v43q0 39 -34.5 60.5t-75.5 21.5q-127 0 -248 -95l-105 168q76 72 179.5 118t201.5 46q158 0 258.5 -75.5t100.5 -227.5v-534q0 -53 24 -54q12 0 29 9l45 -140q-86 -43 -158 -43q-78 0 -123 45t-55 117q-27 -74 -98.5 -118t-151.5 -44 q-313 0 -313 305zM217 1284l115 -174q223 121 422 291l-205 203q-160 -193 -332 -320zM315 279q0 -31 23.5 -51.5t56.5 -20.5q84 0 128 63.5t44 151.5v55l-233 -96q-19 -55 -19 -102z" />
+<glyph unicode="&#xe2;" horiz-adv-x="954" d="M37 274q0 82 74 218l450 180v43q0 39 -34.5 60.5t-75.5 21.5q-127 0 -248 -95l-105 168q76 72 179.5 118t201.5 46q158 0 258.5 -75.5t100.5 -227.5v-534q0 -53 24 -54q12 0 29 9l45 -140q-86 -43 -158 -43q-78 0 -123 45t-55 117q-27 -74 -98.5 -118t-151.5 -44 q-313 0 -313 305zM70 1290l94 58q100 61 285 241q164 -166 284 -239l94 -58l-137 -186q-121 68 -241 188q-117 -117 -242 -188zM315 279q0 -31 23.5 -51.5t56.5 -20.5q84 0 128 63.5t44 151.5v55l-233 -96q-19 -55 -19 -102z" />
+<glyph unicode="&#xe3;" horiz-adv-x="954" d="M37 274q0 82 74 218l450 180v43q0 39 -34.5 60.5t-75.5 21.5q-127 0 -248 -95l-105 168q76 72 179.5 118t201.5 46q158 0 258.5 -75.5t100.5 -227.5v-534q0 -53 24 -54q12 0 29 9l45 -140q-86 -43 -158 -43q-78 0 -123 45t-55 117q-27 -74 -98.5 -118t-151.5 -44 q-313 0 -313 305zM86 1339q78 72 126 97.5t130 25.5q68 0 153 -33.5t111 -33.5q57 0 127 67l117 -137l-26 -26q-22 -22 -26 -25l-26 -22q-20 -17 -30 -22l-28 -17q-19 -11 -36 -14l-38 -7q-22 -4 -46 -4q-55 0 -138 33.5t-120 33.5q-72 0 -146 -65zM315 279 q0 -31 23.5 -51.5t56.5 -20.5q84 0 128 63.5t44 151.5v55l-233 -96q-19 -55 -19 -102z" />
+<glyph unicode="&#xe4;" horiz-adv-x="954" d="M37 274q0 82 74 218l450 180v43q0 39 -34.5 60.5t-75.5 21.5q-127 0 -248 -95l-105 168q76 72 179.5 118t201.5 46q158 0 258.5 -75.5t100.5 -227.5v-534q0 -53 24 -54q12 0 29 9l45 -140q-86 -43 -158 -43q-78 0 -123 45t-55 117q-27 -74 -98.5 -118t-151.5 -44 q-313 0 -313 305zM137 1276q0 72 50.5 122t117.5 50q63 0 111.5 -47t48.5 -115q0 -23 -12 -63q-20 -49 -63.5 -79t-94.5 -30q-66 0 -112 47t-46 115zM315 279q0 -31 23.5 -51.5t56.5 -20.5q84 0 128 63.5t44 151.5v55l-233 -96q-19 -55 -19 -102zM502 1276q0 72 50 122 t118 50q66 0 112.5 -47t46.5 -115q0 -29 -10 -63q-20 -49 -63 -79t-95 -30q-66 0 -112.5 47t-46.5 115z" />
+<glyph unicode="&#xe5;" horiz-adv-x="954" d="M37 274q0 82 74 218l450 180v43q0 39 -34.5 60.5t-75.5 21.5q-127 0 -248 -95l-105 168q76 72 179.5 118t201.5 46q158 0 258.5 -75.5t100.5 -227.5v-534q0 -53 24 -54q12 0 29 9l45 -140q-86 -43 -158 -43q-78 0 -123 45t-55 117q-27 -74 -98.5 -118t-151.5 -44 q-313 0 -313 305zM223 1364q0 104 74 179t180 75q104 0 179 -75t75 -179t-74.5 -179t-179.5 -75q-106 0 -180 75t-74 179zM315 279q0 -31 23.5 -51.5t56.5 -20.5q84 0 128 63.5t44 151.5v55l-233 -96q-19 -55 -19 -102zM422 1363.5q0 -22.5 16.5 -38.5t39 -16t38.5 16 t16 38.5t-16 39t-38.5 16.5t-39 -16.5t-16.5 -39z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1511" d="M37 274q0 82 74 218l450 180q0 59 -22.5 92t-87.5 33q-127 0 -248 -95l-105 168q84 70 144 103q106 61 237 61q88 0 163 -30.5t110 -81.5q45 51 123.5 81.5t168.5 30.5q184 0 291 -128t111 -267l4 -164h-586q-1 -17 -1 -33q0 -82 34 -149q41 -80 123 -80q156 2 280 88 l86 -184q-20 -16 -55 -41t-135 -67t-188 -42q-113 0 -209.5 62.5t-134.5 142.5q-59 -84 -142.5 -143.5t-171.5 -59.5q-84 0 -112 8q-104 31 -151.5 113t-49.5 184zM317 279q0 -72 68 -72q182 0 182 262l-231 -100q-19 -47 -19 -90zM887 672h278q-2 59 -32.5 112.5 t-102.5 53.5q-59 0 -96 -54.5t-47 -111.5z" />
+<glyph unicode="&#xe7;" horiz-adv-x="843" d="M45 494q0 221 109 364q68 86 162 131t184 45q98 0 176 -33.5t106 -66.5l29 -33l-145 -158q-57 47 -164 48q-53 0 -106.5 -72t-53.5 -209q0 -127 50 -213t116 -86q49 0 103.5 21.5t84.5 43.5l29 23l106 -190q-84 -74 -200 -115q102 -66 102 -156q0 -143 -287 -244 l-167 132q193 66 200 110q6 39 -34 42q-6 0 -12 1q-34 0 -68 -14l-43 -17v152h16q-94 41 -158 111q-135 150 -135 383z" />
+<glyph unicode="&#xe8;" horiz-adv-x="960" d="M47 524q0 211 135 360.5t344 149.5q162 0 279 -116.5t121 -278.5q4 -111 4 -164h-584q-2 -10 -2 -33q0 -86 38 -157.5t118 -71.5q162 0 282 88l86 -184q-76 -63 -182 -106.5t-197 -43.5q-150 0 -253 84t-146 206t-43 267zM231 1393l205 202q160 -193 332 -319l-115 -174 q-221 121 -422 291zM367 664h284q-2 68 -39 121t-100 53q-57 0 -98 -56.5t-47 -117.5z" />
+<glyph unicode="&#xe9;" horiz-adv-x="960" d="M47 524q0 211 135 360.5t344 149.5q162 0 279 -116.5t121 -278.5q4 -111 4 -164h-584q-2 -10 -2 -33q0 -86 38 -157.5t118 -71.5q162 0 282 88l86 -184q-76 -63 -182 -106.5t-197 -43.5q-150 0 -253 84t-146 206t-43 267zM272 1284l115 -174q221 121 422 291l-205 203 q-160 -193 -332 -320zM367 664h284q-2 68 -39 121t-100 53q-57 0 -98 -56.5t-47 -117.5z" />
+<glyph unicode="&#xea;" horiz-adv-x="960" d="M47 524q0 211 135 360.5t344 149.5q162 0 279 -116.5t121 -278.5q4 -111 4 -164h-584q-2 -10 -2 -33q0 -86 38 -157.5t118 -71.5q162 0 282 88l86 -184q-76 -63 -182 -106.5t-197 -43.5q-150 0 -253 84t-146 206t-43 267zM104 1290l95 58q98 61 284 241 q164 -166 285 -239l94 -58l-137 -186q-121 68 -242 188q-117 -117 -241 -188zM367 664h284q-2 68 -39 121t-100 53q-57 0 -98 -56.5t-47 -117.5z" />
+<glyph unicode="&#xeb;" horiz-adv-x="960" d="M47 524q0 211 135 360.5t344 149.5q162 0 279 -116.5t121 -278.5q4 -111 4 -164h-584q-2 -10 -2 -33q0 -86 38 -157.5t118 -71.5q162 0 282 88l86 -184q-76 -63 -182 -106.5t-197 -43.5q-150 0 -253 84t-146 206t-43 267zM170 1276q0 72 50 122t118 50q66 0 113 -47 t47 -115q0 -33 -13 -63q-18 -49 -61 -79t-94 -30q-66 0 -113 47t-47 115zM367 664h284q-2 68 -39 121t-100 53q-57 0 -98 -56.5t-47 -117.5zM537 1276q0 72 50 122t118 50q66 0 112.5 -47t46.5 -115q0 -33 -12 -63q-18 -49 -62.5 -79t-93.5 -30q-66 0 -112.5 47t-46.5 115z " />
+<glyph unicode="&#xec;" horiz-adv-x="487" d="M-29 1393l205 202q164 -193 332 -319l-115 -174q-221 121 -422 291zM96 0v1004h293v-1004h-293z" />
+<glyph unicode="&#xed;" horiz-adv-x="487" d="M-20 1284l114 -174q221 121 422 291l-205 203q-159 -193 -331 -320zM96 0v1004h293v-1004h-293z" />
+<glyph unicode="&#xee;" horiz-adv-x="487" d="M-158 1290l95 58q100 61 284 241q164 -166 285 -239l94 -58l-137 -186q-121 68 -242 188q-117 -117 -241 -188zM96 0v1004h293v-1004h-293z" />
+<glyph unicode="&#xef;" horiz-adv-x="487" d="M-98 1276q0 72 50 122t118 50q63 0 110 -47t47 -115q0 -29 -10 -63q-20 -49 -63 -79t-95 -30q-66 0 -111.5 47t-45.5 115zM96 0v1004h293v-1004h-293zM266 1276q0 72 50.5 122t117.5 50q66 0 113 -47t47 -115q0 -33 -12 -63q-18 -49 -61.5 -79t-94.5 -30q-66 0 -113 47 t-47 115z" />
+<glyph unicode="&#xf1;" horiz-adv-x="1062" d="M113 0v1004h297v-74q147 104 233 104q94 0 158.5 -26.5t96.5 -73.5t44 -96.5t12 -112.5v-725h-297v725q0 63 -51 63q-33 0 -64.5 -9t-47 -17t-47.5 -30l-37 -25v-707h-297zM158 1339q78 72 126 97.5t128 25.5q70 0 154.5 -33.5t111.5 -33.5q57 0 127 67l117 -137l-26 -26 q-22 -22 -27 -25l-25 -22q-20 -17 -30 -22l-30 -17q-20 -11 -35.5 -14t-38 -7t-46.5 -4q-55 0 -137.5 33.5t-121.5 33.5q-70 0 -143 -65z" />
+<glyph unicode="&#xf2;" horiz-adv-x="999" d="M49 502q0 127 45 243.5t151.5 202.5t254 86t254 -86t151.5 -202.5t45 -243.5t-45 -244t-151.5 -203t-254 -86t-254 86t-151.5 203t-45 244zM227 1393l205 202q164 -193 332 -319l-115 -174q-221 121 -422 291zM346 502q0 -133 41 -210t112.5 -77t112.5 77t41 210 t-41 208.5t-112.5 75.5t-112.5 -75.5t-41 -208.5z" />
+<glyph unicode="&#xf3;" horiz-adv-x="999" d="M49 502q0 127 45 243.5t151.5 202.5t254 86t254 -86t151.5 -202.5t45 -243.5t-45 -244t-151.5 -203t-254 -86t-254 86t-151.5 203t-45 244zM229 1284l115 -174q221 121 422 291l-205 203q-160 -193 -332 -320zM346 502q0 -133 41 -210t112.5 -77t112.5 77t41 210 t-41 208.5t-112.5 75.5t-112.5 -75.5t-41 -208.5z" />
+<glyph unicode="&#xf4;" horiz-adv-x="999" d="M49 502q0 127 45 243.5t151.5 202.5t254 86t254 -86t151.5 -202.5t45 -243.5t-45 -244t-151.5 -203t-254 -86t-254 86t-151.5 203t-45 244zM94 1290l94 58q100 61 285 241q164 -166 285 -239l94 -58l-137 -186q-121 68 -242 188q-117 -117 -242 -188zM346 502 q0 -133 41 -210t112.5 -77t112.5 77t41 210t-41 208.5t-112.5 75.5t-112.5 -75.5t-41 -208.5z" />
+<glyph unicode="&#xf5;" horiz-adv-x="999" d="M49 502q0 127 45 243.5t151.5 202.5t254 86t254 -86t151.5 -202.5t45 -243.5t-45 -244t-151.5 -203t-254 -86t-254 86t-151.5 203t-45 244zM117 1339q78 72 126 97.5t128 25.5q68 0 153.5 -33.5t112.5 -33.5q57 0 127 67l117 -137l-26 -26q-22 -22 -27 -25l-25 -22 q-20 -17 -30 -22l-30 -17q-20 -11 -35.5 -14t-38 -7t-46.5 -4q-55 0 -138.5 33.5t-119.5 33.5q-70 0 -144 -65zM346 502q0 -133 41 -210t112.5 -77t112.5 77t41 210t-41 208.5t-112.5 75.5t-112.5 -75.5t-41 -208.5z" />
+<glyph unicode="&#xf6;" horiz-adv-x="999" d="M49 502q0 127 45 243.5t151.5 202.5t254 86t254 -86t151.5 -202.5t45 -243.5t-45 -244t-151.5 -203t-254 -86t-254 86t-151.5 203t-45 244zM156 1276q0 72 50 122t118 50q63 0 110 -47t47 -115q0 -29 -10 -63q-20 -49 -63 -79t-95 -30q-66 0 -111.5 47t-45.5 115z M346 502q0 -133 41 -210t112.5 -77t112.5 77t41 210t-41 208.5t-112.5 75.5t-112.5 -75.5t-41 -208.5zM520 1276q0 72 50.5 122t117.5 50q66 0 113 -47t47 -115q0 -33 -12 -63q-18 -49 -61.5 -79t-94.5 -30q-66 0 -113 47t-47 115z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1001" d="M55 393v244h889v-244h-889zM301 160q0 74 59.5 126t139.5 52q76 0 128 -45t52 -115q0 -74 -59.5 -126t-139.5 -52q-76 0 -128 45t-52 115zM301 856q0 74 59.5 126t139.5 52q76 0 128 -45t52 -115q0 -74 -59.5 -126t-139.5 -52q-76 0 -128 45t-52 115z" />
+<glyph unicode="&#xf8;" horiz-adv-x="999" d="M49 500q0 94 27.5 185t80 171t141.5 129t202 49q49 0 96 -10l47 162h102l-55 -195q127 -63 193.5 -202.5t66.5 -288.5q0 -94 -27.5 -185.5t-79.5 -170t-141.5 -127t-201.5 -48.5q-47 0 -99 11l-61 -213h-102l69 245q-125 63 -191.5 200.5t-66.5 287.5zM346 500 q0 -133 41 -209l141 493q-10 2 -28 2q-72 0 -113 -76.5t-41 -209.5zM469 219q20 -4 31 -4q72 0 112.5 76t40.5 209q0 139 -43 213z" />
+<glyph unicode="&#xf9;" horiz-adv-x="1058" d="M111 274v730h297v-730q0 -35 15 -48t50 -13q66 0 182 80v711h297v-795q0 -51 52 -84l-95 -156q-121 14 -194 119q-162 -119 -287 -119q-317 0 -317 305zM252 1393l205 202q164 -193 331 -319l-114 -174q-221 121 -422 291z" />
+<glyph unicode="&#xfa;" horiz-adv-x="1058" d="M111 274v730h297v-730q0 -35 15 -48t50 -13q66 0 182 80v711h297v-795q0 -51 52 -84l-95 -156q-121 14 -194 119q-162 -119 -287 -119q-317 0 -317 305zM262 1284l115 -174q215 117 422 291l-205 203q-160 -193 -332 -320z" />
+<glyph unicode="&#xfb;" horiz-adv-x="1058" d="M111 274v730h297v-730q0 -35 15 -48t50 -13q66 0 182 80v711h297v-795q0 -51 52 -84l-95 -156q-121 14 -194 119q-162 -119 -287 -119q-317 0 -317 305zM121 1290l94 58q98 61 285 241q162 -166 284 -239l95 -58l-138 -186q-121 68 -241 188q-117 -117 -242 -188z" />
+<glyph unicode="&#xfc;" horiz-adv-x="1058" d="M111 274v730h297v-730q0 -35 15 -48t50 -13q66 0 182 80v711h297v-795q0 -51 52 -84l-95 -156q-121 14 -194 119q-162 -119 -287 -119q-317 0 -317 305zM190 1276q0 72 50.5 122t117.5 50q66 0 113 -47t47 -115q0 -33 -12 -63q-18 -49 -61.5 -79t-94.5 -30q-66 0 -113 47 t-47 115zM557 1276q0 72 50 122t118 50q63 0 111.5 -47t48.5 -115q0 -33 -13 -63q-20 -49 -63 -79t-92 -30q-66 0 -113 47t-47 115z" />
+<glyph unicode="&#xfd;" horiz-adv-x="929" d="M18 1004h316q137 -459 149 -658q78 283 125 658h305q-29 -154 -70.5 -323t-106 -380t-152.5 -376t-181 -226q-37 -25 -96 -46.5t-102 -29.5l-41 -10l-68 217q72 25 113 50.5t57.5 46t46.5 73.5l13 20zM350 1331l115 -174q221 121 422 291l-205 203q-164 -193 -332 -320z " />
+<glyph unicode="&#xff;" horiz-adv-x="929" d="M18 1004h316q137 -459 149 -658q78 283 125 658h305q-29 -154 -70.5 -323t-106 -380t-152.5 -376t-181 -226q-37 -25 -96 -46.5t-102 -29.5l-41 -10l-68 217q72 25 113 50.5t57.5 46t46.5 73.5l13 20zM139 1276q0 72 50.5 122t117.5 50q66 0 113 -47t47 -115 q0 -33 -12 -63q-18 -49 -61.5 -79t-94.5 -30q-66 0 -113 47t-47 115zM506 1276q0 72 50 122t118 50q66 0 113 -47t47 -115q0 -33 -13 -63q-18 -49 -62 -79t-93 -30q-66 0 -113 47t-47 115z" />
+<glyph unicode="&#x152;" horiz-adv-x="1290" d="M61 653q0 102 33 210t93.5 205t164 159.5t230.5 62.5h663v-262h-432v-225h322v-266h-322v-271h453v-266h-684q-129 0 -232.5 63.5t-164 164t-92.5 211t-32 214.5zM348 635q0 -113 43 -234.5t117 -152.5v794q-66 -18 -113 -155t-47 -252z" />
+<glyph unicode="&#x153;" horiz-adv-x="1558" d="M63 500q0 94 28 185t80 171t141 129t202 49q170 0 289 -112q123 113 307 112.5t290.5 -128.5t110.5 -267l5 -164h-586l-2 -33q0 -82 35 -149q41 -80 122 -80q156 2 281 88l86 -184q-20 -16 -55 -41t-135.5 -67t-188.5 -42q-162 0 -278 107q-119 -104 -281 -105 q-113 0 -202 48.5t-141 127t-80 170t-28 185.5zM360 500q0 -133 41 -209t113 -76t113 76t41 209t-41 209.5t-113 76.5t-113 -76.5t-41 -209.5zM952 672h279q-2 59 -33 112.5t-102 53.5q-59 0 -96.5 -54.5t-47.5 -111.5z" />
+<glyph unicode="&#x178;" horiz-adv-x="964" d="M4 1290h326l151 -502l154 502h326l-328 -807l2 -483h-305v483zM139 1559q0 72 50.5 122t117.5 50q66 0 113 -47.5t47 -114.5q0 -33 -12 -62q-18 -49 -62.5 -79.5t-93.5 -30.5q-66 0 -113 47t-47 115zM506 1559q0 72 50 122t118 50q63 0 111.5 -47.5t48.5 -114.5 q0 -25 -13 -62q-20 -51 -63 -80.5t-94 -29.5q-66 0 -112 47t-46 115z" />
+<glyph unicode="&#x2c6;" horiz-adv-x="823" d="M33 1290l94 58q98 61 285 241q164 -166 284 -239l95 -58l-138 -186q-121 68 -241 188q-117 -117 -242 -188z" />
+<glyph unicode="&#x2dc;" horiz-adv-x="778" d="M0 1339q78 72 126 97.5t128 25.5q70 0 155 -33.5t111 -33.5q57 0 127 67l117 -137l-26 -26q-22 -22 -26 -25l-26 -22q-20 -17 -30 -22l-28 -17q-19 -11 -36 -14l-38 -7q-22 -4 -46 -4q-57 0 -139 33.5t-119 33.5q-72 0 -146 -65z" />
+<glyph unicode="&#x2013;" horiz-adv-x="733" d="M-41 430v184h815v-184h-815z" />
+<glyph unicode="&#x2014;" horiz-adv-x="1245" d="M-41 432v184h1327v-184h-1327z" />
+<glyph unicode="&#x2018;" horiz-adv-x="546" d="M35 985q154 289 309 428l145 -98q-117 -147 -116 -248q0 -2 18 -156q-90 -68 -162 -67q-47 0 -101 45t-93 96z" />
+<glyph unicode="&#x2019;" horiz-adv-x="552" d="M55 891q115 152 115 248q0 25 -16 155q84 68 161 68q45 0 101.5 -46t93.5 -95q-158 -293 -309 -428z" />
+<glyph unicode="&#x201a;" horiz-adv-x="528" d="M27 -229q115 152 114 247q0 18 -16 156q90 68 162 68q45 0 101 -46t93 -96q-154 -289 -309 -428z" />
+<glyph unicode="&#x201c;" horiz-adv-x="913" d="M29 985q160 291 309 428l145 -98q-115 -152 -114 -248q0 -29 7 -84l9 -72q-90 -68 -162 -67q-81 0 -194 141zM406 985q154 289 309 428l145 -98q-115 -152 -115 -248q0 -18 17 -156q-90 -68 -162 -67q-45 0 -100 45t-94 96z" />
+<glyph unicode="&#x201d;" horiz-adv-x="913" d="M57 891q117 147 117 248q0 8 -18 155q88 68 161 68q47 0 102.5 -45t92.5 -96q-158 -293 -309 -428zM434 891q43 53 79 124.5t36 123.5q0 25 -17 155q84 68 162 68q47 0 102.5 -45t92.5 -96q-158 -293 -309 -428z" />
+<glyph unicode="&#x201e;" horiz-adv-x="913" d="M41 -223q115 152 115 248q0 18 -17 155q90 68 162 68q45 0 100.5 -45t94.5 -97q-154 -289 -310 -428zM420 -223q115 152 115 248q0 18 -17 155q90 68 162 68q82 0 194 -142q-78 -143 -147.5 -244.5t-161.5 -183.5z" />
+<glyph unicode="&#x2022;" horiz-adv-x="868" d="M29 649q0 168 117.5 286t285.5 118t286 -118t118 -286t-118 -285.5t-286 -117.5t-285.5 117.5t-117.5 285.5z" />
+<glyph unicode="&#x2026;" horiz-adv-x="1236" d="M41 131q0 72 56.5 122t129.5 50q70 0 123 -46t53 -116q0 -72 -56 -122t-130 -50q-70 0 -123 46t-53 116zM434 131q0 72 57.5 122t131.5 50q70 0 123 -46t53 -116q0 -72 -56.5 -122t-130.5 -50q-72 0 -125 46t-53 116zM831 131q0 72 57.5 122t131.5 50q70 0 123 -46 t53 -116q0 -72 -56.5 -122t-129.5 -50q-72 0 -125.5 46t-53.5 116z" />
+<glyph unicode="&#x2039;" horiz-adv-x="614" d="M33 512l352 432l207 -168l-199 -262l201 -270l-207 -164z" />
+<glyph unicode="&#x203a;" horiz-adv-x="614" d="M31 244l207 -164l354 432l-352 432l-207 -168l198 -262z" />
+<glyph unicode="&#x2122;" horiz-adv-x="1642" d="M147 1237v170h496v-170h-154v-643h-190v643h-152zM680 596v813h211l178 -494l21 -86q6 51 18 86l180 494h211v-813h-192v356l10 99l-154 -455h-147l-154 455l10 -99v-356h-192z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1004" d="M0 1005h1005v-1005h-1005v1005z" />
+<glyph unicode="&#xfb01;" horiz-adv-x="1069" d="M27 797v207h90v94q0 156 131 250q125 90 319 105q40 3 77 3q143 0 239 -47q117 -53 116 -152q0 -33 -12 -63q-20 -49 -69.5 -79t-104.5 -30q-72 0 -123 44.5t-53 107.5q-15 4 -31 4q-51 0 -112 -40q-80 -52 -80 -116v-81h145v-238h-145v-766h-297v776zM672 0v1004h293 v-1004h-293z" />
+<glyph unicode="&#xfb02;" horiz-adv-x="1069" d="M27 797v207h90v126q0 98 41 168t104.5 102t139.5 50q60 14 118 14q16 0 32 -1q73 -5 132 -7l281 -33v-987q0 -117 14 -225.5t29 -159.5l14 -51h-272q-78 127 -78 436v793h-88q-170 0 -170 -111v-114h145v-238h-145v-766h-297v776z" />
+<glyph unicode="&#xfb03;" horiz-adv-x="1658" d="M16 791v213h101v94q0 96 43 167.5t104.5 104.5t123 52.5t104.5 21.5l43 2l45 -211q-6 -2 -17.5 -4t-40 -13.5t-50 -26.5t-40 -43t-18.5 -63v-81h153v-240h-153v-764h-297v774zM602 791v213h100v94q0 96 43 167.5t104.5 104.5t123 52.5t104.5 21.5l43 2l45 -211 q-6 -2 -17 -4t-40 -13.5t-50.5 -26.5t-40 -43t-18.5 -63v-81h154v-240h-154v-764h-297v774zM1233 1268q0 72 57.5 123t129 51t124.5 -47t53 -117q0 -74 -56 -123t-130 -49q-72 0 -125 46t-53 116zM1268 0v1004h293v-1004h-293z" />
+<glyph unicode="&#xfb04;" horiz-adv-x="1654" d="M16 791v213h101v94q0 96 43 167.5t104.5 104.5t123 52.5t104.5 21.5l43 2l45 -211q-6 -2 -17.5 -4t-40 -13.5t-50 -26.5t-40 -43t-18.5 -63v-81h153v-240h-153v-764h-297v774zM602 791v213h100v94q0 96 43 167.5t104.5 104.5t123 52.5t104.5 21.5l43 2l45 -211 q-6 -2 -17 -4t-40 -13.5t-50.5 -26.5t-40 -43t-18.5 -63v-81h154v-240h-154v-764h-297v774zM1255 436v987h293v-987q0 -117 16.5 -225.5t32.5 -159.5l15 -51h-287q-70 157 -70 436z" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/public/stylesheets/fonts/delicious-heavy-webfont.ttf b/public/stylesheets/fonts/delicious-heavy-webfont.ttf
new file mode 100755
index 000000000..deba1f94f
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-heavy-webfont.ttf
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-heavy-webfont.woff b/public/stylesheets/fonts/delicious-heavy-webfont.woff
new file mode 100755
index 000000000..b3c48915d
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-heavy-webfont.woff
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-italic-webfont.eot b/public/stylesheets/fonts/delicious-italic-webfont.eot
new file mode 100755
index 000000000..8bc7f8ce0
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-italic-webfont.eot
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-italic-webfont.svg b/public/stylesheets/fonts/delicious-italic-webfont.svg
new file mode 100755
index 000000000..3cad32124
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-italic-webfont.svg
@@ -0,0 +1,222 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : 40 I1995 Jos Buivenga
+</metadata>
+<defs>
+<font id="DeliciousItalic" horiz-adv-x="921" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="614" />
+<glyph unicode=" " horiz-adv-x="614" />
+<glyph unicode="&#x09;" horiz-adv-x="614" />
+<glyph unicode="&#xa0;" horiz-adv-x="614" />
+<glyph unicode="!" horiz-adv-x="516" d="M90 84q0 51 39 88t90 37q49 0 85 -33t36 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82zM182 332l82 704q20 174 92 375l160 21q-70 -209 -98 -396l-113 -704h-123z" />
+<glyph unicode="&#x22;" horiz-adv-x="585" d="M188 999l9 322l47 129h100l8 -129l-96 -324zM471 999l8 322l47 129h101l8 -129l-96 -324z" />
+<glyph unicode="#" horiz-adv-x="1138" d="M125 436l20 135h164l39 312h-145l20 135h142l51 403h123l-52 -403h236l45 364h123l-45 -364h174l-12 -135h-181l-39 -312h154l-12 -135h-158l-53 -418h-123l53 418h-235l-47 -379h-123l47 379h-166zM432 571h234l39 312h-234z" />
+<glyph unicode="$" horiz-adv-x="880" d="M45 57l66 121q133 -74 249 -80l76 484l-47 32q-41 29 -49 36t-41 33t-42 39t-30.5 39.5t-29 49.5t-14.5 53.5t-7 63.5q0 162 107.5 271.5t269.5 119.5l18 113h93l-19 -115q141 -14 236 -98l-74 -111q-72 59 -182 78l-74 -467q133 -94 168 -135q74 -82 74 -197 q0 -158 -101.5 -271.5t-257.5 -140.5l-20 -124h-92l18 118q-160 4 -295 88zM340 958q0 -41 21.5 -76.5t42 -55t63.5 -50.5l65 412q-86 -14 -139 -78t-53 -152zM455 113q76 25 126 90t50 143q0 98 -111 178z" />
+<glyph unicode="%" horiz-adv-x="1431" d="M94 1048.5q0 112.5 80 192.5t193 80q80 0 145 -41q82 -23 143 -23q57 0 114.5 15.5t86.5 30.5l27 16l104 -29l-455 -1290h-135l432 1196q-35 -18 -88 -27.5t-90 -9.5l-35 -2q23 -43 23 -108q0 -113 -80 -193t-192.5 -80t-192.5 80t-80 192.5zM215 1048.5 q0 -63.5 44 -107.5t107.5 -44t107.5 44t44 107.5t-44 107.5t-107.5 44t-107.5 -44t-44 -107.5zM788 241.5q0 112.5 80 192.5t193 80t192.5 -80t79.5 -192.5t-79.5 -192.5t-192.5 -80t-193 80t-80 192.5zM909 241.5q0 -63.5 44 -107.5t107.5 -44t107.5 44t44 107.5t-44 107.5 t-107.5 44t-107.5 -44t-44 -107.5z" />
+<glyph unicode="&#x26;" horiz-adv-x="1800" d="M117 584q0 260 189.5 462.5t449.5 245.5l18 -114q-197 -37 -343 -207t-146 -369q0 -74 22 -151l311 254q10 10 71 58l96 79q36 31 93.5 85t91.5 95t60.5 89t26.5 85q0 53 -56.5 100t-117.5 70l39 84q109 -23 195.5 -92.5t86.5 -167.5q0 -20 -2 -29q-4 -27 -19.5 -58.5 t-42.5 -66.5l-55 -66q-27 -32 -68 -72l-72 -68q-30 -28 -77 -67l-69 -58l-67 -54q-44 -35 -50 -41l-330 -268q150 -260 475 -260q172 0 328 83t253 231.5t97 322.5q0 92 -35 172h-180l-14 72q70 41 176 41q119 0 165 -79t46 -220q0 -211 -129 -383t-322.5 -262.5 t-398.5 -90.5q-285 0 -490.5 168t-205.5 447z" />
+<glyph unicode="'" horiz-adv-x="303" d="M188 999l9 322l47 129h100l8 -129l-96 -324z" />
+<glyph unicode="(" horiz-adv-x="716" d="M139 485q0 338 185.5 637t484.5 467l-2 -121q-248 -145 -401.5 -418.5t-153.5 -564.5q0 -203 84 -379q43 -92 83 -141t130 -129l-64 -82q-346 270 -346 731z" />
+<glyph unicode=")" horiz-adv-x="696" d="M-25 -166q106 80 168 134.5t129 137.5q256 322 256 715q0 197 -73.5 371t-221.5 278l33 119q186 -129 283.5 -326.5t97.5 -428.5q0 -383 -244 -728q-139 -199 -385 -364z" />
+<glyph unicode="*" horiz-adv-x="808" d="M86 1128l49 121l260 -100l-41 233h246l-106 -247l272 112l31 -117l-281 -106l150 -315h-136l-112 239l-201 -239l-115 34l246 291z" />
+<glyph unicode="+" horiz-adv-x="964" d="M92 451v122h330v355h119v-355h331v-122h-331v-355h-119v355h-330z" />
+<glyph unicode="," horiz-adv-x="528" d="M-45 -207q181 195 181 329q0 11 -1 21q49 23 90 23q68 0 127 -113q-111 -170 -313 -336z" />
+<glyph unicode="-" horiz-adv-x="618" d="M113 461v123h393v-123h-393z" />
+<glyph unicode="." horiz-adv-x="528" d="M82 84q0 51 39 88t90 37q49 0 85 -33t36 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82z" />
+<glyph unicode="/" horiz-adv-x="755" d="M-98 -303l823 1853h127l-823 -1853h-127z" />
+<glyph unicode="0" d="M49 375q0 109 33 222.5t93.5 212.5t158.5 161.5t215 62.5q164 0 243.5 -110.5t79.5 -280.5q0 -152 -51 -301t-166.5 -261t-273.5 -112q-164 0 -248 118t-84 288zM199 391q0 -119 47 -208t153 -89q109 0 187 98.5t107.5 215t29.5 221.5q0 279 -195 278q-104 0 -183 -93 t-112.5 -208t-33.5 -215z" />
+<glyph unicode="1" d="M238 856l16 98q88 0 199 29l75 18h142l-158 -1001h-152l136 856h-258z" />
+<glyph unicode="2" d="M96 127q195 98 383 293q78 80 142.5 179t64.5 177q0 66 -44 96.5t-112 30.5q-100 0 -260 -98l-51 100q100 72 175 100.5t184 28.5q274 0 274 -256q0 -117 -92 -251t-205 -231t-225 -161h456l-22 -135h-660z" />
+<glyph unicode="3" d="M57 -225q92 2 188.5 29.5t182.5 78.5t141.5 134t55.5 182q0 154 -244 153q-74 0 -166 -10l-8 117q10 2 28.5 4t33.5 4l30 4q23 4 134.5 73.5t150.5 98.5q115 80 114 170q0 45 -31.5 68.5t-78.5 23.5q-100 0 -297 -104l-43 100q84 55 192.5 94t198.5 39q98 0 157.5 -52 t59.5 -148q0 -64 -30.5 -120.5t-89 -102.5t-103.5 -72.5t-115 -63.5q111 0 188.5 -63.5t77.5 -171.5q0 -182 -106.5 -317.5t-263 -199t-334.5 -63.5z" />
+<glyph unicode="4" d="M35 0l12 133q266 434 641 871h166l-137 -871h131l-21 -133h-135q-53 -240 -123 -342l-114 51q47 98 90 291h-510zM201 133h364l111 666q-274 -338 -475 -666z" />
+<glyph unicode="5" d="M72 -221q170 4 323 80q96 47 170 144t74 198q0 82 -59.5 118.5t-147.5 36.5q-96 0 -242 -41l168 689h508l-20 -123h-367l-98 -412q43 12 88 12q332 0 332 -256q0 -164 -114 -298t-273 -202q-155 -67 -309 -67h-9h-10z" />
+<glyph unicode="6" d="M96 365q0 328 196.5 566t522.5 384l39 -101q-219 -127 -303 -200q-23 -18 -41 -37q-111 -115 -174 -238q-41 -80 -67.5 -188.5t-26.5 -194.5q0 -102 43 -184t137 -82q215 0 270 361q4 37 4 55q0 180 -229 180q-66 0 -150 -37l31 31l30 30q9 9 27.5 24.5t31.5 21.5l32 14 q18 8 39.5 11t46.5 3q127 0 210 -73.5t83 -198.5q0 -33 -6 -68q-31 -197 -149 -337t-304 -140q-106 0 -175 62.5t-93.5 147t-24.5 188.5z" />
+<glyph unicode="7" d="M100 -281q207 223 384.5 551t222.5 602h-525l21 132h671l-20 -132q-47 -291 -238.5 -652t-408.5 -591z" />
+<glyph unicode="8" d="M66 264q0 145 122 287q61 70 183 123q-82 51 -123 107.5t-41 140.5q0 162 118.5 265t282.5 103q127 0 204 -56t77 -175q0 -129 -79 -223.5t-208 -147.5q135 -78 174 -121q61 -68 62 -166q0 -59 -21 -127q-45 -143 -166 -225t-274 -82q-135 0 -223 82t-88 215zM223 297 q0 -90 51.5 -151.5t139.5 -61.5q106 0 187 92t81 200.5t-102 170.5l-117 71q-104 -51 -172 -134t-68 -187zM352 928q0 -111 140 -187q121 47 186 114t65 183q0 141 -168 142q-94 0 -158.5 -78t-64.5 -174z" />
+<glyph unicode="9" d="M80 -217q223 127 307 199q25 20 45 43q268 274 268 608q0 281 -163 280q-86 0 -149.5 -61t-93.5 -137t-42 -164q-6 -27 -6 -55q0 -178 231 -179q59 0 148 35q-16 -14 -52 -51t-51.5 -47t-52.5 -23.5t-82 -13.5q-127 0 -210 74t-83 198l6 68q33 209 144.5 343t308.5 134 q154 0 226.5 -111.5t72.5 -273.5q0 -86 -18 -172q-111 -522 -705 -790z" />
+<glyph unicode=":" horiz-adv-x="528" d="M82 84q0 51 39 88t90 37q49 0 85 -33t36 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82zM184 708.5q0 49.5 40 87.5t89 38t85 -33t36 -82t-40 -87t-91 -38q-49 0 -84 32.5t-35 82z" />
+<glyph unicode=";" horiz-adv-x="528" d="M-51 -207q181 195 181 329q0 11 -1 21q49 23 90 23q68 0 127 -113q-111 -170 -313 -336zM207 711q0 51 40 89t91 38q49 0 84 -33t35 -82q0 -51 -40 -89t-91 -38q-49 0 -84 33t-35 82z" />
+<glyph unicode="&#x3c;" horiz-adv-x="614" d="M68 512l378 385l97 -78l-305 -307l309 -307l-96 -78z" />
+<glyph unicode="=" horiz-adv-x="983" d="M90 293v123h782v-123h-782zM90 598v123h782v-123h-782z" />
+<glyph unicode="&#x3e;" horiz-adv-x="614" d="M68 205l96 -78l383 385l-379 385l-96 -78l305 -307z" />
+<glyph unicode="?" horiz-adv-x="815" d="M121 84q0 51 40 88t91 37q49 0 84 -33t35 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82zM197 1382l100 105q47 -66 113 -66h180q227 0 227 -176q0 -133 -119 -272l-182 -207q-35 -39 -58.5 -68.5t-40.5 -61.5l-27 -48q-9 -16 -18.5 -54t-11.5 -50.5t-10 -68t-12 -77.5h-125 q4 20 14.5 97t16.5 101.5t23.5 81t46 100.5t69.5 91l182 205q35 39 64.5 98t29.5 105q0 82 -100 81h-172q-135 0 -190 84z" />
+<glyph unicode="@" horiz-adv-x="1622" d="M88 727q0 299 223.5 529.5t519.5 230.5q295 0 490 -179.5t195 -471.5q0 -113 -56.5 -236t-160 -212t-218.5 -89q-72 0 -119 35t-47 104q0 12 5 33q-119 -102 -175 -127q-45 -20 -90 -20q-98 0 -152 80.5t-54 183.5q0 94 18 185t58 178t116 141.5t176 54.5q145 0 225 -117 l21 84h133l-141 -592q-12 -45 -13 -67q0 -55 56 -56q125 0 218 151.5t93 285.5q0 252 -163 394t-419 142q-254 0 -429 -195.5t-175 -453.5q0 -270 179.5 -457.5t449.5 -187.5q152 0 292 65.5t230 182.5l96 -52q-94 -139 -270 -225t-348 -86q-319 0 -541.5 222.5 t-222.5 541.5zM588 610q0 -59 21.5 -106t74.5 -47q18 0 43 6t41 12t47 22.5t41 22.5l43 26q33 19 35 21l84 369q-76 98 -205 98q-78 0 -132 -83t-73.5 -174t-19.5 -167z" />
+<glyph unicode="A" horiz-adv-x="1052" d="M-45 0l612 1290h178l205 -1290h-168l-61 416h-393l-203 -416h-170zM389 551h313l-69 569z" />
+<glyph unicode="B" horiz-adv-x="1017" d="M88 20l201 1268h317q346 0 346 -262q0 -109 -68.5 -208t-172.5 -128q104 -6 162.5 -73.5t58.5 -172.5q0 -217 -155.5 -346t-375.5 -129q-120 0 -313 51zM270 135q88 -27 150 -26q147 0 247.5 87t100.5 236q0 59 -23.5 98t-68.5 55.5t-86 21.5t-101 5h-143zM367 745 q27 0 76 -1t75 -1q115 0 194 75t79 190q0 154 -207 153h-152z" />
+<glyph unicode="C" horiz-adv-x="1007" d="M119 465q0 176 55 347t160 298q176 211 409 211q197 0 318 -88l-76 -100q-102 57 -262 57q-84 0 -165 -60.5t-134 -142.5q-141 -217 -141 -518q0 -152 64.5 -261.5t205.5 -109.5q164 0 291 90l55 -104q-74 -53 -177.5 -85t-197.5 -32q-209 0 -307 140.5t-98 357.5z" />
+<glyph unicode="D" horiz-adv-x="1128" d="M88 0l205 1290h373q199 0 292 -124t93 -330q0 -145 -36 -287.5t-105.5 -267.5t-191.5 -203t-278 -78h-352zM270 131h191q119 0 206 70.5t132 183.5t65.5 225.5t20.5 220.5q0 328 -248 328h-203z" />
+<glyph unicode="E" horiz-adv-x="913" d="M88 0l205 1290h663l-22 -137h-500l-65 -410h383l-21 -141h-383l-74 -461h521l-23 -141h-684z" />
+<glyph unicode="F" horiz-adv-x="847" d="M88 0l205 1290h606l-22 -135h-443l-65 -412h350l-21 -141h-350l-96 -602h-164z" />
+<glyph unicode="G" horiz-adv-x="1062" d="M119 465q0 176 55 347t160 298q176 211 409 211q162 0 320 -88l-82 -105q-98 63 -258 64q-84 0 -165 -61.5t-134 -143.5q-141 -217 -141 -518q0 -152 64.5 -261.5t205.5 -109.5q106 0 184 29l68 424h151l-84 -531q-139 -53 -344 -53q-211 0 -310 139.5t-99 358.5z" />
+<glyph unicode="H" horiz-adv-x="1122" d="M88 0l205 1290h164l-88 -547h467l88 547h163l-204 -1290h-164l96 604h-467l-96 -604h-164z" />
+<glyph unicode="I" horiz-adv-x="487" d="M88 0l205 1290h160l-205 -1290h-160z" />
+<glyph unicode="J" horiz-adv-x="487" d="M-113 -223q174 53 195 178l211 1335h160l-213 -1347q-33 -207 -336 -277z" />
+<glyph unicode="K" horiz-adv-x="931" d="M88 0l205 1290h164l-92 -585l327 342q72 74 72 190q0 27 -2 39l164 29q6 -31 6 -64q0 -141 -105 -250l-350 -356l432 -586v-49h-172l-399 539l-86 -539h-164z" />
+<glyph unicode="L" horiz-adv-x="763" d="M88 0l205 1290h156l-187 -1163h457l-19 -127h-612z" />
+<glyph unicode="M" horiz-adv-x="1519" d="M88 0l205 1290h217l188 -880q29 -141 35 -209q70 170 90 209l445 880h217l-205 -1290h-164l139 877q8 59 41 178l-520 -1055h-143l-223 1057q-8 -119 -19 -176l-139 -881h-164z" />
+<glyph unicode="N" horiz-adv-x="1134" d="M88 0l205 1290h215l280 -985l19 178l129 807h164l-205 -1290h-168l-319 1057q-2 -86 -17 -180l-139 -877h-164z" />
+<glyph unicode="O" horiz-adv-x="1120" d="M119 473q0 100 21.5 211t67.5 225.5t110.5 205.5t160.5 148.5t209 57.5q98 0 170 -45t111 -121t56 -159t17 -175q0 -127 -34.5 -270t-101 -276.5t-180.5 -220.5t-253 -87q-98 0 -171 46t-110.5 123t-55 160t-17.5 177zM276 436q0 -334 218 -334q86 0 155.5 55.5 t111.5 139.5t70.5 187.5t40 193.5t11.5 164q0 344 -217 344q-104 0 -185.5 -84t-122.5 -209t-61.5 -243t-20.5 -214z" />
+<glyph unicode="P" horiz-adv-x="993" d="M88 0l205 1290h278q182 0 302 -76.5t120 -248.5q0 -223 -137 -363.5t-344 -140.5q-96 0 -180 45l-80 -506h-164zM352 637q100 -43 160 -43q133 0 224 102.5t91 247.5q0 113 -78.5 164t-197.5 51h-115z" />
+<glyph unicode="Q" horiz-adv-x="1071" d="M94 485q0 129 35 269.5t100.5 269.5t179 213t255.5 84q98 0 169.5 -45t110.5 -121t56.5 -160t17.5 -174q0 -356 -170 -606t-502 -373q10 -4 40 -20l39 -22q9 -5 34.5 -17l38 -17.5t36 -13.5t41 -10t40 -5t46.5 -3q135 0 281 47l-33 -166q-68 -18 -168 -18q-47 0 -88 4 t-85 17l-69 21q-26 7 -76 33l-66 35q-15 8 -76 44l-76 44l-17 70q199 109 254 143q-170 41 -259 168t-89 309zM254 477q0 -334 311 -375q154 119 223.5 318t69.5 422q0 344 -217 344q-104 0 -184 -77t-121 -194.5t-61.5 -229.5t-20.5 -208z" />
+<glyph unicode="R" horiz-adv-x="1019" d="M88 0l205 1290h278q182 0 302 -76.5t120 -248.5q0 -176 -110.5 -319.5t-282.5 -174.5l315 -422l-8 -49h-159l-351 471q-37 12 -65 31l-80 -502h-164zM352 637q86 -43 146 -43q131 0 230 107.5t99 242.5q0 113 -78.5 164t-197.5 51h-115z" />
+<glyph unicode="S" horiz-adv-x="880" d="M53 88l84 113q119 -98 228 -99q94 0 176 76t82 170q0 63 -47.5 117.5t-114.5 97.5l-134 89q-67 46 -114 116t-47 158q0 176 120 285.5t296 109.5q76 0 152.5 -42t125.5 -103l-96 -80q-37 43 -93.5 70.5t-109.5 27.5q-92 0 -158.5 -65.5t-66.5 -157.5q0 -59 32.5 -108.5 t83.5 -82.5l108 -72q58 -40 108.5 -79t83 -102.5t32.5 -139.5q0 -182 -124.5 -300t-309.5 -118q-174 0 -297 119z" />
+<glyph unicode="T" horiz-adv-x="800" d="M102 1143l23 143h788l-22 -143h-316l-180 -1143h-159l180 1143h-314z" />
+<glyph unicode="U" horiz-adv-x="1114" d="M135 358q0 72 12 144l125 788h164l-125 -790q-12 -70 -12 -144q0 -254 195 -254q244 0 309 400l125 788h164l-127 -796q-16 -106 -52 -196.5t-94.5 -167.5t-147.5 -120t-200 -43q-172 0 -254 107.5t-82 283.5z" />
+<glyph unicode="V" horiz-adv-x="993" d="M143 1290h179l161 -1093l303 567q66 121 66 311v215h172v-211q0 -205 -86 -360l-391 -719h-189z" />
+<glyph unicode="W" horiz-adv-x="1519" d="M164 1290h174l53 -913q1 -15 2 -35q0 -40 -6 -100q20 78 43 135l363 913h163l66 -913q4 -36 4 -77q0 -28 -2 -58q20 63 61 147l189 404q6 12 21 46l23 49q7 15 18.5 45t17.5 50.5t10 48t4 53.5v205h172v-211q0 -57 -20.5 -128.5t-36.5 -107.5l-58 -120l-356 -723h-166 q-6 111 -23.5 328t-27.5 388t-14 326q-6 -18 -20.5 -53t-16.5 -43l-365 -946h-174z" />
+<glyph unicode="X" horiz-adv-x="1013" d="M8 0v45l455 617l-273 628h179l209 -473l350 473h137v-45l-422 -575l295 -670h-188l-222 512l-374 -512h-146z" />
+<glyph unicode="Y" horiz-adv-x="882" d="M92 1196l107 113q72 -45 136 -139.5t91 -180.5q52 -157 52 -272q0 -16 -1 -31l31 115q37 137 150.5 301t228.5 223l98 -104q-172 -104 -286.5 -343t-159.5 -483l-70 -395h-162l74 457q-8 133 -32.5 263t-91.5 272.5t-165 203.5z" />
+<glyph unicode="Z" horiz-adv-x="909" d="M25 0v139l661 1008h-457l13 143h649l-14 -143l-672 -1004h629l-23 -143h-786z" />
+<glyph unicode="[" horiz-adv-x="589" d="M18 -319l289 1818h318l-21 -119h-190l-250 -1581h190l-18 -118h-318z" />
+<glyph unicode="\" horiz-adv-x="686" d="M25 1550h127l530 -1853h-127z" />
+<glyph unicode="]" horiz-adv-x="595" d="M-8 -319l18 118h191l250 1581h-191l21 119h317l-289 -1818h-317z" />
+<glyph unicode="^" horiz-adv-x="1277" d="M145 655l435 795h114q195 -381 434 -795h-143l-348 629l-348 -629h-144z" />
+<glyph unicode="_" d="M0 -154h922v-122h-922v122z" />
+<glyph unicode="`" horiz-adv-x="518" d="M102 1411l148 129q86 -150 268 -299l-80 -92q-211 123 -336 262z" />
+<glyph unicode="a" horiz-adv-x="1003" d="M92 248q0 117 34 249t97.5 254.5t169 202.5t234.5 80q117 0 284 -33l-125 -860q0 -4 -1 -9t-1 -7q0 -49 47 -49q20 0 50 12l26 -78q-66 -39 -135 -39q-63 0 -104 41t-41 107q0 20 7 55t9 47q-45 -96 -156.5 -174t-214.5 -78q-180 0 -180 279zM258 262q0 -156 76 -156 q106 0 220 136.5t132 251.5l64 397q-55 14 -121 14q-86 0 -161 -72.5t-118 -177t-67.5 -210t-24.5 -183.5z" />
+<glyph unicode="b" horiz-adv-x="1038" d="M102 92l211 1329h156l-78 -493q113 106 266 106q143 0 216 -107.5t73 -256.5q0 -170 -54 -325t-180 -265.5t-302 -110.5q-76 0 -161.5 35t-146.5 88zM272 178q72 -84 191 -84q80 0 145.5 62.5t102.5 156t56 186.5t19 167q0 240 -172 239q-129 0 -245 -112z" />
+<glyph unicode="c" horiz-adv-x="849" d="M92 365q0 113 32 227.5t90 213.5t156.5 162.5t219.5 63.5q117 0 246 -100l-80 -94q-94 70 -183 69q-102 0 -179 -92t-109.5 -202.5t-32.5 -209.5q0 -53 10 -104t31.5 -99t64.5 -78t101 -30q49 0 132 48t134 96l59 -82q-74 -78 -174 -131.5t-196 -53.5q-154 0 -238 118 t-84 278z" />
+<glyph unicode="d" horiz-adv-x="1024" d="M92 379q0 162 56.5 308.5t179.5 246.5t288 100q123 0 187 -86q33 176 33 269q0 113 -43 176l120 53q74 -104 74 -258q0 -41 -6 -78l-119 -721q-31 -184 -134 -302t-279 -118q-174 0 -265.5 115t-91.5 295zM250 367q0 -119 48 -197t161 -78q43 0 77.5 14.5t58 33 t45.5 57.5t32 63.5t22.5 75.5t16.5 70.5t12 70.5l59 340q-66 92 -180 92q-94 0 -165.5 -53t-110.5 -139t-57.5 -175t-18.5 -175z" />
+<glyph unicode="e" horiz-adv-x="894" d="M92 362q0 158 56.5 307.5t179.5 257t284 107.5q113 0 181.5 -57t68.5 -166q0 -270 -606 -397q-2 -16 -2 -47q0 -100 47 -187.5t139 -87.5q70 0 148 44t133 104l61 -84q-176 -186 -376 -187q-156 0 -235 115.5t-79 277.5zM268 539q426 92 426 284q0 88 -114 88 q-117 0 -202 -120.5t-110 -251.5z" />
+<glyph unicode="f" horiz-adv-x="550" d="M20 -330q125 209 150 475q49 494 66 740l-144 18l17 101h133l6 96q16 322 241 321q47 0 93 -16l-15 -111q-18 6 -43 6q-113 0 -121 -208q-4 -66 -4 -88h166l-2 -117l-172 -6q-8 -123 -24.5 -318.5t-30.5 -329.5l-12 -133q-20 -225 -213 -483z" />
+<glyph unicode="g" horiz-adv-x="907" d="M-41 -217q0 104 104.5 214t221.5 177l65 -96q-76 -51 -154.5 -130t-78.5 -136q0 -53 49 -75t110 -22q119 0 242 71t123 179q0 80 -55 124q-53 42 -128 42h-7l-7 43q2 4 19 24l21 25l21 26q15 19 20 27.5t18.5 27t19.5 29.5t16.5 27.5t15.5 29.5l11 29q6 15 8 30 q-43 -55 -116.5 -94.5t-141.5 -39.5q-125 0 -187.5 78t-62.5 205q0 193 109 314.5t301 121.5q127 0 303 -28q-8 -137 -39 -318q-43 -254 -84 -352q-31 -72 -71 -121q76 -12 123 -76.5t47 -154.5q0 -119 -88 -209t-204 -130t-231 -40q-51 0 -98 6t-99 23.5t-84 55.5t-32 93z M260 608q0 -68 36 -111.5t105 -43.5q84 0 153 76.5t89 164.5q18 92 29 211q-61 14 -183 15q-109 0 -169 -98.5t-60 -213.5z" />
+<glyph unicode="h" horiz-adv-x="1042" d="M90 0l225 1421h156l-96 -606q59 88 160.5 153.5t199.5 65.5q104 0 159.5 -41t55.5 -141q0 -29 -8 -90l-74 -469q-16 -104 -55 -174t-121 -152l-88 76q94 121 117 266l65 453q4 37 5 55q0 49 -26 69.5t-77 20.5q-76 0 -170 -70.5t-145 -146.5q-25 -37 -25 -45l-102 -645 h-156z" />
+<glyph unicode="i" horiz-adv-x="479" d="M90 0l160 1004h151l-159 -1004h-152zM244 1286q0 49 40 87t91 38q49 0 84 -32.5t35 -82.5q0 -51 -40 -88t-92 -37q-49 0 -83.5 33t-34.5 82z" />
+<glyph unicode="j" horiz-adv-x="479" d="M-123 -285q176 61 195 181l176 1108h151l-178 -1123q-16 -90 -57 -133q-92 -94 -270 -143zM244 1286q0 49 40 87t91 38q49 0 84 -32.5t35 -82.5q0 -51 -40 -88t-92 -37q-49 0 -83.5 33t-34.5 82z" />
+<glyph unicode="k" horiz-adv-x="983" d="M90 0l225 1421h152l-133 -837q158 10 284 69q59 29 110.5 79t51.5 104q0 43 -30 61q-25 15 -59 15q-7 0 -15 -1l-10 123q27 8 67 8q96 0 157.5 -50t61.5 -144q0 -100 -67.5 -175t-158.5 -109t-189 -38l370 -526h-196l-381 559l-88 -559h-152z" />
+<glyph unicode="l" horiz-adv-x="495" d="M137 225q0 94 15 178l161 1018h152l-162 -1018q-16 -94 -16 -182q0 -133 28 -196l-145 -43q-33 91 -33 243z" />
+<glyph unicode="m" horiz-adv-x="1576" d="M90 0l160 1004h156l-33 -193q39 72 145.5 147.5t181.5 75.5q104 0 168 -53q56 -47 57 -133q0 -11 -1 -23q49 82 136 145.5t171 63.5q233 0 233 -198q0 -37 -6 -74l-121 -762h-155l121 762q4 33 4 49q0 96 -99 96q-74 0 -167 -83t-146 -165l-102 -659h-156l121 762 q4 33 4 47q0 96 -111 96q-72 0 -157.5 -82t-147.5 -172l-100 -651h-156z" />
+<glyph unicode="n" horiz-adv-x="1062" d="M90 0l160 1004h156l-31 -189q51 82 157.5 150.5t202.5 68.5q104 0 159.5 -41t55.5 -141q0 -29 -8 -90l-121 -762h-155l120 762q6 55 7 57q0 88 -91 88q-98 0 -200.5 -82t-155.5 -180l-100 -645h-156z" />
+<glyph unicode="o" horiz-adv-x="1001" d="M92 385q0 143 55.5 288.5t172 253t266.5 107.5q162 0 242.5 -124t80.5 -296q0 -141 -56 -286.5t-173 -252t-264 -106.5q-162 0 -243 123t-81 293zM246 369q0 -115 43 -197t147 -82q84 0 148.5 57.5t100.5 145.5t53.5 175t17.5 163q0 117 -43 198.5t-148 81.5 q-109 0 -185.5 -101t-105 -219t-28.5 -222z" />
+<glyph unicode="p" horiz-adv-x="1097" d="M68 -358l168 1069l-146 -78l16 106l150 90l27 175h155l-10 -76q178 106 287 106q143 0 217 -107.5t74 -256.5q0 -104 -30 -222t-85 -227.5t-149.5 -181.5t-209.5 -72q-84 0 -146 41t-85 119l-78 -485h-155zM346 362q0 -111 46 -191.5t151 -80.5q78 0 139 64.5t95 161 t50.5 187.5t16.5 163q0 244 -160 243q-86 0 -276 -110l-50 -301q-12 -91 -12 -136z" />
+<glyph unicode="q" horiz-adv-x="1060" d="M92 342q0 111 33 228.5t92 223t158.5 173t216.5 67.5q80 0 174 -15t147 -32l54 -16l-211 -1331h-156l76 487q-96 -160 -283 -160q-152 0 -226.5 107.5t-74.5 267.5zM256 360q0 -106 37 -187t129 -81q68 0 126 42t95 106.5t59.5 130t32.5 127.5l60 381q-104 29 -164 28 q-100 0 -177 -52t-118 -137t-60.5 -175.5t-19.5 -182.5z" />
+<glyph unicode="r" horiz-adv-x="712" d="M90 0l160 1004h158l-31 -185l45 64q106 152 213 151q39 0 74.5 -27.5t54.5 -66.5l-119 -139q-31 63 -92 63q-43 0 -152 -131l-49 -61l-106 -672h-156z" />
+<glyph unicode="s" horiz-adv-x="843" d="M47 92l76 103q49 -39 115.5 -71t119.5 -32q80 0 146.5 49t66.5 127t-104 133l-197 107q-139 74 -139 211q0 154 112.5 234.5t272.5 80.5q86 0 163 -35.5t124 -103.5l-86 -76q-92 92 -223 92q-74 0 -138.5 -41t-64.5 -110q0 -33 19.5 -59.5t41 -41t56.5 -32.5l174 -92 q143 -76 143 -222q0 -156 -105.5 -250t-261.5 -94q-147 0 -311 123z" />
+<glyph unicode="t" horiz-adv-x="690" d="M143 903l17 101h143l29 178h143l-29 -178h203l-18 -119h-199l-108 -680q-3 -21 -4 -39q0 -26 8 -44q12 -30 63 -30q84 0 170 74l45 -100q-117 -96 -256 -97q-111 0 -155 61q-33 44 -33 113q0 25 4 54l110 688z" />
+<glyph unicode="u" horiz-adv-x="1038" d="M111 156q0 29 8 86l121 762h155l-121 -762q-6 -31 -6 -62q0 -84 94 -84q168 0 347 250l106 658h156l-135 -850q-4 -29 -5 -41q0 -39 35 -41l-67 -103h-6h-6q-49 0 -80 33q-33 35 -33 88t18 103q-63 -90 -162.5 -157t-199.5 -67q-109 0 -164 42.5t-55 144.5z" />
+<glyph unicode="v" horiz-adv-x="866" d="M70 1004h168l145 -828l279 457q39 63 38 153q0 111 -41 199l152 33q35 -78 35 -193q0 -141 -70 -256l-344 -569h-158z" />
+<glyph unicode="w" horiz-adv-x="1357" d="M82 1004h164l100 -816l324 816h161l89 -816l229 435q41 80 41 176t-33 184l150 35q31 -96 30 -203q0 -131 -53 -227l-321 -586l-168 -2l-62 512q-15 121 -14 226q0 42 2 81q-45 -176 -103 -307l-219 -512h-172z" />
+<glyph unicode="x" horiz-adv-x="864" d="M-20 2v37l370 481l-221 484h170l168 -386l192 191q27 27 27 82q0 53 -16 98l151 31q14 -43 15 -105q0 -109 -68 -176l-242 -237l244 -502h-174l-182 387l-299 -387z" />
+<glyph unicode="y" horiz-adv-x="882" d="M-16 -276q102 41 174.5 108.5t136.5 169.5l-211 1002h166l149 -832l297 504q20 37 21 94q0 106 -43 217l151 31q37 -92 37 -205q0 -119 -53 -207l-389 -649q-80 -135 -171 -215t-229 -123z" />
+<glyph unicode="z" horiz-adv-x="843" d="M20 0l11 145q258 358 604 734h-520l14 125h700l-16 -127q-324 -350 -623 -744h574l-16 -133h-728z" />
+<glyph unicode="{" horiz-adv-x="722" d="M74 541l16 96q76 0 134.5 81t72.5 165l57 360q18 127 72.5 196.5t169.5 69.5h121l6 -110h-121q-16 0 -29.5 -3t-23.5 -7.5t-19.5 -14.5l-14.5 -15t-11 -21.5t-9 -21.5t-8 -25l-5 -24q-1 -5 -5 -27.5t-4 -25.5l-55 -360q-14 -82 -68.5 -156.5t-126.5 -113.5 q51 -29 82 -89.5t31 -123.5q0 -33 -4 -49l-58 -361q-8 -66 -8 -96q0 -49 19.5 -67.5t70.5 -18.5h109l-39 -111h-117q-90 0 -131 42t-41 134q0 31 8 88l58 361q4 37 4 53q0 70 -35 132.5t-98 62.5z" />
+<glyph unicode="|" horiz-adv-x="454" d="M166 -37v1585h123v-1585h-123z" />
+<glyph unicode="}" horiz-adv-x="630" d="M-47 -221h108q35 0 58.5 11t37 23.5t22.5 44t12.5 46t9.5 57.5l57 361q14 82 67.5 154.5t127.5 107.5q-51 33 -82 94t-31 125q0 35 4 51l55 360q10 55 10.5 100.5t-16 65t-61.5 19.5h-121l39 110h121q88 0 128 -42t40 -132q0 -31 -9 -92l-57 -360q-4 -18 -4 -54 q0 -68 35 -130t98 -62l-16 -96q-76 0 -135.5 -82t-71.5 -166l-57 -361q-18 -127 -73.5 -195.5t-172.5 -68.5h-117z" />
+<glyph unicode="~" horiz-adv-x="1142" d="M281 504l20 127q8 8 28.5 35.5t26.5 33.5l24 23q17 16 31.5 20.5t37 9.5t51.5 5q76 0 201.5 -70t197.5 -70q111 0 184 119l-24 -147q-8 -8 -23.5 -26.5t-21.5 -23.5t-18.5 -17.5t-18.5 -15.5l-20 -10q-13 -7 -25 -8.5t-29.5 -3.5t-40.5 -2q-74 0 -200.5 70t-198.5 70 q-66 0 -100.5 -26.5t-81.5 -92.5z" />
+<glyph unicode="&#xa1;" horiz-adv-x="516" d="M25 -426q63 190 98 395l110 705h123l-80 -705q-25 -184 -92 -375zM201 911.5q0 49.5 40 87t91 37.5q49 0 84 -32.5t35 -82t-40 -87t-92 -37.5q-49 0 -83.5 32.5t-34.5 82z" />
+<glyph unicode="&#xa2;" horiz-adv-x="868" d="M100 365q0 133 44 271t124 228q133 143 285 164l22 139h93l-23 -137q76 -8 123 -40t100 -99l-102 -80q-66 82 -139 94l-129 -811q74 6 182 78l63 -74q-121 -117 -266 -129l-18 -119h-92l18 121q-143 23 -214 131.5t-71 262.5zM260 399q0 -246 148 -295l124 799 q-88 -25 -153.5 -116t-92 -192.5t-26.5 -195.5z" />
+<glyph unicode="&#xa3;" horiz-adv-x="905" d="M61 791l41 102h80v270q0 129 97.5 191.5t232.5 62.5q145 0 213 -57l-35 -94q-63 37 -166 37q-186 0 -186 -170v-240h274v-123h-274v-260q0 -180 -47 -385h145q119 -39 180 -39q47 0 96.5 26.5t80.5 65.5l22 -102q-41 -45 -102.5 -76t-118.5 -31q-27 0 -72 7.5t-76 15.5 l-30 8h-307q74 330 73 514v264z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1110" d="M16 498l82 129h119q4 41 8 63q2 23 13 66h-181l82 129h137q59 227 226.5 377.5t390.5 150.5q197 0 326 -143l-78 -123q-92 137 -279 137q-152 0 -271.5 -106.5t-170.5 -292.5h561l-82 -129h-516q-14 -57 -14 -68q-1 -4 -7 -61h457l-82 -129h-379q-1 -18 0 -35 q0 -167 72 -258q80 -100 223 -101q86 0 178.5 43t165.5 119l-26 -164q-145 -127 -348 -127q-195 0 -309 142q-101 125 -101 328q0 26 2 53h-199z" />
+<glyph unicode="&#xa5;" horiz-adv-x="882" d="M55 334l21 123h305q-4 63 -25 190h-247l20 123h203q-76 332 -240 432l107 107q72 -45 136 -139.5t91 -180.5q52 -157 52 -272q0 -16 -1 -31l31 115q37 137 150.5 301t228.5 223l98 -104q-104 -61 -192 -187.5t-146 -263.5h268l-20 -123h-293q-37 -111 -51 -190h311 l-20 -123h-314l-59 -334h-162l55 334h-307z" />
+<glyph unicode="&#xa7;" horiz-adv-x="860" d="M43 -190l57 112q147 -90 308 -90q86 0 141 42t55 126q0 20 -7 38.5t-15.5 33t-26.5 31t-29.5 25.5t-37 24.5t-35 19.5t-37.5 18l-33 17q-6 2 -62.5 28.5t-71.5 35.5l-59 37q-43 28 -58 49.5t-31.5 57.5t-16.5 74q0 127 74.5 197t199.5 86q-6 2 -35 16l-38 19 q-8 4 -35 18.5t-36 20.5l-32 21q-23 15 -31 26.5t-22 29t-20.5 34t-11.5 38t-5 43.5q0 139 98.5 213t241.5 74q158 0 295 -78l-55 -106q-139 66 -244 65q-80 0 -131 -42t-51 -120q0 -49 53 -91t129 -75.5t150.5 -71.5t128 -97.5t53.5 -133.5q0 -113 -58.5 -194.5 t-166.5 -106.5q49 -27 77.5 -45t65.5 -48.5t55.5 -69.5t18.5 -84q0 -154 -98.5 -236t-254.5 -82q-188 1 -356 101zM238 496q0 -57 52 -93t111 -36q92 0 153.5 41t61.5 129q0 66 -52 105.5t-120 39.5q-94 0 -150 -47t-56 -139z" />
+<glyph unicode="&#xa8;" horiz-adv-x="638" d="M121 1276q0 45 34.5 83t82.5 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM436 1276q0 45 35 83t82 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1800" d="M246 501.5q0 272.5 192.5 465t464.5 192.5q274 0 467 -192.5t193 -465t-193.5 -466t-466 -193.5t-465 193.5t-192.5 466zM346 502q0 -236 164 -397.5t399 -161.5q229 0 391 163.5t162 395t-163.5 395.5t-395 164t-394.5 -164t-163 -395zM594 500q0 154 82 262t231 108 q123 0 209 -79l-55 -70q-61 51 -154 51q-104 0 -150 -77t-46 -189q0 -117 50 -196t161 -79q76 0 172 70l43 -68q-41 -39 -104.5 -68.5t-115.5 -29.5q-152 0 -237.5 104.5t-85.5 260.5z" />
+<glyph unicode="&#xaa;" horiz-adv-x="745" d="M154 954q0 123 42 255t139 237.5t224 105.5q74 0 217 -24l-94 -656q0 -2 -1 -6t-1 -6q0 -37 35 -37q18 0 39 11l20 -60q-51 -31 -104 -31q-49 0 -80 32t-31 81q0 16 6 43t8 35q-37 -74 -120.5 -132.5t-161.5 -58.5q-137 0 -137 211zM281 965q0 -119 57 -119 q80 0 166 103.5t102 191.5q14 100 47 301q-35 12 -92 12q-86 0 -153.5 -93t-97 -202.5t-29.5 -193.5z" />
+<glyph unicode="&#xab;" horiz-adv-x="970" d="M68 512l378 385l97 -78l-305 -307l309 -307l-96 -78zM434 512l379 385l96 -78l-305 -307l309 -307l-96 -78z" />
+<glyph unicode="&#xac;" horiz-adv-x="1095" d="M94 760v123h826v-523l-121 -22v422h-705z" />
+<glyph unicode="&#xad;" horiz-adv-x="618" d="M113 461v123h393v-123h-393z" />
+<glyph unicode="&#xae;" horiz-adv-x="1800" d="M242 500q0 274 191.5 465.5t466 191.5t465.5 -191.5t191 -466t-192.5 -467t-464.5 -192.5t-464.5 194t-192.5 466zM342 500q0 -238 163 -398.5t400 -160.5q231 0 391 163.5t160 395t-164 395.5t-393 164q-231 0 -394 -164t-163 -395zM688 145v727h176q125 0 212 -59 t87 -178q0 -84 -57 -159t-139 -83l225 -217v-31h-109l-245 248q-23 6 -45 19v-267h-105zM793 498q57 -27 94 -27q76 0 122 45t46 123t-54.5 113.5t-136.5 35.5h-71v-290z" />
+<glyph unicode="&#xaf;" horiz-adv-x="632" d="M51 1174l21 120h561l-21 -120h-561z" />
+<glyph unicode="&#xb0;" horiz-adv-x="641" d="M63 995q0 129 102.5 228.5t231.5 99.5q104 0 174 -68.5t70 -173.5q0 -133 -99.5 -230t-232.5 -97q-104 0 -175 68.5t-71 172.5zM164 1008q0 -72 44 -117t114 -45q88 0 154.5 69.5t66.5 153.5q0 72 -44 118t-116 46q-82 0 -150.5 -68.5t-68.5 -156.5z" />
+<glyph unicode="&#xb1;" horiz-adv-x="915" d="M92 451v122h330v355h119v-355h331v-122h-331v-256h-119v256h-330zM113 -2v123h739v-123h-739z" />
+<glyph unicode="&#xb2;" d="M96 127q195 98 383 293q78 80 142.5 179t64.5 177q0 66 -44 96.5t-112 30.5q-100 0 -260 -98l-51 100q100 72 175 100.5t184 28.5q274 0 274 -256q0 -117 -92 -251t-205 -231t-225 -161h456l-22 -135h-660z" />
+<glyph unicode="&#xb3;" d="M57 -225q92 2 188.5 29.5t182.5 78.5t141.5 134t55.5 182q0 154 -244 153q-74 0 -166 -10l-8 117q10 2 28.5 4t33.5 4l30 4q23 4 134.5 73.5t150.5 98.5q115 80 114 170q0 45 -31.5 68.5t-78.5 23.5q-100 0 -297 -104l-43 100q84 55 192.5 94t198.5 39q98 0 157.5 -52 t59.5 -148q0 -63 -30.5 -120t-89 -103t-103.5 -72.5t-115 -63.5q111 0 188.5 -63.5t77.5 -171.5q0 -182 -106.5 -317.5t-263 -199t-334.5 -63.5z" />
+<glyph unicode="&#xb4;" horiz-adv-x="573" d="M104 1241q225 147 363 299l106 -129q-160 -137 -417 -262z" />
+<glyph unicode="&#xb5;" horiz-adv-x="1062" d="M127 -360q59 137 59 229q0 61 -11 186t-11 187v762h155v-762q0 -76 21.5 -111t93.5 -35q70 0 162 36t143 81v791h156v-850q0 -80 43 -82l-51 -103q-55 0 -95 32t-49 85q-63 -51 -152 -84t-171 -33q-31 0 -88 31q39 -117 39 -180q0 -76 -39 -144z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1132" d="M102 831q0 203 125 346.5t326 143.5q27 0 39 -2l326 -31l12 90h112q-2 -14 -5 -28l-7 -33q-4 -18 -6 -29l109 21l-23 -105l-111 -24q-109 -266 -108 -496q0 -94 27 -176q35 -111 34 -238q0 -211 -65 -354l-185 74q78 150 78 370q0 45 -9 131.5t-9 131.5q0 270 125 559 l-289 24q-6 1 -12 1q-60 0 -109 -55q-53 -60 -75.5 -137t-22.5 -145q0 -82 39 -145t114 -66l-98 -139q-33 -4 -49 -4q-137 0 -210 88t-73 227z" />
+<glyph unicode="&#xb7;" horiz-adv-x="559" d="M145 494q0 51 40 87.5t91 36.5q49 0 84 -32.5t35 -81.5q0 -51 -39 -88t-90 -37q-49 0 -85 33t-36 82z" />
+<glyph unicode="&#xb8;" horiz-adv-x="686" d="M371 -293q193 96 192 162q0 51 -57 51q-27 0 -105 -18l17 96h213q55 -47 55 -109q0 -74 -82 -143.5t-166 -101.5z" />
+<glyph unicode="&#xb9;" d="M238 856l16 98q88 0 199 29l75 18h142l-158 -1001h-152l136 856h-258z" />
+<glyph unicode="&#xba;" horiz-adv-x="790" d="M170 1057q0 176 104.5 334.5t270.5 158.5q123 0 184.5 -94t61.5 -225q0 -109 -43 -218.5t-131.5 -190.5t-200.5 -81q-123 0 -184.5 92.5t-61.5 223.5zM287 1044q0 -213 143 -213q84 0 142.5 77t80 166t21.5 169q0 213 -144 213q-63 0 -112 -44t-77 -110.5t-41 -133.5 t-13 -124z" />
+<glyph unicode="&#xbb;" horiz-adv-x="1048" d="M137 205l96 -78l383 385l-378 385l-97 -78l305 -307zM504 205l96 -78l383 385l-379 385l-96 -78l305 -307z" />
+<glyph unicode="&#xbc;" horiz-adv-x="2844" d="M238 856l16 98q88 0 199 29l75 18h142l-158 -1001h-152l136 856h-258zM631 -268l1163 1794h129l-1163 -1794h-129zM1958 0l12 133q266 434 641 871h166l-137 -871h131l-21 -133h-135q-53 -240 -123 -342l-114 51q47 98 90 291h-510zM2124 133h364l111 666 q-274 -338 -475 -666z" />
+<glyph unicode="&#xbd;" horiz-adv-x="2844" d="M238 856l16 98q88 0 199 29l75 18h142l-158 -1001h-152l136 856h-258zM631 -268l1163 1794h129l-1163 -1794h-129zM2019 127q195 98 383 293q78 80 142.5 179t64.5 177q0 66 -44 96.5t-111 30.5q-100 0 -261 -98l-51 100q100 72 175 100.5t184 28.5q274 0 274 -256 q0 -117 -92 -251t-205 -231t-225 -161h457l-23 -135h-659z" />
+<glyph unicode="&#xbe;" horiz-adv-x="2844" d="M57 -225q92 2 188.5 29.5t182.5 78.5t141.5 134t55.5 182q0 154 -244 153q-74 0 -166 -10l-8 117q10 2 28.5 4t33.5 4l30 4q23 4 134.5 73.5t150.5 98.5q115 80 114 170q0 45 -31.5 68.5t-78.5 23.5q-100 0 -297 -104l-43 100q84 55 192.5 94t198.5 39q98 0 157.5 -52 t59.5 -148q0 -63 -30.5 -120t-89 -103t-103.5 -72.5t-115 -63.5q111 0 188.5 -63.5t77.5 -171.5q0 -182 -106.5 -317.5t-263 -199t-334.5 -63.5zM631 -268l1163 1794h129l-1163 -1794h-129zM1958 0l12 133q266 434 641 871h166l-137 -871h131l-21 -133h-135 q-53 -240 -123 -342l-114 51q47 98 90 291h-510zM2124 133h364l111 666q-274 -338 -475 -666z" />
+<glyph unicode="&#xbf;" horiz-adv-x="829" d="M33 -242q0 135 121 273l180 207q41 45 67 83l42 59q15 22 27.5 64.5t15.5 55t13.5 78t14.5 88.5h125l-15.5 -97.5t-17.5 -100.5t-23.5 -83t-46 -99t-69.5 -91l-182 -205q-35 -39 -65 -98.5t-30 -104.5q0 -82 103 -82h170q135 0 190 -84l-100 -104q-47 66 -113 65h-180 q-227 0 -227 176zM479 909q0 49 40 87t91 38q49 0 84 -32.5t35 -81.5q0 -51 -39 -88t-90 -37q-49 0 -85 32.5t-36 81.5z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1052" d="M-45 0l612 1290h178l205 -1290h-168l-61 416h-393l-203 -416h-170zM389 551h313l-69 569zM463 1677l147 129q84 -150 269 -299l-82 -92q-211 123 -334 262z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1052" d="M-45 0l612 1290h178l205 -1290h-168l-61 416h-393l-203 -416h-170zM389 551h313l-69 569zM492 1507q225 147 362 299l107 -129q-162 -137 -418 -262z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1052" d="M-45 0l612 1290h178l205 -1290h-168l-61 416h-393l-203 -416h-170zM338 1520q94 51 222 137t179 131q104 -143 244 -275l-92 -90q-125 125 -176 195q-197 -127 -314 -193zM389 551h313l-69 569z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1052" d="M-45 0l612 1290h178l205 -1290h-168l-61 416h-393l-203 -416h-170zM299 1587q53 66 110 91q43 19 101 20q19 0 39 -2q37 -4 127 -46t147 -42q70 0 97 100l102 -20q-20 -109 -85 -159q-54 -42 -129 -42q-15 0 -32 2q-59 6 -136 46t-138 40q-37 0 -74 -15.5t-55 -31.5 l-21 -17zM389 551h313l-69 569z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1052" d="M-45 0l612 1290h178l205 -1290h-168l-61 416h-393l-203 -416h-170zM389 551h313l-69 569zM432 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM748 1542q0 45 35.5 83t80.5 38q35 0 59.5 -23.5t24.5 -58.5 q0 -45 -39 -80t-84 -35q-33 0 -55 21.5t-22 54.5z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1052" d="M-45 0l612 1290h178l205 -1290h-168l-61 416h-393l-203 -416h-170zM389 551h313l-69 569zM494 1571q0 98 77.5 175t176.5 77q78 0 129 -52.5t51 -130.5q0 -98 -78 -174.5t-176 -76.5q-78 0 -129 52t-51 130zM586 1587q0 -43 29.5 -73.5t72.5 -30.5q55 0 100.5 44t45.5 97 q0 43 -28 74t-71 31q-57 0 -103 -43.5t-46 -98.5z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1476" d="M-45 0l612 1290h191l28 -432l70 432h664l-23 -137h-500l-65 -410h383l-21 -141h-383l-73 -461h520l-23 -141h-684l66 416h-389l-203 -416h-170zM389 551h305l-63 569z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1007" d="M119 465q0 176 55 347t160 298q176 211 409 211q197 0 318 -88l-78 -107q-109 66 -260 66q-84 0 -166 -62.5t-133 -142.5q-141 -217 -141 -518q0 -152 64.5 -261.5t205.5 -109.5q164 0 291 90l55 -104q-106 -76 -252 -104q39 -47 39 -91q0 -74 -82 -143.5t-166 -101.5 l-67 63q193 88 192 162q0 51 -57 51q-27 0 -105 -18l13 78q-158 39 -226.5 173t-68.5 312z" />
+<glyph unicode="&#xc8;" horiz-adv-x="913" d="M88 0l205 1290h663l-22 -137h-500l-65 -410h383l-21 -141h-383l-74 -461h521l-23 -141h-684zM461 1677l147 129q86 -150 269 -299l-80 -92q-211 123 -336 262z" />
+<glyph unicode="&#xc9;" horiz-adv-x="913" d="M88 0l205 1290h663l-22 -137h-500l-65 -410h383l-21 -141h-383l-74 -461h521l-23 -141h-684zM440 1507q225 147 363 299l106 -129q-162 -137 -420 -262z" />
+<glyph unicode="&#xca;" horiz-adv-x="913" d="M88 0l205 1290h663l-22 -137h-500l-65 -410h383l-21 -141h-383l-74 -461h521l-23 -141h-684zM307 1520q92 53 220 138t180 130q104 -143 243 -275l-92 -90q-125 125 -176 195q-197 -127 -313 -193z" />
+<glyph unicode="&#xcb;" horiz-adv-x="913" d="M88 0l205 1290h663l-22 -137h-500l-65 -410h383l-21 -141h-383l-74 -461h521l-23 -141h-684zM420 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM735 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5 q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xcc;" horiz-adv-x="487" d="M88 0l205 1290h160l-205 -1290h-160zM166 1677l147 129q84 -150 267 -299l-80 -92q-211 123 -334 262z" />
+<glyph unicode="&#xcd;" horiz-adv-x="487" d="M88 0l205 1290h160l-205 -1290h-160zM195 1507q102 66 193 140.5t132 117.5l39 41l107 -129q-162 -137 -420 -262z" />
+<glyph unicode="&#xce;" horiz-adv-x="487" d="M88 1520q94 51 222 137t179 131q104 -143 244 -275l-92 -90q-125 125 -176 195q-197 -127 -313 -193zM111 0l204 1290h160l-205 -1290h-159z" />
+<glyph unicode="&#xcf;" horiz-adv-x="487" d="M88 0l205 1290h160l-205 -1290h-160zM147 1542q0 45 35 83t82 38q33 0 57.5 -23.5t24.5 -58.5q0 -45 -38 -80t-83 -35q-33 0 -55.5 21.5t-22.5 54.5zM463 1542q0 45 34.5 83t82.5 38q33 0 57.5 -23.5t24.5 -58.5q0 -45 -38 -80t-83 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1134" d="M88 0l205 1290h215l280 -985l19 178l129 807h164l-205 -1290h-168l-319 1057q-2 -86 -17 -180l-139 -877h-164zM395 1587q53 66 110 91q43 19 101 20q19 0 39 -2q37 -4 127 -46t148 -42q70 0 96 100l102 -20q-20 -109 -85 -159q-54 -42 -129 -42q-15 0 -32 2 q-59 6 -136 46t-138 40q-37 0 -74 -15.5t-57 -31.5l-18 -17z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1120" d="M119 473q0 100 21.5 211t67.5 225.5t110.5 205.5t160.5 148.5t209 57.5q98 0 170 -45t111 -121t56 -159t17 -175q0 -127 -34.5 -270t-101 -276.5t-180.5 -220.5t-253 -87q-98 0 -171 46t-110.5 123t-55 160t-17.5 177zM276 436q0 -334 218 -334q86 0 155.5 55.5 t111.5 139.5t70.5 187.5t40 193.5t11.5 164q0 344 -217 344q-104 0 -185.5 -84t-122.5 -209t-61.5 -243t-20.5 -214zM498 1677l147 129q84 -150 268 -299l-79 -92q-213 123 -336 262z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1120" d="M119 473q0 100 21.5 211t67.5 225.5t110.5 205.5t160.5 148.5t209 57.5q98 0 170 -45t111 -121t56 -159t17 -175q0 -127 -34.5 -270t-101 -276.5t-180.5 -220.5t-253 -87q-98 0 -171 46t-110.5 123t-55 160t-17.5 177zM276 436q0 -334 218 -334q86 0 155.5 55.5 t111.5 139.5t70.5 187.5t40 193.5t11.5 164q0 344 -217 344q-104 0 -185.5 -84t-122.5 -209t-61.5 -243t-20.5 -214zM545 1507q225 147 362 299l107 -129q-162 -137 -418 -262z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1120" d="M119 473q0 100 21.5 211t67.5 225.5t110.5 205.5t160.5 148.5t209 57.5q98 0 170 -45t111 -121t56 -159t17 -175q0 -127 -34.5 -270t-101 -276.5t-180.5 -220.5t-253 -87q-98 0 -171 46t-110.5 123t-55 160t-17.5 177zM276 436q0 -334 218 -334q86 0 155.5 55.5 t111.5 139.5t70.5 187.5t40 193.5t11.5 164q0 344 -217 344q-104 0 -185.5 -84t-122.5 -209t-61.5 -243t-20.5 -214zM387 1520q94 51 222 137t179 131q104 -143 244 -275l-92 -90q-125 125 -176 195q-197 -127 -313 -193z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1120" d="M119 473q0 100 21.5 211t67.5 225.5t110.5 205.5t160.5 148.5t209 57.5q98 0 170 -45t111 -121t56 -159t17 -175q0 -127 -34.5 -270t-101 -276.5t-180.5 -220.5t-253 -87q-98 0 -171 46t-110.5 123t-55 160t-17.5 177zM276 436q0 -334 218 -334q86 0 155.5 55.5 t111.5 139.5t70.5 187.5t40 193.5t11.5 164q0 344 -217 344q-104 0 -185.5 -84t-122.5 -209t-61.5 -243t-20.5 -214zM365 1587q53 66 109 91q43 19 101 20q19 0 39 -2q37 -4 127 -46t148 -42q70 0 96 100l102 -20q-20 -109 -85 -159q-54 -42 -129 -42q-15 0 -31 2 q-59 6 -136 46t-139 40q-37 0 -73.5 -15.5t-55.5 -31.5l-20 -17z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1120" d="M119 473q0 100 21.5 211t67.5 225.5t110.5 205.5t160.5 148.5t209 57.5q98 0 170 -45t111 -121t56 -159t17 -175q0 -127 -34.5 -270t-101 -276.5t-180.5 -220.5t-253 -87q-98 0 -171 46t-110.5 123t-55 160t-17.5 177zM276 436q0 -334 218 -334q86 0 155.5 55.5 t111.5 139.5t70.5 187.5t40 193.5t11.5 164q0 344 -217 344q-104 0 -185.5 -84t-122.5 -209t-61.5 -243t-20.5 -214zM481 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38 -80t-85 -35q-33 0 -55.5 21.5t-22.5 54.5zM797 1542q0 45 35.5 83t80.5 38 q35 0 59.5 -23.5t24.5 -58.5q0 -45 -37.5 -80t-85.5 -35q-33 0 -55 21.5t-22 54.5z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1120" d="M119 473q0 100 21.5 211t67.5 225.5t110.5 205.5t160.5 148.5t209 57.5q78 0 146 -31l114 260h103l-140 -315q131 -133 131 -414q0 -127 -34.5 -270t-101 -276.5t-180.5 -220.5t-253 -87q-66 0 -115 19l-129 -289h-102l149 336q-157 125 -157 440zM276 436 q0 -174 64 -260l434 979q-47 31 -108 31q-104 0 -185.5 -84t-122.5 -209t-61.5 -243t-20.5 -214zM416 117q39 -14 78 -15q86 0 155.5 55.5t111.5 139.5t70.5 187.5t40 193.5t11.5 164q0 141 -43 233z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1114" d="M135 358q0 72 12 144l125 788h164l-125 -790q-12 -70 -12 -144q0 -254 195 -254q244 0 309 400l125 788h164l-127 -796q-16 -106 -52 -196.5t-94.5 -167.5t-147.5 -120t-200 -43q-172 0 -254 107.5t-82 283.5zM520 1677l148 129q86 -150 268 -299l-80 -92 q-211 123 -336 262z" />
+<glyph unicode="&#xda;" horiz-adv-x="1114" d="M135 358q0 72 12 144l125 788h164l-125 -790q-12 -70 -12 -144q0 -254 195 -254q244 0 309 400l125 788h164l-127 -796q-16 -106 -52 -196.5t-94.5 -167.5t-147.5 -120t-200 -43q-172 0 -254 107.5t-82 283.5zM502 1507q225 147 362 299l107 -129q-162 -137 -418 -262z " />
+<glyph unicode="&#xdb;" horiz-adv-x="1114" d="M135 358q0 72 12 144l125 788h164l-125 -790q-12 -70 -12 -144q0 -254 195 -254q244 0 309 400l125 788h164l-127 -796q-16 -106 -52 -196.5t-94.5 -167.5t-147.5 -120t-200 -43q-172 0 -254 107.5t-82 283.5zM401 1520q94 51 222.5 137t179.5 131q104 -143 244 -275 l-93 -90q-125 125 -176 195q-197 -127 -313 -193z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1114" d="M135 358q0 72 12 144l125 788h164l-125 -790q-12 -70 -12 -144q0 -254 195 -254q244 0 309 400l125 788h164l-127 -796q-16 -106 -52 -196.5t-94.5 -167.5t-147.5 -120t-200 -43q-172 0 -254 107.5t-82 283.5zM475 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5 q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM791 1542q0 45 35.5 83t80.5 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55 21.5t-22 54.5z" />
+<glyph unicode="&#xdd;" horiz-adv-x="882" d="M92 1196l107 113q72 -45 136 -139.5t91 -180.5q52 -157 52 -272q0 -16 -1 -31l31 115q37 137 150.5 301t228.5 223l98 -104q-172 -104 -286.5 -343t-159.5 -483l-70 -395h-162l74 457q-8 133 -32.5 263t-91.5 272.5t-165 203.5zM860 1540q225 147 363 299l106 -129 q-160 -137 -418 -262z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1122" d="M20 -330q127 213 152 475l64 740l-144 18l17 101h139l16 155q12 133 139 212t271 79q147 0 245.5 -82t98.5 -225q0 -115 -68 -244q-86 14 -110 14q-76 0 -140.5 -41t-64.5 -112q0 -33 20.5 -60.5t41 -41t57.5 -31.5l174 -92q154 -82 153 -248q0 -154 -114.5 -237 t-274.5 -83q-80 0 -163 35t-136 92l76 105q45 -43 108.5 -77t116.5 -34q76 0 150 48t74 122q0 57 -45.5 100t-111 74l-130 64.5t-109.5 90t-45 132.5q0 143 108.5 227t258.5 88q29 72 28 129q0 86 -57 125t-145 39q-90 0 -166 -54t-84 -140l-111 -1096q-18 -170 -198 -420z " />
+<glyph unicode="&#xe0;" horiz-adv-x="1003" d="M92 248q0 117 34 249t97.5 254.5t169 202.5t234.5 80q117 0 284 -33l-125 -860q0 -4 -1 -9t-1 -7q0 -49 47 -49q20 0 50 12l26 -78q-66 -39 -135 -39q-63 0 -104 41t-41 107q0 20 7 55t9 47q-45 -96 -156.5 -174t-214.5 -78q-180 0 -180 279zM258 262q0 -156 76 -156 q106 0 220 136.5t132 251.5l64 397q-55 14 -121 14q-86 0 -161 -72.5t-118 -177t-67.5 -210t-24.5 -183.5zM473 1411l148 129q86 -150 268 -299l-80 -92q-211 123 -336 262z" />
+<glyph unicode="&#xe1;" horiz-adv-x="1003" d="M92 248q0 117 34 249t97.5 254.5t169 202.5t234.5 80q117 0 284 -33l-125 -860q0 -4 -1 -9t-1 -7q0 -49 47 -49q20 0 50 12l26 -78q-66 -39 -135 -39q-63 0 -104 41t-41 107q0 20 7 55t9 47q-45 -96 -156.5 -174t-214.5 -78q-180 0 -180 279zM258 262q0 -156 76 -156 q106 0 220 136.5t132 251.5l64 397q-55 14 -121 14q-86 0 -161 -72.5t-118 -177t-67.5 -210t-24.5 -183.5zM485 1241q225 147 363 299l106 -129q-160 -137 -417 -262z" />
+<glyph unicode="&#xe2;" horiz-adv-x="1003" d="M92 248q0 117 34 249t97.5 254.5t169 202.5t234.5 80q117 0 284 -33l-125 -860q0 -4 -1 -9t-1 -7q0 -49 47 -49q20 0 50 12l26 -78q-66 -39 -135 -39q-63 0 -104 41t-41 107q0 20 7 55t9 47q-45 -96 -156.5 -174t-214.5 -78q-180 0 -180 279zM258 262q0 -156 76 -156 q106 0 220 136.5t132 251.5l64 397q-55 14 -121 14q-86 0 -161 -72.5t-118 -177t-67.5 -210t-24.5 -183.5zM334 1253q94 51 222 137.5t179 131.5q104 -143 244 -275l-92 -90q-125 125 -176 195q-197 -127 -314 -193z" />
+<glyph unicode="&#xe3;" horiz-adv-x="1003" d="M92 248q0 117 34 249t97.5 254.5t169 202.5t234.5 80q117 0 284 -33l-125 -860q0 -4 -1 -9t-1 -7q0 -49 47 -49q20 0 50 12l26 -78q-66 -39 -135 -39q-63 0 -104 41t-41 107q0 20 7 55t9 47q-45 -96 -156.5 -174t-214.5 -78q-180 0 -180 279zM258 262q0 -156 76 -155 q106 0 220 136t132 251l64 397q-55 14 -121 14q-86 0 -161 -72.5t-118 -177t-67.5 -210t-24.5 -183.5zM315 1321q53 66 110 91q43 19 101 19q19 0 39 -1q37 -4 127 -46.5t148 -42.5q72 0 96 101l102 -21q-20 -109 -85 -158q-54 -42 -129 -42q-15 0 -31 2q-59 6 -136 46 t-139 40q-37 0 -73.5 -15.5t-55.5 -31.5l-20 -17z" />
+<glyph unicode="&#xe4;" horiz-adv-x="1003" d="M92 248q0 117 34 249t97.5 254.5t169 202.5t234.5 80q117 0 284 -33l-125 -860q0 -4 -1 -9t-1 -7q0 -49 47 -49q20 0 50 12l26 -78q-66 -39 -135 -39q-63 0 -104 41t-41 107q0 20 7 55t9 47q-45 -96 -156.5 -174t-214.5 -78q-180 0 -180 279zM258 262q0 -156 76 -156 q106 0 220 136.5t132 251.5l64 397q-55 14 -121 14q-86 0 -161 -72.5t-118 -177t-67.5 -210t-24.5 -183.5zM442 1276q0 45 35 83t82 38q33 0 57.5 -23.5t24.5 -58.5q0 -45 -38 -80t-83 -35q-33 0 -55.5 21.5t-22.5 54.5zM758 1276q0 45 34.5 83t81.5 38q33 0 57.5 -23.5 t24.5 -58.5q0 -45 -37.5 -80t-82.5 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xe5;" horiz-adv-x="1003" d="M92 248q0 117 34 249t97.5 254.5t169 202.5t234.5 80q117 0 284 -33l-125 -860q0 -4 -1 -9t-1 -7q0 -49 47 -49q20 0 50 12l26 -78q-66 -39 -135 -39q-63 0 -104 41t-41 107q0 20 7 55t9 47q-45 -96 -156.5 -174t-214.5 -78q-180 0 -180 279zM258 262q0 -156 76 -156 q106 0 220 136.5t132 251.5l64 397q-55 14 -121 14q-86 0 -161 -72.5t-118 -177t-67.5 -210t-24.5 -183.5zM494 1350q14 88 88.5 152.5t163 64.5t140.5 -64q41 -50 41 -116q0 -18 -3 -37q-14 -88 -88 -152.5t-164 -64.5q-88 0 -141 63q-41 50 -41 116q1 19 4 38zM586 1350 q-2 -10 -2 -21q0 -37 24 -65q31 -37 78 -37q49 0 92 36.5t51 86.5q2 11 2 20q0 36 -23 66q-30 37 -77 37q-51 0 -94 -37t-51 -86z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1361" d="M92 248q0 117 34 249t97.5 254.5t169 202.5t234.5 80q86 0 262 -43q90 43 190 43q113 0 181.5 -57t68.5 -166q0 -270 -606 -397q0 -8 -1 -24.5t-1 -22.5q0 -100 47 -187.5t139 -87.5q72 0 149 44t134 104l59 -84q-172 -186 -377 -187q-197 0 -272 183 q-61 -74 -151.5 -128.5t-176.5 -54.5q-180 0 -180 279zM258 262q0 -156 76 -156q113 0 233 154q-8 46 -8 102q0 145 50 288t145 241q-57 14 -125 14q-86 0 -161 -72.5t-118 -177t-67.5 -210t-24.5 -183.5zM735 539q426 92 426 284q0 88 -114 88q-117 0 -202 -120.5 t-110 -251.5z" />
+<glyph unicode="&#xe7;" horiz-adv-x="849" d="M92 365q0 113 32 227.5t90 213.5t156.5 162.5t219.5 63.5q117 0 246 -100l-80 -94q-94 70 -183 69q-102 0 -179 -92t-109.5 -202.5t-32.5 -209.5q0 -53 10 -104t31.5 -99t64.5 -78t101 -30q49 0 132 48t134 96l59 -82q-109 -115 -252 -164q49 -45 50 -101 q0 -74 -82 -143.5t-166 -101.5l-68 63l21 10l24 13.5l25.5 14.5t30.5 18l26 19q16 11 26 20l19 21q10 11 14.5 23.5t4.5 22.5q0 51 -58 51q-29 0 -102 -18l12 86q-104 37 -160.5 142.5t-56.5 234.5z" />
+<glyph unicode="&#xe8;" horiz-adv-x="894" d="M92 362q0 158 56.5 307.5t179.5 257t284 107.5q113 0 181.5 -57t68.5 -166q0 -270 -606 -397q-2 -16 -2 -47q0 -100 47 -187.5t139 -87.5q70 0 148 44t133 104l61 -84q-176 -186 -376 -187q-156 0 -235 115.5t-79 277.5zM268 539q426 92 426 284q0 88 -114 88 q-117 0 -202 -120.5t-110 -251.5zM408 1411l147 129q86 -150 268 -299l-80 -92q-210 123 -335 262z" />
+<glyph unicode="&#xe9;" horiz-adv-x="894" d="M92 362q0 158 56.5 307.5t179.5 257t284 107.5q113 0 181.5 -57t68.5 -166q0 -270 -606 -397q-2 -16 -2 -47q0 -100 47 -187.5t139 -87.5q70 0 148 44t133 104l61 -84q-176 -186 -376 -187q-156 0 -235 115.5t-79 277.5zM268 539q426 92 426 284q0 88 -114 88 q-117 0 -202 -120.5t-110 -251.5zM410 1241q225 147 362 299l107 -129q-160 -137 -418 -262z" />
+<glyph unicode="&#xea;" horiz-adv-x="894" d="M92 362q0 158 56.5 307.5t179.5 257t284 107.5q113 0 181.5 -57t68.5 -166q0 -270 -606 -397q-2 -16 -2 -47q0 -100 47 -187.5t139 -87.5q70 0 148 44t133 104l61 -84q-176 -186 -376 -187q-156 0 -235 115.5t-79 277.5zM260 1253q94 51 222 137.5t180 131.5 q104 -143 243 -275l-92 -90q-125 125 -176 195q-197 -127 -313 -193zM268 539q426 92 426 284q0 88 -114 88q-117 0 -202 -120.5t-110 -251.5z" />
+<glyph unicode="&#xeb;" horiz-adv-x="894" d="M92 362q0 158 56.5 307.5t179.5 257t284 107.5q113 0 181.5 -57t68.5 -166q0 -270 -606 -397q-2 -16 -2 -47q0 -100 47 -187.5t139 -87.5q70 0 148 44t133 104l61 -84q-176 -186 -376 -187q-156 0 -235 115.5t-79 277.5zM268 539q426 92 426 284q0 88 -114 88 q-117 0 -202 -120.5t-110 -251.5zM358 1276q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38 -80t-85 -35q-33 0 -55.5 21.5t-22.5 54.5zM674 1276q0 45 35.5 83t81.5 38q35 0 59 -23.5t24 -58.5q0 -45 -37.5 -80t-84.5 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xec;" horiz-adv-x="479" d="M90 0l160 1004h151l-159 -1004h-152zM125 1411l147 129q86 -150 269 -299l-80 -92q-211 123 -336 262z" />
+<glyph unicode="&#xed;" horiz-adv-x="479" d="M90 0l160 1004h151l-159 -1004h-152zM127 1241q102 66 193.5 140.5t130.5 117.5l41 41l106 -129q-162 -137 -420 -262z" />
+<glyph unicode="&#xee;" horiz-adv-x="479" d="M90 1253q94 51 222 137.5t180 131.5q104 -143 243 -275l-92 -90q-125 125 -176 195q-197 -127 -313 -193zM176 0l160 1004h151l-159 -1004h-152z" />
+<glyph unicode="&#xef;" horiz-adv-x="479" d="M90 0l160 1004h151l-159 -1004h-152zM109 1276q0 45 34.5 83t81.5 38q33 0 58.5 -24.5t25.5 -57.5q0 -45 -39 -80t-84 -35q-33 0 -55 21.5t-22 54.5zM424 1276q0 45 35 83t82 38q33 0 58.5 -24.5t25.5 -57.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xf1;" horiz-adv-x="1062" d="M90 0l160 1004h156l-31 -189q51 82 157.5 150.5t202.5 68.5q104 0 159.5 -41t55.5 -141q0 -29 -8 -90l-121 -762h-155l120 762q6 55 7 57q0 88 -91 88q-98 0 -200.5 -82t-155.5 -180l-100 -645h-156zM311 1321q53 66 110 91q43 19 101 19q19 0 39 -1q37 -4 127 -46.5 t148 -42.5q72 0 96 101l102 -21q-20 -109 -85 -158q-54 -42 -129 -42q-15 0 -32 2q-59 6 -136 46t-138 40q-37 0 -74 -15.5t-55 -31.5l-20 -17z" />
+<glyph unicode="&#xf2;" horiz-adv-x="1001" d="M92 385q0 143 55.5 288.5t172 253t266.5 107.5q162 0 242.5 -124t80.5 -296q0 -141 -56 -286.5t-173 -252t-264 -106.5q-162 0 -243 123t-81 293zM246 369q0 -115 43 -197t147 -82q84 0 148.5 57.5t100.5 145.5t53.5 175t17.5 163q0 117 -43 198.5t-148 81.5 q-109 0 -185.5 -101t-105 -219t-28.5 -222zM414 1411l147 129q86 -150 268 -299l-79 -92q-211 123 -336 262z" />
+<glyph unicode="&#xf3;" horiz-adv-x="1001" d="M92 385q0 143 55.5 288.5t172 253t266.5 107.5q162 0 242.5 -124t80.5 -296q0 -141 -56 -286.5t-173 -252t-264 -106.5q-162 0 -243 123t-81 293zM246 369q0 -115 43 -197t147 -82q84 0 148.5 57.5t100.5 145.5t53.5 175t17.5 163q0 117 -43 198.5t-148 81.5 q-109 0 -185.5 -101t-105 -219t-28.5 -222zM418 1241q225 147 362 299l107 -129q-162 -137 -418 -262z" />
+<glyph unicode="&#xf4;" horiz-adv-x="1001" d="M92 385q0 143 55.5 288.5t172 253t266.5 107.5q162 0 242.5 -124t80.5 -296q0 -141 -56 -286.5t-173 -252t-264 -106.5q-162 0 -243 123t-81 293zM246 369q0 -115 43 -197t147 -82q84 0 148.5 57.5t100.5 145.5t53.5 175t17.5 163q0 117 -43 198.5t-148 81.5 q-109 0 -185.5 -101t-105 -219t-28.5 -222zM289 1253q94 51 222 137.5t179 131.5q104 -143 244 -275l-92 -90q-125 125 -176 195q-197 -127 -314 -193z" />
+<glyph unicode="&#xf5;" horiz-adv-x="1001" d="M92 385q0 143 55.5 288.5t172 253t266.5 107.5q162 0 242.5 -124t80.5 -296q0 -141 -56 -286.5t-173 -252t-264 -106.5q-162 0 -243 123t-81 293zM246 369q0 -115 43 -197t147 -82q84 0 148.5 57.5t100.5 145.5t53.5 175t17.5 163q0 117 -43 198.5t-148 81.5 q-109 0 -185.5 -101t-105 -219t-28.5 -222zM266 1321q53 66 110 91q43 19 101 19q19 0 39 -1q37 -4 127 -46.5t148 -42.5q72 0 96 101l102 -21q-18 -109 -84 -158q-54 -42 -130 -42q-15 0 -32 2q-57 6 -135 46t-139 40q-37 0 -74 -15.5t-55 -31.5l-21 -17z" />
+<glyph unicode="&#xf6;" horiz-adv-x="1001" d="M92 385q0 143 55.5 288.5t172 253t266.5 107.5q162 0 242.5 -124t80.5 -296q0 -141 -56 -286.5t-173 -252t-264 -106.5q-162 0 -243 123t-81 293zM246 369q0 -115 43 -197t147 -82q84 0 148.5 57.5t100.5 145.5t53.5 175t17.5 163q0 117 -43 198.5t-148 81.5 q-109 0 -185.5 -101t-105 -219t-28.5 -222zM383 1276q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38 -80t-83 -35q-33 0 -56.5 21.5t-23.5 54.5zM698 1276q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38 -80t-83 -35q-33 0 -56.5 21.5t-23.5 54.5z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1001" d="M111 451v122h778v-122h-778zM377 209q0 51 40 88t91 37q49 0 84 -33t35 -82t-40 -87t-89 -38t-85 33t-36 82zM377 817q0 51 40 88t91 37q49 0 84 -32.5t35 -82t-40 -87.5t-89 -38t-85 33t-36 82z" />
+<glyph unicode="&#xf8;" horiz-adv-x="1001" d="M92 385q0 143 55.5 288.5t172 253t266.5 107.5q55 0 96 -14l74 166h102l-94 -209q145 -111 145 -363q0 -141 -56 -286.5t-173 -252t-264 -106.5q-55 0 -97 15l-98 -217h-102l117 260q-144 110 -144 358zM246 369q0 -133 49 -209l334 741q-31 10 -64 10 q-109 0 -185.5 -101t-105 -219t-28.5 -222zM371 100q31 -10 65 -10q84 0 148.5 57.5t100.5 145.5t53.5 175t17.5 163q0 137 -51 211z" />
+<glyph unicode="&#xf9;" horiz-adv-x="1038" d="M111 156q0 29 8 86l121 762h155l-121 -762q-6 -31 -6 -62q0 -84 94 -84q168 0 347 250l106 658h156l-135 -850q-4 -29 -5 -41q0 -39 35 -41l-67 -103h-6h-6q-49 0 -80 33q-33 35 -33 88t18 103q-63 -90 -162.5 -157t-199.5 -67q-109 0 -164 42.5t-55 144.5zM453 1411 l147 129q86 -150 268 -299l-80 -92q-210 123 -335 262z" />
+<glyph unicode="&#xfa;" horiz-adv-x="1038" d="M111 156q0 29 8 86l121 762h155l-121 -762q-6 -31 -6 -62q0 -84 94 -84q168 0 347 250l106 658h156l-135 -850q-4 -29 -5 -41q0 -39 35 -41l-67 -103h-6h-6q-49 0 -80 33q-33 35 -33 88t18 103q-63 -90 -162.5 -157t-199.5 -67q-109 0 -164 42.5t-55 144.5zM430 1241 q225 147 363 299l106 -129q-160 -137 -418 -262z" />
+<glyph unicode="&#xfb;" horiz-adv-x="1038" d="M111 156q0 29 8 86l121 762h155l-121 -762q-6 -31 -6 -62q0 -84 94 -84q168 0 347 250l106 658h156l-135 -850q-4 -29 -5 -41q0 -39 35 -41l-67 -103h-6h-6q-49 0 -80 33q-33 35 -33 88t18 103q-63 -90 -162.5 -157t-199.5 -67q-109 0 -164 42.5t-55 144.5zM326 1253 q94 51 222 137.5t179 131.5q104 -143 244 -275l-92 -90q-125 125 -177 195q-197 -127 -313 -193z" />
+<glyph unicode="&#xfc;" horiz-adv-x="1038" d="M111 156q0 29 8 86l121 762h155l-121 -762q-6 -31 -6 -62q0 -84 94 -84q168 0 347 250l106 658h156l-135 -850q-4 -29 -5 -41q0 -39 35 -41l-67 -103h-6h-6q-49 0 -80 33q-33 35 -33 88t18 103q-63 -90 -162.5 -157t-199.5 -67q-109 0 -164 42.5t-55 144.5zM406 1276 q0 45 35.5 83t80.5 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55 21.5t-22 54.5zM721 1276q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xfd;" horiz-adv-x="882" d="M-16 -276q102 41 174.5 108.5t136.5 169.5l-211 1002h166l149 -832l297 504q20 37 21 94q0 106 -43 217l151 31q37 -92 37 -205q0 -119 -53 -207l-389 -649q-80 -135 -171 -215t-229 -123zM801 1249q225 147 362 299l107 -129q-160 -137 -418 -262z" />
+<glyph unicode="&#xff;" horiz-adv-x="882" d="M-16 -276q102 41 174.5 108.5t136.5 169.5l-211 1002h166l149 -832l297 504q20 37 21 94q0 106 -43 217l151 31q37 -92 37 -205q0 -119 -53 -207l-389 -649q-80 -135 -171 -215t-229 -123zM274 1276q0 45 35 83t82 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35 q-33 0 -55.5 21.5t-22.5 54.5zM590 1276q0 45 34.5 83t82.5 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#x152;" horiz-adv-x="1282" d="M119 481q0 92 14 172q16 104 57 211t103.5 205t159 159.5t206.5 61.5h666l-22 -137h-500l-64 -410h383l-22 -141h-383l-74 -461h520l-22 -141h-686q-94 0 -163 43t-104.5 116.5t-52 153.5t-16.5 168zM270 446q0 -317 207 -317l164 1030q-98 0 -175 -80t-117 -198.5 t-59.5 -231.5t-19.5 -203z" />
+<glyph unicode="&#x153;" horiz-adv-x="1486" d="M92 385q0 141 56.5 287.5t173 254t264.5 107.5q184 0 270 -170q147 170 348 170q113 0 181.5 -57t68.5 -166q0 -270 -606 -397q0 -8 -1 -24.5t-1 -22.5q0 -100 48 -187.5t138 -87.5q72 0 148.5 44t134.5 104l59 -84q-176 -186 -377 -187q-180 0 -262 160 q-139 -160 -319 -160q-162 0 -243 123t-81 293zM246 369q0 -115 43 -197t147 -82q160 0 252 209q-4 41 -4 63q0 178 68 332q-20 217 -187 217q-84 0 -148.5 -57t-100 -145t-53 -176t-17.5 -164zM860 539q426 92 426 284q0 88 -115 88q-117 0 -201.5 -120.5t-109.5 -251.5z " />
+<glyph unicode="&#x178;" horiz-adv-x="882" d="M92 1196l107 113q72 -45 136 -139.5t91 -180.5q52 -157 52 -272q0 -16 -1 -31l31 115q37 137 150.5 301t228.5 223l98 -104q-172 -104 -286.5 -343t-159.5 -483l-70 -395h-162l74 457q-8 133 -32.5 263t-91.5 272.5t-165 203.5zM350 1542q0 45 36 83t81 38 q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38 -80t-83 -35q-33 0 -56.5 21.5t-23.5 54.5zM666 1542q0 45 35.5 83t80.5 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -37.5 -80t-83.5 -35q-33 0 -56 21.5t-23 54.5z" />
+<glyph unicode="&#x2c6;" horiz-adv-x="737" d="M84 1253q94 51 222 137.5t179 131.5q104 -143 244 -275l-92 -90q-125 125 -176 195q-197 -127 -314 -193z" />
+<glyph unicode="&#x2dc;" horiz-adv-x="763" d="M23 1321q53 66 109 91q43 19 101 19q19 0 39 -1q37 -4 127 -46.5t148 -42.5q72 0 96 101l102 -21q-20 -109 -85 -158q-54 -42 -129 -42q-15 0 -31 2q-59 6 -136 46t-139 40q-37 0 -73.5 -15.5t-57.5 -31.5l-18 -17z" />
+<glyph unicode="&#x2013;" horiz-adv-x="733" d="M0 461v123h733v-123h-733z" />
+<glyph unicode="&#x2014;" horiz-adv-x="1245" d="M0 463v123h1245v-123h-1245z" />
+<glyph unicode="&#x2018;" horiz-adv-x="559" d="M199 1008q109 166 315 335l82 -75q-197 -211 -180 -350q-45 -23 -88 -23q-66 0 -129 113z" />
+<glyph unicode="&#x2019;" horiz-adv-x="610" d="M160 938q181 195 181 328q0 11 -1 22q49 23 90 23q68 0 127 -113q-111 -170 -313 -336z" />
+<glyph unicode="&#x201a;" horiz-adv-x="528" d="M-51 -229q117 139 162 239q14 35 21 69t7 48l-2 16q63 35 103 35q59 -2 114 -94q-113 -178 -323 -377z" />
+<glyph unicode="&#x201c;" horiz-adv-x="944" d="M203 1008q109 166 315 335l82 -75q-181 -195 -181 -329q0 -11 1 -21q-45 -23 -88 -23q-66 0 -129 113zM565 1008q109 166 316 335l82 -75q-181 -195 -182 -329q0 -11 1 -21q-45 -23 -88 -23q-66 0 -129 113z" />
+<glyph unicode="&#x201d;" horiz-adv-x="942" d="M166 938q181 195 181 328q0 11 -1 22q49 23 90 23q68 0 127 -113q-111 -170 -313 -336zM528 938q181 195 182 328q0 11 -1 22q49 23 90 23q68 0 127 -113q-111 -170 -314 -336z" />
+<glyph unicode="&#x201e;" horiz-adv-x="935" d="M-43 -201q181 195 181 329q0 11 -1 22q45 23 88 22q68 0 127 -113q-111 -170 -313 -335zM319 -201q181 195 182 329q0 11 -1 22q45 23 88 22q68 0 127 -113q-111 -170 -314 -335z" />
+<glyph unicode="&#x2022;" horiz-adv-x="868" d="M80 645.5q0 145.5 103.5 248.5t249 103t249.5 -103t104 -248.5t-104 -249t-249.5 -103.5t-249 103.5t-103.5 249z" />
+<glyph unicode="&#x2026;" horiz-adv-x="1204" d="M78 84q0 51 39 88t90 37q49 0 85 -33t36 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82zM430 84q0 51 39 88t90 37q49 0 85 -33t36 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82zM778 84q0 51 39 88t90 37q49 0 85 -33t36 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82z" />
+<glyph unicode="&#x2039;" horiz-adv-x="589" d="M68 512l378 385l97 -78l-305 -307l309 -307l-96 -78z" />
+<glyph unicode="&#x203a;" horiz-adv-x="667" d="M133 205l96 -78l383 385l-379 385l-96 -78l305 -307z" />
+<glyph unicode="&#x2122;" horiz-adv-x="1583" d="M225 1325l15 92h497l-14 -92h-199l-114 -719h-101l115 719h-199zM721 608l129 813h137l119 -555q18 -106 20 -131q45 106 58 131l280 555h138l-129 -813h-105l88 553l25 111l-326 -664h-90l-141 666q-2 -55 -13 -111l-86 -555h-104z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1020" d="M0 1020h1020v-1020h-1020v1020z" />
+<glyph unicode="&#xfb01;" horiz-adv-x="1056" d="M20 -330q121 203 150 475q2 12 37 404q20 213 29 336l-144 18l17 101h133l12 167q12 150 127 215.5t278 65.5q86 0 221.5 -28.5t159.5 -80.5q6 -18 7 -36q0 -49 -42 -89t-92 -40q-27 0 -53 18t-26 43q0 10 4 26.5t4 26.5q0 33 -52.5 46.5t-101.5 13.5 q-117 0 -198.5 -56.5t-86.5 -167.5q-4 -82 -4 -124h166l-2 -117l-170 -6q-10 -158 -43 -453q-25 -262 -41 -391q-25 -180 -198 -420zM659 0l158 1004h152l-158 -1004h-152z" />
+<glyph unicode="&#xfb02;" horiz-adv-x="1056" d="M20 -330l36 67t63 167t51 241q57 610 66 740l-144 18l17 101h133l12 167q10 129 100 199t215 77q35 2 70 2q89 0 176 -13q121 -18 215 -58l-156 -975q-16 -111 -16 -195q0 -116 31 -183l-148 -43q-6 18 -13 52t-17 146q-3 35 -4 70q0 77 16 153l143 900q-59 37 -137 46 q-26 3 -51 3q-51 0 -98 -13q-72 -18 -123 -73.5t-54 -137.5l-4 -124h166l-2 -117l-170 -6l-84 -844q-8 -76 -57 -181.5t-96 -170.5l-45 -68z" />
+<glyph unicode="&#xfb03;" horiz-adv-x="1581" d="M20 -330q125 209 150 475q49 494 66 740l-144 18l17 101h133l6 96q16 322 241 321q47 0 93 -16l-15 -111q-18 6 -43 6q-113 0 -121 -208q-4 -66 -4 -88h166l-2 -117l-172 -6q-8 -123 -24.5 -318.5t-30.5 -329.5l-12 -133q-20 -225 -213 -483zM571 -330q125 209 150 475 q49 494 65 740l-143 18l16 101h134l6 96q16 322 241 321q47 0 93 -16l-15 -111q-18 6 -43 6q-113 0 -121 -208q-4 -66 -4 -88h166l-2 -117l-172 -6q-8 -123 -24.5 -318.5t-30.5 -329.5l-13 -133q-20 -225 -212 -483zM1192 0l160 1004h151l-160 -1004h-151zM1346 1286 q0 49 39.5 87t91.5 38q49 0 83.5 -32.5t34.5 -82.5q0 -51 -39.5 -88t-91.5 -37q-49 0 -83.5 33t-34.5 82z" />
+<glyph unicode="&#xfb04;" horiz-adv-x="1597" d="M20 -330q125 209 150 475q49 494 66 740l-144 18l17 101h133l6 96q16 322 241 321q47 0 93 -16l-15 -111q-18 6 -43 6q-113 0 -121 -208q-4 -66 -4 -88h166l-2 -117l-172 -6q-8 -123 -24.5 -318.5t-30.5 -329.5l-12 -133q-20 -225 -213 -483zM571 -330q125 209 150 475 q49 494 65 740l-143 18l16 101h134l6 96q16 322 241 321q47 0 93 -16l-15 -111q-18 6 -43 6q-113 0 -121 -208q-4 -66 -4 -88h166l-2 -117l-172 -6q-8 -123 -24.5 -318.5t-30.5 -329.5l-13 -133q-20 -225 -212 -483zM1239 225q0 94 14 178l162 1018h152l-162 -1018 q-16 -94 -16 -182q0 -133 28 -196l-145 -43q-33 91 -33 243z" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/public/stylesheets/fonts/delicious-italic-webfont.ttf b/public/stylesheets/fonts/delicious-italic-webfont.ttf
new file mode 100755
index 000000000..01d11991b
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-italic-webfont.ttf
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-italic-webfont.woff b/public/stylesheets/fonts/delicious-italic-webfont.woff
new file mode 100755
index 000000000..32aa7611e
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-italic-webfont.woff
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-roman-webfont.eot b/public/stylesheets/fonts/delicious-roman-webfont.eot
new file mode 100755
index 000000000..2e1b7b24e
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-roman-webfont.eot
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-roman-webfont.svg b/public/stylesheets/fonts/delicious-roman-webfont.svg
new file mode 100755
index 000000000..c7c20b31c
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-roman-webfont.svg
@@ -0,0 +1,222 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : copyright 19941996 Jos Buivenga
+</metadata>
+<defs>
+<font id="DeliciousRoman" horiz-adv-x="921" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="614" />
+<glyph unicode=" " horiz-adv-x="614" />
+<glyph unicode="&#x09;" horiz-adv-x="614" />
+<glyph unicode="&#xa0;" horiz-adv-x="614" />
+<glyph unicode="!" horiz-adv-x="540" d="M174 84q0 51 40 88t91 37q49 0 84 -33t35 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82zM213 1085q0 180 31 326l155 21q-35 -203 -34 -396v-704h-123q-29 528 -29 753z" />
+<glyph unicode="&#x22;" horiz-adv-x="708" d="M131 1321l27 129h100l29 -129l-45 -322h-68zM414 1321l26 129h101l28 -129l-45 -322h-67z" />
+<glyph unicode="#" horiz-adv-x="1138" d="M125 436l20 135h164l39 312h-145l20 135h142l51 403h123l-52 -403h236l45 364h123l-45 -364h174l-12 -135h-181l-39 -312h154l-12 -135h-158l-53 -418h-123l53 418h-235l-47 -379h-123l47 379h-166zM432 571h234l39 312h-234z" />
+<glyph unicode="$" horiz-adv-x="911" d="M127 983q0 147 86 236.5t233 99.5v113h93v-115q147 -18 249 -98l-55 -111q-82 59 -194 78v-467q158 -100 206 -152q92 -98 93 -248q0 -135 -83 -228t-216 -116v-124h-93v118q-164 4 -309 88l47 123q154 -76 262 -82v484l-46 29l-49 32l-43 30q-34 24 -44 33l-37 33 q-27 25 -35 40.5t-25 41t-23.5 49t-11.5 53t-5 60.5zM287 997q0 -55 25.5 -98t51 -63.5t82.5 -59.5v412q-76 -12 -117.5 -63.5t-41.5 -127.5zM539 113q68 23 104.5 79t36.5 130q0 111 -141 202v-411z" />
+<glyph unicode="%" horiz-adv-x="1431" d="M94 1048.5q0 112.5 80 192.5t193 80q80 0 145 -41q82 -23 143 -23q57 0 114.5 15.5t86.5 30.5l27 16l104 -29l-455 -1290h-135l432 1196q-35 -18 -88 -27.5t-90 -9.5l-35 -2q23 -43 23 -108q0 -113 -80 -193t-192.5 -80t-192.5 80t-80 192.5zM215 1048.5 q0 -63.5 44 -107.5t107.5 -44t107.5 44t44 107.5t-44 107.5t-107.5 44t-107.5 -44t-44 -107.5zM788 241.5q0 112.5 80 192.5t193 80t192.5 -80t79.5 -192.5t-79.5 -192.5t-192.5 -80t-193 80t-80 192.5zM909 241.5q0 -63.5 44 -107.5t107.5 -44t107.5 44t44 107.5t-44 107.5 t-107.5 44t-107.5 -44t-44 -107.5z" />
+<glyph unicode="&#x26;" horiz-adv-x="1290" d="M86 479q0 174 90 324.5t252 157.5q-141 59 -141 184q0 123 107.5 199.5t236.5 76.5q141 0 249.5 -77.5t108.5 -213.5v-126h203v-119h-199v-678q0 -113 80 -113q53 0 119 29l35 -96q-115 -57 -209 -58q-96 0 -138 64.5t-42 165.5v686h-199q-203 0 -290 -97.5t-87 -302.5 q0 -193 64 -313q41 -76 77 -76q23 0 56 34t79 67.5t103 33.5q51 0 100 -22l-30 -111q-41 12 -64 13q-47 0 -112.5 -71t-133.5 -71q-84 0 -148.5 52.5t-98 134.5t-51 164.5t-17.5 158.5zM442 1145q0 -76 65.5 -108.5t149.5 -32.5h189v96q0 94 -51.5 155.5t-143.5 61.5 q-82 0 -145.5 -46t-63.5 -126z" />
+<glyph unicode="'" horiz-adv-x="425" d="M131 1321l27 129h100l29 -129l-45 -322h-68z" />
+<glyph unicode="(" horiz-adv-x="688" d="M96 680q0 272 140.5 518t373.5 391l17 -116q-190 -125 -300 -343.5t-110 -453.5q0 -518 412 -848l-15 -127q-262 199 -390 431.5t-128 547.5z" />
+<glyph unicode=")" horiz-adv-x="694" d="M63 -172q414 330 414 848q0 236 -110.5 454t-300.5 343l16 116q233 -145 373.5 -391t140.5 -518q0 -315 -128 -547.5t-390 -431.5z" />
+<glyph unicode="*" horiz-adv-x="868" d="M72 1128v132l307 -111l-74 231h238l-70 -231l305 106v-127l-268 -86l217 -333h-143l-158 252l-156 -252h-133l201 333z" />
+<glyph unicode="+" horiz-adv-x="964" d="M92 451v122h330v355h119v-355h331v-122h-331v-355h-119v355h-330z" />
+<glyph unicode="," horiz-adv-x="528" d="M59 -229q98 141 123 239q10 41 11 84l-5 49q57 35 97 35q27 0 59.5 -23.5t52.5 -48.5l19 -22q-84 -178 -264 -377z" />
+<glyph unicode="-" horiz-adv-x="618" d="M111 461v123h391v-123h-391z" />
+<glyph unicode="." horiz-adv-x="528" d="M147 84q0 51 40 88t92 37q49 0 83.5 -33t34.5 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82z" />
+<glyph unicode="/" horiz-adv-x="729" d="M35 -303l530 1853h129l-530 -1853h-129z" />
+<glyph unicode="0" d="M57 502q0 133 39 249.5t133.5 199.5t231.5 83t231 -83t133 -199.5t39 -249.5t-39 -250t-133 -200t-231 -83t-231.5 83t-133.5 200t-39 250zM205 502q0 -92 20.5 -177t81 -156t154.5 -71t154.5 71t81 156t20.5 177t-20.5 177t-81 155.5t-154.5 70.5t-154.5 -70.5 t-81 -155.5t-20.5 -177z" />
+<glyph unicode="1" d="M203 858v98q88 0 194 29l74 19h141v-1004h-151v858h-258z" />
+<glyph unicode="2" d="M127 127q156 84 325 279.5t169 343.5q0 74 -52.5 113.5t-128.5 39.5q-133 0 -284 -117l-29 119q92 72 161.5 100.5t176.5 28.5q143 0 228 -70.5t85 -211.5q0 -188 -190 -404q-131 -147 -228 -213h455v-135h-659z" />
+<glyph unicode="3" d="M147 -225q68 0 146 20q358 82 358 365q0 193 -289 192q-59 0 -174 -12v119l91 12q133 72 258 172q90 70 90 152q0 51 -39 81.5t-92 30.5q-51 0 -142.5 -38t-156.5 -76l-37 108q207 133 370 133q109 0 179.5 -63.5t70.5 -171.5q0 -57 -24.5 -106.5t-73.5 -91.5t-86 -66.5 t-98 -59.5q129 0 218 -78t89 -204q0 -178 -95.5 -304.5t-238.5 -180.5q-138 -52 -303 -52h-12h-9v119z" />
+<glyph unicode="4" d="M63 133q139 387 502 871h168v-871h131v-133h-135v-283h-145v283h-512zM215 133h369v680q-242 -354 -369 -680z" />
+<glyph unicode="5" d="M137 -221q164 4 312 80q193 100 192 305q0 98 -65.5 145t-167.5 47q-98 0 -236 -41l57 689h508v-123h-366l-33 -412q57 12 86 12q10 0 26.5 -1t26.5 -1q133 -6 226.5 -80.5t93.5 -201.5q0 -322 -285 -457q-168 -80 -349 -80h-18h-8v119z" />
+<glyph unicode="6" d="M96 524q0 264 160 465t420 326l55 -101q-184 -115 -284.5 -213t-157.5 -264q127 47 215 47q150 0 244 -95t94 -245q0 -125 -37 -229t-125 -175t-215 -71q-102 0 -178 53.5t-115 139.5t-57.5 176t-18.5 186zM246 481q0 -82 18.5 -163.5t73.5 -153.5t139 -72q213 0 213 359 q0 113 -64.5 173t-179.5 60q-66 0 -184 -51q-16 -78 -16 -152z" />
+<glyph unicode="7" d="M121 872v132h672v-132q0 -272 -137.5 -640.5t-313.5 -591.5l-135 57q180 238 309 570.5t129 604.5h-524z" />
+<glyph unicode="8" d="M84 317q0 117 66.5 211.5t177.5 145.5q-102 61 -154.5 128.5t-52.5 172.5q0 143 100.5 229t247.5 86q152 0 237 -77.5t85 -229.5q0 -96 -69 -174t-167 -121q66 -33 91.5 -48t73.5 -49t68.5 -63.5t38 -77t17.5 -104.5q0 -174 -110.5 -275.5t-287.5 -101.5 q-147 0 -254.5 100.5t-107.5 247.5zM238 340q0 -100 64.5 -177t162.5 -77t161.5 76t63.5 176q0 49 -13 86t-45 65.5t-54.5 45t-74.5 44t-73 39.5q-192 -100 -192 -278zM266 967q0 -82 44 -132.5t128 -93.5l69 36q13 7 52 33t50.5 46.5t24.5 55t13 79.5q0 188 -194 189 q-84 0 -135.5 -63.5t-51.5 -149.5z" />
+<glyph unicode="9" d="M88 557q0 199 92 338t281 139q102 0 179 -56t118 -146.5t59.5 -184.5t18.5 -188q0 -266 -190.5 -480.5t-461.5 -324.5l-43 117q203 102 321 208.5t179 284.5q-131 -47 -219 -47q-68 0 -131 29q-203 86 -203 311zM240 551q0 -98 61 -165t160 -67q119 0 207 54 q16 78 16 151q0 82 -18.5 163t-73.5 152.5t-139 71.5q-213 0 -213 -360z" />
+<glyph unicode=":" horiz-adv-x="528" d="M147 84q0 51 40 88t92 37q49 0 83.5 -33t34.5 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82zM147 713q0 51 40 88t92 37q49 0 83.5 -33t34.5 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82z" />
+<glyph unicode=";" horiz-adv-x="528" d="M53 -229q98 141 123 239q10 41 10 84l-4 49q57 35 97 35q27 0 59.5 -23.5t50.5 -48.5l21 -22q-84 -178 -265 -377zM147 709q0 51 40 89t92 38q49 0 83.5 -33t34.5 -82q0 -51 -40 -89t-91 -38q-49 0 -84 33t-35 82z" />
+<glyph unicode="&#x3c;" horiz-adv-x="614" d="M68 512l378 385l97 -78l-305 -307l309 -307l-96 -78z" />
+<glyph unicode="=" horiz-adv-x="983" d="M90 293v123h782v-123h-782zM90 598v123h782v-123h-782z" />
+<glyph unicode="&#x3e;" horiz-adv-x="614" d="M68 205l96 -78l383 385l-379 385l-96 -78l305 -307z" />
+<glyph unicode="?" horiz-adv-x="733" d="M147 84q0 51 40 88t92 37q49 0 83.5 -33t34.5 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82zM211 332v104q0 86 2 127t20.5 103.5t55.5 111.5l168 226q70 96 69 161q0 57 -30.5 92t-87.5 35q-88 0 -172 -18v117q96 27 184 26q121 0 190.5 -63.5t69.5 -184.5q0 -98 -100 -229 l-164 -217q-45 -59 -62.5 -120.5t-17.5 -166.5v-104h-125z" />
+<glyph unicode="@" horiz-adv-x="1622" d="M88 727q0 299 223.5 529.5t519.5 230.5q295 0 490 -179.5t195 -471.5q0 -113 -56.5 -236t-160 -212t-218.5 -89q-72 0 -119 35t-47 104q0 12 5 33q-119 -102 -175 -127q-45 -20 -90 -20q-98 0 -152 80.5t-54 183.5q0 94 18 185t58 178t116 141.5t176 54.5q145 0 225 -117 l21 84h133l-141 -592q-12 -45 -13 -67q0 -55 56 -56q125 0 218 151.5t93 285.5q0 252 -163 394t-419 142q-254 0 -429 -195.5t-175 -453.5q0 -270 179.5 -457.5t449.5 -187.5q152 0 292 65.5t230 182.5l96 -52q-94 -139 -270 -225t-348 -86q-319 0 -541.5 222.5 t-222.5 541.5zM588 610q0 -59 21.5 -106t74.5 -47q18 0 43 6t41 12t47 22.5t41 22.5l43 26q33 19 35 21l84 369q-76 98 -205 98q-78 0 -132 -83t-73.5 -174t-19.5 -167z" />
+<glyph unicode="A" horiz-adv-x="1044" d="M25 0l409 1290h176l410 -1290h-168l-137 416h-385l-137 -416h-168zM369 551h307l-154 569z" />
+<glyph unicode="B" horiz-adv-x="1028" d="M164 20v1270h317q123 0 203 -30q190 -76 190 -295q0 -86 -57 -169t-137 -106q125 -8 195.5 -97t70.5 -218q0 -195 -131 -300.5t-330 -105.5q-124 0 -321 51zM328 745h151q104 0 169 59.5t65 162.5q0 197 -234 196h-151v-418zM328 135q92 -27 153 -26q135 0 218 67.5 t83 200.5q0 74 -23.5 123t-69.5 72.5t-96 31.5t-122 8h-143v-477z" />
+<glyph unicode="C" horiz-adv-x="1017" d="M113 645q0 119 29.5 233.5t87 216t157.5 164t227 62.5q195 0 332 -88l-59 -107q-119 66 -273 66q-86 0 -154.5 -58.5t-106.5 -147.5t-57.5 -180t-19.5 -169q0 -90 16.5 -176t52.5 -171t106.5 -136.5t166.5 -51.5q166 0 279 84l70 -102q-68 -53 -166.5 -84t-190.5 -31 q-135 0 -235.5 60.5t-155.5 161t-80.5 214t-25.5 240.5z" />
+<glyph unicode="D" horiz-adv-x="1120" d="M164 0v1290h373q133 0 228 -56t146.5 -152.5t74 -205t22.5 -233.5t-27 -234.5t-82 -203.5t-153.5 -149.5t-229.5 -55.5h-352zM326 131h190q98 0 166 47t100.5 128t46 161t13.5 172q0 520 -314 520h-202v-1028z" />
+<glyph unicode="E" horiz-adv-x="929" d="M164 0v1290h663v-137h-499v-410h383v-141h-383v-461h520v-141h-684z" />
+<glyph unicode="F" horiz-adv-x="843" d="M164 0v1290h606v-135h-442v-412h350v-141h-350v-602h-164z" />
+<glyph unicode="G" horiz-adv-x="1073" d="M113 645q0 119 29.5 233.5t87 216t157.5 164t227 62.5q96 0 168 -20.5t166 -67.5l-63 -109q-113 70 -271 70q-111 0 -190.5 -96.5t-113.5 -219t-34 -241.5q0 -90 15.5 -176t51.5 -171t106.5 -137.5t168.5 -52.5q109 0 181 29v422h151v-528q-129 -53 -336 -54 q-135 0 -236.5 59.5t-156.5 160t-81.5 215t-26.5 241.5z" />
+<glyph unicode="H" horiz-adv-x="1122" d="M164 0v1290h164v-547h467v547h163v-1290h-163v604h-467v-604h-164z" />
+<glyph unicode="I" horiz-adv-x="487" d="M164 0v1290h160v-1290h-160z" />
+<glyph unicode="J" horiz-adv-x="501" d="M12 -223q166 55 166 178v1335h160v-1347q0 -205 -291 -277z" />
+<glyph unicode="K" horiz-adv-x="993" d="M164 0v1290h164v-590l450 590h174l-495 -663l520 -578v-49h-164l-485 539v-539h-164z" />
+<glyph unicode="L" horiz-adv-x="782" d="M164 0v1290h155v-1155h445v-135h-600z" />
+<glyph unicode="M" horiz-adv-x="1519" d="M164 0v1290h217l379 -1089l379 1089h217v-1290h-164v877l10 178l-371 -1055h-143l-371 1057q10 -106 11 -176v-881h-164z" />
+<glyph unicode="N" horiz-adv-x="1134" d="M164 0v1290h217l436 -987q-10 98 -10 180v807h164v-1290h-168l-486 1053q10 -96 11 -176v-877h-164z" />
+<glyph unicode="O" horiz-adv-x="1122" d="M113 645.5q0 110.5 23.5 222t73.5 217t141 171t210 65.5t210 -65.5t141.5 -171t74 -217t23.5 -222t-23.5 -222.5t-74 -217.5t-141.5 -171t-210 -65.5t-210 65.5t-141 171t-73.5 217.5t-23.5 222.5zM276 645q0 -72 14.5 -155.5t44.5 -175t89 -151t137 -59.5t137.5 59.5 t89 151t44 175t14.5 155.5t-14.5 156t-44 175t-89 150.5t-137.5 59.5t-137 -59.5t-89 -150.5t-44.5 -175t-14.5 -156z" />
+<glyph unicode="P" horiz-adv-x="1001" d="M164 0v1290h278q211 0 345.5 -98t134.5 -299q0 -190 -114 -311t-304 -121q-100 0 -176 41v-502h-164zM328 637q98 -43 166 -43q121 0 192.5 89t71.5 212q0 133 -89 198.5t-227 65.5h-114v-522z" />
+<glyph unicode="Q" horiz-adv-x="1122" d="M113 645q0 111 23.5 222.5t73.5 217t141 171t210 65.5t210 -65.5t141.5 -171t74 -217t23.5 -222.5q0 -209 -80 -402.5t-244 -252.5q129 -137 262 -137q41 0 74 8l-43 -156q-33 -4 -49 -4q-51 0 -96.5 13.5t-88.5 45t-67.5 52t-69.5 66.5l-57 59l-37 34q-106 12 -188 83 t-126 172.5t-65.5 208t-21.5 210.5zM276 645q0 -72 14.5 -155.5t44.5 -175t89 -151t137 -59.5t137.5 59.5t89 151t44 175t14.5 155.5t-14.5 156t-44 175t-89 150.5t-137.5 59.5t-137 -59.5t-89 -150.5t-44.5 -175t-14.5 -156z" />
+<glyph unicode="R" horiz-adv-x="1034" d="M164 0v1290h278q211 0 345.5 -98t134.5 -299q0 -158 -84 -274.5t-236 -147.5l381 -422v-49h-160l-424 471q-39 12 -71 31v-502h-164zM328 637q94 -43 151 -43q129 0 204 85t75 216q0 133 -89 198.5t-227 65.5h-114v-522z" />
+<glyph unicode="S" horiz-adv-x="888" d="M92 983q0 162 97.5 250t261.5 88q88 0 173 -41t130 -111l-92 -77q-78 98 -211 98q-86 0 -142.5 -49t-56.5 -133q0 -82 57.5 -146.5t138 -109.5t161.5 -96.5t138.5 -136.5t57.5 -200q0 -158 -110.5 -254t-270.5 -96q-76 0 -161 34t-146 87l69 117q129 -106 240 -107 q96 0 158.5 62.5t62.5 159.5q0 72 -57.5 132t-137.5 107l-163 99q-82 52 -139.5 134.5t-57.5 188.5z" />
+<glyph unicode="T" horiz-adv-x="829" d="M20 1147v143h789v-143h-315v-1147h-160v1147h-314z" />
+<glyph unicode="U" horiz-adv-x="1142" d="M162 502v788h164v-790q0 -395 245.5 -395.5t245.5 397.5v788h164v-796q0 -225 -98.5 -375t-311.5 -150t-311 152t-98 381z" />
+<glyph unicode="V" horiz-adv-x="1044" d="M12 1290h178l336 -1093l338 1093h170l-422 -1290h-180z" />
+<glyph unicode="W" horiz-adv-x="1449" d="M20 1290h175l198 -913q16 -72 17 -135l235 1048h164l235 -1048q0 63 17 135l207 913h166l-304 -1290h-174l-229 1042l-229 -1042h-174z" />
+<glyph unicode="X" horiz-adv-x="1007" d="M20 0l383 662l-372 628h178l285 -473l274 473h168l-354 -620l401 -670h-188l-303 512l-293 -512h-179z" />
+<glyph unicode="Y" horiz-adv-x="964" d="M27 1290h174l286 -643l289 643h164l-377 -817v-473h-162v473z" />
+<glyph unicode="Z" horiz-adv-x="937" d="M74 0v139q283 559 557 1010h-512v141h702v-141q-301 -496 -567 -1006h623v-143h-803z" />
+<glyph unicode="[" horiz-adv-x="507" d="M57 -319v1818h318v-119h-191v-1581h191v-118h-318z" />
+<glyph unicode="\" horiz-adv-x="686" d="M25 1550h127l530 -1853h-127z" />
+<glyph unicode="]" horiz-adv-x="509" d="M135 -201h191v1581h-191v119h318v-1818h-318v118z" />
+<glyph unicode="^" horiz-adv-x="1277" d="M145 655l435 795h114l434 -795h-143l-348 629l-348 -629h-144z" />
+<glyph unicode="_" d="M0 -154h922v-122h-922v122z" />
+<glyph unicode="`" horiz-adv-x="692" d="M92 1411l127 129q106 -147 316 -299l-66 -92q-240 127 -377 262z" />
+<glyph unicode="a" horiz-adv-x="954" d="M86 246q0 72 59 182l482 205v129q0 72 -43 108.5t-115 36.5q-70 0 -146.5 -44t-129.5 -103l-58 96q61 78 157.5 128t190.5 50q137 0 218 -68.5t81 -203.5v-625q0 -61 66 -61q25 0 41 12l39 -78q-59 -37 -119 -37q-82 0 -131 49.5t-49 131.5q-25 -86 -106 -135.5 t-175 -49.5q-123 0 -192.5 76t-69.5 201zM240 252q0 -68 36.5 -114t102.5 -46q109 0 178.5 109.5t69.5 224.5v84l-361 -152q-26 -57 -26 -106z" />
+<glyph unicode="b" horiz-adv-x="1030" d="M168 92v1329h156v-493q43 49 113.5 77.5t135.5 28.5q172 0 264.5 -146.5t92.5 -328.5q0 -92 -12.5 -172t-43 -159t-78.5 -135t-125 -90t-175 -34q-78 0 -169 36t-159 87zM324 178q35 -39 92 -61.5t110 -22.5q72 0 123 46t76 120t35 141.5t10 135.5q0 63 -8 119.5 t-30.5 117t-69 96t-111.5 35.5q-59 0 -122.5 -32.5t-104.5 -79.5v-615z" />
+<glyph unicode="c" horiz-adv-x="843" d="M100 492q0 129 39 247.5t134.5 206.5t228.5 88q156 0 262 -102l-70 -92q-86 72 -190 71q-86 0 -145.5 -71.5t-81 -157.5t-21.5 -170q0 -90 21.5 -180t84 -165t154.5 -75q86 0 225 90l52 -96q-57 -49 -137.5 -83t-151.5 -34q-197 0 -300.5 158t-103.5 365z" />
+<glyph unicode="d" horiz-adv-x="1048" d="M102 444q0 119 20.5 218.5t68 186.5t134.5 136t207 49q88 0 197 -30v417h156v-1233q0 -113 55 -118l-43 -101q-78 4 -113 39q-47 51 -47 142q-23 -86 -102.5 -133.5t-173.5 -47.5q-172 0 -265.5 146.5t-93.5 328.5zM262 467q0 -55 11.5 -114.5t34 -121t68.5 -100.5 t105 -39q115 0 181.5 121t66.5 246v413q-88 37 -184 37q-283 0 -283 -442z" />
+<glyph unicode="e" horiz-adv-x="964" d="M100 528q0 197 118 351.5t308 154.5q145 0 241.5 -114.5t106.5 -264.5q2 -16 2.5 -51t2.5 -53h-619v-39q0 -84 20.5 -174t79 -168t144.5 -78q100 0 284 127l50 -98q-72 -61 -170.5 -106.5t-180.5 -45.5q-104 0 -183 52.5t-121 138.5t-62.5 179t-20.5 189zM279 668h436 q0 94 -55.5 168.5t-147.5 74.5q-90 0 -151.5 -73.5t-81.5 -169.5z" />
+<glyph unicode="f" horiz-adv-x="585" d="M51 903v101h135v159q0 242 351 285l28 -121q-8 0 -26.5 -2t-54 -14.5t-66.5 -30.5t-53.5 -56t-22.5 -87v-133h199v-119h-199v-885h-156v885z" />
+<glyph unicode="g" horiz-adv-x="931" d="M82 -170q0 47 15.5 85t49 67.5t60 47t76.5 44.5q-55 6 -95.5 42t-40.5 87q0 37 15.5 66.5t48.5 52t56.5 34t64.5 27.5q-98 35 -157.5 121t-59.5 190q0 152 96 246t248 94q90 0 149 -30h277v-123h-146q47 -82 47 -192.5t-70.5 -197t-178.5 -118.5q-4 -2 -23.5 -7.5 t-30 -9.5t-32 -11t-36 -13t-32.5 -15.5t-30 -18.5l-23 -19q-12 -10 -17.5 -23.5t-5.5 -26.5q0 -72 254 -71h70q100 0 168.5 -56.5t68.5 -152.5q0 -166 -137 -262.5t-309 -96.5q-137 0 -238.5 56.5t-101.5 183.5zM233 -139q0 -80 56.5 -119t140.5 -39q102 0 194.5 64.5 t92.5 162.5q0 119 -197 119h-121q-37 -20 -58.5 -34.5t-50 -39t-43 -53t-14.5 -61.5zM264 700q0 -86 51.5 -156.5t135.5 -70.5t135 70.5t51 156.5t-51 157t-135 71t-135.5 -71t-51.5 -157z" />
+<glyph unicode="h" horiz-adv-x="1062" d="M168 0v1421h156v-491q55 39 151 71.5t174 32.5q147 0 198.5 -69.5t51.5 -202.5v-762h-156v762q0 76 -24.5 110.5t-95.5 34.5q-78 0 -167 -33.5t-132 -70.5v-803h-156z" />
+<glyph unicode="i" horiz-adv-x="487" d="M123 1284q0 47 35 78t82 31q45 0 78.5 -30t33.5 -75q0 -47 -34.5 -77.5t-81.5 -30.5q-45 0 -79 29.5t-34 74.5zM168 0v1004h151v-1004h-151z" />
+<glyph unicode="j" horiz-adv-x="487" d="M2 -285q166 63 166 181v1108h151v-1123q0 -195 -282 -274zM123 1284q0 47 35 78t82 31q45 0 78.5 -30t33.5 -75q0 -47 -34.5 -77.5t-81.5 -30.5q-45 0 -79 29.5t-34 74.5z" />
+<glyph unicode="k" horiz-adv-x="964" d="M168 0v1421h156v-837l362 420h184l-368 -433l454 -534v-37h-163l-469 559v-559h-156z" />
+<glyph unicode="l" horiz-adv-x="483" d="M156 403v1018h151v-1018q0 -203 62 -403h-162q-51 139 -51 403z" />
+<glyph unicode="m" horiz-adv-x="1579" d="M168 0v1004h156v-74q145 104 276 104q182 0 238 -106q53 43 146 74.5t161 31.5q270 0 270 -272v-762h-155v762q0 74 -29 109.5t-101 35.5q-150 0 -262 -92q2 -18 2 -53v-762h-155v762q0 74 -29 109.5t-100 35.5q-131 0 -262 -104v-803h-156z" />
+<glyph unicode="n" horiz-adv-x="1062" d="M168 0v1004h156v-74q55 39 151 71.5t174 32.5q147 0 198.5 -69.5t51.5 -202.5v-762h-156v762q0 76 -24.5 110.5t-95.5 34.5q-78 0 -168 -34.5t-131 -69.5v-803h-156z" />
+<glyph unicode="o" horiz-adv-x="999" d="M100 500q0 127 40 243.5t134.5 203.5t225.5 87t225 -87t134 -203.5t40 -243.5q0 -125 -41 -243t-135 -203t-223 -85t-223.5 85t-135.5 203t-41 243zM256 500q0 -139 64.5 -273.5t179 -134.5t179 134t64.5 274q0 84 -23.5 175t-81.5 163.5t-138 72.5t-138.5 -72.5 t-82 -163.5t-23.5 -175z" />
+<glyph unicode="p" horiz-adv-x="1056" d="M172 -360v1364h156v-76q51 47 126.5 76.5t143.5 29.5q172 0 264 -146.5t92 -328.5q0 -78 -9 -152.5t-33.5 -156.5t-64.5 -142.5t-107.5 -99.5t-153.5 -39q-188 0 -258 158v-487h-156zM328 498q0 -68 10 -131.5t35.5 -129t78 -105.5t123.5 -40q68 0 115 47t68.5 124 t29 141.5t7.5 132.5q0 63 -8.5 120.5t-31 119t-68.5 98t-112 36.5q-61 0 -128.5 -34.5t-118.5 -83.5v-295z" />
+<glyph unicode="q" horiz-adv-x="1056" d="M102 481q0 96 24 190.5t70 177.5t126.5 134t183.5 51q150 0 381 -63v-1331h-156v487q-74 -158 -258 -158q-98 0 -173 47t-116 124t-61.5 163t-20.5 178zM264 537q0 -442 217 -443q51 0 99 29q152 92 151 375v376q-84 33 -190 33q-137 0 -207 -112.5t-70 -257.5z" />
+<glyph unicode="r" horiz-adv-x="653" d="M168 0v1004h158v-80q4 4 18 19t22 22l23 19q16 13 29.5 20.5t33 15.5t42 11t49.5 3q25 0 50 -7t38 -15l12 -8l-55 -140q-33 27 -92 27q-33 0 -70 -22.5t-51.5 -36t-50.5 -50.5v-782h-156z" />
+<glyph unicode="s" horiz-adv-x="860" d="M96 768q0 131 101.5 198.5t238.5 67.5q90 0 175 -35.5t134 -103.5l-81 -82q-100 100 -232 100q-72 0 -127 -34.5t-55 -102.5q0 -37 25.5 -68.5t49.5 -44.5l66 -36l189 -92q184 -90 184 -275q0 -143 -103.5 -217t-250.5 -74q-160 0 -293 119l57 111q141 -109 244 -109 q82 0 139 38t57 116q0 94 -127 157l-213 107q-178 90 -178 260z" />
+<glyph unicode="t" horiz-adv-x="626" d="M51 903v101h144v178h143v-178h203v-119h-199v-678q0 -113 80 -113q23 0 52.5 7.5t47.5 13.5l19 8l34 -96q-90 -57 -208 -58q-80 0 -130.5 54.5t-50.5 175.5v686z" />
+<glyph unicode="u" horiz-adv-x="1062" d="M164 242v762h155v-762q0 -76 21.5 -111t93.5 -35q68 0 161 36t144 81v791h156v-850q0 -78 43 -82l-51 -103q-55 0 -95 32t-49 85q-61 -53 -151 -85t-172 -32q-139 0 -197.5 67t-58.5 206z" />
+<glyph unicode="v" horiz-adv-x="925" d="M20 1004h168l277 -828q199 453 278 828h156q-129 -543 -360 -1004h-154z" />
+<glyph unicode="w" horiz-adv-x="1372" d="M25 1004h163l230 -816l194 816h162l213 -816q125 379 203 816h149q-86 -520 -276 -1004h-166l-139 512q-14 53 -29.5 130t-23.5 128l-9 49q-25 -182 -57 -307l-137 -512h-172z" />
+<glyph unicode="x" horiz-adv-x="868" d="M25 0l317 520l-301 484h170l217 -349l211 349h164l-293 -478l334 -526h-174l-244 391l-238 -391h-163z" />
+<glyph unicode="y" horiz-adv-x="929" d="M23 1004h163l234 -658q39 -115 55 -205q154 383 275 863h155q-250 -973 -493 -1256q-78 -90 -240 -129l-33 119q70 16 152 86q43 37 106 160z" />
+<glyph unicode="z" horiz-adv-x="872" d="M70 0v133q279 463 518 739h-477v132h657v-136q-291 -354 -518 -735h557v-133h-737z" />
+<glyph unicode="{" horiz-adv-x="681" d="M82 541v96q63 0 115.5 71.5t52.5 174.5v360q0 160 55 213t146 53h120l23 -110h-121q-57 0 -77.5 -36t-20.5 -149v-360q0 -82 -38 -149.5t-75 -94.5l-39 -26l16.5 -10.5t37 -30t46 -51t36 -73.5t16.5 -97v-361q0 -113 21.5 -147.5t88.5 -34.5h109l-23 -111h-116 q-41 0 -72 8.5t-64.5 33t-51 80.5t-17.5 142v361q0 102 -52.5 175t-115.5 73z" />
+<glyph unicode="|" horiz-adv-x="454" d="M166 -37v1585h123v-1585h-123z" />
+<glyph unicode="}" horiz-adv-x="681" d="M82 1399l22 110h121q41 0 72 -8t62.5 -33.5t49 -82t17.5 -142.5v-360q0 -102 52 -174t116 -72v-96q-63 0 -115.5 -73t-52.5 -175v-361q0 -86 -17.5 -142t-51 -80.5t-64.5 -33t-72 -8.5h-117l-22 111h108q68 0 89.5 34.5t21.5 147.5v361q0 51 15.5 97t38 74.5t45 50 t38.5 29.5l15 11q-6 4 -16.5 10t-37 31.5t-46 54.5t-36 76t-16.5 98v360q0 113 -20.5 149t-77.5 36h-121z" />
+<glyph unicode="~" horiz-adv-x="1363" d="M299 504v127q25 53 74 90t104 37q78 0 213 -70t209 -70q113 0 166 119l-2 -147q-25 -47 -75 -77t-103 -30q-76 0 -213 70t-209 70q-107 0 -164 -119z" />
+<glyph unicode="&#xa1;" horiz-adv-x="540" d="M119 905q0 51 40 89t91 38q49 0 84 -33.5t35 -83t-40 -87t-91 -37.5q-49 0 -84 32.5t-35 81.5zM143 -430q35 199 35 395v705h123q31 -565 31 -754q0 -170 -33 -326z" />
+<glyph unicode="&#xa2;" horiz-adv-x="843" d="M100 492q0 238 101 372q96 133 248 164v141h92v-139q137 -14 223 -98l-70 -92q-63 51 -153 65v-811q82 10 200 88l52 -96q-98 -92 -252 -115v-123h-92v123q-133 23 -226 131q-123 142 -123 390zM256 512q0 -125 47 -249t146 -161v795q-100 -33 -146.5 -147.5 t-46.5 -237.5z" />
+<glyph unicode="&#xa3;" horiz-adv-x="905" d="M61 791l41 102h80v270q0 129 97.5 191.5t232.5 62.5q145 0 213 -57l-35 -94q-63 37 -166 37q-186 0 -186 -170v-240h274v-123h-274v-260q0 -180 -47 -385h145q119 -39 180 -39q47 0 96.5 26.5t80.5 65.5l22 -102q-41 -45 -102.5 -76t-118.5 -31q-27 0 -72 7.5t-76 15.5 l-30 8h-307q74 330 73 514v264z" />
+<glyph unicode="&#xa4;" horiz-adv-x="1110" d="M20 498l62 129h149q-2 27 -2 63q0 39 2 66h-211l62 129h164q25 229 167 378.5t365 149.5q205 0 348 -143l-57 -123q-113 137 -301 137q-330 0 -379 -399h561l-61 -129h-516q-4 -53 -4 -68q0 -16 4 -61h456l-61 -129h-379q23 -190 119 -292t240 -102q86 0 171 43t146 119 v-164q-127 -127 -328 -127q-195 0 -332 141.5t-159 381.5h-226z" />
+<glyph unicode="&#xa5;" horiz-adv-x="974" d="M25 1290h174l288 -643l289 643h172q-238 -518 -239 -518h247v-123h-303l-84 -182v-10h383v-123h-383v-334h-163v334h-375v123h375v12l-84 180h-287v123h229z" />
+<glyph unicode="&#xa7;" horiz-adv-x="860" d="M43 -190l57 112q147 -90 308 -90q86 0 141 42t55 126q0 61 -53 108.5t-130 80.5l-154 71q-77 37 -130 95.5t-53 133.5q0 125 73.5 195t200.5 88q-147 70 -192 111q-74 66 -74 155q0 139 98.5 213t241.5 74q158 0 295 -78l-55 -106q-139 66 -244 65q-80 0 -131 -42 t-51 -120q0 -51 53 -92t129 -74.5t150.5 -72.5t128 -105.5t53.5 -152.5q0 -109 -59.5 -179.5t-165.5 -93.5q63 -33 103 -59.5t77 -77.5t37 -110q0 -154 -98.5 -236t-254.5 -82q-186 1 -356 101zM238 496q0 -57 52 -93t111 -36q92 0 153.5 41t61.5 129q0 66 -52 105.5 t-120 39.5q-94 0 -150 -47t-56 -139z" />
+<glyph unicode="&#xa8;" horiz-adv-x="786" d="M121 1276q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM436 1276q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xa9;" horiz-adv-x="1800" d="M246 501.5q0 272.5 192.5 465t464.5 192.5q274 0 467 -192.5t193 -465t-193.5 -466t-466 -193.5t-465 193.5t-192.5 466zM346 502q0 -236 164 -397.5t399 -161.5q229 0 391 163.5t162 395t-163.5 395.5t-395 164t-394.5 -164t-163 -395zM594 500q0 154 82 262t231 108 q123 0 209 -79l-55 -70q-61 51 -154 51q-104 0 -150 -77t-46 -189q0 -117 50 -196t161 -79q76 0 172 70l43 -68q-41 -39 -104.5 -68.5t-115.5 -29.5q-152 0 -237.5 104.5t-85.5 260.5z" />
+<glyph unicode="&#xaa;" horiz-adv-x="860" d="M96 768q0 131 101.5 198.5t238.5 67.5q90 0 175 -35.5t134 -103.5l-81 -82q-100 100 -232 100q-72 0 -127 -34.5t-55 -102.5q0 -37 25.5 -68.5t49.5 -44.5l66 -36l189 -92q184 -90 184 -275q0 -143 -103.5 -217t-250.5 -74q-160 0 -293 119l57 111q141 -109 244 -109 q82 0 139 38t57 116q0 94 -127 157l-213 107q-178 90 -178 260zM117 1409l65 92q119 -63 248 -205q166 158 252 203l66 -92q-203 -145 -316 -299q-137 178 -315 301z" />
+<glyph unicode="&#xab;" horiz-adv-x="1024" d="M68 512l378 385l97 -78l-305 -307l309 -307l-96 -78zM432 512l379 385l96 -78l-305 -307l309 -307l-96 -78z" />
+<glyph unicode="&#xac;" horiz-adv-x="1095" d="M94 760v123h826v-523l-121 -22v422h-705z" />
+<glyph unicode="&#xad;" horiz-adv-x="618" d="M111 461v123h391v-123h-391z" />
+<glyph unicode="&#xae;" horiz-adv-x="1800" d="M242 500q0 274 191.5 465.5t466 191.5t465.5 -191.5t191 -466t-192.5 -467t-464.5 -192.5t-464.5 194t-192.5 466zM342 500q0 -238 163 -398.5t400 -160.5q231 0 391 163.5t160 395t-164 395.5t-393 164q-231 0 -394 -164t-163 -395zM688 145v727h176q125 0 212 -59 t87 -178q0 -84 -57 -159t-139 -83l225 -217v-31h-109l-245 248q-23 6 -45 19v-267h-105zM793 498q57 -27 94 -27q76 0 122 45t46 123t-54.5 113.5t-136.5 35.5h-71v-290z" />
+<glyph unicode="&#xaf;" horiz-adv-x="686" d="M61 1174v120h562v-120h-562z" />
+<glyph unicode="&#xb0;" horiz-adv-x="720" d="M68 1038.5q0 116.5 84 200.5t200.5 84t200.5 -84t84 -200.5t-84 -200.5t-200.5 -84t-200.5 84t-84 200.5zM160 1038q0 -80 56 -136t136 -56t136.5 56t56.5 136t-56.5 136.5t-136.5 56.5t-136 -56.5t-56 -136.5z" />
+<glyph unicode="&#xb1;" horiz-adv-x="915" d="M92 451v122h330v355h119v-355h331v-122h-331v-256h-119v256h-330zM113 -2v123h739v-123h-739z" />
+<glyph unicode="&#xb2;" d="M127 127q156 84 325 279.5t169 343.5q0 74 -52.5 113.5t-128.5 39.5q-133 0 -284 -117l-29 119q92 72 161.5 100.5t176.5 28.5q143 0 228 -70.5t85 -211.5q0 -188 -190 -404q-131 -147 -228 -213h455v-135h-659z" />
+<glyph unicode="&#xb3;" d="M147 -225q68 0 146 20q358 82 358 365q0 193 -289 192q-59 0 -174 -12v119l91 12q133 72 258 172q90 70 90 152q0 51 -39 81.5t-92 30.5q-51 0 -142.5 -38t-156.5 -76l-37 108q207 133 370 133q109 0 179.5 -63.5t70.5 -171.5q0 -57 -24.5 -106.5t-73.5 -91.5t-86 -66.5 t-98 -59.5q129 0 218 -78t89 -204q0 -178 -95.5 -304.5t-238.5 -180.5q-138 -52 -303 -52h-12h-9v119z" />
+<glyph unicode="&#xb4;" horiz-adv-x="692" d="M121 1241q201 145 315 299l127 -129q-139 -137 -377 -262z" />
+<glyph unicode="&#xb5;" horiz-adv-x="1062" d="M127 -360q59 137 59 229q0 61 -11 186t-11 187v762h155v-762q0 -76 21.5 -111t93.5 -35q70 0 162 36t143 81v791h156v-850q0 -80 43 -82l-51 -103q-55 0 -95 32t-49 85q-63 -51 -152 -84t-171 -33q-31 0 -88 31q39 -117 39 -180q0 -76 -39 -144z" />
+<glyph unicode="&#xb6;" horiz-adv-x="1112" d="M55 928q0 172 105.5 282.5t275.5 110.5q53 0 113.5 -5t133.5 -13l112 -13l-2 88h114q0 -59 -2 -88l113 19l-6 -105l-107 -24q0 -348 -69.5 -741.5t-200.5 -659.5l-131 41q141 256 212.5 635t71.5 725q-256 27 -292 26q-86 0 -122 -72.5t-36 -166.5q0 -51 7 -99.5 t25.5 -98.5t56.5 -81t93 -31q88 0 166 62q-102 -203 -293 -203q-164 0 -251 121t-87 291z" />
+<glyph unicode="&#xb7;" horiz-adv-x="528" d="M147 494q0 51 40 87.5t92 36.5q49 0 83.5 -32.5t34.5 -81.5t-40 -87t-91 -38q-49 0 -84 33t-35 82z" />
+<glyph unicode="&#xb8;" horiz-adv-x="823" d="M389 -2h213q76 -55 76 -127q0 -68 -67.5 -131.5t-143.5 -95.5l-78 63q166 90 166 154q0 27 -18.5 43t-47.5 16q-27 0 -100 -18v96z" />
+<glyph unicode="&#xb9;" d="M203 858v98q88 0 194 29l74 19h141v-1004h-151v858h-258z" />
+<glyph unicode="&#xba;" horiz-adv-x="843" d="M100 492q0 129 39 247.5t134.5 206.5t228.5 88q156 0 262 -102l-70 -92q-86 72 -190 71q-86 0 -145.5 -71.5t-81 -157.5t-21.5 -170q0 -90 21.5 -180t84 -165t154.5 -75q86 0 225 90l52 -96q-57 -49 -137.5 -83t-151.5 -34q-197 0 -300.5 158t-103.5 365zM256 1241 q201 145 315 299l127 -129q-139 -137 -376 -262z" />
+<glyph unicode="&#xbb;" horiz-adv-x="1024" d="M131 205l96 -78l383 385l-379 385l-96 -78l305 -307zM496 205l96 -78l383 385l-379 385l-96 -78l305 -307z" />
+<glyph unicode="&#xbc;" horiz-adv-x="2537" d="M203 858v98q88 0 194 29l74 19h141v-1004h-151v858h-258zM772 -268l881 1794h129l-881 -1794h-129zM1679 133q139 387 502 871h168v-871h131v-133h-135v-283h-145v283h-512zM1831 133h369v680q-242 -354 -369 -680z" />
+<glyph unicode="&#xbd;" horiz-adv-x="2537" d="M203 858v98q88 0 194 29l74 19h141v-1004h-151v858h-258zM772 -268l881 1794h129l-881 -1794h-129zM1743 127q156 84 324.5 279.5t168.5 343.5q0 74 -52 113.5t-128 39.5q-133 0 -284 -117l-29 119q92 72 161.5 100.5t176.5 28.5q143 0 228 -70.5t85 -211.5 q0 -188 -190 -404q-131 -147 -228 -213h455v-135h-659z" />
+<glyph unicode="&#xbe;" horiz-adv-x="2537" d="M147 -225q68 0 146 20q358 82 358 365q0 193 -289 192q-59 0 -174 -12v119l91 12q133 72 258 172q90 70 90 152q0 51 -39 81.5t-92 30.5q-51 0 -142.5 -38t-156.5 -76l-37 108q207 133 370 133q109 0 179.5 -63.5t70.5 -171.5q0 -57 -24.5 -106.5t-73.5 -91.5t-86 -66.5 t-98 -59.5q129 0 218 -78t89 -204q0 -178 -95.5 -304.5t-238.5 -180.5q-138 -52 -303 -52h-12h-9v119zM772 -268l881 1794h129l-881 -1794h-129zM1679 133q139 387 502 871h168v-871h131v-133h-135v-283h-145v283h-512zM1831 133h369v680q-242 -354 -369 -680z" />
+<glyph unicode="&#xbf;" horiz-adv-x="733" d="M86 -164q0 94 100 230l164 215q47 61 63.5 121.5t16.5 164.5v99h125v-99q0 -86 -2 -127t-20.5 -103.5t-55.5 -111.5l-168 -225q-70 -92 -69 -160q0 -59 30.5 -94t87.5 -35q88 0 172 19v-117q-111 -27 -184 -27q-121 0 -190.5 63.5t-69.5 186.5zM369 909q0 51 40 88t91 37 q49 0 83.5 -32.5t34.5 -82t-39.5 -87t-91.5 -37.5q-49 0 -83.5 32.5t-34.5 81.5z" />
+<glyph unicode="&#xc0;" horiz-adv-x="1044" d="M25 0l409 1290h176l410 -1290h-168l-137 416h-385l-137 -416h-168zM307 1677l127 129q106 -147 316 -299l-66 -92q-240 127 -377 262zM369 551h307l-154 569z" />
+<glyph unicode="&#xc1;" horiz-adv-x="1044" d="M25 0l409 1290h176l410 -1290h-168l-137 416h-385l-137 -416h-168zM307 1507q201 145 316 299l127 -129q-139 -137 -377 -262zM369 551h307l-154 569z" />
+<glyph unicode="&#xc2;" horiz-adv-x="1044" d="M25 0l409 1290h176l410 -1290h-168l-137 416h-385l-137 -416h-168zM203 1505q164 113 313 301q127 -164 313 -299l-65 -94q-117 61 -248 205q-133 -145 -248 -205zM369 551h307l-154 569z" />
+<glyph unicode="&#xc3;" horiz-adv-x="1044" d="M25 0l409 1290h176l410 -1290h-168l-137 416h-385l-137 -416h-168zM139 1581q152 119 246 119q59 0 146 -45t135 -45q53 0 83.5 13t88.5 52l63 -78q-74 -68 -125 -91t-125 -23q-41 0 -128 45t-144 45q-18 0 -35.5 -4t-40.5 -16l-33 -16q-10 -5 -38.5 -23.5t-32.5 -20.5z M369 551h307l-154 569z" />
+<glyph unicode="&#xc4;" horiz-adv-x="1044" d="M25 0l409 1290h176l410 -1290h-168l-137 416h-385l-137 -416h-168zM258 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM369 551h307l-154 569zM573 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5 q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xc5;" horiz-adv-x="1044" d="M25 0l409 1290h176l410 -1290h-168l-137 416h-385l-137 -416h-168zM309 1606q0 88 64.5 152.5t152.5 64.5t150.5 -63.5t62.5 -153.5t-64.5 -153.5t-152.5 -63.5t-150.5 63.5t-62.5 153.5zM369 551h307l-154 569zM401 1605.5q0 -49.5 37 -86t84 -36.5q49 0 86 36.5t37 86 t-35 86.5t-82 37q-51 0 -89 -37t-38 -86.5z" />
+<glyph unicode="&#xc6;" horiz-adv-x="1486" d="M25 0l407 1290h191l98 -432v432h663v-137h-499v-410h383v-141h-383v-461h520v-141h-684v416h-389l-137 -416h-170zM371 551h305l-154 569z" />
+<glyph unicode="&#xc7;" horiz-adv-x="1017" d="M113 645q0 119 29.5 233.5t87 216t157.5 164t227 62.5q199 0 332 -88l-59 -107q-127 68 -273 68q-82 0 -154.5 -62.5t-111.5 -144.5q-72 -145 -72 -350q0 -90 16.5 -176t52.5 -172t106.5 -138.5t166.5 -52.5q164 0 277 90l72 -104q-98 -80 -250 -107q53 -53 53 -106 q0 -68 -67.5 -131.5t-143.5 -95.5l-78 63q166 90 166 154q0 27 -18.5 43t-46.5 16q-27 0 -101 -18v82q-102 29 -177 98.5t-114.5 164.5t-58 194.5t-18.5 203.5z" />
+<glyph unicode="&#xc8;" horiz-adv-x="929" d="M164 0v1290h663v-137h-499v-410h383v-141h-383v-461h520v-141h-684zM285 1677l127 129q113 -152 315 -299l-65 -92q-234 123 -377 262z" />
+<glyph unicode="&#xc9;" horiz-adv-x="929" d="M164 0v1290h663v-137h-499v-410h383v-141h-383v-461h520v-141h-684zM289 1507q201 145 315 299l127 -129q-139 -137 -377 -262z" />
+<glyph unicode="&#xca;" horiz-adv-x="929" d="M164 0v1290h663v-137h-499v-410h383v-141h-383v-461h520v-141h-684zM184 1505q164 113 314 301q131 -170 313 -299l-66 -94q-117 61 -247 205q-141 -150 -248 -205z" />
+<glyph unicode="&#xcb;" horiz-adv-x="929" d="M164 0v1290h663v-137h-499v-410h383v-141h-383v-461h520v-141h-684zM240 1542q0 45 34.5 83t81.5 38q35 0 58.5 -23.5t23.5 -58.5q0 -45 -38 -80t-83 -35q-33 0 -55 21.5t-22 54.5zM555 1542q0 45 35 83t82 38q35 0 58.5 -23.5t23.5 -58.5q0 -45 -38 -80t-83 -35 q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xcc;" horiz-adv-x="487" d="M25 1677l127 129q111 -154 315 -299l-66 -92q-235 123 -376 262zM164 0v1290h160v-1290h-160z" />
+<glyph unicode="&#xcd;" horiz-adv-x="487" d="M23 1507q201 145 315 299l127 -129q-139 -137 -377 -262zM164 0v1290h160v-1290h-160z" />
+<glyph unicode="&#xce;" horiz-adv-x="487" d="M-70 1505q164 113 314 301q127 -164 313 -299l-65 -94q-117 61 -248 205q-133 -145 -248 -205zM164 0v1290h160v-1290h-160z" />
+<glyph unicode="&#xcf;" horiz-adv-x="487" d="M-14 1542q0 45 35.5 83t80.5 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38.5 -80t-84.5 -35q-33 0 -55 21.5t-22 54.5zM164 0v1290h160v-1290h-160zM301 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xd1;" horiz-adv-x="1134" d="M164 0v1290h217l436 -987q-10 98 -10 180v807h164v-1290h-168l-486 1053q10 -96 11 -176v-877h-164zM195 1581q152 119 245 119q59 0 146.5 -45t134.5 -45q53 0 84 13t88 52l63 -78q-74 -68 -125 -91t-124 -23q-41 0 -128 45t-145 45q-18 0 -35.5 -4t-40.5 -16l-32 -16 q-10 -5 -39 -23.5t-33 -20.5z" />
+<glyph unicode="&#xd2;" horiz-adv-x="1122" d="M113 645.5q0 110.5 23.5 222t73.5 217t141 171t210 65.5t210 -65.5t141.5 -171t74 -217t23.5 -222t-23.5 -222.5t-74 -217.5t-141.5 -171t-210 -65.5t-210 65.5t-141 171t-73.5 217.5t-23.5 222.5zM276 645q0 -72 14.5 -155.5t44.5 -175t89 -151t137 -59.5t137.5 59.5 t89 151t44 175t14.5 155.5t-14.5 156t-44 175t-89 150.5t-137.5 59.5t-137 -59.5t-89 -150.5t-44.5 -175t-14.5 -156zM336 1677l127 129q106 -147 315 -299l-65 -92q-240 127 -377 262z" />
+<glyph unicode="&#xd3;" horiz-adv-x="1122" d="M113 645.5q0 110.5 23.5 222t73.5 217t141 171t210 65.5t210 -65.5t141.5 -171t74 -217t23.5 -222t-23.5 -222.5t-74 -217.5t-141.5 -171t-210 -65.5t-210 65.5t-141 171t-73.5 217.5t-23.5 222.5zM276 645q0 -72 14.5 -155.5t44.5 -175t89 -151t137 -59.5t137.5 59.5 t89 151t44 175t14.5 155.5t-14.5 156t-44 175t-89 150.5t-137.5 59.5t-137 -59.5t-89 -150.5t-44.5 -175t-14.5 -156zM342 1507q201 145 315 299l127 -129q-139 -137 -376 -262z" />
+<glyph unicode="&#xd4;" horiz-adv-x="1122" d="M113 645.5q0 110.5 23.5 222t73.5 217t141 171t210 65.5t210 -65.5t141.5 -171t74 -217t23.5 -222t-23.5 -222.5t-74 -217.5t-141.5 -171t-210 -65.5t-210 65.5t-141 171t-73.5 217.5t-23.5 222.5zM246 1511q160 109 313 301q127 -164 313 -299l-65 -94q-113 57 -248 205 q-129 -145 -248 -205zM276 645q0 -72 14.5 -155.5t44.5 -175t89 -151t137 -59.5t137.5 59.5t89 151t44 175t14.5 155.5t-14.5 156t-44 175t-89 150.5t-137.5 59.5t-137 -59.5t-89 -150.5t-44.5 -175t-14.5 -156z" />
+<glyph unicode="&#xd5;" horiz-adv-x="1122" d="M113 645.5q0 110.5 23.5 222t73.5 217t141 171t210 65.5t210 -65.5t141.5 -171t74 -217t23.5 -222t-23.5 -222.5t-74 -217.5t-141.5 -171t-210 -65.5t-210 65.5t-141 171t-73.5 217.5t-23.5 222.5zM176 1581q152 119 246 119q59 0 146 -45t134 -45q53 0 84 13t88 52 l64 -78q-74 -68 -125 -91t-125 -23q-41 0 -128 45t-144 45q-18 0 -36 -4t-40 -16l-33 -16q-10 -5 -38.5 -23.5t-32.5 -20.5zM276 645q0 -72 14.5 -155.5t44.5 -175t89 -151t137 -59.5t137.5 59.5t89 151t44 175t14.5 155.5t-14.5 156t-44 175t-89 150.5t-137.5 59.5 t-137 -59.5t-89 -150.5t-44.5 -175t-14.5 -156z" />
+<glyph unicode="&#xd6;" horiz-adv-x="1122" d="M113 645.5q0 110.5 23.5 222t73.5 217t141 171t210 65.5t210 -65.5t141.5 -171t74 -217t23.5 -222t-23.5 -222.5t-74 -217.5t-141.5 -171t-210 -65.5t-210 65.5t-141 171t-73.5 217.5t-23.5 222.5zM276 645q0 -72 14.5 -155.5t44.5 -175t89 -151t137 -59.5t137.5 59.5 t89 151t44 175t14.5 155.5t-14.5 156t-44 175t-89 150.5t-137.5 59.5t-137 -59.5t-89 -150.5t-44.5 -175t-14.5 -156zM299 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM614 1542q0 45 36 83t81 38 q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xd8;" horiz-adv-x="1122" d="M113 653q0 111 24.5 221.5t73.5 214t140 168t210 64.5q78 0 139 -27l70 240h102l-84 -293q115 -92 168.5 -257t53.5 -339q0 -111 -23.5 -222.5t-73 -217t-140.5 -171t-212 -65.5q-63 0 -131 23l-80 -279h-102l94 330q-119 92 -174 262t-55 348zM276 633q0 -307 109 -443 l279 971q-45 25 -103 25q-88 0 -149.5 -57.5t-88 -152.5t-37 -176t-10.5 -167zM467 123q45 -18 94 -19q90 0 150.5 55.5t87 147.5t37 172t10.5 166q0 297 -103 442z" />
+<glyph unicode="&#xd9;" horiz-adv-x="1142" d="M162 502v788h164v-790q0 -395 245.5 -395.5t245.5 397.5v788h164v-796q0 -225 -98.5 -375t-311.5 -150t-311 152t-98 381zM354 1677l127 129q106 -147 316 -299l-66 -92q-240 127 -377 262z" />
+<glyph unicode="&#xda;" horiz-adv-x="1142" d="M162 502v788h164v-790q0 -395 245.5 -395.5t245.5 397.5v788h164v-796q0 -225 -98.5 -375t-311.5 -150t-311 152t-98 381zM358 1507q201 145 316 299l127 -129q-139 -137 -377 -262z" />
+<glyph unicode="&#xdb;" horiz-adv-x="1142" d="M162 502v788h164v-790q0 -395 245.5 -395.5t245.5 397.5v788h164v-796q0 -225 -98.5 -375t-311.5 -150t-311 152t-98 381zM254 1505q164 113 313 301q127 -164 314 -299l-66 -94q-117 61 -248 205q-133 -145 -248 -205z" />
+<glyph unicode="&#xdc;" horiz-adv-x="1126" d="M162 502v788h164v-790q0 -395 245.5 -395.5t245.5 397.5v788h164v-796q0 -225 -98.5 -375t-311.5 -150t-311 152t-98 381zM311 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM627 1542q0 45 35.5 83t80.5 38 q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38.5 -80t-83.5 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xdd;" horiz-adv-x="964" d="M27 1290h174l286 -643l289 643h164l-377 -817v-473h-162v473zM418 1536q201 145 315 299l127 -129q-139 -137 -377 -262z" />
+<glyph unicode="&#xdf;" horiz-adv-x="1171" d="M47 903v101h135v155q0 133 110.5 211t250.5 78q156 0 260 -92t104 -246q0 -53 -41 -209q-35 18 -90 19q-80 0 -131 -42t-51 -120q0 -49 53 -90t129 -75t152 -74t129 -107.5t53 -157.5q0 -141 -103.5 -213t-250.5 -72q-188 0 -357 103l58 112q147 -92 307 -92 q84 0 140.5 45t56.5 125q0 59 -53.5 106.5t-130.5 81.5l-153 70q-77 37 -130.5 95.5t-53.5 136.5q0 137 90.5 210.5t231.5 73.5q14 53 14 94q0 94 -62.5 145.5t-156.5 51.5q-88 0 -153.5 -54t-65.5 -140v-1133h-156v885z" />
+<glyph unicode="&#xe0;" horiz-adv-x="954" d="M86 246q0 72 59 182l482 205v129q0 72 -43 108.5t-115 36.5q-70 0 -146.5 -44t-129.5 -103l-58 96q61 78 157.5 128t190.5 50q137 0 218 -68.5t81 -203.5v-625q0 -61 66 -61q25 0 41 12l39 -78q-59 -37 -119 -37q-82 0 -131 49.5t-49 131.5q-25 -86 -106 -135.5 t-175 -49.5q-123 0 -192.5 76t-69.5 201zM240 252q0 -68 36.5 -114t102.5 -46q109 0 178.5 109.5t69.5 224.5v84l-361 -152q-26 -57 -26 -106zM244 1411l127 129q106 -147 315 -299l-65 -92q-240 127 -377 262z" />
+<glyph unicode="&#xe1;" horiz-adv-x="954" d="M86 246q0 72 59 182l482 205v129q0 72 -43 108.5t-115 36.5q-70 0 -146.5 -44t-129.5 -103l-58 96q61 78 157.5 128t190.5 50q137 0 218 -68.5t81 -203.5v-625q0 -61 66 -61q25 0 41 12l39 -78q-59 -37 -119 -37q-82 0 -131 49.5t-49 131.5q-25 -86 -106 -135.5 t-175 -49.5q-123 0 -192.5 76t-69.5 201zM240 252q0 -68 36.5 -114t102.5 -46q109 0 178.5 109.5t69.5 224.5v84l-361 -152q-26 -57 -26 -106zM258 1241q201 145 315 299l127 -129q-139 -137 -376 -262z" />
+<glyph unicode="&#xe2;" horiz-adv-x="954" d="M86 246q0 72 59 182l482 205v129q0 72 -43 108.5t-115 36.5q-70 0 -146.5 -44t-129.5 -103l-58 96q61 78 157.5 128t190.5 50q137 0 218 -68.5t81 -203.5v-625q0 -61 66 -61q25 0 41 12l39 -78q-59 -37 -119 -37q-82 0 -131 49.5t-49 131.5q-25 -86 -106 -135.5 t-175 -49.5q-123 0 -192.5 76t-69.5 201zM147 1239q164 113 314 301q127 -164 313 -299l-65 -94q-117 61 -248 205q-133 -145 -248 -205zM240 252q0 -68 36.5 -114t102.5 -46q109 0 178.5 109.5t69.5 224.5v84l-361 -152q-26 -57 -26 -106z" />
+<glyph unicode="&#xe3;" horiz-adv-x="954" d="M86 246q0 72 59 182l482 205v129q0 72 -43 108.5t-115 36.5q-70 0 -146.5 -44t-129.5 -103l-58 96q61 78 157.5 128t190.5 50q137 0 218 -68.5t81 -203.5v-625q0 -61 66 -61q25 0 41 12l39 -78q-59 -37 -119 -37q-82 0 -131 49.5t-49 131.5q-25 -86 -106 -135.5 t-175 -49.5q-123 0 -192.5 76t-69.5 201zM86 1315q152 119 246 119q59 0 146 -45.5t134 -45.5q53 0 84 13.5t88 52.5l64 -78q-74 -68 -125 -91t-125 -23q-41 0 -128 45t-144 45q-18 0 -36 -4.5t-40 -15.5l-33 -16q-10 -5 -38.5 -23.5t-33.5 -20.5zM240 252q0 -68 36.5 -114 t102.5 -46q109 0 178.5 109.5t69.5 224.5v84l-361 -152q-26 -57 -26 -106z" />
+<glyph unicode="&#xe4;" horiz-adv-x="954" d="M86 246q0 72 59 182l482 205v129q0 72 -43 108.5t-115 36.5q-70 0 -146.5 -44t-129.5 -103l-58 96q61 78 157.5 128t190.5 50q137 0 218 -68.5t81 -203.5v-625q0 -61 66 -61q25 0 41 12l39 -78q-59 -37 -119 -37q-82 0 -131 49.5t-49 131.5q-25 -86 -106 -135.5 t-175 -49.5q-123 0 -192.5 76t-69.5 201zM203 1276q0 45 35.5 83t80.5 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38.5 -80t-83.5 -35q-33 0 -55.5 21.5t-22.5 54.5zM240 252q0 -68 36.5 -114t102.5 -46q109 0 178.5 109.5t69.5 224.5v84l-361 -152q-26 -57 -26 -106zM518 1276 q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xe5;" horiz-adv-x="954" d="M86 246q0 72 59 182l482 205v129q0 72 -43 108.5t-115 36.5q-70 0 -146.5 -44t-129.5 -103l-58 96q61 78 157.5 128t190.5 50q137 0 218 -68.5t81 -203.5v-625q0 -61 66 -61q25 0 41 12l39 -78q-59 -37 -119 -37q-82 0 -131 49.5t-49 131.5q-25 -86 -106 -135.5 t-175 -49.5q-123 0 -192.5 76t-69.5 201zM240 252q0 -68 36.5 -114t102.5 -46q109 0 178.5 109.5t69.5 224.5v84l-361 -152q-26 -57 -26 -106zM244 1350q0 88 64.5 152.5t152.5 64.5t150.5 -64.5t62.5 -152.5t-64.5 -152.5t-152.5 -64.5t-150.5 64.5t-62.5 152.5zM336 1350 q0 -49 36 -86t85 -37t86 36.5t37 86t-34 86.5t-83 37q-51 0 -89 -36t-38 -87z" />
+<glyph unicode="&#xe6;" horiz-adv-x="1484" d="M86 252q0 111 59 180q33 37 482 201v129q0 72 -43 108.5t-115 36.5t-147.5 -43t-128.5 -104l-58 96q61 78 157.5 128t190.5 50q197 0 269 -137q121 137 295 137q145 0 243.5 -114.5t104.5 -264.5l4 -104h-619v-39q0 -63 12.5 -131t40 -135.5t80 -110.5t121.5 -43 q156 0 254 60l47 -101q-133 -82 -327 -82q-102 0 -190.5 61.5t-133.5 155.5l-170 -145q-84 -72 -174 -72q-125 0 -189.5 77t-64.5 206zM240 247.5q0 -59.5 33.5 -104.5t91.5 -45q72 0 145 62l141 119q-27 88 -30 229q-319 -115 -345 -150q-36 -51 -36 -110.5zM799 668h436 q0 94 -56.5 170.5t-146.5 76.5t-151.5 -74.5t-81.5 -172.5z" />
+<glyph unicode="&#xe7;" horiz-adv-x="843" d="M100 492q0 238 101 372q55 74 135 122t166 48q68 0 141.5 -27.5t120.5 -74.5l-70 -92q-84 70 -190 69q-84 0 -142.5 -68.5t-82.5 -158.5q-23 -76 -23 -170q0 -86 21.5 -176t81 -167t147.5 -77q96 0 235 90l52 -96q-72 -66 -179 -98q63 -59 64 -117q0 -68 -67.5 -131.5 t-143.5 -95.5l-78 63q166 90 166 154q0 27 -18.5 43t-47.5 16q-27 0 -100 -18v84q-147 51 -218 192.5t-71 313.5z" />
+<glyph unicode="&#xe8;" horiz-adv-x="964" d="M100 528q0 197 118 351.5t308 154.5q145 0 241.5 -114.5t106.5 -264.5q2 -16 2.5 -51t2.5 -53h-619v-39q0 -84 20.5 -174t79 -168t144.5 -78q100 0 284 127l50 -98q-72 -61 -170.5 -106.5t-180.5 -45.5q-104 0 -183 52.5t-121 138.5t-62.5 179t-20.5 189zM279 668h436 q0 94 -55.5 168.5t-147.5 74.5q-90 0 -151.5 -73.5t-81.5 -169.5zM293 1411l127 129q106 -147 315 -299l-65 -92q-240 127 -377 262z" />
+<glyph unicode="&#xe9;" horiz-adv-x="964" d="M100 528q0 197 118 351.5t308 154.5q145 0 241.5 -114.5t106.5 -264.5q2 -16 2.5 -51t2.5 -53h-619v-39q0 -84 20.5 -174t79 -168t144.5 -78q100 0 284 127l50 -98q-72 -61 -170.5 -106.5t-180.5 -45.5q-104 0 -183 52.5t-121 138.5t-62.5 179t-20.5 189zM279 668h436 q0 94 -55.5 168.5t-147.5 74.5q-90 0 -151.5 -73.5t-81.5 -169.5zM313 1241q201 145 316 299l127 -129q-139 -137 -377 -262z" />
+<glyph unicode="&#xea;" horiz-adv-x="964" d="M100 528q0 197 118 351.5t308 154.5q145 0 241.5 -114.5t106.5 -264.5q2 -16 2.5 -51t2.5 -53h-619v-39q0 -84 20.5 -174t79 -168t144.5 -78q100 0 284 127l50 -98q-72 -61 -170.5 -106.5t-180.5 -45.5q-104 0 -183 52.5t-121 138.5t-62.5 179t-20.5 189zM199 1239 q164 113 313 301q127 -164 313 -299l-65 -94q-117 61 -248 205q-133 -145 -248 -205zM279 668h436q0 94 -55.5 168.5t-147.5 74.5q-90 0 -151.5 -73.5t-81.5 -169.5z" />
+<glyph unicode="&#xeb;" horiz-adv-x="964" d="M100 528q0 197 118 351.5t308 154.5q145 0 241.5 -114.5t106.5 -264.5q2 -16 2.5 -51t2.5 -53h-619v-39q0 -84 20.5 -174t79 -168t144.5 -78q100 0 284 127l50 -98q-72 -61 -170.5 -106.5t-180.5 -45.5q-104 0 -183 52.5t-121 138.5t-62.5 179t-20.5 189zM270 1276 q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM279 668h436q0 94 -55.5 168.5t-147.5 74.5q-90 0 -151.5 -73.5t-81.5 -169.5zM586 1276q0 45 35.5 83t80.5 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38.5 -80t-83.5 -35 q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xec;" horiz-adv-x="487" d="M23 1411l127 129q106 -147 315 -299l-66 -92q-239 127 -376 262zM168 0v1004h151v-1004h-151z" />
+<glyph unicode="&#xed;" horiz-adv-x="487" d="M41 1241q201 145 315 299l127 -129q-139 -137 -377 -262zM168 0v1004h151v-1004h-151z" />
+<glyph unicode="&#xee;" horiz-adv-x="487" d="M-76 1239q164 113 314 301q127 -164 313 -299l-66 -94q-117 61 -247 205q-133 -145 -248 -205zM168 0v1004h151v-1004h-151z" />
+<glyph unicode="&#xef;" horiz-adv-x="487" d="M-16 1276q0 45 34.5 83t81.5 38q33 0 58.5 -24.5t25.5 -57.5q0 -45 -38.5 -80t-84.5 -35q-33 0 -55 21.5t-22 54.5zM168 0v1004h151v-1004h-151zM299 1276q0 45 35 83t82 38q33 0 58.5 -24.5t25.5 -57.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xf1;" horiz-adv-x="1062" d="M166 1315q152 119 246 119q59 0 146 -45.5t134 -45.5q53 0 84 13.5t88 52.5l64 -78q-74 -68 -125 -91t-125 -23q-41 0 -128 45t-145 45q-18 0 -35.5 -4.5t-39.5 -15.5l-33 -16q-10 -5 -39 -23.5t-33 -20.5zM168 0v1004h156v-74q55 39 151 71.5t174 32.5 q147 0 198.5 -69.5t51.5 -202.5v-762h-156v762q0 76 -24.5 110.5t-95.5 34.5q-78 0 -168 -34.5t-131 -69.5v-803h-156z" />
+<glyph unicode="&#xf2;" horiz-adv-x="999" d="M100 500q0 127 40 243.5t134.5 203.5t225.5 87t225 -87t134 -203.5t40 -243.5q0 -125 -41 -243t-135 -203t-223 -85t-223.5 85t-135.5 203t-41 243zM256 500q0 -139 64.5 -273.5t179 -134.5t179 134t64.5 274q0 84 -23.5 175t-81.5 163.5t-138 72.5t-138.5 -72.5 t-82 -163.5t-23.5 -175zM281 1411l127 129q106 -147 315 -299l-66 -92q-239 127 -376 262z" />
+<glyph unicode="&#xf3;" horiz-adv-x="999" d="M100 500q0 127 40 243.5t134.5 203.5t225.5 87t225 -87t134 -203.5t40 -243.5q0 -125 -41 -243t-135 -203t-223 -85t-223.5 85t-135.5 203t-41 243zM256 500q0 -139 64.5 -273.5t179 -134.5t179 134t64.5 274q0 84 -23.5 175t-81.5 163.5t-138 72.5t-138.5 -72.5 t-82 -163.5t-23.5 -175zM293 1241q201 145 315 299l127 -129q-139 -137 -377 -262z" />
+<glyph unicode="&#xf4;" horiz-adv-x="999" d="M100 500q0 127 40 243.5t134.5 203.5t225.5 87t225 -87t134 -203.5t40 -243.5q0 -125 -41 -243t-135 -203t-223 -85t-223.5 85t-135.5 203t-41 243zM193 1239q164 113 313 301q127 -164 313 -299l-65 -94q-117 61 -248 205q-133 -145 -248 -205zM256 500 q0 -139 64.5 -273.5t179 -134.5t179 134t64.5 274q0 84 -23.5 175t-81.5 163.5t-138 72.5t-138.5 -72.5t-82 -163.5t-23.5 -175z" />
+<glyph unicode="&#xf5;" horiz-adv-x="999" d="M100 500q0 127 40 243.5t134.5 203.5t225.5 87t225 -87t134 -203.5t40 -243.5q0 -125 -41 -243t-135 -203t-223 -85t-223.5 85t-135.5 203t-41 243zM117 1315q152 119 245 119q59 0 146.5 -45.5t134.5 -45.5q53 0 84 13.5t88 52.5l64 -78q-74 -68 -125.5 -91t-124.5 -23 q-41 0 -128 45t-145 45q-18 0 -35.5 -4.5t-39.5 -15.5l-33 -16q-10 -5 -39 -23.5t-33 -20.5zM256 500q0 -139 64.5 -273.5t179 -134.5t179 134t64.5 274q0 84 -23.5 175t-81.5 163.5t-138 72.5t-138.5 -72.5t-82 -163.5t-23.5 -175z" />
+<glyph unicode="&#xf6;" horiz-adv-x="999" d="M100 500q0 127 40 243.5t134.5 203.5t225.5 87t225 -87t134 -203.5t40 -243.5q0 -125 -41 -243t-135 -203t-223 -85t-223.5 85t-135.5 203t-41 243zM250 1276q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM256 500 q0 -139 64.5 -273.5t179 -134.5t179 134t64.5 274q0 84 -23.5 175t-81.5 163.5t-138 72.5t-138.5 -72.5t-82 -163.5t-23.5 -175zM565 1276q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xf7;" horiz-adv-x="1001" d="M111 451v122h778v-122h-778zM381 209q0 51 40 88t91 37q49 0 84 -33t35 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82zM381 817q0 51 40 88t91 37q49 0 84 -32.5t35 -82t-40 -87.5t-91 -38q-49 0 -84 33t-35 82z" />
+<glyph unicode="&#xf8;" horiz-adv-x="999" d="M100 500q0 92 25 183t72 171t125.5 130t177.5 50q49 0 94 -12l49 170h102l-61 -213q106 -72 160.5 -204t54.5 -275q0 -125 -41 -243t-135 -203t-223 -85q-55 0 -101 15l-59 -211h-102l71 254q-104 72 -156.5 202t-52.5 271zM256 500q0 -229 92 -338l213 741q-27 8 -61 8 q-72 0 -123 -41t-76 -108.5t-35 -131.5t-10 -130zM434 100q35 -10 66 -10q72 0 123 41t75.5 107.5t34.5 130t10 131.5q0 233 -96 346z" />
+<glyph unicode="&#xf9;" horiz-adv-x="1058" d="M164 242v762h155v-762q0 -76 21.5 -111t93.5 -35q68 0 161 36t144 81v791h156v-850q0 -78 43 -82l-51 -103q-55 0 -95 32t-49 85q-61 -53 -151 -85t-172 -32q-139 0 -197.5 67t-58.5 206zM313 1411l127 129q106 -147 316 -299l-66 -92q-240 127 -377 262z" />
+<glyph unicode="&#xfa;" horiz-adv-x="1058" d="M164 242v762h155v-762q0 -76 21.5 -111t93.5 -35q68 0 161 36t144 81v791h156v-850q0 -78 43 -82l-51 -103q-55 0 -95 32t-49 85q-61 -53 -151 -85t-172 -32q-139 0 -197.5 67t-58.5 206zM313 1241q201 145 316 299l127 -129q-139 -137 -377 -262z" />
+<glyph unicode="&#xfb;" horiz-adv-x="1058" d="M164 242v762h155v-762q0 -76 21.5 -111t93.5 -35q68 0 161 36t144 81v791h156v-850q0 -78 43 -82l-51 -103q-55 0 -95 32t-49 85q-61 -53 -151 -85t-172 -32q-139 0 -197.5 67t-58.5 206zM207 1239q164 113 313 301q127 -164 314 -299l-66 -94q-117 61 -248 205 q-133 -145 -248 -205z" />
+<glyph unicode="&#xfc;" horiz-adv-x="1058" d="M164 242v762h155v-762q0 -76 21.5 -111t93.5 -35q68 0 161 36t144 81v791h156v-850q0 -78 43 -82l-51 -103q-55 0 -95 32t-49 85q-61 -53 -151 -85t-172 -32q-139 0 -197.5 67t-58.5 206zM270 1276q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35 q-33 0 -55.5 21.5t-22.5 54.5zM586 1276q0 45 35.5 83t80.5 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38.5 -80t-83.5 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#xfd;" horiz-adv-x="929" d="M23 1004h163l234 -658q39 -115 55 -205q154 383 275 863h155q-250 -973 -493 -1256q-78 -90 -240 -129l-33 119q70 16 152 86q43 37 106 160zM399 1249q201 145 316 299l127 -129q-139 -137 -377 -262z" />
+<glyph unicode="&#xff;" horiz-adv-x="929" d="M23 1004h163l234 -658q39 -115 55 -205q154 383 275 863h155q-250 -973 -493 -1256q-78 -90 -240 -129l-33 119q70 16 152 86q43 37 106 160zM217 1276q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5zM532 1276 q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#x152;" horiz-adv-x="1306" d="M113 653q0 102 23.5 208t70.5 205t133 161.5t199 62.5h665v-137h-499v-410h382v-141h-382v-461h520v-141h-686q-115 0 -202 64.5t-133 167t-68.5 209t-22.5 212.5zM270 633q0 -80 10.5 -155t36 -160t84 -137t140.5 -52v1030q-84 0 -142.5 -55t-84 -145.5t-35 -167 t-9.5 -158.5z" />
+<glyph unicode="&#x153;" horiz-adv-x="1558" d="M100 500q0 92 25 183t72 171t125.5 130t177.5 50q197 0 297 -172q123 172 323 172q145 0 242.5 -114.5t105.5 -264.5q2 -16 2 -51t3 -53h-619v-39q0 -63 12.5 -131t40 -135.5t79.5 -110.5t122 -43q154 0 254 60l47 -101q-133 -82 -328 -82q-86 0 -161.5 44t-126.5 116 q-113 -160 -293 -160q-129 0 -223.5 85t-135.5 203t-41 243zM256 500q0 -68 10 -131.5t35 -130t76 -107.5t123 -41q160 0 219 209q-25 100 -25 229q0 78 27 168q-61 215 -221 215q-72 0 -123 -41t-76 -108.5t-35 -131.5t-10 -130zM872 668h437q0 94 -55.5 170.5t-147.5 76.5 q-88 0 -151 -75.5t-83 -171.5z" />
+<glyph unicode="&#x178;" horiz-adv-x="964" d="M27 1290h174l286 -643l289 643h164l-377 -817v-473h-162v473zM244 1542q0 45 35.5 83t80.5 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -38.5 -80t-83.5 -35q-33 0 -55.5 21.5t-22.5 54.5zM559 1542q0 45 36 83t81 38q35 0 59.5 -23.5t24.5 -58.5q0 -45 -39 -80t-84 -35 q-33 0 -55.5 21.5t-22.5 54.5z" />
+<glyph unicode="&#x2c6;" horiz-adv-x="823" d="M123 1239q164 113 313 301q127 -164 314 -299l-66 -94q-117 61 -248 205q-133 -145 -248 -205z" />
+<glyph unicode="&#x2dc;" horiz-adv-x="778" d="M2 1315q152 119 246 119q59 0 146 -45.5t134 -45.5q53 0 84 13.5t88 52.5l64 -78q-74 -68 -125 -91t-125 -23q-41 0 -128 45t-144 45q-18 0 -36 -4.5t-40 -15.5l-33 -16q-10 -5 -38.5 -23.5t-33.5 -20.5z" />
+<glyph unicode="&#x2013;" horiz-adv-x="733" d="M0 461v123h733v-123h-733z" />
+<glyph unicode="&#x2014;" horiz-adv-x="1245" d="M0 463v123h1245v-123h-1245z" />
+<glyph unicode="&#x2018;" horiz-adv-x="546" d="M94 977q84 178 264 377l93 -64q-98 -141 -123 -239q-10 -41 -11 -84l5 -49q-57 -35 -97 -35q-27 0 -59.5 23.5t-50.5 47.5z" />
+<glyph unicode="&#x2019;" horiz-adv-x="552" d="M98 915q98 141 123 240q10 41 10 84l-4 49q57 35 97 35q27 0 59.5 -23.5t50.5 -46.5l21 -24q-84 -178 -265 -377z" />
+<glyph unicode="&#x201a;" horiz-adv-x="528" d="M59 -223q98 141 123 239q10 41 11 84l-5 50q57 35 97 34q27 0 59.5 -23.5t52.5 -45.5l19 -25q-84 -178 -264 -377z" />
+<glyph unicode="&#x201c;" horiz-adv-x="913" d="M96 977q84 178 264 377l93 -64q-98 -141 -123 -239q-10 -41 -11 -84l5 -49q-57 -35 -97 -35q-27 0 -59.5 23.5t-52.5 47.5zM459 977q84 178 264 377l92 -64q-98 -141 -123 -239q-10 -41 -10 -84l4 -49q-57 -35 -96 -35q-27 0 -59.5 23.5t-51.5 47.5z" />
+<glyph unicode="&#x201d;" horiz-adv-x="913" d="M96 915q98 141 123 240q10 41 10 84l-4 49q57 35 97 35q27 0 59.5 -23.5t52.5 -46.5l19 -24q-84 -178 -265 -377zM459 915q98 141 123 240q10 41 10 84l-4 49q57 35 96 35q27 0 59.5 -23.5t51.5 -46.5l20 -24q-84 -178 -264 -377z" />
+<glyph unicode="&#x201e;" horiz-adv-x="888" d="M59 -223q98 141 123 239q10 41 11 84l-5 50q57 35 97 34q27 0 59.5 -23.5t52.5 -45.5l19 -25q-84 -178 -264 -377zM422 -223q98 141 123 239q10 41 10 84l-4 50q57 35 96 34q27 0 59.5 -23.5t51.5 -45.5l20 -25q-84 -178 -264 -377z" />
+<glyph unicode="&#x2022;" horiz-adv-x="868" d="M80 645.5q0 145.5 103.5 248.5t249 103t249.5 -103t104 -248.5t-104 -249t-249.5 -103.5t-249 103.5t-103.5 249z" />
+<glyph unicode="&#x2026;" horiz-adv-x="1236" d="M143 84q0 51 40 88t91 37q49 0 84 -33t35 -82t-40 -87t-91 -38q-49 0 -84 33t-35 82zM496 84q0 51 39.5 88t91.5 37q49 0 83.5 -33t34.5 -82t-39.5 -87t-91.5 -38q-49 0 -83.5 33t-34.5 82zM844 84q0 51 40 88t91 37q49 0 84 -33t35 -82t-40 -87t-91 -38q-49 0 -84 33 t-35 82z" />
+<glyph unicode="&#x2039;" horiz-adv-x="614" d="M68 512l378 385l97 -78l-305 -307l309 -307l-96 -78z" />
+<glyph unicode="&#x203a;" horiz-adv-x="614" d="M68 205l96 -78l383 385l-379 385l-96 -78l305 -307z" />
+<glyph unicode="&#x2122;" horiz-adv-x="1642" d="M137 1331v90h498v-90h-199v-723h-100v723h-199zM731 608v813h137l240 -686l238 686h137v-813h-103v553l6 111l-233 -664h-90l-234 666q6 -68 7 -111v-555h-105z" />
+<glyph unicode="&#xe000;" horiz-adv-x="1004" d="M0 1005h1005v-1005h-1005v1005z" />
+<glyph unicode="&#xfb01;" horiz-adv-x="1069" d="M47 903v101h135v112q0 168 115 249t291 81q43 0 96 -6t115.5 -21.5t104.5 -48.5t42 -78q0 -49 -35.5 -80.5t-87.5 -31.5q-43 0 -64.5 18.5t-28.5 43t-19.5 50t-51 44t-110.5 18.5q-106 0 -158.5 -78t-52.5 -191v-81h199v-119h-199v-885h-156v885zM760 0v1004h151v-1004 h-151z" />
+<glyph unicode="&#xfb02;" horiz-adv-x="1069" d="M47 903v101h135v112q0 152 100.5 238t254 86t225.5 -78v57h151v-1016q0 -197 62 -403h-162q-51 137 -51 403v828q-72 111 -201 110q-63 0 -107 -20.5t-66.5 -47t-34 -78.5t-13.5 -88t-2 -103h199v-119h-199v-885h-156v885z" />
+<glyph unicode="&#xfb03;" horiz-adv-x="1658" d="M51 903v101h135v159q0 242 351 285l28 -121q-8 0 -26.5 -2t-54 -14.5t-66.5 -30.5t-53.5 -56t-22.5 -87v-133h199v-119h-199v-885h-156v885zM637 903v101h135v159q0 242 350 285l29 -121q-8 0 -26.5 -2t-54.5 -14.5t-66.5 -30.5t-53 -56t-22.5 -87v-133h198v-119h-198 v-885h-156v885zM1294 1284q0 47 35 78t82 31q45 0 79 -30t34 -75q0 -47 -35 -77.5t-82 -30.5q-45 0 -79 29.5t-34 74.5zM1339 0v1004h152v-1004h-152z" />
+<glyph unicode="&#xfb04;" horiz-adv-x="1654" d="M51 903v101h135v159q0 242 351 285l28 -121q-8 0 -26.5 -2t-54 -14.5t-66.5 -30.5t-53.5 -56t-22.5 -87v-133h199v-119h-199v-885h-156v885zM637 903v101h135v159q0 242 350 285l29 -121q-8 0 -26.5 -2t-54.5 -14.5t-66.5 -30.5t-53 -56t-22.5 -87v-133h198v-119h-198 v-885h-156v885zM1327 403v1018h152v-1018q0 -203 61 -403h-162q-51 139 -51 403z" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/public/stylesheets/fonts/delicious-roman-webfont.ttf b/public/stylesheets/fonts/delicious-roman-webfont.ttf
new file mode 100755
index 000000000..cc27c5c1d
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-roman-webfont.ttf
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-roman-webfont.woff b/public/stylesheets/fonts/delicious-roman-webfont.woff
new file mode 100755
index 000000000..9acbdd4a0
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-roman-webfont.woff
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-smallcaps-webfont.eot b/public/stylesheets/fonts/delicious-smallcaps-webfont.eot
new file mode 100755
index 000000000..358efc11f
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-smallcaps-webfont.eot
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-smallcaps-webfont.svg b/public/stylesheets/fonts/delicious-smallcaps-webfont.svg
new file mode 100755
index 000000000..d1235b7f6
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-smallcaps-webfont.svg
@@ -0,0 +1,222 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : 35 I1995 Jos Buivenga
+</metadata>
+<defs>
+<font id="DeliciousSmallCapsRegular" horiz-adv-x="450" >
+<font-face units-per-em="1000" ascent="800" descent="-200" />
+<missing-glyph horiz-adv-x="300" />
+<glyph unicode=" " horiz-adv-x="300" />
+<glyph unicode="&#x09;" horiz-adv-x="300" />
+<glyph unicode="&#xa0;" horiz-adv-x="300" />
+<glyph unicode="!" horiz-adv-x="264" d="M207 46q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40zM195 699q-17 -99 -17 -193v-344h-60q-14 258 -14 368q0 88 15 159z" />
+<glyph unicode="&#x22;" horiz-adv-x="346" d="M126 708l14 -63l-22 -157h-33l-21 157l13 63h49zM264 708l14 -63l-22 -157h-33l-21 157l13 63h49z" />
+<glyph unicode="#" horiz-adv-x="556" d="M325 279l19 152h-114l-19 -152h114zM375 675h60l-22 -178h85l-6 -66h-88l-19 -152h75l-6 -66h-77l-26 -204h-60l26 204h-115l-23 -185h-60l23 185h-81l10 66h80l19 152h-71l10 66h69l25 197h60l-25 -197h115z" />
+<glyph unicode="$" horiz-adv-x="445" d="M263 256v-201q33 11 51 38.5t18 63.5q0 54 -69 99zM218 379v201q-37 -6 -57.5 -31t-20.5 -62q0 -27 12.5 -48t25 -31t40.5 -29zM409 156q0 -66 -40.5 -111.5t-105.5 -56.5v-61h-45v58q-80 2 -151 43l23 60q75 -37 128 -40v236l-22.5 14.5l-24 15.5l-21 14.5t-21.5 16 l-18 16.5t-17 19.5t-12.5 20t-11.5 24t-5.5 26t-2.5 29.5q0 72 42 115.5t114 48.5v55h45v-56q72 -9 122 -48l-27 -54q-40 29 -95 38v-228q77 -49 101 -74q45 -48 45 -121z" />
+<glyph unicode="%" horiz-adv-x="699" d="M253 512q0 31 -21.5 52.5t-52.5 21.5t-52.5 -21.5t-21.5 -52.5t21.5 -52.5t52.5 -21.5t52.5 21.5t21.5 52.5zM482 630l-222 -630h-66l211 584q-17 -9 -43 -13.5t-44 -4.5l-17 -1q11 -21 11 -53q0 -55 -39 -94t-94 -39t-94 39t-39 94t39 94t94 39q39 0 71 -20 q40 -11 70 -11q28 0 56 7.5t42 14.5l13 8zM651 118q0 -55 -39 -94t-94 -39t-94 39t-39 94t39 94t94 39t94 -39t39 -94zM592 118q0 31 -21.5 52.5t-52.5 21.5t-52.5 -21.5t-21.5 -52.5t21.5 -52.5t52.5 -21.5t52.5 21.5t21.5 52.5z" />
+<glyph unicode="&#x26;" horiz-adv-x="630" d="M413 490v47q0 46 -25 76t-70 30q-40 0 -71 -22.5t-31 -61.5q0 -37 32 -53t73 -16h92zM599 13q-56 -28 -102 -28q-47 0 -67.5 31.5t-20.5 80.5v335h-97q-99 0 -141.5 -47.5t-42.5 -147.5q0 -94 31 -153q20 -37 38 -37q11 0 27 16.5t38.5 33t50.5 16.5q25 0 49 -11l-15 -54 q-20 6 -31 6q-23 0 -55 -34.5t-65 -34.5q-41 0 -72.5 25.5t-48 65.5t-25 80.5t-8.5 77.5q0 85 44 158.5t123 76.5q-69 29 -69 90q0 60 52.5 97.5t115.5 37.5q69 0 122 -38t53 -104v-62h99v-58h-97v-331q0 -55 39 -55q26 0 58 14z" />
+<glyph unicode="'" horiz-adv-x="208" d="M126 708l14 -63l-22 -157h-33l-21 157l13 63h49z" />
+<glyph unicode="(" horiz-adv-x="336" d="M307 -84l-7 -62q-128 97 -190.5 210.5t-62.5 267.5q0 133 68.5 253t182.5 191l8 -57q-93 -61 -146.5 -167.5t-53.5 -221.5q0 -253 201 -414z" />
+<glyph unicode=")" horiz-adv-x="339" d="M40 776q114 -71 182.5 -191t68.5 -253q0 -154 -62.5 -267.5t-190.5 -210.5l-7 62q202 161 202 414q0 115 -54 221.5t-147 167.5z" />
+<glyph unicode="*" horiz-adv-x="424" d="M265 674l-34 -113l149 52v-62l-131 -42l106 -163h-70l-77 123l-76 -123h-65l98 163l-130 42v64l150 -54l-36 113h116z" />
+<glyph unicode="+" horiz-adv-x="471" d="M426 220h-162v-173h-58v173h-161v60h161v173h58v-173h162v-60z" />
+<glyph unicode="," horiz-adv-x="258" d="M139 87q13 0 29 -11.5t26 -23.5l9 -11q-41 -87 -129 -184l-45 31q48 69 60 117q5 20 5 41l-2 24q28 17 47 17z" />
+<glyph unicode="-" horiz-adv-x="302" d="M245 285v-60h-191v60h191z" />
+<glyph unicode="." horiz-adv-x="258" d="M194 46q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40z" />
+<glyph unicode="/" horiz-adv-x="356" d="M339 757l-259 -905h-63l259 905h63z" />
+<glyph unicode="0" d="M225 -10q-82 0 -139 94.5t-57 230.5t57 230.5t139 94.5t139 -94.5t57 -230.5t-57 -230.5t-139 -94.5zM225 571q-50 0 -88.5 -73.5t-38.5 -182.5t38.5 -182.5t88.5 -73.5t88.5 73.5t38.5 182.5t-38.5 182.5t-88.5 73.5z" />
+<glyph unicode="1" d="M224 0v553h-145v54q25 0 63 5.5t64 11.5l25 6h70v-630h-77z" />
+<glyph unicode="2" d="M227 645q82 0 129 -42q36 -33 44 -86t-7 -103.5t-45 -87.5l-145 -176q-14 -17 -26.5 -37.5t-17.5 -32.5l-5 -11h244v-69h-330l-6 62q17 48 69 111l100 120q149 178 61 261q-29 27 -70 27q-72 0 -146 -57l-14 58q7 7 20.5 17.5t56.5 28t88 17.5z" />
+<glyph unicode="3" d="M242 12q-48 -19 -104 -24q-30 -3 -61 -3h-5v57h14.5t33.5 3t49 9t51 19t48.5 31t33.5 47.5t14 66.5q0 92 -139 92q-35 0 -85 -6v60l44 6q52 28 125 84q43 32 43 73q0 13 -4 21q-18 35 -58 35q-29 0 -73.5 -19.5t-72.5 -39.5l-18 55q33 25 83 45.5t97 20.5q92 0 117 -79 q6 -18 6 -37q0 -69 -80 -123l-54 -34q41 0 81 -23q65 -37 65 -115q0 -165 -151 -222z" />
+<glyph unicode="4" d="M356 140v-140h-72v140h-249l-4 65q65 183 244 425h83v-424h64v-66h-66zM284 533q-114 -166 -177 -327h177v327z" />
+<glyph unicode="5" d="M250 13q-50 -22 -111 -26q-22 -2 -67 -2h-5v60q82 -6 152 28q92 44 92 147q0 49 -32 71t-80 22q-41 0 -115 -20l28 337h248v-62h-178l-16 -198q21 5 41 5h26q48 -2 87 -24q29 -15 49 -46t20 -69q0 -86 -39 -141t-100 -82z" />
+<glyph unicode="6" d="M337 221q0 95 -90 111q-15 3 -29 3q-34 0 -90 -25q-8 -38 -8 -74q0 -78 30.5 -134.5t82.5 -56.5q72 0 95 86q9 36 9 90zM330 643l27 -49l-62.5 -40t-44 -33.5t-42.5 -42.5q-47 -58 -67 -117q66 23 105 23h15q22 -1 46 -10t48.5 -27t40 -51.5t15.5 -77.5 q0 -102 -48 -167.5t-136 -65.5q-89 0 -134.5 78.5t-45.5 193.5q0 152 113 267q69 70 170 119z" />
+<glyph unicode="7" d="M387 630v-64q0 -135 -69 -318q-61 -165 -148 -275l-66 28q90 118 149 272q62 164 62 293h-256v64h328z" />
+<glyph unicode="8" d="M409 138q-10 -71 -62.5 -112t-128.5 -41q-74 0 -125.5 51t-51.5 124q0 59 40 116q25 36 78 61q-44 27 -68 55t-30 69q-2 18 -2 26q0 64 43.5 110.5t120.5 47.5h6q83 1 120.5 -41.5t36.5 -109.5v-7q0 -38 -28.5 -78t-82.5 -65q5 -3 25 -13q56 -29 84 -66t28 -91 q0 -16 -3 -36zM314 509q-6 79 -93 79q-38 0 -63.5 -29.5t-25.5 -75.5q0 -39 20.5 -64.5t61.5 -46.5l37 19q63 32 63 104v14zM272 273q-10 5 -24.5 13.5l-25 14.5t-12.5 7q-93 -49 -93 -137q0 -49 30.5 -87.5t79.5 -38.5q48 0 78 38.5t30 86.5q0 69 -63 103z" />
+<glyph unicode="9" d="M334 396q0 77 -30.5 133t-82.5 56q-104 0 -104 -176q0 -50 27 -79t63 -33q6 -1 18 -1q25 0 61 9q23 8 40 17q8 38 8 74zM294 106q-86 -88 -204 -135l-21 58q130 68 176 124q44 53 66 114l-6 -2q-3 -1 -16.5 -6t-22.5 -7q-24 -7 -60 -7q-24 0 -50.5 9t-52.5 27t-43 52.5 t-17 78.5q0 102 47 167.5t135 65.5q64 0 106 -42t61 -113q16 -57 16 -126q0 -142 -114 -258z" />
+<glyph unicode=":" horiz-adv-x="258" d="M194 46q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40zM194 353q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40z" />
+<glyph unicode=";" horiz-adv-x="258" d="M136 87q13 0 29 -11.5t25 -23.5l10 -11q-41 -87 -129 -184l-45 31q48 69 60 117q5 20 5 41l-2 24q28 17 47 17zM194 352q0 -25 -19.5 -43.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43.5t44.5 18.5q24 0 41 -16t17 -40z" />
+<glyph unicode="&#x3c;" horiz-adv-x="300" d="M267 100l-47 -38l-187 188l185 188l47 -38l-149 -150z" />
+<glyph unicode="=" horiz-adv-x="480" d="M426 203v-60h-382v60h382zM426 352v-60h-382v60h382z" />
+<glyph unicode="&#x3e;" horiz-adv-x="300" d="M33 100l47 -38l187 188l-185 188l-47 -38l149 -150z" />
+<glyph unicode="?" horiz-adv-x="358" d="M194 46q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40zM164 162h-61v51q0 42 1 62t10 50.5t27 54.5l82 110q34 47 34 79q0 28 -15 45t-43 17q-43 0 -84 -9v57q47 13 90 13q59 0 93 -31t34 -90q0 -48 -49 -112l-80 -106 q-22 -29 -30.5 -59t-8.5 -81v-51z" />
+<glyph unicode="@" horiz-adv-x="792" d="M497 457q-37 48 -100 48q-38 0 -64.5 -40.5t-36 -85t-9.5 -81.5q0 -29 10.5 -52t36.5 -23q9 0 21 3t20 6t23 11t20 11l21 12.5t17 10.5zM528 146q-35 0 -58 17t-23 51q0 6 2 16q-58 -50 -85 -62q-22 -10 -44 -10q-48 0 -74.5 39.5t-26.5 89.5q0 46 9 90.5t28.5 87 t56.5 69t86 26.5q71 0 110 -57l10 41h65l-69 -289q-6 -22 -6 -33q0 -27 27 -27q61 0 106.5 74t45.5 139q0 123 -79.5 192.5t-204.5 69.5q-124 0 -209.5 -95.5t-85.5 -221.5q0 -132 87.5 -223.5t219.5 -91.5q74 0 142.5 32t112.5 89l47 -25q-46 -68 -132 -110t-170 -42 q-156 0 -264.5 108.5t-108.5 264.5q0 146 109 258.5t254 112.5q144 0 239 -87.5t95 -230.5q0 -55 -27.5 -115t-78 -103.5t-106.5 -43.5z" />
+<glyph unicode="A" horiz-adv-x="510" d="M255 547l-75 -278h150zM498 0h-82l-67 203h-188l-67 -203h-82l200 630h86z" />
+<glyph unicode="B" horiz-adv-x="502" d="M382 184q0 36 -11.5 60t-34 35.5t-47 15.5t-59.5 4h-70v-233q45 -13 75 -13q66 0 106.5 33t40.5 98zM348 472q0 96 -114 96h-74v-204h74q51 0 82.5 29t31.5 79zM235 630q60 0 99 -15q93 -37 93 -144q0 -42 -28 -82.5t-67 -51.5q61 -4 95.5 -47.5t34.5 -106.5 q0 -95 -64 -146.5t-161 -51.5q-61 0 -157 25v620h155z" />
+<glyph unicode="C" horiz-adv-x="497" d="M472 41q-33 -26 -81 -41t-93 -15q-66 0 -115 29.5t-76 78.5t-39.5 104.5t-12.5 117.5q0 58 14.5 114t42.5 105.5t77 80t111 30.5q95 0 162 -43l-29 -52q-58 32 -133 32q-42 0 -75.5 -28.5t-52 -72t-28 -88t-9.5 -82.5q0 -44 8 -86t25.5 -83.5t52 -66.5t81.5 -25 q81 0 136 41z" />
+<glyph unicode="D" horiz-adv-x="547" d="M258 566h-99v-502h93q48 0 81 23t49 62.5t22.5 78.5t6.5 84q0 254 -153 254zM262 630q65 0 111.5 -27.5t71.5 -74.5t36 -100t11 -114t-13 -114.5t-40 -99.5t-75 -73t-112 -27h-172v630h182z" />
+<glyph unicode="E" horiz-adv-x="454" d="M404 630v-67h-244v-200h187v-69h-187v-225h254v-69h-334v630h324z" />
+<glyph unicode="F" horiz-adv-x="412" d="M376 630v-66h-216v-201h171v-69h-171v-294h-80v630h296z" />
+<glyph unicode="G" horiz-adv-x="524" d="M464 11q-63 -26 -164 -26q-66 0 -115.5 29t-76.5 78t-40 105t-13 118q0 58 14.5 114t42.5 105.5t77 80t111 30.5q47 0 82 -10t81 -33l-31 -53q-55 34 -132 34q-54 0 -93 -47t-55.5 -107t-16.5 -118q0 -44 7.5 -86t25 -83.5t52 -67t82.5 -25.5q53 0 88 14v206h74v-258z " />
+<glyph unicode="H" horiz-adv-x="548" d="M468 0h-80v295h-228v-295h-80v630h80v-267h228v267h80v-630z" />
+<glyph unicode="I" horiz-adv-x="238" d="M158 630v-630h-78v630h78z" />
+<glyph unicode="J" horiz-adv-x="245" d="M165 -28q0 -100 -142 -135l-17 54q81 27 81 87v652h78v-658z" />
+<glyph unicode="K" horiz-adv-x="485" d="M477 0h-80l-237 263v-263h-80v630h80v-288l220 288h85l-242 -324l254 -282v-24z" />
+<glyph unicode="L" horiz-adv-x="382" d="M156 630v-564h217v-66h-293v630h76z" />
+<glyph unicode="M" horiz-adv-x="742" d="M662 630v-630h-80v428l5 87l-181 -515h-70l-181 516q5 -52 5 -86v-430h-80v630h106l185 -532l185 532h106z" />
+<glyph unicode="N" horiz-adv-x="554" d="M474 0h-82l-237 514q5 -47 5 -86v-428h-80v630h106l213 -482q-5 48 -5 88v394h80v-630z" />
+<glyph unicode="O" horiz-adv-x="548" d="M274 579q-38 0 -67 -29t-43.5 -73.5t-21.5 -85.5t-7 -76t7 -76t21.5 -85.5t43.5 -73.5t67 -29t67 29t43.5 73.5t21.5 85.5t7 76t-7 76t-21.5 85.5t-43.5 73.5t-67 29zM274 645q58 0 102.5 -32t69 -83.5t36 -106t11.5 -108.5t-11.5 -108.5t-36 -106t-69 -83.5t-102.5 -32 t-102.5 32t-69 83.5t-36 106t-11.5 108.5t11.5 108.5t36 106t69 83.5t102.5 32z" />
+<glyph unicode="P" horiz-adv-x="489" d="M216 566h-56v-255q48 -21 81 -21q59 0 94 43.5t35 103.5q0 65 -43.5 97t-110.5 32zM216 630q103 0 168.5 -48t65.5 -146q0 -93 -55.5 -152t-148.5 -59q-49 0 -86 20v-245h-80v630h136z" />
+<glyph unicode="Q" horiz-adv-x="548" d="M335 -5q63 -67 128 -67q20 0 36 4l-21 -76q-16 -2 -24 -2q-25 0 -47 6.5t-43 22t-33 25.5t-34 32.5l-28 28.5l-18 17q-52 6 -92 40.5t-61.5 84t-32 101.5t-10.5 103q0 54 11.5 108.5t36 106t69 83.5t102.5 32t102.5 -32t69 -83.5t36 -106t11.5 -108.5q0 -102 -39 -196.5 t-119 -123.5zM274 579q-38 0 -67 -29t-43.5 -73.5t-21.5 -85.5t-7 -76t7 -76t21.5 -85.5t43.5 -73.5t67 -29t67 29t43.5 73.5t21.5 85.5t7 76t-7 76t-21.5 85.5t-43.5 73.5t-67 29z" />
+<glyph unicode="R" horiz-adv-x="505" d="M370 437q0 65 -43.5 97t-110.5 32h-56v-255q46 -21 74 -21q63 0 99.5 41.5t36.5 105.5zM480 0h-78l-207 230q-19 6 -35 15v-245h-80v630h136q103 0 168.5 -48t65.5 -146q0 -77 -41 -134t-115 -72l186 -206v-24z" />
+<glyph unicode="S" horiz-adv-x="434" d="M220 645q43 0 84.5 -20t63.5 -54l-45 -38q-38 48 -103 48q-42 0 -69.5 -24t-27.5 -65q0 -40 28 -71.5t67.5 -53.5t79 -47t67.5 -66.5t28 -97.5q0 -77 -54 -124t-132 -47q-37 0 -78.5 16.5t-71.5 42.5l34 57q63 -52 117 -52q47 0 77.5 30.5t30.5 77.5q0 35 -28 64.5 t-67.5 52.5l-79.5 48.5t-68 65.5t-28 92q0 79 47.5 122t127.5 43z" />
+<glyph unicode="T" horiz-adv-x="405" d="M395 560h-154v-560h-78v560h-153v70h385v-70z" />
+<glyph unicode="U" horiz-adv-x="558" d="M479 241q0 -110 -48 -183t-152 -73t-152 74t-48 186v385h80v-386q0 -193 120 -193t120 194v385h80v-389z" />
+<glyph unicode="V" horiz-adv-x="510" d="M505 630l-206 -630h-88l-205 630h87l164 -534l165 534h83z" />
+<glyph unicode="W" horiz-adv-x="708" d="M700 630l-148 -630h-85l-112 509l-112 -509h-85l-148 630h85l97 -446q8 -35 8 -66l115 512h80l115 -512q0 31 8 66l101 446h81z" />
+<glyph unicode="X" horiz-adv-x="492" d="M480 0h-92l-148 250l-143 -250h-87l187 323l-182 307h87l139 -231l134 231h82l-173 -303z" />
+<glyph unicode="Y" horiz-adv-x="471" d="M459 630l-184 -399v-231h-79v231l-183 399h85l140 -314l141 314h80z" />
+<glyph unicode="Z" horiz-adv-x="458" d="M401 630v-69q-147 -242 -277 -491h304v-70h-392v68q138 273 272 493h-250v69h343z" />
+<glyph unicode="[" horiz-adv-x="248" d="M183 732v-58h-93v-772h93v-58h-155v888h155z" />
+<glyph unicode="\" horiz-adv-x="335" d="M333 -148h-62l-259 905h62z" />
+<glyph unicode="]" horiz-adv-x="249" d="M221 732v-888h-155v58h93v772h-93v58h155z" />
+<glyph unicode="^" horiz-adv-x="624" d="M551 320h-70l-170 307l-170 -307h-70l212 388h56q198 -364 212 -388z" />
+<glyph unicode="_" d="M450 -75v-60h-450v60h450z" />
+<glyph unicode="`" horiz-adv-x="338" d="M261 606l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="a" horiz-adv-x="465" d="M359 0l-54 162h-147l-53 -162h-83l169 514h81l170 -514h-83zM232 419l-59 -193h117z" />
+<glyph unicode="b" horiz-adv-x="479" d="M227 -16q-49 0 -137 22v508h135q53 0 85 -12q81 -31 81 -120q0 -16 -7.5 -38t-18.5 -35q-15 -17 -39 -32q94 -26 94 -127q0 -76 -54 -121t-139 -45zM282 442q-22 12 -58 12h-55v-152l54 -1q39 -1 64.5 20.5t25.5 61.5q0 44 -31 59zM308 223q-23 16 -87 16h-52v-180 q34 -9 56 -9q53 0 84.5 25.5t31.5 74.5q0 51 -33 73z" />
+<glyph unicode="c" horiz-adv-x="465" d="M273 -16q-56 0 -97.5 24.5t-65 65.5t-34.5 87t-11 96q0 113 53 188q58 85 157 85q82 0 142 -38l-29 -52q-57 29 -113 29q-28 0 -57 -21.5t-46 -55.5q-28 -56 -28 -138q0 -84 24 -131q38 -76 108 -76q59 0 114 38l35 -51q-68 -50 -152 -50z" />
+<glyph unicode="d" horiz-adv-x="509" d="M239 0h-149v514h157q95 0 146 -67t51 -191q0 -126 -57 -191t-148 -65zM244 452h-76v-390h71q126 0 126 193q0 197 -121 197z" />
+<glyph unicode="e" horiz-adv-x="437" d="M90 0v514h282v-64h-203v-149h156v-66h-156v-169h212v-66h-291z" />
+<glyph unicode="f" horiz-adv-x="394" d="M169 450v-149h143v-66h-143v-235h-79v514h260v-64h-181z" />
+<glyph unicode="g" horiz-adv-x="498" d="M386 440q-46 29 -111 29q-28 0 -56.5 -21t-46.5 -56q-28 -56 -28 -138q0 -84 24 -131q38 -76 108 -76q34 0 67 10v169h74v-218q-60 -23 -142 -23q-45 0 -81.5 16t-60 43t-39.5 62.5t-22.5 73t-6.5 77.5q0 113 53 188q59 85 157 85q42 0 71 -8.5t72 -29.5z" />
+<glyph unicode="h" horiz-adv-x="514" d="M346 0v236h-177v-236h-79v514h79v-213h177v213h79v-514h-79z" />
+<glyph unicode="i" horiz-adv-x="261" d="M90 0v514h82v-514h-82z" />
+<glyph unicode="j" horiz-adv-x="255" d="M136 -87q-31 -28 -102 -47l-18 54q41 13 61 36q8 9 8 30v528h80v-533q0 -44 -29 -68z" />
+<glyph unicode="k" horiz-adv-x="457" d="M357 0l-188 201v-201h-79v514h79v-218l173 218h86l-205 -264l209 -219v-31h-75z" />
+<glyph unicode="l" horiz-adv-x="367" d="M90 0v514h76v-450h181v-64h-257z" />
+<glyph unicode="m" horiz-adv-x="673" d="M505 0v369l-127 -369h-66l-144 375v-26v-349h-78v514h98l134 -346q0 -1 1.5 -3.5t3 -7.5t4 -12l6 -17t6.5 -21l18 60l124 347h98v-514h-78z" />
+<glyph unicode="n" horiz-adv-x="527" d="M356 0l-185 384q0 -11 0.5 -19.5t1 -12t0.5 -5.5v-347h-79v515h98l164 -357q-1 26 -1 36v321h79v-515h-78z" />
+<glyph unicode="o" horiz-adv-x="505" d="M253 -16q-48 0 -86 25.5t-59 67t-32 88t-11 95.5q0 65 18.5 124.5t63 102.5t106.5 43q63 0 107.5 -44t62.5 -103.5t18 -125.5t-18 -125.5t-62.5 -103.5t-107.5 -44zM253 466q-31 0 -54 -19.5t-34.5 -52.5t-16.5 -68t-5 -74q0 -37 5 -70.5t16.5 -65t34.5 -50t54 -18.5 q42 0 67.5 35t33.5 78t8 96q0 52 -8.5 96t-34.5 78.5t-66 34.5z" />
+<glyph unicode="p" horiz-adv-x="455" d="M354 221q-47 -41 -120 -41q-31 0 -65 17v-197h-79v514h119q103 0 152 -45.5t49 -114.5q0 -85 -56 -133zM209 452h-40v-194q31 -15 55 -15q50 0 78.5 31.5t28.5 80.5q0 44 -31 70.5t-91 26.5z" />
+<glyph unicode="q" horiz-adv-x="505" d="M427 -118q-12 -2 -25 -2q-21 0 -40 6t-38 19t-30.5 22.5t-32 30t-28.5 27.5q-57 7 -96.5 52t-55.5 102t-16 120q0 65 18.5 124.5t63 103t106.5 43.5q63 0 107.5 -44t62.5 -103.5t18 -126.5q0 -83 -31.5 -156.5t-95.5 -103.5q54 -45 96 -45q12 0 38 5zM253 466 q-31 0 -54 -20t-34.5 -53t-16.5 -68t-5 -74q0 -37 5 -70t16.5 -64.5t34.5 -50t54 -18.5q42 0 67.5 34.5t33.5 77.5t8 96q0 38 -5 72.5t-17 66.5t-34 51.5t-53 19.5z" />
+<glyph unicode="r" horiz-adv-x="481" d="M361 0l-173 184l-19 9v-193h-79v514h119q103 0 152 -46t49 -114q0 -60 -32 -105.5t-93 -62.5l150 -159v-27h-74zM209 452h-40v-194q1 -1 8.5 -4.5t21 -7t25.5 -3.5q50 0 78.5 31.5t28.5 80.5q0 44 -31 70.5t-91 26.5z" />
+<glyph unicode="s" horiz-adv-x="408" d="M196 -16q-60 0 -133 52l35 55q18 -13 37 -24q38 -20 62 -20q36 0 60 22t24 59q0 43 -52 76l-95 57q-79 49 -79 132q0 65 41.5 101t110.5 36q35 0 66 -14.5t44 -27t21 -24.5l-47 -38q-38 42 -84 42q-33 0 -54 -17.5t-21 -48.5q0 -51 56 -84l86 -53q83 -49 83 -138 q0 -64 -46.5 -103.5t-114.5 -39.5z" />
+<glyph unicode="t" horiz-adv-x="388" d="M232 447v-447h-77v447h-127v67h332v-67h-128z" />
+<glyph unicode="u" horiz-adv-x="522" d="M261 -16q-88 0 -130 61.5t-42 152.5v316h78v-316q0 -150 94 -150t94 150v316h78v-319q0 -92 -42 -151.5t-130 -59.5z" />
+<glyph unicode="v" horiz-adv-x="466" d="M274 0h-82l-173 514h84l132 -412l132 412h81z" />
+<glyph unicode="w" horiz-adv-x="627" d="M482 0h-77q-73 307 -89 383l-6 -28l-83 -355h-80l-125 514h83l82 -369l91 369h76l90 -369l83 369h80z" />
+<glyph unicode="x" horiz-adv-x="452" d="M341 0l-119 194l-115 -194h-86l158 264l-154 250h86l112 -178l107 178h82l-147 -247l166 -267h-90z" />
+<glyph unicode="y" horiz-adv-x="416" d="M247 189v-189h-78v189l-155 325h84l112 -242l113 242h80z" />
+<glyph unicode="z" horiz-adv-x="429" d="M49 0v61q117 224 211 370l11 17h-204v66h298v-62q-116 -182 -211 -355l-16 -30h249v-67h-338z" />
+<glyph unicode="{" horiz-adv-x="333" d="M290 -108l-11 -54h-57q-20 0 -35 4t-31.5 16t-25 39.5t-8.5 69.5v176q0 50 -25.5 85.5t-56.5 35.5v47q31 0 56.5 35t25.5 85v176q0 78 27 104t71 26h59l11 -54h-59q-28 0 -38 -17.5t-10 -72.5v-176q0 -40 -18.5 -73t-36.5 -46l-19 -13q3 -2 8 -5t18 -14.5t22.5 -25 t17.5 -36t8 -47.5v-176q0 -55 10.5 -72t43.5 -17h53z" />
+<glyph unicode="|" horiz-adv-x="222" d="M141 756v-774h-60v774h60z" />
+<glyph unicode="}" horiz-adv-x="333" d="M290 264q-31 0 -56.5 -35.5t-25.5 -85.5v-176q0 -42 -8.5 -69.5t-25 -39.5t-31.5 -16t-35 -4h-57l-11 54h53q33 0 43.5 17t10.5 72v176q0 25 7.5 47.5t18.5 36.5t22 24.5t19 14.5l7 5q-3 2 -8 5t-18 15.5t-22.5 26.5t-17.5 37t-8 48v176q0 55 -10 72.5t-38 17.5h-59 l11 54h59q20 0 35 -4t30.5 -16.5t24 -40t8.5 -69.5v-176q0 -50 25.5 -85t56.5 -35v-47z" />
+<glyph unicode="~" horiz-adv-x="666" d="M146 308q12 26 36 44t51 18q38 0 104 -34t102 -34q55 0 81 58l-1 -72q-12 -23 -36.5 -37.5t-50.5 -14.5q-37 0 -104 34t-102 34q-52 0 -80 -58v62z" />
+<glyph unicode="&#xa1;" horiz-adv-x="264" d="M58 442q0 25 19.5 43.5t44.5 18.5q24 0 41 -16.5t17 -40.5t-19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40zM70 -210q17 97 17 193v344h60q15 -276 15 -368q0 -83 -16 -159z" />
+<glyph unicode="&#xa2;" horiz-adv-x="412" d="M219 50v388q-49 -16 -71.5 -72t-22.5 -116q0 -61 23 -121.5t71 -78.5zM264 571v-68q67 -7 109 -48l-34 -45q-31 25 -75 32v-396q40 5 98 43l25 -47q-48 -45 -123 -56v-60h-45v60q-65 11 -110 64q-60 69 -60 190q0 116 49 182q47 65 121 80v69h45z" />
+<glyph unicode="&#xa3;" horiz-adv-x="442" d="M398 37q-20 -22 -50 -37t-58 -15q-13 0 -35 3.5t-37 7.5l-15 4h-150q36 161 36 251v129l-59 6l20 50h39v132q0 63 47.5 93.5t113.5 30.5q71 0 104 -28l-17 -46q-31 18 -81 18q-91 0 -91 -83v-117h134v-60h-134v-127q0 -88 -23 -188h71q58 -19 88 -19q23 0 47 13t39 32z " />
+<glyph unicode="&#xa4;" horiz-adv-x="542" d="M550 620l-28 -60q-55 67 -147 67q-161 0 -185 -195h274l-30 -63h-252q-2 -26 -2 -33q0 -8 2 -30h223l-30 -63h-185q11 -93 58 -142.5t117 -49.5q42 0 83.5 21t71.5 58v-80q-62 -62 -160 -62q-95 0 -162 69t-78 186h-110l30 63h71q-1 13 -1 31q0 19 1 32h-101l30 63h80 q12 112 81.5 185t178.5 73q100 0 170 -70z" />
+<glyph unicode="&#xa5;" horiz-adv-x="476" d="M467 317h-148l-41 -89v-5h187v-60h-187v-163h-80v163h-183v60h183v6l-41 88h-140v60h112l-117 253h85l141 -314l141 314h84q-116 -253 -117 -253h121v-60z" />
+<glyph unicode="&#xa7;" horiz-adv-x="420" d="M301 262q0 32 -25.5 51.5t-58.5 19.5q-46 0 -73.5 -23t-27.5 -68q0 -28 25.5 -45.5t54.5 -17.5q45 0 75 20t30 63zM211 647q77 0 144 -38l-27 -52q-68 32 -119 32q-39 0 -64 -20.5t-25 -58.5q0 -25 26 -45t63 -36.5t73.5 -35.5t62.5 -51.5t26 -74.5q0 -53 -29 -87.5 t-81 -45.5q31 -16 50.5 -29t37.5 -38t18 -54q0 -75 -48 -115t-124 -40q-91 0 -174 49l28 55q72 -44 150 -44q42 0 69 20.5t27 61.5q0 30 -26 53t-63.5 39.5l-75 34.5t-63.5 46.5t-26 65.5q0 61 36 95t98 43q-72 34 -94 54q-36 32 -36 76q0 68 48 104t118 36z" />
+<glyph unicode="&#xa8;" horiz-adv-x="384" d="M157 642q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM311 642q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xa9;" horiz-adv-x="879" d="M763 245q0 -133 -94.5 -227.5t-227.5 -94.5t-227 94.5t-94 227.5t94 227t227 94q134 0 228 -94t94 -227zM714 245q0 113 -80 193t-193 80t-192.5 -80t-79.5 -193q0 -115 80 -194t195 -79q112 0 191 80t79 193zM555 114q-20 -19 -51 -33.5t-56 -14.5q-74 0 -116 51 t-42 127q0 75 40 128t113 53q60 0 102 -39l-27 -34q-30 25 -75 25q-51 0 -73.5 -37.5t-22.5 -92.5q0 -57 24.5 -95.5t78.5 -38.5q37 0 84 34z" />
+<glyph unicode="&#xaa;" horiz-adv-x="378" d="M276 374l-41 123h-112l-40 -123h-63l128 391h62l129 -391h-63zM179 693l-44 -147h89z" />
+<glyph unicode="&#xab;" horiz-adv-x="500" d="M267 100l-47 -38l-187 188l185 188l47 -38l-149 -150zM445 100l-47 -38l-187 188l185 188l47 -38l-149 -150z" />
+<glyph unicode="&#xac;" horiz-adv-x="535" d="M449 176l-59 -11v206h-344v60h403v-255z" />
+<glyph unicode="&#xae;" horiz-adv-x="879" d="M760 244q0 -134 -94 -228t-227 -94t-227 94.5t-94 227.5q0 134 93.5 227.5t227.5 93.5t227.5 -93.5t93.5 -227.5zM711 244q0 113 -80 193t-192 80q-113 0 -192.5 -80t-79.5 -193q0 -116 79.5 -194.5t195.5 -78.5q113 0 191 80t78 193zM582 71h-53l-120 121q-11 3 -22 9 v-130h-51v355h86q61 0 103.5 -29t42.5 -87q0 -41 -28 -77.5t-68 -40.5l110 -106v-15zM515 312q0 38 -26.5 55.5t-66.5 17.5h-35v-142q28 -13 46 -13q37 0 59.5 22t22.5 60z" />
+<glyph unicode="&#xaf;" horiz-adv-x="335" d="M304 632v-59h-274v59h274z" />
+<glyph unicode="&#xb0;" horiz-adv-x="352" d="M172 601q-39 0 -66.5 -27.5t-27.5 -66.5t27.5 -66.5t66.5 -27.5t66.5 27.5t27.5 66.5t-27.5 66.5t-66.5 27.5zM172 646q57 0 98 -41t41 -98t-41 -98t-98 -41t-98 41t-41 98t41 98t98 41z" />
+<glyph unicode="&#xb1;" horiz-adv-x="447" d="M416 59v-60h-361v60h361zM426 220h-162v-125h-58v125h-161v60h161v173h58v-173h162v-60z" />
+<glyph unicode="&#xb2;" d="M227 645q82 0 129 -42q36 -33 44 -86t-7 -103.5t-45 -87.5l-145 -176q-14 -17 -26.5 -37.5t-17.5 -32.5l-5 -11h244v-69h-330l-6 62q17 48 69 111l100 120q149 178 61 261q-29 27 -70 27q-72 0 -146 -57l-14 58q7 7 20.5 17.5t56.5 28t88 17.5z" />
+<glyph unicode="&#xb3;" d="M242 12q-48 -19 -104 -24q-30 -3 -61 -3h-5v57h14.5t33.5 3t49 9t51 19t48.5 31t33.5 47.5t14 66.5q0 92 -139 92q-35 0 -85 -6v60l44 6q52 28 125 84q43 32 43 73q0 13 -4 21q-18 35 -58 35q-29 0 -73.5 -19.5t-72.5 -39.5l-18 55q33 25 83 45.5t97 20.5q92 0 117 -79 q6 -18 6 -37q0 -69 -80 -123l-54 -34q41 0 81 -23q65 -37 65 -115q0 -165 -151 -222z" />
+<glyph unicode="&#xb4;" horiz-adv-x="338" d="M213 752l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xb5;" horiz-adv-x="519" d="M181 -88q0 -37 -19 -70l-100 -18q29 67 29 112q0 30 -5.5 91t-5.5 91v372h76v-372q0 -37 10.5 -54t45.5 -17q34 0 79 17.5t70 39.5v386h76v-415q0 -39 21 -40l-25 -50q-27 0 -46.5 15.5t-23.5 41.5q-31 -25 -74.5 -41t-83.5 -16q-15 0 -43 15q19 -57 19 -88z" />
+<glyph unicode="&#xb6;" horiz-adv-x="543" d="M497 639l-3 -51l-52 -12q0 -170 -34 -362t-98 -322l-64 20q69 125 104 310t35 354q-125 13 -143 13q-42 0 -59.5 -35.5t-17.5 -81.5q0 -25 3.5 -48.5t12.5 -48t27.5 -39.5t45.5 -15q43 0 81 30q-50 -99 -143 -99q-80 0 -122.5 59t-42.5 142q0 84 51.5 138t134.5 54 q26 0 55.5 -2.5t65 -6.5l54.5 -6l-1 43h56q0 -29 -1 -43z" />
+<glyph unicode="&#xb7;" horiz-adv-x="258" d="M194 246q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40z" />
+<glyph unicode="&#xb8;" horiz-adv-x="402" d="M331 -63q0 -33 -33 -64t-70 -47l-38 31q81 44 81 75q0 13 -9 21t-23 8q-13 0 -49 -9v47h104q37 -27 37 -62z" />
+<glyph unicode="&#xb9;" d="M224 0v553h-145v54q25 0 63 5.5t64 11.5l25 6h70v-630h-77z" />
+<glyph unicode="&#xba;" horiz-adv-x="392" d="M203 361q-70 0 -106.5 64.5t-36.5 145.5q0 79 37 142t106 63q70 0 106.5 -63.5t36.5 -144.5q0 -80 -36.5 -143.5t-106.5 -63.5zM203 727q-31 0 -50.5 -27t-26 -61t-6.5 -74q0 -64 19 -109.5t64 -45.5q32 0 51.5 26.5t25.5 59t6 72.5t-6.5 73t-26 59.5t-50.5 26.5z" />
+<glyph unicode="&#xbb;" horiz-adv-x="500" d="M242 100l47 -38l187 188l-185 188l-47 -38l149 -150zM64 100l47 -38l187 188l-185 188l-47 -38l149 -150z" />
+<glyph unicode="&#xbc;" horiz-adv-x="1239" d="M1145 140v-140h-72v140h-249l-4 65q65 183 244 425h83v-424h64v-66h-66zM1073 533q-114 -166 -177 -327h177v327zM870 745l-430 -876h-63l430 876h63zM224 0v553h-145v54q25 0 63 5.5t64 11.5l25 6h70v-630h-77z" />
+<glyph unicode="&#xbd;" horiz-adv-x="1239" d="M1016 645q82 0 129 -42q36 -33 44 -86t-7 -103.5t-45 -87.5l-145 -176q-14 -17 -26.5 -37.5t-17.5 -32.5l-5 -11h244v-69h-330l-6 62q17 48 69 111l100 120q149 178 61 261q-29 27 -70 27q-72 0 -146 -57l-14 58q7 7 20.5 17.5t56.5 28t88 17.5zM870 745l-430 -876h-63 l430 876h63zM224 0v553h-145v54q25 0 63 5.5t64 11.5l25 6h70v-630h-77z" />
+<glyph unicode="&#xbe;" horiz-adv-x="1239" d="M1145 140v-140h-72v140h-249l-4 65q65 183 244 425h83v-424h64v-66h-66zM1073 533q-114 -166 -177 -327h177v327zM870 745l-430 -876h-63l430 876h63zM242 12q-48 -19 -104 -24q-30 -3 -61 -3h-5v57h14.5t33.5 3t49 9t51 19t48.5 31t33.5 47.5t14 66.5q0 92 -139 92 q-35 0 -85 -6v60l44 6q52 28 125 84q43 32 43 73q0 13 -4 21q-18 35 -58 35q-29 0 -73.5 -19.5t-72.5 -39.5l-18 55q33 25 83 45.5t97 20.5q92 0 117 -79q6 -18 6 -37q0 -69 -80 -123l-54 -34q41 0 81 -23q65 -37 65 -115q0 -165 -151 -222z" />
+<glyph unicode="&#xbf;" horiz-adv-x="358" d="M180 444q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40t-19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40zM210 325h61v-48q0 -42 -1 -62t-10 -50.5t-27 -54.5l-82 -110q-34 -45 -34 -78q0 -29 15 -46t43 -17q43 0 84 9v-57q-54 -13 -90 -13q-59 0 -93 31t-34 91q0 46 49 112 l80 105q23 30 31 59.5t8 80.5v48z" />
+<glyph unicode="&#xc0;" horiz-adv-x="510" d="M255 547l-75 -278h150zM498 0h-82l-67 203h-188l-67 -203h-82l200 630h86zM366 736l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="&#xc1;" horiz-adv-x="510" d="M255 547l-75 -278h150zM498 0h-82l-67 203h-188l-67 -203h-82l200 630h86zM304 882l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xc2;" horiz-adv-x="510" d="M255 547l-75 -278h150zM498 0h-82l-67 203h-188l-67 -203h-82l200 630h86zM405 736l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146z" />
+<glyph unicode="&#xc3;" horiz-adv-x="510" d="M255 547l-75 -278h150zM498 0h-82l-67 203h-188l-67 -203h-82l200 630h86zM188 830q29 0 71.5 -22t65.5 -22q26 0 41 6.5t43 25.5l31 -38q-36 -33 -61 -44.5t-61 -11.5q-20 0 -62.5 22t-70.5 22q-9 0 -17.5 -2t-19.5 -7.5l-16 -8t-19 -11.5t-16 -10l-29 43q74 58 120 58z " />
+<glyph unicode="&#xc4;" horiz-adv-x="510" d="M255 547l-75 -278h150zM498 0h-82l-67 203h-188l-67 -203h-82l200 630h86zM224 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM378 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5 t39.5 18.5q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xc5;" horiz-adv-x="510" d="M315 784q0 24 -17 42t-40 18q-25 0 -43.5 -18t-18.5 -42t18 -42t41 -18q24 0 42 18t18 42zM361 784q0 -44 -31.5 -75t-74.5 -31t-73.5 31t-30.5 75q0 43 31.5 74.5t74.5 31.5t73.5 -31t30.5 -75zM255 547l-75 -278h150zM498 0h-82l-67 203h-188l-67 -203h-82l200 630h86z " />
+<glyph unicode="&#xc6;" horiz-adv-x="726" d="M255 547l-74 -278h149zM676 630v-67h-244v-200h187v-69h-187v-225h254v-69h-334v203h-190l-67 -203h-83l199 630h93l48 -211v211h324z" />
+<glyph unicode="&#xc7;" horiz-adv-x="497" d="M376 -63q0 -33 -33 -64t-70 -47l-38 31q81 44 81 75q0 13 -9 21t-23 8q-13 0 -49 -9v40q-50 14 -86.5 48t-56 80.5t-28.5 95t-9 99.5q0 58 14.5 114t42.5 105.5t77 80t111 30.5q97 0 162 -43l-29 -52q-62 33 -133 33q-40 0 -75.5 -30.5t-54.5 -70.5q-35 -71 -35 -171 q0 -44 8 -86t25.5 -84t52 -67.5t81.5 -25.5q80 0 135 44l35 -51q-48 -39 -122 -52q26 -26 26 -52z" />
+<glyph unicode="&#xc8;" horiz-adv-x="454" d="M404 630v-67h-244v-200h187v-69h-187v-225h254v-69h-334v630h324zM355 736l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="&#xc9;" horiz-adv-x="454" d="M404 630v-67h-244v-200h187v-69h-187v-225h254v-69h-334v630h324zM295 882l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xca;" horiz-adv-x="454" d="M404 630v-67h-244v-200h187v-69h-187v-225h254v-69h-334v630h324zM396 736l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146z" />
+<glyph unicode="&#xcb;" horiz-adv-x="454" d="M404 630v-67h-244v-200h187v-69h-187v-225h254v-69h-334v630h324zM215 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM369 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5 q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xcc;" horiz-adv-x="238" d="M158 630v-630h-78v630h78zM296 736l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="&#xcd;" horiz-adv-x="238" d="M158 630v-630h-78v630h78zM234 882l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xce;" horiz-adv-x="238" d="M158 630v-630h-78v630h78zM386 736l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146z" />
+<glyph unicode="&#xcf;" horiz-adv-x="238" d="M158 630v-630h-78v630h78zM178 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM332 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xd1;" horiz-adv-x="554" d="M474 0h-82l-237 514q5 -47 5 -86v-428h-80v630h106l213 -482q-5 48 -5 88v394h80v-630zM215 830q29 0 71.5 -22t65.5 -22q26 0 41 6.5t43 25.5l31 -38q-36 -33 -61 -44.5t-61 -11.5q-20 0 -62.5 22t-70.5 22q-9 0 -17.5 -2t-19.5 -7.5l-16 -8t-19 -11.5t-16 -10l-29 43 q74 58 120 58z" />
+<glyph unicode="&#xd2;" horiz-adv-x="548" d="M274 579q-38 0 -67 -29t-43.5 -73.5t-21.5 -85.5t-7 -76t7 -76t21.5 -85.5t43.5 -73.5t67 -29t67 29t43.5 73.5t21.5 85.5t7 76t-7 76t-21.5 85.5t-43.5 73.5t-67 29zM274 645q58 0 102.5 -32t69 -83.5t36 -106t11.5 -108.5t-11.5 -108.5t-36 -106t-69 -83.5t-102.5 -32 t-102.5 32t-69 83.5t-36 106t-11.5 108.5t11.5 108.5t36 106t69 83.5t102.5 32zM380 736l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="&#xd3;" horiz-adv-x="548" d="M274 579q-38 0 -67 -29t-43.5 -73.5t-21.5 -85.5t-7 -76t7 -76t21.5 -85.5t43.5 -73.5t67 -29t67 29t43.5 73.5t21.5 85.5t7 76t-7 76t-21.5 85.5t-43.5 73.5t-67 29zM274 645q58 0 102.5 -32t69 -83.5t36 -106t11.5 -108.5t-11.5 -108.5t-36 -106t-69 -83.5t-102.5 -32 t-102.5 32t-69 83.5t-36 106t-11.5 108.5t11.5 108.5t36 106t69 83.5t102.5 32zM321 882l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xd4;" horiz-adv-x="548" d="M274 579q-38 0 -67 -29t-43.5 -73.5t-21.5 -85.5t-7 -76t7 -76t21.5 -85.5t43.5 -73.5t67 -29t67 29t43.5 73.5t21.5 85.5t7 76t-7 76t-21.5 85.5t-43.5 73.5t-67 29zM274 645q58 0 102.5 -32t69 -83.5t36 -106t11.5 -108.5t-11.5 -108.5t-36 -106t-69 -83.5t-102.5 -32 t-102.5 32t-69 83.5t-36 106t-11.5 108.5t11.5 108.5t36 106t69 83.5t102.5 32zM426 739l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146z" />
+<glyph unicode="&#xd5;" horiz-adv-x="548" d="M274 579q-38 0 -67 -29t-43.5 -73.5t-21.5 -85.5t-7 -76t7 -76t21.5 -85.5t43.5 -73.5t67 -29t67 29t43.5 73.5t21.5 85.5t7 76t-7 76t-21.5 85.5t-43.5 73.5t-67 29zM274 645q58 0 102.5 -32t69 -83.5t36 -106t11.5 -108.5t-11.5 -108.5t-36 -106t-69 -83.5t-102.5 -32 t-102.5 32t-69 83.5t-36 106t-11.5 108.5t11.5 108.5t36 106t69 83.5t102.5 32zM206 830q29 0 71.5 -22t65.5 -22q26 0 41 6.5t43 25.5l31 -38q-36 -33 -61 -44.5t-61 -11.5q-20 0 -62.5 22t-70.5 22q-9 0 -17.5 -2t-19.5 -7.5l-16 -8t-19 -11.5t-16 -10l-29 43 q74 58 120 58z" />
+<glyph unicode="&#xd6;" horiz-adv-x="548" d="M274 579q-38 0 -67 -29t-43.5 -73.5t-21.5 -85.5t-7 -76t7 -76t21.5 -85.5t43.5 -73.5t67 -29t67 29t43.5 73.5t21.5 85.5t7 76t-7 76t-21.5 85.5t-43.5 73.5t-67 29zM274 645q58 0 102.5 -32t69 -83.5t36 -106t11.5 -108.5t-11.5 -108.5t-36 -106t-69 -83.5t-102.5 -32 t-102.5 32t-69 83.5t-36 106t-11.5 108.5t11.5 108.5t36 106t69 83.5t102.5 32zM244 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM398 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5 t39.5 18.5q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xd8;" horiz-adv-x="548" d="M363 531l-135 -471q22 -9 46 -9q44 0 73.5 27t42.5 72t18 84t5 81q0 145 -50 216zM188 93l136 474q-22 12 -50 12q-43 0 -73 -28t-43 -74.5t-18 -86t-5 -81.5q0 -150 53 -216zM171 -140h-50l46 161q-58 45 -85 128t-27 170q0 54 12 108t36 104.5t68.5 82t102.5 31.5 q38 0 68 -13l34 117h50l-41 -143q56 -45 82 -125.5t26 -165.5q0 -54 -11.5 -108.5t-35.5 -106t-68.5 -83.5t-103.5 -32q-31 0 -64 11z" />
+<glyph unicode="&#xd9;" horiz-adv-x="558" d="M479 241q0 -110 -48 -183t-152 -73t-152 74t-48 186v385h80v-386q0 -193 120 -193t120 194v385h80v-389zM389 736l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="&#xda;" horiz-adv-x="558" d="M479 241q0 -110 -48 -183t-152 -73t-152 74t-48 186v385h80v-386q0 -193 120 -193t120 194v385h80v-389zM329 882l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xdb;" horiz-adv-x="558" d="M479 241q0 -110 -48 -183t-152 -73t-152 74t-48 186v385h80v-386q0 -193 120 -193t120 194v385h80v-389zM430 736l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146z" />
+<glyph unicode="&#xdc;" horiz-adv-x="550" d="M479 241q0 -110 -48 -183t-152 -73t-152 74t-48 186v385h80v-386q0 -193 120 -193t120 194v385h80v-389zM250 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM404 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5 t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xdd;" horiz-adv-x="471" d="M358 896l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146zM459 630l-184 -399v-231h-79v231l-183 399h85l140 -314l141 314h80z" />
+<glyph unicode="&#xdf;" horiz-adv-x="572" d="M542 124q0 -69 -50.5 -104t-122.5 -35q-92 0 -174 50l28 55q72 -45 150 -45q41 0 68.5 22t27.5 61q0 29 -26 52t-63.5 39.5l-75 34.5t-63.5 46.5t-26 66.5q0 67 44 103t113 36q7 26 7 46q0 46 -30.5 71t-76.5 25q-43 0 -75 -26.5t-32 -68.5v-553h-76v432l-66 9v49h66v76 q0 65 54 103t122 38q76 0 127 -45t51 -120q0 -26 -20 -102q-17 9 -44 9q-39 0 -64 -20.5t-25 -58.5q0 -24 26 -44t63 -36.5t74 -36t63 -52.5t26 -77z" />
+<glyph unicode="&#xe0;" horiz-adv-x="465" d="M359 0l-54 162h-147l-53 -162h-83l169 514h81l170 -514h-83zM232 419l-59 -193h117zM335 631l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="&#xe1;" horiz-adv-x="465" d="M359 0l-54 162h-147l-53 -162h-83l169 514h81l170 -514h-83zM232 419l-59 -193h117zM272 777l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xe2;" horiz-adv-x="465" d="M359 0l-54 162h-147l-53 -162h-83l169 514h81l170 -514h-83zM232 419l-59 -193h117zM382 631l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146z" />
+<glyph unicode="&#xe3;" horiz-adv-x="465" d="M359 0l-54 162h-147l-53 -162h-83l169 514h81l170 -514h-83zM232 419l-59 -193h117zM165 725q29 0 71.5 -22t65.5 -22q26 0 41 6.5t43 25.5l31 -38q-36 -33 -61 -44.5t-61 -11.5q-20 0 -62.5 22t-70.5 22q-9 0 -17.5 -2t-19.5 -7.5l-16 -8t-19 -11.5t-16 -10l-29 43 q74 58 120 58z" />
+<glyph unicode="&#xe4;" horiz-adv-x="465" d="M359 0l-54 162h-147l-53 -162h-83l169 514h81l170 -514h-83zM232 419l-59 -193h117zM204 667q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM358 667q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5 t39.5 18.5q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xe5;" horiz-adv-x="465" d="M359 0l-54 162h-147l-53 -162h-83l169 514h81l170 -514h-83zM232 419l-59 -193h117zM233 744q-25 0 -43.5 -17.5t-18.5 -42.5q0 -24 17.5 -42t41.5 -18t42 18t18 42t-16.5 42t-40.5 18zM232 790q43 0 73.5 -31.5t30.5 -74.5q0 -44 -31 -75t-75 -31q-43 0 -73.5 31.5 t-30.5 74.5t31.5 74.5t74.5 31.5z" />
+<glyph unicode="&#xe6;" horiz-adv-x="645" d="M302 0v160h-145l-53 -160h-82l167 515h86l27 -151v151h279v-66h-200v-150h153v-67h-153v-164h208v-68h-287zM232 411l-58 -186h108z" />
+<glyph unicode="&#xe7;" horiz-adv-x="465" d="M337 -43q4 -9 4 -20q0 -32 -33 -63.5t-70 -47.5l-38 31q81 44 81 75q0 5 -1 8q-7 21 -31 21q-11 0 -49 -9v45q-69 26 -102 99t-33 161q0 113 53 188q58 85 157 85q82 0 142 -38l-29 -52q-57 29 -113 29q-28 0 -57 -21.5t-46 -55.5q-28 -56 -28 -138q0 -84 24 -131 q38 -76 108 -76q59 0 114 38l35 -51q-47 -35 -109 -46q14 -14 21 -31z" />
+<glyph unicode="&#xe8;" horiz-adv-x="437" d="M90 0v514h282v-64h-203v-149h156v-66h-156v-169h212v-66h-291zM340 631l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="&#xe9;" horiz-adv-x="437" d="M90 0v514h282v-64h-203v-149h156v-66h-156v-169h212v-66h-291zM280 777l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xea;" horiz-adv-x="437" d="M386 631l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146zM102 0v514h282v-64h-203v-149h156v-66h-156v-169h212v-66h-291z" />
+<glyph unicode="&#xeb;" horiz-adv-x="437" d="M90 0v514h282v-64h-203v-149h156v-66h-156v-169h212v-66h-291zM204 642q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM358 642q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5 q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xec;" horiz-adv-x="261" d="M90 0v514h82v-514h-82zM306 631l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="&#xed;" horiz-adv-x="261" d="M90 0v514h82v-514h-82zM244 777l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xee;" horiz-adv-x="261" d="M90 0v514h82v-514h-82zM396 631l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146z" />
+<glyph unicode="&#xef;" horiz-adv-x="261" d="M90 0v514h82v-514h-82zM188 667q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM342 667q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xf1;" horiz-adv-x="539" d="M366 0l-185 384q0 -11 0.5 -19.5t1 -12t0.5 -5.5v-347h-79v515h98l164 -357q-1 26 -1 36v321h79v-515h-78zM201 725q29 0 71.5 -22t65.5 -22q26 0 41 6.5t43 25.5l31 -38q-36 -33 -61 -44.5t-61 -11.5q-20 0 -62.5 22t-70.5 22q-9 0 -17.5 -2t-19.5 -7.5l-16 -8 t-19 -11.5t-16 -10l-29 43q74 58 120 58z" />
+<glyph unicode="&#xf2;" horiz-adv-x="505" d="M263 -16q-48 0 -86 25.5t-59 67t-32 88t-11 95.5q0 65 18.5 124.5t63 102.5t106.5 43q63 0 107.5 -44t62.5 -103.5t18 -125.5t-18 -125.5t-62.5 -103.5t-107.5 -44zM263 466q-31 0 -54 -19.5t-34.5 -52.5t-16.5 -68t-5 -74q0 -37 5 -70.5t16.5 -65t34.5 -50t54 -18.5 q42 0 67.5 35t33.5 78t8 96q0 52 -8.5 96t-34.5 78.5t-66 34.5zM363 631l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="&#xf3;" horiz-adv-x="505" d="M263 -16q-48 0 -86 25.5t-59 67t-32 88t-11 95.5q0 65 18.5 124.5t63 102.5t106.5 43q63 0 107.5 -44t62.5 -103.5t18 -125.5t-18 -125.5t-62.5 -103.5t-107.5 -44zM263 466q-31 0 -54 -19.5t-34.5 -52.5t-16.5 -68t-5 -74q0 -37 5 -70.5t16.5 -65t34.5 -50t54 -18.5 q42 0 67.5 35t33.5 78t8 96q0 52 -8.5 96t-34.5 78.5t-66 34.5zM310 777l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xf4;" horiz-adv-x="505" d="M263 -16q-48 0 -86 25.5t-59 67t-32 88t-11 95.5q0 65 18.5 124.5t63 102.5t106.5 43q63 0 107.5 -44t62.5 -103.5t18 -125.5t-18 -125.5t-62.5 -103.5t-107.5 -44zM263 466q-31 0 -54 -19.5t-34.5 -52.5t-16.5 -68t-5 -74q0 -37 5 -70.5t16.5 -65t34.5 -50t54 -18.5 q42 0 67.5 35t33.5 78t8 96q0 52 -8.5 96t-34.5 78.5t-66 34.5zM406 631l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146z" />
+<glyph unicode="&#xf5;" horiz-adv-x="505" d="M263 -16q-48 0 -86 25.5t-59 67t-32 88t-11 95.5q0 65 18.5 124.5t63 102.5t106.5 43q63 0 107.5 -44t62.5 -103.5t18 -125.5t-18 -125.5t-62.5 -103.5t-107.5 -44zM263 466q-31 0 -54 -19.5t-34.5 -52.5t-16.5 -68t-5 -74q0 -37 5 -70.5t16.5 -65t34.5 -50t54 -18.5 q42 0 67.5 35t33.5 78t8 96q0 52 -8.5 96t-34.5 78.5t-66 34.5zM188 725q29 0 71.5 -22t65.5 -22q26 0 41 6.5t43 25.5l31 -38q-36 -33 -61 -44.5t-61 -11.5q-20 0 -62.5 22t-70.5 22q-9 0 -17.5 -2t-19.5 -7.5l-16 -8t-19 -11.5t-16 -10l-29 43q74 58 120 58z" />
+<glyph unicode="&#xf6;" horiz-adv-x="505" d="M263 -16q-48 0 -86 25.5t-59 67t-32 88t-11 95.5q0 65 18.5 124.5t63 102.5t106.5 43q63 0 107.5 -44t62.5 -103.5t18 -125.5t-18 -125.5t-62.5 -103.5t-107.5 -44zM263 466q-31 0 -54 -19.5t-34.5 -52.5t-16.5 -68t-5 -74q0 -37 5 -70.5t16.5 -65t34.5 -50t54 -18.5 q42 0 67.5 35t33.5 78t8 96q0 52 -8.5 96t-34.5 78.5t-66 34.5zM228 667q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM382 667q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5 q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xf7;" horiz-adv-x="489" d="M308 404q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40zM308 107q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40zM434 280v-60h-380v60h380z" />
+<glyph unicode="&#xf8;" horiz-adv-x="505" d="M182 85l108 373q-18 8 -37 8q-31 0 -54 -19.5t-34.5 -52.5t-16.5 -68t-5 -74q0 -114 39 -167zM329 419l-106 -366q15 -5 30 -5q42 0 67.5 35t33.5 78t8 96q0 105 -33 162zM382 605l-31 -109q45 -36 67.5 -102t22.5 -137q0 -66 -18 -125.5t-62.5 -103.5t-107.5 -44 q-22 0 -48 7l-29 -102h-50l36 124q-48 36 -72.5 104.5t-24.5 142.5q0 65 18.5 124.5t63 102.5t106.5 43q29 0 55 -9l24 84h50z" />
+<glyph unicode="&#xf9;" horiz-adv-x="522" d="M271 -16q-88 0 -130 61.5t-42 152.5v316h78v-316q0 -150 94 -150t94 150v316h78v-319q0 -92 -42 -151.5t-130 -59.5zM373 631l-32 -45q-117 62 -184 128l62 63q52 -72 154 -146z" />
+<glyph unicode="&#xfa;" horiz-adv-x="522" d="M271 -16q-88 0 -130 61.5t-42 152.5v316h78v-316q0 -150 94 -150t94 150v316h78v-319q0 -92 -42 -151.5t-130 -59.5zM312 777l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146z" />
+<glyph unicode="&#xfb;" horiz-adv-x="522" d="M413 631l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146zM271 -16q-88 0 -130 61.5t-42 152.5v316h78v-316q0 -150 94 -150t94 150v316h78v-319q0 -92 -42 -151.5t-130 -59.5z" />
+<glyph unicode="&#xfc;" horiz-adv-x="522" d="M271 -16q-88 0 -130 61.5t-42 152.5v316h78v-316q0 -150 94 -150t94 150v316h78v-319q0 -92 -42 -151.5t-130 -59.5zM233 667q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM387 667q0 -22 -19 -39t-41 -17 q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#xfd;" horiz-adv-x="416" d="M331 781l62 -63q-68 -67 -184 -128l-32 45q98 71 154 146zM247 189v-189h-78v189l-155 325h84l112 -242l113 242h80z" />
+<glyph unicode="&#xff;" horiz-adv-x="416" d="M187 642q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM341 642q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM257 189v-189h-78v189l-155 325h84l112 -242 l113 242h80z" />
+<glyph unicode="&#x152;" horiz-adv-x="638" d="M264 566q-41 0 -69.5 -27t-41 -71t-17 -81.5t-4.5 -77.5q0 -39 5 -75.5t17.5 -78t41 -67t68.5 -25.5v503zM588 630v-67h-244v-200h187v-69h-187v-225h254v-69h-335q-56 0 -98.5 31.5t-65 81.5t-33.5 102t-11 104q0 50 11.5 101.5t34.5 100t65 79t97 30.5h325z" />
+<glyph unicode="&#x153;" horiz-adv-x="583" d="M244 0q-61 0 -103 42t-59 98.5t-17 119.5q0 62 17.5 117.5t60 96t101.5 40.5h275v-66h-202v-146h155v-68h-155v-166h210v-68h-283zM238 450q-36 -5 -58 -37.5t-29.5 -72t-7.5 -88.5q0 -46 7.5 -84t29.5 -69t58 -35v386z" />
+<glyph unicode="&#x178;" horiz-adv-x="471" d="M459 630l-184 -399v-231h-79v231l-183 399h85l140 -314l141 314h80zM217 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5q17 0 29 -11.5t12 -28.5zM371 772q0 -22 -19 -39t-41 -17q-16 0 -27 10.5t-11 26.5q0 22 17.5 40.5t39.5 18.5 q17 0 29 -11.5t12 -28.5z" />
+<glyph unicode="&#x2c6;" horiz-adv-x="402" d="M366 606l-32 -46q-57 30 -121 100q-65 -71 -121 -100l-32 45q80 55 153 147q62 -80 153 -146z" />
+<glyph unicode="&#x2dc;" horiz-adv-x="380" d="M121 700q29 0 71.5 -22t65.5 -22q26 0 41 6.5t43 25.5l31 -38q-36 -33 -61 -44.5t-61 -11.5q-20 0 -62.5 22t-70.5 22q-9 0 -17.5 -2t-19.5 -7.5l-16 -8t-19 -11.5t-16 -10l-29 43q74 58 120 58z" />
+<glyph unicode="&#x2013;" horiz-adv-x="358" d="M358 285v-60h-358v60h358z" />
+<glyph unicode="&#x2014;" horiz-adv-x="608" d="M608 286v-60h-608v60h608z" />
+<glyph unicode="&#x2018;" horiz-adv-x="267" d="M110 431q-13 0 -29 11.5t-25 23.5l-10 11q41 87 129 184l45 -31q-48 -69 -60 -117q-5 -20 -5 -41l2 -24q-28 -17 -47 -17z" />
+<glyph unicode="&#x2019;" horiz-adv-x="270" d="M158 646q13 0 29 -11.5t25 -22.5l10 -12q-41 -87 -129 -184l-45 31q48 69 60 117q5 20 5 41l-2 24q28 17 47 17z" />
+<glyph unicode="&#x201a;" horiz-adv-x="258" d="M139 90q13 0 29 -11.5t26 -22.5l9 -12q-41 -87 -129 -184l-45 31q48 69 60 117q5 20 5 41l-2 24q28 17 47 17z" />
+<glyph unicode="&#x201c;" horiz-adv-x="446" d="M288 431l47 17q-2 9 -2 24q0 21 5 41q12 48 60 117l-45 31q-86 -95 -129 -184q34 -46 64 -46zM111 431l47 17q-2 9 -2 24q0 21 5 41q12 48 60 117l-45 31q-86 -95 -129 -184q34 -46 64 -46z" />
+<glyph unicode="&#x201d;" horiz-adv-x="446" d="M157 646l-47 -17q2 -9 2 -24q0 -21 -5 -41q-12 -48 -60 -117l45 -31q86 95 129 184q-34 46 -64 46zM334 646l-47 -17q2 -9 2 -24q0 -21 -5 -41q-12 -48 -60 -117l45 -31q86 95 129 184q-34 46 -64 46z" />
+<glyph unicode="&#x201e;" horiz-adv-x="434" d="M139 90l-47 -17q2 -9 2 -24q0 -21 -5 -41q-12 -48 -60 -117l45 -31q86 95 129 184q-34 46 -64 46zM316 90l-47 -17q2 -9 2 -24q0 -21 -5 -41q-12 -48 -60 -117l45 -31q86 95 129 184q-34 46 -64 46z" />
+<glyph unicode="&#x2022;" horiz-adv-x="424" d="M211 487q71 0 122 -50.5t51 -121.5t-51 -121.5t-122 -50.5t-121.5 50.5t-50.5 121.5t50.5 121.5t121.5 50.5z" />
+<glyph unicode="&#x2026;" horiz-adv-x="604" d="M192 46q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40zM364 46q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40zM534 46q0 -24 -19.5 -42.5t-44.5 -18.5q-24 0 -41 16 t-17 40q0 25 19.5 43t44.5 18q24 0 41 -16t17 -40z" />
+<glyph unicode="&#x2039;" horiz-adv-x="300" d="M267 100l-47 -38l-187 188l185 188l47 -38l-149 -150z" />
+<glyph unicode="&#x203a;" horiz-adv-x="300" d="M33 100l47 -38l187 188l-185 188l-47 -38l149 -150z" />
+<glyph unicode="&#x2044;" horiz-adv-x="339" d="M420 745l-430 -876h-63l430 876h63z" />
+<glyph unicode="&#x2122;" horiz-adv-x="802" d="M310 650h-97v-353h-49v353h-97v44h243v-44zM724 694v-397h-50v270l3 54l-114 -324h-44l-114 325q3 -33 3 -54v-271h-51v397h67l117 -335l116 335h67z" />
+<glyph unicode="&#xe000;" horiz-adv-x="515" d="M0 515h515v-515h-515v515z" />
+<glyph unicode="&#xfb01;" horiz-adv-x="661" d="M490 0v514h76v-514h-76zM173 450v-149h142v-66h-142v-235h-78v514h257v-64h-179z" />
+<glyph unicode="&#xfb02;" horiz-adv-x="762" d="M488 0v514h75v-450h179v-64h-254zM173 450v-149h141v-66h-141v-235h-78v514h256v-64h-178z" />
+<glyph unicode="&#xfb03;" horiz-adv-x="1049" d="M878 0v514h82v-514h-82zM563 450v-149h143v-66h-143v-235h-79v514h260v-64h-181zM169 450v-149h143v-66h-143v-235h-79v514h260v-64h-181z" />
+<glyph unicode="&#xfb04;" horiz-adv-x="1155" d="M878 0v514h76v-450h181v-64h-257zM563 450v-149h143v-66h-143v-235h-79v514h260v-64h-181zM169 450v-149h143v-66h-143v-235h-79v514h260v-64h-181z" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/public/stylesheets/fonts/delicious-smallcaps-webfont.ttf b/public/stylesheets/fonts/delicious-smallcaps-webfont.ttf
new file mode 100755
index 000000000..152f15f13
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-smallcaps-webfont.ttf
Binary files differ
diff --git a/public/stylesheets/fonts/delicious-smallcaps-webfont.woff b/public/stylesheets/fonts/delicious-smallcaps-webfont.woff
new file mode 100755
index 000000000..0d4d1f7d0
--- /dev/null
+++ b/public/stylesheets/fonts/delicious-smallcaps-webfont.woff
Binary files differ
diff --git a/public/stylesheets/ie7.css b/public/stylesheets/ie7.css
new file mode 100644
index 000000000..c6e8fe4f2
--- /dev/null
+++ b/public/stylesheets/ie7.css
@@ -0,0 +1,18 @@
+form input[type=submit], a.link_button_green {
+ border: solid 0px #FFF;
+ line-height: 16px;
+ padding-top: 3px
+}
+
+input#navigation_search_query {
+ margin-bottom: -5px;
+}
+
+.request_left span.head {
+ line-height: 35px;
+}
+
+#header_left,
+#left_column {
+ margin-top: 20px;
+} \ No newline at end of file
diff --git a/public/stylesheets/jquery.fancybox-1.3.4.css b/public/stylesheets/jquery.fancybox-1.3.4.css
new file mode 100755
index 000000000..6f53d8f4a
--- /dev/null
+++ b/public/stylesheets/jquery.fancybox-1.3.4.css
@@ -0,0 +1,359 @@
+/*
+ * FancyBox - jQuery Plugin
+ * Simple and fancy lightbox alternative
+ *
+ * Examples and documentation at: http://fancybox.net
+ *
+ * Copyright (c) 2008 - 2010 Janis Skarnelis
+ * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
+ *
+ * Version: 1.3.4 (11/11/2010)
+ * Requires: jQuery v1.3+
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+#fancybox-loading {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 40px;
+ height: 40px;
+ margin-top: -20px;
+ margin-left: -20px;
+ cursor: pointer;
+ overflow: hidden;
+ z-index: 1104;
+ display: none;
+}
+
+#fancybox-loading div {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 40px;
+ height: 480px;
+ background-image: url('fancybox.png');
+}
+
+#fancybox-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: 1100;
+ display: none;
+}
+
+#fancybox-tmp {
+ padding: 0;
+ margin: 0;
+ border: 0;
+ overflow: auto;
+ display: none;
+}
+
+#fancybox-wrap {
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: 20px;
+ z-index: 1101;
+ outline: none;
+ display: none;
+}
+
+#fancybox-outer {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ background: #fff;
+}
+
+#fancybox-content {
+ width: 0;
+ height: 0;
+ padding: 0;
+ outline: none;
+ position: relative;
+ overflow: hidden;
+ z-index: 1102;
+ border: 0px solid #fff;
+}
+
+#fancybox-hide-sel-frame {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: transparent;
+ z-index: 1101;
+}
+
+#fancybox-close {
+ position: absolute;
+ top: -15px;
+ right: -15px;
+ width: 30px;
+ height: 30px;
+ background: transparent url('fancybox.png') -40px 0px;
+ cursor: pointer;
+ z-index: 1103;
+ display: none;
+}
+
+#fancybox-error {
+ color: #444;
+ font: normal 12px/20px Arial;
+ padding: 14px;
+ margin: 0;
+}
+
+#fancybox-img {
+ width: 100%;
+ height: 100%;
+ padding: 0;
+ margin: 0;
+ border: none;
+ outline: none;
+ line-height: 0;
+ vertical-align: top;
+}
+
+#fancybox-frame {
+ width: 100%;
+ height: 100%;
+ border: none;
+ display: block;
+}
+
+#fancybox-left, #fancybox-right {
+ position: absolute;
+ bottom: 0px;
+ height: 100%;
+ width: 35%;
+ cursor: pointer;
+ outline: none;
+ background: transparent url('blank.gif');
+ z-index: 1102;
+ display: none;
+}
+
+#fancybox-left {
+ left: 0px;
+}
+
+#fancybox-right {
+ right: 0px;
+}
+
+#fancybox-left-ico, #fancybox-right-ico {
+ position: absolute;
+ top: 50%;
+ left: -9999px;
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ cursor: pointer;
+ z-index: 1102;
+ display: block;
+}
+
+#fancybox-left-ico {
+ background-image: url('fancybox.png');
+ background-position: -40px -30px;
+}
+
+#fancybox-right-ico {
+ background-image: url('fancybox.png');
+ background-position: -40px -60px;
+}
+
+#fancybox-left:hover, #fancybox-right:hover {
+ visibility: visible; /* IE6 */
+}
+
+#fancybox-left:hover span {
+ left: 20px;
+}
+
+#fancybox-right:hover span {
+ left: auto;
+ right: 20px;
+}
+
+.fancybox-bg {
+ position: absolute;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ width: 20px;
+ height: 20px;
+ z-index: 1001;
+}
+
+#fancybox-bg-n {
+ top: -20px;
+ left: 0;
+ width: 100%;
+ background-image: url('fancybox-x.png');
+}
+
+#fancybox-bg-ne {
+ top: -20px;
+ right: -20px;
+ background-image: url('fancybox.png');
+ background-position: -40px -162px;
+}
+
+#fancybox-bg-e {
+ top: 0;
+ right: -20px;
+ height: 100%;
+ background-image: url('fancybox-y.png');
+ background-position: -20px 0px;
+}
+
+#fancybox-bg-se {
+ bottom: -20px;
+ right: -20px;
+ background-image: url('fancybox.png');
+ background-position: -40px -182px;
+}
+
+#fancybox-bg-s {
+ bottom: -20px;
+ left: 0;
+ width: 100%;
+ background-image: url('fancybox-x.png');
+ background-position: 0px -20px;
+}
+
+#fancybox-bg-sw {
+ bottom: -20px;
+ left: -20px;
+ background-image: url('fancybox.png');
+ background-position: -40px -142px;
+}
+
+#fancybox-bg-w {
+ top: 0;
+ left: -20px;
+ height: 100%;
+ background-image: url('fancybox-y.png');
+}
+
+#fancybox-bg-nw {
+ top: -20px;
+ left: -20px;
+ background-image: url('fancybox.png');
+ background-position: -40px -122px;
+}
+
+#fancybox-title {
+ font-family: Helvetica;
+ font-size: 12px;
+ z-index: 1102;
+}
+
+.fancybox-title-inside {
+ padding-bottom: 10px;
+ text-align: center;
+ color: #333;
+ background: #fff;
+ position: relative;
+}
+
+.fancybox-title-outside {
+ padding-top: 10px;
+ color: #fff;
+}
+
+.fancybox-title-over {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ color: #FFF;
+ text-align: left;
+}
+
+#fancybox-title-over {
+ padding: 10px;
+ background-image: url('fancy_title_over.png');
+ display: block;
+}
+
+.fancybox-title-float {
+ position: absolute;
+ left: 0;
+ bottom: -20px;
+ height: 32px;
+}
+
+#fancybox-title-float-wrap {
+ border: none;
+ border-collapse: collapse;
+ width: auto;
+}
+
+#fancybox-title-float-wrap td {
+ border: none;
+ white-space: nowrap;
+}
+
+#fancybox-title-float-left {
+ padding: 0 0 0 15px;
+ background: url('fancybox.png') -40px -90px no-repeat;
+}
+
+#fancybox-title-float-main {
+ color: #FFF;
+ line-height: 29px;
+ font-weight: bold;
+ padding: 0 0 3px 0;
+ background: url('fancybox-x.png') 0px -40px;
+}
+
+#fancybox-title-float-right {
+ padding: 0 0 0 15px;
+ background: url('fancybox.png') -55px -90px no-repeat;
+}
+
+/* IE6 */
+
+.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
+.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame {
+ height: expression(this.parentNode.clientHeight + "px");
+}
+
+#fancybox-loading.fancybox-ie6 {
+ position: absolute; margin-top: 0;
+ top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px');
+}
+
+#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); }
+
+/* IE6, IE7, IE8 */
+
+.fancybox-ie .fancybox-bg { background: transparent !important; }
+
+.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); } \ No newline at end of file
diff --git a/public/stylesheets/main.css b/public/stylesheets/main.css
index 28b2762ab..35f456e72 100644
--- a/public/stylesheets/main.css
+++ b/public/stylesheets/main.css
@@ -226,7 +226,7 @@ body
font-size: 0.9em;
z-index: 200;
padding: 0.20em 10px 0.25em 1em;
- color: #FFF;
+ color: #444;
}
#logged_in_bar a, #logged_in_bar a:visited
@@ -312,6 +312,7 @@ h1, h2, h3
line-height: 1em;
letter-spacing: 0em;
color: #555;
+ clear: left;
}
h1 { font-size: 1.8em;}
h2 { font-size: 1.4em;}
@@ -414,6 +415,10 @@ div#twitter
margin: 0 0 1em 1em;
}
+img.twitter-icon {
+ vertical-align: middle;
+}
+
.blog_post {
margin-bottom: 2em;
}
@@ -927,19 +932,73 @@ a img.attachment_image {
#body_sidebar a { text-decoration: none; }
+/*------------------------------------------------ selecting an authority */
+
+#authority_selection
+{
+ float: left;
+ width: 40%;
+}
+
+#authority_search_ahead_results
+{
+ width: 26em;
+}
+
+#authority_preview
+{
+ width: 45%;
+ float: right;
+ background-color: #FFFFE0;
+ padding-left: 1em;
+ padding-right: 1em;
+ overflow: hidden;
+ margin-top: -67px;
+}
+
+ #authority_preview #header_left,
+ #authority_preview.request_left,
+ #authority_preview #stepwise_make_request
+ {
+ width: 95%;
+ }
+
/*------------------------------------------------ making a request / sign up / sign in */
#request_advice
-{}
+{
+ float: right;
+ width: 250px;
+ margin-top: 1em;
+}
+
#request_advice ul
{
- width: 26em;
margin: 0 auto 0 auto;
}
#request_advice ul li { margin: 0 0 1em 0; }
+#request_header
+{
+ background-color: #FFFFE0;
+ padding-top: 0.5em;
+ padding-bottom: 1em;
+}
+
+#request_header_text
+{
+ font-size: 0.8em;
+ margin-left: 11em;
+}
+
+#request_search_ahead_results
+{
+ font-size: 0.8em;
+ margin-left: 11em;
+}
+
#request_form
-{ margin-top: 4em;}
+{ margin-top: 1em;}
#request_form label,
label.form_label
@@ -952,10 +1011,6 @@ label.form_label
padding: 0 10px 0 0;
margin: 0 0 0 0;
}
- #request_form h1 label
- {
- font-size: 0.55em;
- }
.form_item_note, .form_note
{
@@ -1238,4 +1293,4 @@ div.lang {
div#user_locale_switcher {
margin: 5px;
-} \ No newline at end of file
+}
diff --git a/public/stylesheets/print.css b/public/stylesheets/print.css
new file mode 100644
index 000000000..02e0e98c0
--- /dev/null
+++ b/public/stylesheets/print.css
@@ -0,0 +1,38 @@
+div#content, div#left_column, div.entirebodym div#wrapper {
+ width: 100%;
+ margin: 0;
+ float: none;
+}
+div#content {
+ padding-right: 0;
+ width: 96%;
+}
+
+#wrapper {
+ width: auto;
+ padding: 0;
+
+}
+
+p.event_actions,
+div#after_actions,
+#right_column,
+#banner,
+#header_right,
+#describe_state_form_1,
+#describe_state_form_2 input[type=submit],
+#footer {
+ display: none;
+}
+
+div.correspondence {
+ background: none;
+ border: 1px solid #DDD;
+}
+
+p#request_status {
+ page-break-after: avoid;
+}
+div.correspondence {
+ page-break-before: avoid;
+} \ No newline at end of file
diff --git a/public/stylesheets/theme.css b/public/stylesheets/theme.css
new file mode 100644
index 000000000..d00ccdf3d
--- /dev/null
+++ b/public/stylesheets/theme.css
@@ -0,0 +1,1141 @@
+
+h1 {
+ color: #93278F;
+ font-size: 42px;
+ font-family: 'DeliciousBold', Arial, sans-serif;
+ margin-bottom:15px;
+ margin-top:10px;
+}
+
+h2 a {
+ text-decoration: none;
+}
+
+h2 a:hover {
+ text-decoration: underline;
+}
+
+h2, dt {
+ color: #93278F;
+ font-size: 21px;
+ font-family: 'DeliciousBold', Arial, sans-serif;
+ font-weight:normal;
+}
+
+h3 {
+ color: #6B3C6A;
+ font-family: 'DeliciousRoman', Arial, sans-serif;
+ font-weight: normal;
+ text-decoration: none;
+ font-size: 20px;
+ margin-top: 3px;
+ margin-bottom:10px;
+}
+
+dd {
+ margin:18px 0px 36px 0px;
+ width:auto;
+}
+
+dl {
+ margin-top:24px;
+ line-height:160%;
+}
+
+div.controller_help dt:hover > a, div.controller_help h1:hover > a, div#help_unhappy h1:hover > a.hover_a {
+ color: #777;
+ font-family:Arial, sans-serif;
+}
+
+a {
+ color: #93278F;
+ text-decoration: underline;
+}
+
+body {
+ font-family: Arial, sans-serif;
+ color: #444444;
+ font-size: 12px;
+}
+
+body.front {
+ background: url(/images/home-grad.png) repeat-x 0px 160px;
+}
+
+div.controller_help h1 a
+{
+ color: #93278F
+}
+
+#wrapper {
+ padding-top:160px;
+}
+
+#banner {
+ background: url(/images/stripes.png);
+ border: none;
+ height:160px;
+}
+
+#banner_inner {
+ width: 890px;
+ margin: auto;
+ position:relative;
+}
+
+#banner_inner a#logo {
+ position:absolute;
+ left:0px;
+ top:70px;
+ z-index: 100;
+}
+
+a img {
+ border: none
+}
+
+#navigation_search {
+ width:auto;
+ right:0px;
+ top:10px;
+}
+
+#navigation_search input[type=image] {
+ border: 0px;
+ margin-bottom: -9px;
+ margin-left: -4px;
+}
+
+#navigation_search input[type=text] {
+ font-size: 12px;
+ padding:5px 5px 4px 5px;
+ border-color:#BE7DBC;
+ border-radius:5px 0px 0px 5px;
+ -moz-border-radius:5px 0px 0px 5px;
+}
+
+#logged_in_bar {
+ top: 18px;
+ right:210px;
+ float:none;
+ position:absolute;
+}
+
+#logged_in_bar a,
+#logged_in_bar a:visited {
+ color: #93278F;
+}
+
+div.lang {
+ top:40px;
+ position:absolute;
+ padding:0px;
+}
+
+#topnav {
+ background: transparent;
+ top: 120px;
+ margin-left: 115px;
+ width: auto;
+ font-family:'DeliciousRoman', Arial, sans-serif;
+ font-size: 18px;
+}
+
+#topnav ul li a {
+ color: #6B3C6A !important;
+}
+
+#topnav ul li {
+ padding:10px 15px;
+ margin: 0px 3px;
+}
+
+#topnav ul li.selected {
+ background:#FFF;
+}
+
+#topnav li a, #topnav li a:visited {
+ padding:0px;
+}
+
+.request_left {
+ width: 625px;
+ float:left;
+}
+
+.request_right {
+ padding-top:5px;
+ width: 245px;
+ float:left;
+}
+
+#request_header_text {
+ margin-left: 110px;
+}
+
+#wrapper {
+ width: 900px;
+}
+
+#content {
+ width: 875px;
+}
+
+#stepwise_make_request {
+ background: url(/images/stripes.png);
+ border: 1px solid #DEBEDD;
+ border-radius:5px;
+ -moz-border-radius:5px;
+ font-family:'DeliciousRoman', Arial, sans-serif;
+ color: #6B3C6A;
+ font-size:18px;
+ padding:10px 12px;
+ text-align:left;
+ width: 412px;
+ margin-bottom:40px;
+}
+
+#stepwise_make_request a img {
+ margin-bottom:-10px;
+ margin-top: -10px;
+ margin-left:6px;
+}
+
+#stepwise_make_request strong {
+ color: #93278F;
+}
+
+p.subtitle {
+ margin-top:10px;
+ margin-bottom:20px;
+ font-style: italic;
+}
+
+.results_section {
+ margin-bottom:40px;
+}
+
+.results_section div:last-child {
+ border-bottom-width:0px;
+ padding-bottom:0px;
+}
+
+.request_listing,
+.user_listing,
+.body_listing {
+ border-bottom:1px solid #DDD;
+ padding:12px 0px 6px;
+ margin:0px;
+ margin-bottom:-1px;
+}
+
+.body_listing {
+ padding-bottom:16px;
+}
+
+.request_listing span.head,
+.user_listing span.head,
+.body_listing span.head {
+ background:none;
+ padding:0px;
+ font-size:21px;
+ margin-bottom:6px;
+}
+
+.request_listing span.head a,
+.user_listing span.head a,
+.body_listing span.head a {
+ color: #6B3C6A;
+ font-family: 'DeliciousRoman', Arial, sans-serif;
+ font-weight: normal;
+ text-decoration: none;
+ font-size: 20px;
+ margin-top: 3px;
+ display: block;
+ margin-bottom: -6px;
+}
+
+.request_listing span.head a:hover,
+.user_listing span.head a:hover,
+.body_listing span.head a:hover {
+ text-decoration: underline;
+}
+
+.request_listing .requester {
+ font-size: 12px;
+ padding-bottom:0px;
+}
+
+.request_listing .requester a {
+ text-decoration: underline;
+}
+
+.body_listing span.desc,
+.body_listing span.bottomline,
+.user_listing span.bottomline {
+ padding:0px;
+ margin:0px;
+ font-style: normal;
+ font-size: 12px;
+ font-weight: normal !important;
+}
+
+.request_listing span.bottomline {
+ padding: 3px 0px 0px 27px;
+ font-style: normal;
+ margin-bottom: 0px;
+ margin-top:12px;
+ background-position: top left;
+ font-size: 14px;
+ font-weight: normal !important;
+ min-height: 36px;
+}
+
+.user_listing {
+ padding-top:10px;
+ padding-bottom:0px;
+}
+
+.icon_requires_admin,
+.icon_waiting_response_overdue,
+.icon_waiting_response_very_overdue {
+ background-image: url(/images/status-overdue.png);
+ color: #C1272D;
+}
+
+.icon_successful,
+.icon_partially_successful {
+ background-image: url(/images/status-complete.png);
+ color: #69952F;
+}
+
+.icon_waiting_response,
+.icon_waiting_classification,
+.icon_waiting_clarification {
+ background-image: url(/images/status-pending.png);
+ color: #A68C2E;
+}
+
+.icon_failed,
+.icon_rejected {
+ background-image: url(/images/status-denied.png);
+ color: #C1272D;
+}
+
+.icon_not_held {
+ background-image: url(/images/status-not-held.png);
+ color: #A68C2E;
+}
+
+.icon_gone_postal {
+ background-image: url(/images/status-gone-postal.png);
+ color: #A68C2E;
+}
+
+.icon_error_message {
+ background-image: url(/images/status-error.png);
+ color: #C1272D;
+}
+
+.icon_internal_review {
+ background-image: url(/images/status-internal-review.png);
+ color: #A68C2E;
+}
+
+.icon_user_withdrawn {
+ background-image: url(/images/status-withdrawn.png);
+ color: #A68C2E;
+}
+
+#request_sidebar {
+ width: 212px;
+ font-size: 12px;
+}
+
+#request_sidebar h2 {
+ margin-bottom:10px;
+}
+
+.feed_link {
+ padding: 4px 0px;
+}
+
+.feed_link a {
+ text-decoration: none;
+}
+
+.request_listing span.desc {
+ background: url(/images/quote-marks.png) no-repeat;
+ padding: 0px 0px 0px 40px;
+ min-height:60px;
+ font-size:12px;
+ width:auto;
+ color:#444;
+ line-height:18px;
+}
+
+#footer {
+ border-color: #FFF;
+ margin-top:60px;
+}
+
+div.ff-icon-printfix {
+ display: none;
+}
+#search_form {
+ margin:0px -6px 20px 0px;
+}
+
+#advanced-search input[type=text] {
+ width: auto;
+}
+
+#search_form input[type=submit] {
+ border-radius: 0px 2px 2px 0px;
+ -moz-border-radius: 0px 2px 2px 0px;
+}
+
+#header_left {
+ width:625px;
+ float:left;
+}
+
+#header_right {
+ float:right;
+ width:230px;
+ padding-top:27px;
+}
+
+.feed_link,
+.act_link {
+ display:block !important;
+ margin-bottom:10px;
+}
+
+.feed_link a,
+.act_link a,
+#header_right > a {
+ text-decoration: none;
+ color: #6B3C6A;
+}
+
+.feed_link a:hover,
+.act_link a:hover,
+#header_right > a:hover {
+ text-decoration: underline;
+}
+
+.feed_link a img,
+.act_link img,
+.act_link a img {
+ padding-right:2px;
+}
+
+form.feed_form input[type="submit"] {
+ font-size: 12px;
+ line-height: 12px;
+ padding: 2px 4px;
+}
+
+#header_right > br {
+ line-height:200%;
+}
+
+#general_search h2 {
+ clear:both;
+ margin-top:20px;
+}
+
+.highlight {
+ background:#FFFF00;
+ border-width:0px;
+}
+
+h2.foi_results,
+h2.person_results,
+h2.publicbody_results {
+ padding-top:0px;
+ padding-bottom:15px;
+ margin-bottom:0px;
+ margin-top: 0px;
+}
+
+h2.foi_results {
+ width: 600px;
+}
+
+.list_toggle_controls {
+ padding-bottom:20px;
+}
+
+#request_advice ol {
+ margin-left:18px;
+ margin-top:20px;
+ display:block;
+ padding:0px;
+}
+
+#request_advice ol li {
+ padding-bottom:5px;
+}
+
+#request_form label,
+label.form_label {
+ width: 100px;
+ font-family: 'DeliciousRoman', Arial, sans-serif;
+}
+
+#request_form label,
+label.form_label,
+span#to_public_body {
+ color: #6B3C6A;
+ font-size: 18px;
+}
+
+#date_range label,
+#filter_requests_form label {
+ display: inline;
+ float: none;
+ padding-right: 5px;
+}
+
+#date_range label.title,
+#filter_requests_form label.title,
+h3.title {
+ display: inline-block;
+ float: none;
+ width:110px;
+}
+
+h3.title {
+ width: 114px;
+ margin-bottom: 5px;
+}
+
+#requests-subfilters div {
+ margin-top: 10px;
+}
+
+#requests-subfilters #latest_status_0,
+#requests-subfilters #request_variety_0 {
+ margin-left: 0px;
+}
+
+#requests-subfilters input[type=checkbox] {
+ margin-left: 117px;
+}
+
+.list-filter-item {
+ margin-bottom: 10px;
+}
+
+span#to_public_body {
+ font-family: 'DeliciousBold', Arial, sans-serif;
+}
+
+.form_item_note, .form_note {
+ margin-left: 110px;
+ font-size: 1em;
+}
+
+#left_column {
+ width:600px;
+ float:left;
+}
+
+#right_column_flip {
+ width:220px;
+ float:left;
+ margin-top:20px;
+}
+
+#left_column_flip {
+ width:620px;
+ float:right;
+ margin-top: 10px;
+}
+
+#right_column {
+ width:220px;
+ float:right;
+ margin-top:30px;
+}
+
+#left_half {
+ width:45%;
+ float:left;
+}
+
+#right_half {
+ width:45%;
+ float:right;
+}
+
+#middle_strip {
+ float: left;
+ width: 10%;
+ height: 100px;
+ text-align: center;
+ margin-top: 45px;
+ font-size: 16px;
+ font-family: Georgia;
+ font-style: italic;
+ color: #93278F;
+}
+
+#signup, #signin {
+ float:none;
+ margin-top:20px;
+ width:auto;
+}
+
+#sign_together h1 {
+ width: 320px;
+ text-align: center;
+}
+
+#sign_together .form_button {
+ margin-left: 10.5em;
+}
+
+#signup .form_item_note, #signin .form_note {
+ margin-left:11.5em;
+ width:24em;
+}
+
+#request_form label, label.form_label {
+ margin-top:2px;
+ text-align:left;
+}
+
+form input[type=text],
+form input[type=password] {
+ font-size: 14px;
+ padding: 5px;
+ width:200px;
+ color: #555;
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-style: solid;
+ border-color: #BBB;
+ border-width: 1px;
+}
+
+form input.use-datepicker[type=text] {
+ width: 130px !important;
+ background: url(/images/calendar.png) no-repeat 115px 3px;
+ margin: 0px !important;
+ border-radius:3px !important;
+ -moz-border-radius:3px !important;
+ font-size: 14px !important;
+}
+
+form input[type=submit],
+a.link_button_green,
+a.link_button_green_large {
+ background: url(/images/button-gradient.png);
+ color: white;
+ text-decoration: none;
+ padding: 5px 11px;
+ display: inline-block;
+ line-height: 18px;
+ border: solid 1px #69952F;
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ text-shadow: 1px 1px 0px #5B841D;
+ font-family: 'DeliciousRoman', Arial, sans-serif;
+ font-size: 18px;
+ cursor: pointer;
+ cursor: hand;
+}
+
+a.link_button_green_large {
+ background: url(/images/button-gradient-large.png);
+ font-size: 22px;
+ line-height: 22px;
+ padding-bottom: 7px;
+}
+
+@-moz-document url-prefix() {
+ form input[type=submit],
+ a.link_button_green {
+ padding: 2px 11px;
+ margin-top:1px;
+ }
+}
+
+form input[type=submit].small {
+ font-size: 15px;
+ padding: 4px 9px;
+ line-height: 10px;
+}
+
+ul.no_bullets {
+ list-style-type:none;
+ margin:0px 0px 30px 0px;
+ padding:0px;
+}
+
+ul.no_bullets li {
+ margin-bottom:6px;
+}
+
+#contact_preamble {
+ margin: 0px 0px 30px 0px;
+ width:auto;
+}
+
+#frontpage_search {
+ background:transparent;
+}
+
+#public_body_list #right_column ul {
+ padding: 0px 0px 20px 0px;
+ margin: 0px;
+ list-style: none;
+}
+
+div#twitter {
+ margin-top:30px;
+ background:#FFF;
+}
+
+div.blog_post p {
+ line-height:180%;
+}
+
+div.frontpage-box {
+ background: url(/images/stripes.png);
+ border: 1px solid #DEBEDD;
+ border-radius:5px;
+ -moz-border-radius:5px;
+ font-family:'DeliciousRoman', Arial, sans-serif;
+ color: #6B3C6A;
+ font-size:18px;
+ padding:15px 12px 0;
+ text-align:center;
+ width: 255px;
+ height: 210px;
+ float: left;
+}
+
+#frontpage-box-1 {
+ margin-right: 10px;
+ vertical-align: middle;
+}
+
+#frontpage-box-2 {
+ margin-right: 10px;
+}
+
+
+#bighand {
+ padding: 0;
+ margin: 0;
+ height: 210px;
+ background: url(/images/bighand.png) no-repeat scroll 0 bottom transparent;
+}
+
+#littlehand {
+ padding: 0;
+ margin: 0;
+ height: 210px;
+ background: url(/images/littlehand.png) repeat-x scroll 10px bottom transparent;
+}
+
+#frontpage-box-3 {
+}
+
+#frontpage-box-3 #search_form input[type=text] {
+ width: 10em;
+}
+
+#frontpage_examples p,
+#frontpage_examples ul {
+ text-align: left;
+}
+#examples_1 ul li {
+ border-bottom: 1px solid #ddd;
+ padding: 5px 0 5px 0;
+}
+
+#frontpage_examples .excerpt {
+ cursor: hand;
+ cursor: pointer;
+ background: url(/images/quote-marks.png) no-repeat;
+ padding: 0px 0px 0px 40px;
+ font-size:12px;
+ color:#444;
+ line-height:18px;
+ min-height: 30px;
+ font-style: italic;
+}
+
+#set_photo {
+ background: url(/images/defaultprofilepic.png)
+}
+
+div.correspondence,
+div.comment_in_request {
+ width: 600px;
+ background: url(/images/stripes-70.png);
+ border-width: 0px;
+ font-size: 13px;
+ border-radius: 6px;
+ -moz-border-radius: 6px;
+ padding: 4px 20px 0px 9px;
+}
+div.outgoing.correspondence {
+ background: url(/images/stripes-70-light.png);
+}
+
+div.comment_in_request {
+ background: url(/images/stripes-70-light2.png);
+}
+
+div.comment_in_request {
+ margin-left: 50px;
+ width: 550px;
+}
+
+div[id|="comment"] {
+ margin-left: 50px;
+}
+
+div[id|="comment"] h2 {
+ font-size: 1em;
+ text-align:right;
+}
+
+div[id|="comment"] p {
+ font-size: 13px;
+}
+
+.comment_in_request_text {
+ margin: 0px 0px 0px 10px;
+}
+
+.comment_in_request_text img.comment_quote {
+ display: none;
+}
+
+/* ---------- Frontpage ----------- */
+
+#frontpage_splash {
+ height: 375px;
+ margin-top: -12px;
+ margin-bottom: 20px;
+ width: 100%;
+ background: url(/images/flying-computer.png) no-repeat 175px bottom;
+}
+
+#frontpage_splash #left_column {
+ line-height: 40px;
+ margin-top: 66px;
+}
+
+#frontpage_splash h1 {
+ margin: 0px 0px 20px 0px;
+ font-family: 'DeliciousRoman', Arial, sans-serif;
+ font-size: 39px;
+ color: #6B3C6A;
+ font-weight:normal;
+}
+
+#frontpage_splash h1 strong {
+ font-family: 'DeliciousHeavyRegular', Arial, sans-serif;
+ font-size: 54px;
+ color: #93278F;
+ font-weight: normal;
+}
+
+#frontpage_splash h1 span {
+ font-family: Georgia;
+ font-style: italic;
+ font-weight:normal;
+ font-size: 25px;
+ color: #6B3C6A;
+}
+
+#frontpage_splash #right_column {
+ width: 265px;
+}
+
+#frontpage_splash h2 {
+ font-size: 26px;
+ font-weight:normal;
+ color: #6B3C6A;
+ font-family:'DeliciousRoman', Arial, sans-serif;
+ margin-bottom: 10px;
+ line-height: 28px;
+}
+
+#frontpage_splash h2 strong {
+ font-size: 31px;
+ color: #93278F;
+ font-family:'DeliciousBold', Arial, sans-serif;
+}
+
+#frontpage_splash h2 span {
+ color: #6B3C6A;
+ font-style: italic;
+ font-size: 19px;
+ font-family: Georgia;
+}
+
+#frontpage_splash #right_column input[type=text] {
+ width: 180px;
+}
+
+#frontpage_splash #frontpage_search_box {
+ margin-bottom: 30px;
+ margin-top: -10px;
+}
+
+#frontpage_splash #frontpage_right_to_know p {
+ line-height: 20px;
+}
+
+body.front h3 {
+ font-size: 28px;
+}
+
+/* ---------- Calendar theme ----------- */
+
+#ui-datepicker-div.ui-widget {
+ font-family: Arial, sans-serif;
+ color: #93278F;
+}
+
+#ui-datepicker-div .ui-datepicker-header,
+#ui-datepicker-div .ui-widget-header {
+ background: none;
+ border: solid 0px white;
+ color: #93278F;
+ font-family: 'DeliciousRoman';
+ font-size: 17px;
+ font-weight: normal;
+ line-height: 1.5em !important;
+}
+
+#ui-datepicker-div .ui-state-default {
+ background: #F2F2F2;
+ border: solid 0px #FFF;
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+}
+
+#ui-datepicker-div .ui-state-default:hover {
+ background: #DEB4D8;
+ color: #FFF;
+}
+
+#ui-datepicker-div .ui-state-active {
+ background: #D093C7;
+ color: #FFF;
+}
+
+#ui-datepicker-div .ui-icon-circle-triangle-w,
+#ui-datepicker-div .ui-icon-circle-triangle-e {
+ background-image: url(/images/ui-icons-theme.png);
+}
+
+#ui-datepicker-div .ui-datepicker-prev {
+ margin-top: 2px;
+ opacity: 0.5;
+}
+
+#ui-datepicker-div .ui-datepicker-prev-hover {
+ left: 2px;
+ top: 2px;
+ border: none;
+ background:#FFF;
+ cursor:pointer;
+ opacity: 1;
+}
+
+#ui-datepicker-div .ui-datepicker-next {
+ margin-top: 2px;
+ opacity: 0.5;
+}
+
+#ui-datepicker-div .ui-datepicker-next-hover {
+ right: 2px;
+ top: 2px;
+ border: none;
+ background:#FFF;
+ cursor:pointer;
+ opacity: 1;
+}
+
+#other-country-notice {
+ position: absolute;
+}
+
+body.front #other-country-notice,
+#other-country-notice {
+ display: none;
+}
+
+p.public-body-name-prefix {
+ color: #DEB4D8;
+ margin-top: 15px;
+ margin-bottom: -15px;
+}
+
+#authority_preview .public-body-name-prefix,
+#authority_preview #list-filter,
+#authority_preview h2.foi_results {
+ display: none;
+}
+
+p.subtitle {
+ font-size: 18px;
+ font-family: 'DeliciousRoman';
+ font-style: normal;
+ color: #6B3C7F;
+}
+
+/*------------- Other countries notice ---------------*/
+#other-country-notice {
+ background: #93278F;
+ color: #FFF;
+ font-size: 16px;
+ width: 100%;
+ z-index: 999;
+ display: block;
+ position: absolute;
+ top: 0px;
+ opacity: 0.9;
+}
+
+#other-country-notice a {
+ color: #FFF;
+}
+
+.close-button {
+ color: white;
+ text-decoration: none;
+ display: inline-block;
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ cursor: pointer;
+ cursor: hand;
+ background: url(/images/small-white-cross.png) no-repeat;
+ padding: 10px 0;
+ width: 15px;
+ height: 15px;
+ border: solid 0px #FFF;
+ text-indent: -999px;
+ overflow:hidden;
+ float:right;
+
+}
+/*------------- Link box ---------------*/
+#link_box {
+ position: absolute;
+ padding: 5px;
+ text-align: left;
+ background-color: white;
+ z-index: 999;
+ opacity: 0.9;
+ border-radius: 6px;
+ -moz-border-radius: 6px;
+ border: 1px solid #93278F;
+ display: none;
+}
+
+#link_box .close-button {
+ background-color: #93278F;
+ padding: 0;
+ margin-left: 15px;
+}
+
+a.link_to_this {
+ display: inline-block;
+ width: 20px;
+ letter-spacing: -1000em;
+ overflow: hidden;
+ background: url(/images/link-icon.png) no-repeat;
+}
+
+/*---------- From tweaks ----------*/
+#to_public_body {
+ display: block;
+ margin-bottom: 15px;
+}
+
+.fieldWithErrors {
+ background: none;
+ border: solid 0px #FFF;
+}
+
+.fieldWithErrors textarea,
+.fieldWithErrors input {
+ border: solid 1px Red !important;
+}
+
+.errorExplanation {
+ border-radius: 6px;
+ -moz-border-radius: 6px;
+ font-size: 12px;
+ font-weight: normal;
+ width: 554px;
+ margin: 20px 0px 30px 0px;
+}
+
+#notice, .describe_state_form, #other_recipients {
+ font-size: 12px;
+ font-weight: normal;
+ padding: 10px 20px 10px 20px;
+ background: #E9FDD3 !important;
+ color: #517704;
+ border-color: #B0CA86;
+ border-radius: 6px;
+ -moz-border-radius: 6px;
+ margin: 15px 0px;
+}
+
+.describe_state_form hr {
+ border-color: #B0CA86;
+ border-top: 0px;
+ border-style: dotted;
+ margin: 20px 0px;
+}
+
+.describe_state_form {
+ color: #333;
+}
+
+#notice p:first-child {
+ margin-top: 0px;
+}
+
+#notice p:last-child {
+ margin-bottom: 0px;
+}
+
+div.correspondence p.preview_subject {
+ font-family: 'DeliciousRoman';
+ font-size: 18px !important;
+ margin-left: 10px;
+ color: #6B3C7F;
+ line-height: 25px;
+}
+
+div.correspondence p.preview_subject strong {
+ color: #6B3C7F;
+}
+
+#preview_form ul {
+ margin: 0px;
+ padding: 1px 32px 10px;
+}
+
+#preview_form ul li {
+ margin: 10px 0px;
+}
+
+div#show_response_view p.event_actions {
+ display: none;
+} \ No newline at end of file
diff --git a/script/handle-mail-replies b/script/handle-mail-replies
new file mode 100755
index 000000000..9b1fb5b29
--- /dev/null
+++ b/script/handle-mail-replies
@@ -0,0 +1,149 @@
+#!/usr/bin/ruby
+
+# Handle email responses sent to us.
+#
+# This script is invoked as a pipe command, i.e. with the raw email message on stdin.
+# - If a message is identified as a permanent bounce, the user is marked as having a
+# bounced address, and will not be sent any more messages.
+# - If a message is identified as an out-of-office autoreply, it is discarded.
+# - Any other messages are forwarded to config.get("FORWARD_NONBOUNCE_RESPONSES_TO")
+
+
+# We want to avoid loading rails unless we need it, so we start by just loading the
+# config file ourselves.
+$alaveteli_dir = File.join(File.dirname(__FILE__), '..')
+$:.push(File.join($alaveteli_dir, "commonlib", "rblib"))
+load "config.rb"
+MySociety::Config.set_file(File.join($alaveteli_dir, 'config', 'general'), true)
+MySociety::Config.load_default
+
+$:.push(File.join($alaveteli_dir, "vendor", "rails", "actionmailer", "lib", "action_mailer", "vendor", "tmail-1.2.7"))
+require 'tmail'
+
+def main(in_test_mode)
+ Dir.chdir($alaveteli_dir) do
+ raw_message = $stdin.read
+ begin
+ message = TMail::Mail.parse(raw_message)
+ rescue
+ # Error parsing message. Just pass it on, to be on the safe side.
+ forward_on(raw_message) unless in_test_mode
+ return 0
+ end
+
+ pfas = permanently_failed_addresses(message)
+ if !pfas.empty?
+ if in_test_mode
+ puts pfas
+ else
+ pfas.each do |pfa|
+ record_bounce(pfa, raw_message)
+ end
+ end
+ return 1
+ end
+
+ if is_oof? message
+ # Discard out-of-office messages
+ return 2
+ end
+
+ # Otherwise forward the message on
+ forward_on(raw_message) unless in_test_mode
+ return 0
+ end
+end
+
+def permanently_failed_addresses(message)
+ if message.header_string("Return-Path") == "<>"
+ # Some sort of auto-response
+
+ # Check for Exim’s X-Failed-Recipients header
+ failed_recipients = message.header_string("X-Failed-Recipients")
+ if !failed_recipients.nil?
+ # The X-Failed-Recipients header contains the email address that failed
+ # Check for the words "This is a permanent error." in the body, to indicate
+ # a permanent failure
+ if message.body =~ /This is a permanent error./
+ return failed_recipients.split(/,\s*/)
+ end
+ end
+
+ # Next, look for multipart/report
+ if message.content_type == "multipart/report"
+ permanently_failed_recipients = []
+ message.parts.each do |part|
+ if part.content_type == "message/delivery-status"
+ sections = part.body.split(/\r?\n\r?\n/)
+ # The first section is a generic header; subsequent sections
+ # represent a particular recipient. Since we
+ sections[1..-1].each do |section|
+ if section !~ /^Status: (\d)/ || $1 != '5'
+ # Either we couldn’t find the Status field, or it was a transient failure
+ break
+ end
+ if section =~ /^Final-Recipient: rfc822;(.+)/
+ permanently_failed_recipients.push($1)
+ end
+ end
+ end
+ end
+ if !permanently_failed_recipients.empty?
+ return permanently_failed_recipients
+ end
+ end
+ end
+
+ return []
+end
+
+def is_oof?(message)
+ # Check for out-of-office
+
+ if message.header_string("X-POST-MessageClass") == "9; Autoresponder"
+ return true
+ end
+
+ subject = message.header_string("Subject").downcase
+ if message.header_string("Return-Path") == "<>"
+ if subject.start_with? "out of office: "
+ return true
+ end
+ if subject.start_with? "automatic reply: "
+ return true
+ end
+ end
+
+ if subject.start_with? "out of office autoreply:"
+ return true
+ end
+ if subject == "out of office"
+ return true
+ end
+ if subject.end_with? "is out of the office"
+ return true
+ end
+ return false
+end
+
+def forward_on(raw_message)
+ forward_non_bounces_to = MySociety::Config.get("FORWARD_NONBOUNCE_RESPONSES_TO", "user-support@localhost")
+ IO.popen("/usr/sbin/sendmail -i #{forward_non_bounces_to}", "w") do |f|
+ f.write(raw_message);
+ f.close;
+ end
+end
+
+def load_rails
+ require File.join('config', 'boot')
+ require RAILS_ROOT + '/config/environment'
+end
+
+def record_bounce(email_address, bounce_message)
+ load_rails
+ User.record_bounce_for_email(email_address, bounce_message)
+end
+
+in_test_mode = (ARGV[0] == "--test")
+status = main(in_test_mode)
+exit(status) if in_test_mode
diff --git a/script/mailin b/script/mailin
index 733eaff3d..b4d77f7a4 100755
--- a/script/mailin
+++ b/script/mailin
@@ -2,18 +2,18 @@
# Wire this script to receive incoming email for request responses.
-INPUT=/tmp/foi-mailin-mail-$RANDOM$RANDOM$RANDOM$RANDOM.txt
-OUTPUT=/tmp/foi-mailin-output-$RANDOM$RANDOM$RANDOM$RANDOM.txt
+INPUT=$(mktemp -t foi-mailin-mail-XXXXXXXX)
+OUTPUT=$(mktemp -t foi-mailin-output-XXXXXXXX)
-cat >$INPUT
+# Read the email message from stdin, and write it to the file $INPUT
+cat >"$INPUT"
-cd `dirname $0`
-cd ../
+cd "$(dirname "$0")"/..
source commonlib/shlib/deployfns
read_conf config/general
-(cat $INPUT | ./script/runner 'RequestMailer.receive(STDIN.read)') >$OUTPUT 2>&1
+script/runner 'RequestMailer.receive(STDIN.read)' <"$INPUT" >"$OUTPUT" 2>&1
ERROR_CODE=$?
if [ ! "$ERROR_CODE" = "0" ]
then
@@ -21,17 +21,15 @@ then
# send error to administators (use mutt for MIME encoding)
SUBJ="Mail import error for $OPTION_DOMAIN"
- BODY="There was an error code $ERROR_CODE returned by the RequestMailer.receive command in script/mailin. See attached for details. This might be quite serious, such as the database was down, or might be an email with corrupt headers that Rails is choking on. The email was returned with an exit code 75, which for Exim at least means the MTA will try again later. A well configured installation of this code will separately have had Exim make a backup copy of the email in a separate mailbox, just in case."
- echo "$BODY" | /usr/bin/mutt -s "$SUBJ" -a $OUTPUT $INPUT -- $OPTION_CONTACT_EMAIL
+ BODY="There was an error code $ERROR_CODE returned by the RequestMailer.receive command in script/mailin. See attached for details. This might be quite serious, such as the database was down, or might be an email with corrupt headers that Rails is choking on. We returned the email with an exit code 75, which for Exim at least instructs the MTA to try again later. A well configured installation of this code will separately have had Exim make a backup copy of the email in a separate mailbox, just in case."
+ /usr/bin/mutt -s "$SUBJ" -a "$OUTPUT" "$INPUT" -- "$OPTION_CONTACT_EMAIL" <<<"$BODY"
# tell exim error was temporary, so try again later (no point bouncing message to authority)
- rm -f $OUTPUT
- rm -f $INPUT
+ rm -f "$INPUT" "$OUTPUT"
exit 75
fi
-cat $OUTPUT
-rm -f $OUTPUT
-rm -f $INPUT
+cat "$OUTPUT"
+rm -f "$INPUT" "$OUTPUT"
exit 0
diff --git a/script/rails-post-deploy b/script/rails-post-deploy
index 1fe56212c..df9f67528 100755
--- a/script/rails-post-deploy
+++ b/script/rails-post-deploy
@@ -44,6 +44,13 @@ else
fi
mkdir -p log
fi
+# link the "downloads" directory in the cache to somewhere it can be served
+if [ ! -e $APP_DIR/public/download ]
+then
+ mkdir -p $APP_DIR/cache/zips/download
+ ln -s $APP_DIR/cache/zips/download $APP_DIR/public/
+fi
+
cd log
touch development.log fastcgi.crash.log production.log test.log
cd ..
diff --git a/spec/controllers/admin_public_body_controller_spec.rb b/spec/controllers/admin_public_body_controller_spec.rb
index 357564211..0a90cd64b 100644
--- a/spec/controllers/admin_public_body_controller_spec.rb
+++ b/spec/controllers/admin_public_body_controller_spec.rb
@@ -52,6 +52,12 @@ describe AdminPublicBodyController, "when administering public bodies" do
get :show, :id => 2
session[:using_admin].should == 1
end
+end
+
+describe AdminPublicBodyController, "when administering public bodies and paying attention to authentication" do
+
+ integrate_views
+ fixtures :public_bodies, :public_body_translations
it "disallows non-authenticated users to do anything" do
@request.env["HTTP_AUTHORIZATION"] = ""
@@ -82,6 +88,19 @@ describe AdminPublicBodyController, "when administering public bodies" do
PublicBody.count.should == 1
session[:using_admin].should == 1
end
+ it "forces authorisation when password and username set" do
+ config = MySociety::Config.load_default()
+ config['ADMIN_USERNAME'] = 'biz'
+ config['ADMIN_PASSWORD'] = 'fuz'
+ @request.env["HTTP_AUTHORIZATION"] = ""
+ PublicBody.count.should == 2
+ basic_auth_login(@request, "baduser", "badpassword")
+ post :destroy, { :id => 3 }
+ response.code.should == "401"
+ PublicBody.count.should == 2
+ session[:using_admin].should == nil
+ end
+
end
@@ -109,28 +128,34 @@ describe AdminPublicBodyController, "when administering public bodies with i18n"
get :show, {:id => 2, :locale => "es" }
end
- it "creates a new public body" do
- I18n.default_locale = :es
- PublicBody.count.should == 2
- post :create, { :public_body => { :name => "New Quango", :short_name => "", :tag_string => "blah", :request_email => 'newquango@localhost', :last_edit_comment => 'From test code' } }
- PublicBody.count.should == 3
- I18n.default_locale = :en
- end
-
it "edits a public body" do
- I18n.default_locale = :es
- get :edit, {:id => 3, :locale => :es}
- response.body.should include('Baguette')
- I18n.default_locale = :en
+ get :edit, {:id => 3, :locale => :en}
+
+ # When editing a body, the controller returns all available translations
+ assigns[:public_body].translation("es").name.should == 'El Department for Humpadinking'
+ assigns[:public_body].name.should == 'Department for Humpadinking'
+ response.should render_template('edit')
end
it "saves edits to a public body" do
- I18n.default_locale = :es
- pb = PublicBody.find(id=3)
- pb.name.should == "El Department for Humpadinking"
- post :update, { :id => 3, :public_body => { :name => "Renamed", :short_name => "", :tag_string => "some tags", :request_email => 'edited@localhost', :last_edit_comment => 'From test code' }}
- response.flash[:notice].should include('successful')
- I18n.default_locale = :en
+ PublicBody.with_locale(:es) do
+ pb = PublicBody.find(id=3)
+ pb.name.should == "El Department for Humpadinking"
+ post :update, {
+ :id => 3,
+ :public_body => {
+ :name => "Department for Humpadinking",
+ :short_name => "",
+ :tag_string => "some tags",
+ :request_email => 'edited@localhost',
+ :last_edit_comment => 'From test code',
+ :translated_versions => {
+ 3 => {:locale => "es", :name => "Renamed",:short_name => "", :request_email => 'edited@localhost'}
+ }
+ }
+ }
+ response.flash[:notice].should include('successful')
+ end
pb = PublicBody.find(public_bodies(:humpadink_public_body).id)
PublicBody.with_locale(:es) do
@@ -148,3 +173,51 @@ describe AdminPublicBodyController, "when administering public bodies with i18n"
end
end
+
+describe AdminPublicBodyController, "when creating public bodies with i18n" do
+ integrate_views
+ fixtures :public_bodies, :public_body_translations
+
+ before do
+ username = MySociety::Config.get('ADMIN_USERNAME', '')
+ password = MySociety::Config.get('ADMIN_PASSWORD', '')
+ basic_auth_login @request
+
+ ActionController::Routing::Routes.filters.clear # don't auto-insert locale, complicates assertions
+ end
+
+ it "creates a new public body in one locale" do
+ PublicBody.count.should == 2
+ post :create, { :public_body => { :name => "New Quango", :short_name => "", :tag_string => "blah", :request_email => 'newquango@localhost', :last_edit_comment => 'From test code' } }
+ PublicBody.count.should == 3
+
+ body = PublicBody.find_by_name("New Quango")
+ response.should redirect_to(:controller=>'admin_public_body', :action=>'show', :id=>body.id)
+ end
+
+ it "creates a new public body with multiple locales" do
+ PublicBody.count.should == 2
+ post :create, {
+ :public_body => {
+ :name => "New Quango", :short_name => "", :tag_string => "blah", :request_email => 'newquango@localhost', :last_edit_comment => 'From test code',
+ :translated_versions => [{ :locale => "es", :name => "Mi Nuevo Quango", :short_name => "", :request_email => 'newquango@localhost' }]
+ }
+ }
+ PublicBody.count.should == 3
+
+ body = PublicBody.find_by_name("New Quango")
+ body.translations.map {|t| t.locale.to_s}.sort.should == ["en", "es"]
+ PublicBody.with_locale(:en) do
+ body.name.should == "New Quango"
+ body.url_name.should == "new_quango"
+ body.first_letter.should == "N"
+ end
+ PublicBody.with_locale(:es) do
+ body.name.should == "Mi Nuevo Quango"
+ body.url_name.should == "mi_nuevo_quango"
+ body.first_letter.should == "M"
+ end
+
+ response.should redirect_to(:controller=>'admin_public_body', :action=>'show', :id=>body.id)
+ end
+end
diff --git a/spec/controllers/admin_request_controller_spec.rb b/spec/controllers/admin_request_controller_spec.rb
index 423c2fb49..6f9af0525 100644
--- a/spec/controllers/admin_request_controller_spec.rb
+++ b/spec/controllers/admin_request_controller_spec.rb
@@ -71,7 +71,7 @@ describe AdminRequestController, "when administering the holding pen" do
post :redeliver_incoming, :redeliver_incoming_message_id => new_im.id, :url_title => ir.url_title
ir = InfoRequest.find_by_url_title(ir.url_title)
ir.incoming_messages.length.should == 2
- response.should redirect_to('http://test.host/admin/request/show/101')
+ response.should redirect_to(:controller=>'admin_request', :action=>'show', :id=>101)
InfoRequest.holding_pen_request.incoming_messages.length.should == 0
end
diff --git a/spec/controllers/general_controller_spec.rb b/spec/controllers/general_controller_spec.rb
index 3640a8148..1ffbda90d 100644
--- a/spec/controllers/general_controller_spec.rb
+++ b/spec/controllers/general_controller_spec.rb
@@ -64,7 +64,7 @@ describe GeneralController, "when searching" do
it "should redirect from search query URL to pretty URL" do
post :search_redirect, :query => "mouse" # query hidden in POST parameters
- response.should redirect_to(:action => 'search', :combined => "mouse") # URL /search/:query
+ response.should redirect_to(:action => 'search', :combined => "mouse", :view => "requests") # URL /search/:query/all
end
describe "when using different locale settings" do
@@ -122,6 +122,34 @@ describe GeneralController, "when searching" do
end
+ it "should filter results based on end of URL being 'all'" do
+ get :search, :combined => ['"bob"', "all"]
+ assigns[:xapian_requests].results.size.should == 2
+ assigns[:xapian_users].results.size.should == 1
+ assigns[:xapian_bodies].results.size.should == 0
+ end
+
+ it "should filter results based on end of URL being 'users'" do
+ get :search, :combined => ['"bob"', "users"]
+ assigns[:xapian_requests].should == nil
+ assigns[:xapian_users].results.size.should == 1
+ assigns[:xapian_bodies].should == nil
+ end
+
+ it "should filter results based on end of URL being 'requests'" do
+ get :search, :combined => ['"bob"', "requests"]
+ assigns[:xapian_requests].results.size.should == 2
+ assigns[:xapian_users].should == nil
+ assigns[:xapian_bodies].should == nil
+ end
+
+ it "should filter results based on end of URL being 'bodies'" do
+ get :search, :combined => ['"quango"', "bodies"]
+ assigns[:xapian_requests].should == nil
+ assigns[:xapian_users].should == nil
+ assigns[:xapian_bodies].results.size.should == 1
+ end
+
it "should show help when searching for nothing" do
get :search_redirect, :query => nil
response.should render_template('search')
diff --git a/spec/controllers/public_body_controller_spec.rb b/spec/controllers/public_body_controller_spec.rb
index 0050678d2..c5c9d60e1 100644
--- a/spec/controllers/public_body_controller_spec.rb
+++ b/spec/controllers/public_body_controller_spec.rb
@@ -7,47 +7,54 @@ describe PublicBodyController, "when showing a body" do
fixtures :public_bodies, :public_body_translations, :public_body_versions
it "should be successful" do
- get :show, :url_name => "dfh"
+ get :show, :url_name => "dfh", :view => 'all'
response.should be_success
end
it "should render with 'show' template" do
- get :show, :url_name => "dfh"
+ get :show, :url_name => "dfh", :view => 'all'
response.should render_template('show')
end
it "should assign the body" do
- get :show, :url_name => "dfh"
+ get :show, :url_name => "dfh", :view => 'all'
assigns[:public_body].should == public_bodies(:humpadink_public_body)
end
+ it "should assign the requests" do
+ get :show, :url_name => "tgq", :view => 'all'
+ assigns[:xapian_requests].results.count.should == 2
+ get :show, :url_name => "tgq", :view => 'successful'
+ assigns[:xapian_requests].results.count.should == 0
+ end
+
it "should assign the body using different locale from that used for url_name" do
PublicBody.with_locale(:es) do
- get :show, {:url_name => "dfh"}
+ get :show, {:url_name => "dfh", :view => 'all'}
assigns[:public_body].notes.should == "Baguette"
end
end
it "should assign the body using same locale as that used in url_name" do
PublicBody.with_locale(:es) do
- get :show, {:url_name => "edfh"}
+ get :show, {:url_name => "edfh", :view => 'all'}
assigns[:public_body].notes.should == "Baguette"
end
end
it "should redirect use to the relevant locale even when url_name is for a different locale" do
ActionController::Routing::Routes.filters.clear
- get :show, {:url_name => "edfh"}
+ get :show, {:url_name => "edfh", :view => 'all'}
response.should redirect_to "http://test.host/body/dfh"
end
it "should redirect to newest name if you use historic name of public body in URL" do
- get :show, :url_name => "hdink"
+ get :show, :url_name => "hdink", :view => 'all'
response.should redirect_to(:controller => 'public_body', :action => 'show', :url_name => "dfh")
end
it "should redirect to lower case name if you use mixed case name in URL" do
- get :show, :url_name => "dFh"
+ get :show, :url_name => "dFh", :view => 'all'
response.should redirect_to(:controller => 'public_body', :action => 'show', :url_name => "dfh")
end
end
@@ -68,7 +75,17 @@ describe PublicBodyController, "when listing bodies" do
assigns[:public_bodies].should == [ public_bodies(:humpadink_public_body), public_bodies(:geraldine_public_body) ]
assigns[:tag].should == "all"
- assigns[:description].should == "all"
+ assigns[:description].should == ""
+ end
+
+ it "should support simple searching of bodies by title" do
+ get :list, :public_body_query => 'quango'
+ assigns[:public_bodies].should == [ public_bodies(:geraldine_public_body) ]
+ end
+
+ it "should support simple searching of bodies by notes" do
+ get :list, :public_body_query => 'Albatross'
+ assigns[:public_bodies].should == [ public_bodies(:humpadink_public_body) ]
end
it "should list bodies in alphabetical order with different locale" do
@@ -77,7 +94,7 @@ describe PublicBodyController, "when listing bodies" do
response.should render_template('list')
assigns[:public_bodies].should == [ public_bodies(:geraldine_public_body), public_bodies(:humpadink_public_body) ]
assigns[:tag].should == "all"
- assigns[:description].should == "all"
+ assigns[:description].should == ""
I18n.default_locale = :en
end
@@ -96,7 +113,7 @@ describe PublicBodyController, "when listing bodies" do
get :list
response.should render_template('list')
- assigns[:public_bodies].should == [ public_bodies(:humpadink_public_body), public_bodies(:geraldine_public_body) ]
+ assigns[:public_bodies].count.should == 2
end
@@ -128,7 +145,7 @@ describe PublicBodyController, "when showing JSON version for API" do
fixtures :public_bodies, :public_body_translations
it "should be successful" do
- get :show, :url_name => "dfh", :format => "json"
+ get :show, :url_name => "dfh", :format => "json", :view => 'all'
pb = JSON.parse(response.body)
pb.class.to_s.should == 'Hash'
@@ -139,6 +156,41 @@ describe PublicBodyController, "when showing JSON version for API" do
end
+describe PublicBodyController, "when doing type ahead searches" do
+ fixtures :info_requests, :info_request_events, :public_bodies, :public_body_translations, :users, :incoming_messages, :raw_emails, :outgoing_messages, :comments
+
+ it "should return nothing for the empty query string" do
+ get :search_typeahead, :q => ""
+ response.should render_template('public_body/_search_ahead')
+ assigns[:xapian_requests].results.size.should == 0
+ end
+
+ it "should return a body matching the given keyword, but not users with a matching description" do
+ get :search_typeahead, :q => "Geraldine"
+ response.should render_template('public_body/_search_ahead')
+ assigns[:xapian_requests].results.size.should == 1
+ assigns[:xapian_requests].results[0][:model].name.should == public_bodies(:geraldine_public_body).name
+ end
+ it "should return all requests matching any of the given keywords" do
+ get :search_typeahead, :q => "Geraldine Humpadinking"
+ response.should render_template('public_body/_search_ahead')
+ assigns[:xapian_requests].results.size.should == 2
+ assigns[:xapian_requests].results[0][:model].name.should == public_bodies(:humpadink_public_body).name
+ assigns[:xapian_requests].results[1][:model].name.should == public_bodies(:geraldine_public_body).name
+ end
+ it "should return requests matching the given keywords in any of their locales" do
+ get :search_typeahead, :q => "baguette" # part of the spanish notes
+ response.should render_template('public_body/_search_ahead')
+ assigns[:xapian_requests].results.size.should == 1
+ assigns[:xapian_requests].results[0][:model].name.should == public_bodies(:humpadink_public_body).name
+ end
+ it "should return partial matches" do
+ get :search_typeahead, :q => "geral" # 'geral' for 'Geraldine'
+ response.should render_template('public_body/_search_ahead')
+ assigns[:xapian_requests].results.size.should == 1
+ assigns[:xapian_requests].results[0][:model].name.should == public_bodies(:geraldine_public_body).name
+ end
+end
diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb
index f69cf414c..494713a4a 100644
--- a/spec/controllers/request_controller_spec.rb
+++ b/spec/controllers/request_controller_spec.rb
@@ -1,7 +1,3 @@
-# £2k p/a
-# talk about margins
-#
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
require 'json'
@@ -24,13 +20,29 @@ describe RequestController, "when listing recent requests" do
response.should render_template('list')
end
+ it "should filter requests" do
+ get :list, :view => 'all'
+ assigns[:list_results].size.should == 2
+ get :list, :view => 'successful'
+ assigns[:list_results].size.should == 0
+ end
+
+ it "should filter requests by date" do
+ get :list, :view => 'all', :request_date_before => '13/10/2007'
+ assigns[:list_results].size.should == 1
+ get :list, :view => 'all', :request_date_after => '13/10/2007'
+ assigns[:list_results].size.should == 1
+ get :list, :view => 'all', :request_date_after => '10/10/2007', :request_date_before => '01/01/2010'
+ assigns[:list_results].size.should == 2
+ end
+
it "should assign the first page of results" do
xap_results = mock_model(ActsAsXapian::Search,
:results => (1..25).to_a.map { |m| { :model => m } },
:matches_estimated => 103)
InfoRequest.should_receive(:full_search).
- with([InfoRequestEvent],"variety:sent", "created_at", anything, anything, anything, anything).
+ with([InfoRequestEvent]," variety:sent", "created_at", anything, anything, anything, anything).
and_return(xap_results)
get :list, :view => 'recent'
assigns[:list_results].size.should == 25
@@ -149,7 +161,7 @@ describe RequestController, "when showing one request" do
lambda {
get :get_attachment, :incoming_message_id => ir.incoming_messages[1].id, :id => ir.id, :part => 2,
:file_name => ['http://trying.to.hack']
- }.should raise_error(RuntimeError)
+ }.should raise_error(ActiveRecord::RecordNotFound)
end
it "should censor attachments downloaded as binary" do
@@ -204,7 +216,28 @@ describe RequestController, "when showing one request" do
response.body.should have_tag("p.attachment strong", /goodbye.txt/m)
end
-
+ it "should make a zipfile available, which has a different URL when it changes" do
+ ir = info_requests(:fancy_dog_request)
+ session[:user_id] = ir.user.id # bob_smith_user
+ receive_incoming_mail('incoming-request-two-same-name.email', ir.incoming_email)
+ title = 'why_do_you_have_such_a_fancy_dog'
+ get :download_entire_request, :url_title => title
+ assigns[:url_path].should have_text(/#{title}.zip$/)
+ old_path = assigns[:url_path]
+ response.location.should have_text(/#{assigns[:url_path]}$/)
+ zipfile = Zip::ZipFile.open(File.join(File.dirname(__FILE__), "../../cache/zips", old_path)) { |zipfile|
+ zipfile.count.should == 2
+ }
+ receive_incoming_mail('incoming-request-attachment-unknown-extension.email', ir.incoming_email)
+ get :download_entire_request, :url_title => title
+ assigns[:url_path].should have_text(/#{title}.zip$/)
+ response.location.should have_text(/#{assigns[:url_path]}/)
+ assigns[:url_path].should_not == old_path
+ zipfile = Zip::ZipFile.open(File.join(File.dirname(__FILE__), "../../cache/zips", assigns[:url_path])) { |zipfile|
+ zipfile.count.should == 4
+zipfile.entries.each {|x| puts x.name}
+ }
+ end
end
end
@@ -296,6 +329,33 @@ end
# response.headers["Status"].should == "404 Not Found"
# end
+describe RequestController, "when searching for an authority" do
+ fixtures :public_bodies, :users
+
+ # Whether or not sign-in is required for this step is configurable,
+ # so we make sure we're logged in, just in case
+ before do
+ @user = users(:bob_smith_user)
+ end
+
+ it "should return nothing for the empty query string" do
+ session[:user_id] = @user.id
+ get :select_authority, :query => ""
+
+ response.should render_template('select_authority')
+ assigns[:xapian_requests].results.size == 0
+ end
+
+ it "should return matching bodies" do
+ session[:user_id] = @user.id
+ get :select_authority, :query => "Quango"
+
+ response.should render_template('select_authority')
+ assigns[:xapian_requests].results.size == 1
+ assigns[:xapian_requests].results[0][:model].name.should == public_bodies(:geraldine_public_body).name
+ end
+end
+
describe RequestController, "when creating a new request" do
integrate_views
fixtures :info_requests, :outgoing_messages, :public_bodies, :public_body_translations, :users
@@ -337,7 +397,20 @@ describe RequestController, "when creating a new request" do
response.should render_template('new')
end
+ it "should redirect to sign in page when input is good and nobody is logged in" do
+ params = { :info_request => { :public_body_id => @body.id,
+ :title => "Why is your quango called Geraldine?", :tag_string => "" },
+ :outgoing_message => { :body => "This is a silly letter. It is too short to be interesting." },
+ :submitted_new_request => 1, :preview => 0
+ }
+ post :new, params
+ post_redirect = PostRedirect.get_last_post_redirect
+ response.should redirect_to(:controller => 'user', :action => 'signin', :token => post_redirect.token)
+ # post_redirect.post_params.should == params # XXX get this working. there's a : vs '' problem amongst others
+ end
+
it "should show preview when input is good" do
+ session[:user_id] = @user.id
post :new, { :info_request => { :public_body_id => @body.id,
:title => "Why is your quango called Geraldine?", :tag_string => "" },
:outgoing_message => { :body => "This is a silly letter. It is too short to be interesting." },
@@ -355,18 +428,6 @@ describe RequestController, "when creating a new request" do
response.should render_template('new')
end
- it "should redirect to sign in page when input is good and nobody is logged in" do
- params = { :info_request => { :public_body_id => @body.id,
- :title => "Why is your quango called Geraldine?", :tag_string => "" },
- :outgoing_message => { :body => "This is a silly letter. It is too short to be interesting." },
- :submitted_new_request => 1, :preview => 0
- }
- post :new, params
- post_redirect = PostRedirect.get_last_post_redirect
- response.should redirect_to(:controller => 'user', :action => 'signin', :token => post_redirect.token)
- # post_redirect.post_params.should == params # XXX get this working. there's a : vs '' problem amongst others
- end
-
it "should create the request and outgoing message, and send the outgoing message by email, and redirect to request page when input is good and somebody is logged in" do
session[:user_id] = @user.id
post :new, :info_request => { :public_body_id => @body.id,
@@ -438,6 +499,7 @@ describe RequestController, "when making a new request" do
@user.stub!(:get_undescribed_requests).and_return([])
@user.stub!(:can_leave_requests_undescribed?).and_return(false)
@user.stub!(:can_file_requests?).and_return(true)
+ @user.stub!(:locale).and_return("en")
User.stub!(:find).and_return(@user)
@body = mock_model(PublicBody, :id => 314, :eir_only? => false, :is_requestable? => true, :name => "Test Quango")
@@ -498,6 +560,22 @@ describe RequestController, "when viewing an individual response for reply/follo
response.should render_template('show_response')
end
+ it "should offer the opportunity to reply to the main address" do
+ session[:user_id] = users(:bob_smith_user).id
+ get :show_response, :id => info_requests(:fancy_dog_request).id, :incoming_message_id => incoming_messages(:useless_incoming_message)
+ response.body.should have_tag("div#other_recipients ul li", /the main FOI contact address for/)
+ end
+
+ it "should offer an opportunity to reply to another address" do
+ session[:user_id] = users(:bob_smith_user).id
+ ir = info_requests(:fancy_dog_request)
+ ir.allow_new_responses_from = "anybody"
+ ir.save!
+ receive_incoming_mail('incoming-request-plain.email', ir.incoming_email, "Frob <frob@bonce.com>")
+ get :show_response, :id => ir.id, :incoming_message_id => incoming_messages(:useless_incoming_message)
+ response.body.should have_tag("div#other_recipients ul li", /Frob/)
+ end
+
it "should not show individual responses if request hidden, even if request owner" do
ir = info_requests(:fancy_dog_request)
ir.prominence = 'hidden'
@@ -735,18 +813,16 @@ describe RequestController, "when classifying an information request" do
response.should redirect_to(:controller => 'help', :action => 'unhappy', :url_title => @dog_request.url_title)
end
- describe "when using custom statuses from the theme" do
+ it "knows about extended states" do
InfoRequest.send(:require, File.expand_path(File.join(File.dirname(__FILE__), '..', 'models', 'customstates')))
InfoRequest.send(:include, InfoRequestCustomStates)
InfoRequest.class_eval('@@custom_states_loaded = true')
RequestController.send(:require, File.expand_path(File.join(File.dirname(__FILE__), '..', 'models', 'customstates')))
RequestController.send(:include, RequestControllerCustomStates)
RequestController.class_eval('@@custom_states_loaded = true')
- it "knows about extended states" do
- Time.stub!(:now).and_return(Time.utc(2007, 11, 10, 00, 01))
- post_status('deadline_extended')
- flash[:notice].should == 'Authority has requested extension of the deadline.'
- end
+ Time.stub!(:now).and_return(Time.utc(2007, 11, 10, 00, 01))
+ post_status('deadline_extended')
+ flash[:notice].should == 'Authority has requested extension of the deadline.'
end
end
@@ -1309,5 +1385,36 @@ describe RequestController, "when showing JSON version for API" do
end
+describe RequestController, "when doing type ahead searches" do
+ fixtures :info_requests, :info_request_events, :public_bodies, :public_body_translations, :users, :incoming_messages, :raw_emails, :outgoing_messages, :comments
+
+ it "should return nothing for the empty query string" do
+ get :search_typeahead, :q => ""
+ response.should render_template('request/_search_ahead.rhtml')
+ assigns[:xapian_requests].results.size.should == 0
+ end
+
+ it "should return a request matching the given keyword, but not users with a matching description" do
+ get :search_typeahead, :q => "chicken"
+ response.should render_template('request/_search_ahead.rhtml')
+ assigns[:xapian_requests].results.size.should == 1
+ assigns[:xapian_requests].results[0][:model].title.should == info_requests(:naughty_chicken_request).title
+ end
+
+ it "should return all requests matching any of the given keywords" do
+ get :search_typeahead, :q => "money dog"
+ response.should render_template('request/_search_ahead.rhtml')
+ assigns[:xapian_requests].results.size.should == 2
+ assigns[:xapian_requests].results[0][:model].title.should == info_requests(:fancy_dog_request).title
+ assigns[:xapian_requests].results[1][:model].title.should == info_requests(:naughty_chicken_request).title
+ end
+
+ it "should return partial matches" do
+ get :search_typeahead, :q => "chick" # 'chick' for 'chicken'
+ response.should render_template('request/_search_ahead.rhtml')
+ assigns[:xapian_requests].results.size.should == 1
+ assigns[:xapian_requests].results[0][:model].title.should == info_requests(:naughty_chicken_request).title
+ end
+end
diff --git a/spec/controllers/services_controller_spec.rb b/spec/controllers/services_controller_spec.rb
new file mode 100644
index 000000000..1bafd0c8f
--- /dev/null
+++ b/spec/controllers/services_controller_spec.rb
@@ -0,0 +1,31 @@
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+
+describe ServicesController, "when using web services" do
+ integrate_views
+
+ it "should show no alaveteli message when in the deployed country" do
+ config = MySociety::Config.load_default()
+ config['ISO_COUNTRY_CODE'] = "DE"
+ controller.stub!(:country_from_ip).and_return('DE')
+ get :other_country_message
+ response.body.should == ""
+ end
+
+ it "should show an alaveteli message when not in the deployed country and in a country with no FOI website" do
+ config = MySociety::Config.load_default()
+ config['ISO_COUNTRY_CODE'] = "DE"
+ controller.stub!(:country_from_ip).and_return('ZZ')
+ get :other_country_message
+ response.body.should match(/outside Germany/)
+ end
+
+ it "should show link to other FOI website when not in the deployed country" do
+ config = MySociety::Config.load_default()
+ config['ISO_COUNTRY_CODE'] = "ZZ"
+ controller.stub!(:country_from_ip).and_return('DE')
+ get :other_country_message
+ response.body.should match(/within Germany/)
+ end
+
+
+end
diff --git a/spec/controllers/track_controller_spec.rb b/spec/controllers/track_controller_spec.rb
index 2f3f903f9..435d9a0d3 100644
--- a/spec/controllers/track_controller_spec.rb
+++ b/spec/controllers/track_controller_spec.rb
@@ -16,6 +16,7 @@ describe TrackController, "when making a new track on a request" do
@user = mock_model(User)
User.stub!(:find).and_return(@user)
+ @user.stub!(:locale).and_return("en")
end
it "should require login when making new track" do
@@ -35,7 +36,7 @@ end
describe TrackController, "when sending alerts for a track" do
integrate_views
- fixtures :info_requests, :outgoing_messages, :incoming_messages, :raw_emails, :info_request_events, :users, :track_things, :track_things_sent_emails, :public_bodies, :public_body_translations
+ fixtures :comments, :info_requests, :outgoing_messages, :incoming_messages, :raw_emails, :info_request_events, :users, :track_things, :track_things_sent_emails, :public_bodies, :public_body_translations
include LinkToHelper # for main_url
before(:each) do
@@ -69,7 +70,6 @@ describe TrackController, "when sending alerts for a track" do
mail.body.should include('added an annotation') # comment included
mail.body.should =~ /This a the daftest comment the world has ever seen/ # comment text included
-
# Check subscription managing link
# XXX We can't do this, as it is redirecting to another controller. I'm
# apparently meant to be writing controller unit tests here, not functional
@@ -93,6 +93,19 @@ describe TrackController, "when sending alerts for a track" do
deliveries.size.should == 0
end
+ it "should send localised alerts" do
+ # set the time the comment event happened at to within the last week
+ ire = info_request_events(:silly_comment_event)
+ ire.created_at = Time.now - 3.days
+ ire.save!
+ user = users(:silly_name_user)
+ user.locale = "es"
+ user.save!
+ TrackMailer.alert_tracks
+ deliveries = ActionMailer::Base.deliveries
+ mail = deliveries[0]
+ mail.body.should include('el equipo de ')
+ end
end
describe TrackController, "when viewing RSS feed for a track" do
diff --git a/spec/controllers/user_controller_spec.rb b/spec/controllers/user_controller_spec.rb
index c974c8a0d..b4cc0d6e3 100644
--- a/spec/controllers/user_controller_spec.rb
+++ b/spec/controllers/user_controller_spec.rb
@@ -32,6 +32,13 @@ describe UserController, "when showing a user" do
assigns[:display_user].should == users(:bob_smith_user)
end
+ it "should search the user's contributions" do
+ get :show, :url_name => "bob_smith"
+ assigns[:xapian_requests].results.count.should == 2
+ get :show, :url_name => "bob_smith", :user_query => "money"
+ assigns[:xapian_requests].results.count.should == 1
+ end
+
# Error handling not quite good enough for this yet
# it "should not show unconfirmed users" do
# get :show, :url_name => "silly_emnameem"
@@ -104,7 +111,7 @@ describe UserController, "when signing in" do
get :signin, :r => "/list"
response.should render_template('sign')
post_redirect = get_last_postredirect
- post :signin, { :user_signin => { :email => 'silly@localhost', :password => 'jonespassword' },
+ post :signin, { :user_signin => { :email => 'unconfirmed@localhost', :password => 'jonespassword' },
:token => post_redirect.token
}
response.should render_template('confirm')
@@ -116,7 +123,7 @@ describe UserController, "when signing in" do
get :signin, :r => "/list"
post_redirect = get_last_postredirect
- post :signin, { :user_signin => { :email => 'silly@localhost', :password => 'jonespassword' },
+ post :signin, { :user_signin => { :email => 'unconfirmed@localhost', :password => 'jonespassword' },
:token => post_redirect.token
}
response.should send_email
@@ -136,7 +143,7 @@ describe UserController, "when signing in" do
# check confirmation URL works
session[:user_id].should be_nil
get :confirm, :email_token => post_redirect.email_token
- session[:user_id].should == users(:silly_name_user).id
+ session[:user_id].should == users(:unconfirmed_user).id
response.should redirect_to(:controller => 'request', :action => 'list', :post_redirect => 1)
end
@@ -171,6 +178,19 @@ describe UserController, "when signing up" do
deliveries[0].body.should include("not reveal your email")
end
+ it "should send confirmation mail in other languages or different locales" do
+ session[:locale] = "es"
+ post :signup, {:user_signup => { :email => 'new@localhost', :name => 'New Person',
+ :password => 'sillypassword', :password_confirmation => 'sillypassword',
+ }
+ }
+ response.should render_template('confirm')
+
+ deliveries = ActionMailer::Base.deliveries
+ deliveries.size.should == 1
+ deliveries[0].body.should include("No revelaremos su dirección de correo")
+ end
+
it "should send special 'already signed up' mail if you fill the form in with existing registered email " do
post :signup, { :user_signup => { :email => 'silly@localhost', :name => 'New Person',
:password => 'sillypassword', :password_confirmation => 'sillypassword' }
@@ -179,7 +199,9 @@ describe UserController, "when signing up" do
deliveries = ActionMailer::Base.deliveries
deliveries.size.should == 1
- deliveries[0].body.should include("when you already have an")
+
+ # This text may span a line break, depending on the length of the SITE_NAME
+ deliveries[0].body.should match(/when\s+you\s+already\s+have\s+an/)
end
# XXX need to do bob@localhost signup and check that sends different email
diff --git a/spec/fixtures/files/autoresponse-header.email b/spec/fixtures/files/autoresponse-header.email
new file mode 100644
index 000000000..ecd292961
--- /dev/null
+++ b/spec/fixtures/files/autoresponse-header.email
@@ -0,0 +1,22 @@
+From: EMAIL_FROM
+To: FOI Person <EMAIL_TO>
+Delivery-date: Fri, 01 Aug 2008 14:35:58 +0100
+Return-path: <me@cheese.com>
+X-Failed-Recipients: enquiries@cheese.com
+Auto-Submitted: auto-replied
+From: Mail Delivery System <Mailer-Daemon@sandwich.com>
+Subject: Mail delivery failed: returning message to sender
+Message-Id: <E1KOunW-000dXv-C6@sandwich.com>
+Date: Fri, 01 Aug 2008 14:35:58 +0100
+
+This message was created automatically by mail delivery software.
+
+A message that you sent could not be delivered to one or more of its
+recipients. This is a permanent error. The following address(es) failed:
+
+ enquiries@cheese.com
+ Unrouteable address
+
+------ This is a copy of the message, including all the headers. ------
+
+Hello \ No newline at end of file
diff --git a/spec/fixtures/files/empty-return-path.email b/spec/fixtures/files/empty-return-path.email
new file mode 100644
index 000000000..b01e96de8
--- /dev/null
+++ b/spec/fixtures/files/empty-return-path.email
@@ -0,0 +1,21 @@
+From: EMAIL_FROM
+To: FOI Person <EMAIL_TO>
+Return-path: <>
+Delivery-date: Fri, 01 Aug 2008 14:35:58 +0100
+X-Failed-Recipients: enquiries@cheese.com
+From: Mail Delivery System <Mailer-Daemon@sandwich.com>
+Subject: Mail delivery failed: returning message to sender
+Message-Id: <E1KOunW-000dXv-C6@sandwich.com>
+Date: Fri, 01 Aug 2008 14:35:58 +0100
+
+This message was created automatically by mail delivery software.
+
+A message that you sent could not be delivered to one or more of its
+recipients. This is a permanent error. The following address(es) failed:
+
+ enquiries@cheese.com
+ Unrouteable address
+
+------ This is a copy of the message, including all the headers. ------
+
+Hello \ No newline at end of file
diff --git a/spec/fixtures/files/fake-authority-add-tags.rb b/spec/fixtures/files/fake-authority-add-tags.rb
new file mode 100644
index 000000000..a5612d87f
--- /dev/null
+++ b/spec/fixtures/files/fake-authority-add-tags.rb
@@ -0,0 +1,4 @@
+#id,request_email,name,tag_string
+,north_west_foi@localhost,North West Fake Authority,aTag
+,scottish_foi@localhost,Scottish Fake Authority,aTag
+,ni_foi@localhost,Fake Authority of Northern Ireland,fake aTag
diff --git a/spec/fixtures/files/fake-authority-type-with-field-names.csv b/spec/fixtures/files/fake-authority-type-with-field-names.csv
index 93ce00a25..a4247dced 100644
--- a/spec/fixtures/files/fake-authority-type-with-field-names.csv
+++ b/spec/fixtures/files/fake-authority-type-with-field-names.csv
@@ -1,4 +1,4 @@
-#id,email,name,name.es
-,north_west_foi@localhost,North West Fake Authority,Autoridad del Nordeste
-,scottish_foi@localhost,Scottish Fake Authority,Autoridad Escocesa
-,ni_foi@localhost,Fake Authority of Northern Ireland,Autoridad Irlandesa
+#id,request_email,name,name.es,tag_string,home_page
+,north_west_foi@localhost,North West Fake Authority,Autoridad del Nordeste,,http://northwest.org
+,scottish_foi@localhost,Scottish Fake Authority,Autoridad Escocesa,scottish,http://scottish.org
+,ni_foi@localhost,Fake Authority of Northern Ireland,Autoridad Irlandesa,fake aTag
diff --git a/spec/fixtures/files/track-response-exchange-oof-1.email b/spec/fixtures/files/track-response-exchange-oof-1.email
new file mode 100644
index 000000000..6bb696119
--- /dev/null
+++ b/spec/fixtures/files/track-response-exchange-oof-1.email
@@ -0,0 +1,102 @@
+Delivered-To: mysociety.robin@gmail.com
+Received: by 10.216.187.197 with SMTP id y47cs73028wem;
+ Tue, 6 Sep 2011 00:02:08 -0700 (PDT)
+Received: by 10.216.229.167 with SMTP id h39mr1763951weq.57.1315292527401;
+ Tue, 06 Sep 2011 00:02:07 -0700 (PDT)
+Return-Path: <Firstname.Surname@example.com>
+Received: from wildfire.ukcod.org.uk (wildfire.ukcod.org.uk [89.238.145.74])
+ by mx.google.com with ESMTPS id i56si7850683wed.12.2011.09.06.00.02.05
+ (version=TLSv1/SSLv3 cipher=OTHER);
+ Tue, 06 Sep 2011 00:02:06 -0700 (PDT)
+Received-SPF: neutral (google.com: 89.238.145.74 is neither permitted nor denied by domain of Firstname.Surname@example.com) client-ip=89.238.145.74;
+Authentication-Results: mx.google.com; spf=neutral (google.com: 89.238.145.74 is neither permitted nor denied by domain of Firstname.Surname@example.com) smtp.mail=Firstname.Surname@example.com
+Received: from gweuoutb1.linde.com ([94.100.245.173]:15826)
+ by wildfire.ukcod.org.uk with esmtp (Exim 4.69)
+ (envelope-from <Firstname.Surname@example.com>)
+ id 1R0pfT-00074Q-Bb
+ for team@whatdotheyknow.com; Tue, 06 Sep 2011 08:01:59 +0100
+X-IronPort-AV: E=Sophos;i="4.68,337,1312149600";
+ d="scan'208,217";a="16336258"
+X-Header: No Trailer
+Received: from unknown (HELO mlgmuc00mail099.boc.com) ([10.138.224.206])
+ by gweub1.linde.grp with ESMTP; 06 Sep 2011 09:01:48 +0200
+Received: from mlgmuc00mail096.boc.com ([10.138.224.203]) by mlgmuc00mail099.boc.com with Microsoft SMTPSVC(6.0.3790.4675);
+ Tue, 6 Sep 2011 09:02:24 +0200
+Received: from VSUK4EX01.eu.boc.com ([172.18.77.27]) by mlgmuc00mail096.boc.com with Microsoft SMTPSVC(6.0.3790.4675);
+ Tue, 6 Sep 2011 09:01:32 +0200
+Content-class: urn:content-classes:message
+MIME-Version: 1.0
+Content-Type: multipart/alternative;
+ boundary="----_=_NextPart_001_01CC6C62.CEC3EF3C"
+Subject: Out of Office AutoReply: Was the response you got to your FOI request any good?
+X-MimeOLE: Produced By Microsoft Exchange V6.5
+Date: Tue, 6 Sep 2011 08:01:31 +0100
+Message-ID: <E75A6D7A72D76346A4BF6A27672C39AB11BFF525@VSUK4EX01.eu.boc.com>
+X-MS-Has-Attach:
+X-MS-TNEF-Correlator:
+Thread-Topic: Was the response you got to your FOI request any good?
+Thread-Index: AcxsYs6PUz9cAAJDScO38LEWgNj/CQAAAA2I
+From: "Surname,Firstname" <Firstname.Surname@example.com>
+To: "WhatDoTheyKnow" <team@whatdotheyknow.com>
+X-OriginalArrivalTime: 06 Sep 2011 07:01:32.0883 (UTC) FILETIME=[CF626A30:01CC6C62]
+List-Id: Admin Team for What Do They Know <team@whatdotheyknow.com>
+
+This is a multi-part message in MIME format.
+
+------_=_NextPart_001_01CC6C62.CEC3EF3C
+Content-Type: text/plain; charset="iso-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+I am out of the office and have limited access to my emails until Thursday =
+nth Bartember. If you have an urgent query the please telephone me on 1234=
+5678.
+
+
+The information contained in this email and any attachments may be confiden=
+tial and is provided solely for the use of the intended recipient(s). If yo=
+u are not the intended recipient, you are hereby notified that any disclosu=
+re, distribution, or use of this e-mail, its attachments or any information=
+ contained therein is unauthorized and prohibited. If you have received thi=
+s in error, please contact the sender immediately and delete this e-mail an=
+d any attachments.
+
+No responsibility is accepted for any virus or defect that might arise from=
+ opening this e-mail or attachments, whether or not it has been checked by =
+anti-virus software.
+
+------_=_NextPart_001_01CC6C62.CEC3EF3C
+Content-Type: text/html; charset="iso-8859-1"
+Content-Transfer-Encoding: quoted-printable
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; charset=3Diso-8859-=
+1">
+<META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version 6.5.7654.12">
+<TITLE>Out of Office AutoReply: Was the response you got to your FOI reques=
+t any good?</TITLE>
+</HEAD>
+<BODY>
+<!-- Converted from text/plain format -->
+
+<P><FONT SIZE=3D2>I am out of the office and have limited access to my emai=
+ls until Thursday 8th September.&nbsp; If you have an urgent query the plea=
+se telephone me on 12345678.</FONT></P>
+
+<font face=3D"monospace"><br>
+<br>
+The information contained in this email and any attachments may be confiden=
+tial and is provided solely for the use of the intended recipient(s). If yo=
+u are not the intended recipient, you are hereby notified that any disclosu=
+re, distribution, or use of this e-mail, its attachments or any information=
+ contained therein is unauthorized and prohibited. If you have received thi=
+s in error, please contact the sender immediately and delete this e-mail an=
+d any attachments.<br>
+<br>
+No responsibility is accepted for any virus or defect that might arise from=
+ opening this e-mail or attachments, whether or not it has been checked by =
+anti-virus software.</font></BODY>
+</HTML>
+------_=_NextPart_001_01CC6C62.CEC3EF3C--
+
diff --git a/spec/fixtures/files/track-response-exim-bounce.email b/spec/fixtures/files/track-response-exim-bounce.email
new file mode 100644
index 000000000..8d40380b1
--- /dev/null
+++ b/spec/fixtures/files/track-response-exim-bounce.email
@@ -0,0 +1,67 @@
+Delivered-To: mysociety.robin@gmail.com
+Received: by 10.216.187.197 with SMTP id y47cs98510wem;
+ Tue, 6 Sep 2011 14:22:44 -0700 (PDT)
+Received: by 10.216.203.79 with SMTP id e57mr78207weo.42.1315344164092;
+ Tue, 06 Sep 2011 14:22:44 -0700 (PDT)
+Return-Path: <>
+Received: from wildfire.ukcod.org.uk (wildfire.ukcod.org.uk [89.238.145.74])
+ by mx.google.com with ESMTPS id n64si9483505weq.102.2011.09.06.14.22.42
+ (version=TLSv1/SSLv3 cipher=OTHER);
+ Tue, 06 Sep 2011 14:22:43 -0700 (PDT)
+Received-SPF: pass (google.com: best guess record for domain of wildfire.ukcod.org.uk designates 89.238.145.74 as permitted sender) client-ip=89.238.145.74;
+Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of wildfire.ukcod.org.uk designates 89.238.145.74 as permitted sender) smtp.mail=
+Received: from Debian-exim by wildfire.ukcod.org.uk with local (Exim 4.69)
+ id 1R136L-0003xr-1Q
+ for team@whatdotheyknow.com; Tue, 06 Sep 2011 22:22:37 +0100
+X-Failed-Recipients: user@example.com
+Auto-Submitted: auto-replied
+From: Mail Delivery System <Mailer-Daemon@wildfire.ukcod.org.uk>
+To: team@whatdotheyknow.com
+Subject: Mail delivery failed: returning message to sender
+Message-Id: <E1R136L-0003xr-1Q@wildfire.ukcod.org.uk>
+Date: Tue, 06 Sep 2011 22:22:37 +0100
+List-Id: Admin Team for What Do They Know <team@whatdotheyknow.com>
+
+This message was created automatically by mail delivery software.
+
+A message that you sent could not be delivered to one or more of its
+recipients. This is a permanent error. The following address(es) failed:
+
+ user@example.com
+ Unrouteable address
+
+------ This is a copy of the message, including all the headers. ------
+
+Return-path: <team@whatdotheyknow.com>
+Received: from foi by wildfire.ukcod.org.uk with local (Exim 4.69)
+ (envelope-from <team@whatdotheyknow.com>)
+ id 1R136J-0003xp-Td
+ for user@example.com; Tue, 06 Sep 2011 22:22:36 +0100
+Date: Tue, 6 Sep 2011 22:22:35 +0100
+From: WhatDoTheyKnow <team@whatdotheyknow.com>
+To: Nonexistent User <user@example.com>
+Subject: Your WhatDoTheyKnow email alert
+Mime-Version: 1.0
+Content-Type: text/plain; charset=utf-8
+Precedence: bulk
+Auto-Submitted: auto-generated
+Message-Id: <E1R136J-0003xp-Td@wildfire.ukcod.org.uk>
+
+FOI requests to 'Maritime and Coastguard Agency'
+================================================
+
+-- MCA & HM Coastguard Official Vehicles --
+Maritime and Coastguard Agency sent a response to Peter Smith (12 August 2011)
+ "Peter In response (reference F0000881) to your FOI questions the
+ MCA answer is:- 1. All MCA vehicles are purchased outright. 2. Yes
+ there is a volu..."
+http://www.whatdotheyknow.com/request/mca_hm_coastguard_official_vehic#incoming-201529
+
+
+Alter your subscription
+=======================
+
+Please click on the link below to cancel or alter these emails.
+http://www.whatdotheyknow.com/c/ie4pkpy70dl4b8flsig
+
+-- the WhatDoTheyKnow team
diff --git a/spec/fixtures/files/track-response-generic-oof.email b/spec/fixtures/files/track-response-generic-oof.email
new file mode 100644
index 000000000..bf1e3e8fe
--- /dev/null
+++ b/spec/fixtures/files/track-response-generic-oof.email
@@ -0,0 +1,8 @@
+From: Someone <someone@example.com>
+Subject: Out of Office: Notification blah blah blah
+To: track@whatdotheyknow.com
+Return-Path: <>
+Content-Type: text/plain; charset=utf-8
+
+I am out of the office till the 12th of February, hunting lions in Africa.
+
diff --git a/spec/fixtures/files/track-response-lotus-oof-1.email b/spec/fixtures/files/track-response-lotus-oof-1.email
new file mode 100644
index 000000000..dbe63714d
--- /dev/null
+++ b/spec/fixtures/files/track-response-lotus-oof-1.email
@@ -0,0 +1,58 @@
+Delivered-To: mysociety.robin@gmail.com
+Received: by 10.216.187.197 with SMTP id y47cs137414wem;
+ Wed, 7 Sep 2011 14:02:45 -0700 (PDT)
+Received: by 10.227.179.14 with SMTP id bo14mr1666492wbb.90.1315429363348;
+ Wed, 07 Sep 2011 14:02:43 -0700 (PDT)
+Return-Path: <Arnos.Grove@example.net>
+Received: from wildfire.ukcod.org.uk (wildfire.ukcod.org.uk [89.238.145.74])
+ by mx.google.com with ESMTPS id 2si1547851wbx.79.2011.09.07.14.02.41
+ (version=TLSv1/SSLv3 cipher=OTHER);
+ Wed, 07 Sep 2011 14:02:42 -0700 (PDT)
+Received-SPF: neutral (google.com: 89.238.145.74 is neither permitted nor denied by best guess record for domain of Arnos.Grove@example.net) client-ip=89.238.145.74;
+Authentication-Results: mx.google.com; spf=neutral (google.com: 89.238.145.74 is neither permitted nor denied by best guess record for domain of Arnos.Grove@example.net) smtp.mail=Arnos.Grove@example.net
+Received: from foi by wildfire.ukcod.org.uk with local (Exim 4.69)
+ (envelope-from <Arnos.Grove@example.net>)
+ id 1R1PGV-0008Gu-GX
+ for team@whatdotheyknow.com; Wed, 07 Sep 2011 22:02:35 +0100
+Received: from eu1sys200aog108.obsmtp.com ([207.126.144.125]:54514)
+ by wildfire.ukcod.org.uk with smtp (Exim 4.69)
+ (envelope-from <Arnos.Grove@example.net>)
+ id 1R1PGS-0008Go-Ih
+ for track@whatdotheyknow.com; Wed, 07 Sep 2011 22:02:32 +0100
+Received: from DomG5P.tm-gnet.com ([80.195.120.125]) by eu1sys200aob108.postini.com ([207.126.147.11]) with SMTP
+ ID DSNKTmfb6CEGJQfujkX1ZzzGzMsn6uoI+AGs@postini.com; Wed, 07 Sep 2011 21:02:32 UTC
+Received: from dc3-email-02.tm-gnet.com ([10.145.42.2])
+ by DomG5P.tm-gnet.com (Lotus Domino Release 7.0.3)
+ with ESMTP id 2011090722024075-323511 ;
+ Wed, 7 Sep 2011 22:02:40 +0100
+Subject: Emma McKinney/MAIL/BIR/MG_REG is out of the office
+Auto-Submitted: auto-generated
+From: Arnos.Grove@example.net
+To: track@whatdotheyknow.com
+Message-ID: <OF82EB79DF.C2563724-ON80257904.00739633-80257904.00739633@TrinityMirror.com>
+Date: Wed, 7 Sep 2011 22:02:30 +0100
+MIME-Version: 1.0
+X-MIMETrack: Serialize by Router on DC3-Email-02/GMH(Release 8.5.1FP4|July 25, 2010) at
+ 07/09/2011 22:02:31,
+ Itemize by SMTP Server on DomG5P/GMH(Release 7.0.3|September 26, 2007) at
+ 09/07/2011 22:02:40,
+ Serialize by Router on DomG5P/GMH(Release 7.0.3|September 26, 2007) at 09/07/2011
+ 22:02:41,
+ Serialize complete at 09/07/2011 22:02:41
+Content-type: text/plain; charset=US-ASCII
+List-Id: Admin Team for What Do They Know <team@whatdotheyknow.com>
+
+
+I will be out of the office starting dd/mm/yyyy and will not return until
+dd/mm/yyyy.
+
+If you need to contact anyone urgently while I'm out of the office call
+aaaa bbb cccc or aaaa bbb dddd.
+
+********************
+IMPORTANT NOTICE This email (including any attachments) is meant only for the intended recipient. It may also contain confidential and privileged information. If you are not the intended recipient, any reliance on, use, disclosure, distribution or copying of this email or attachments is strictly prohibited. Please notify the sender immediately by email if you have received this message by mistake and delete the email and all attachments.
+
+Any views or opinions in this email are solely those of the author and do not necessarily represent those of Brickbat Industries PLC or its associated group companies (hereinafter referred to as "BI Group"). BI Group accept no liability for the content of this email, or for the consequences of any actions taken on the basis of the information provided, unless that information is subsequently confirmed in writing. Although every reasonable effort is made to keep its network free from viruses, BI Group accept no liability for any virus transmitted by this email or any attachments and the recipient should use up-to-date virus checking software. Email to or from this address may be subject to interception or monitoring for operational reasons or for lawful business practices.
+
+Brickbat PLC is the parent company of the Brickbat group of companies and is registered in England No 99999, with its address at Nine Made-up Lane, Arnos Grove.
+********************
diff --git a/spec/fixtures/files/track-response-messageclass-oof.email b/spec/fixtures/files/track-response-messageclass-oof.email
new file mode 100644
index 000000000..ce82b6df0
--- /dev/null
+++ b/spec/fixtures/files/track-response-messageclass-oof.email
@@ -0,0 +1,63 @@
+Delivered-To: mysociety.robin@gmail.com
+Received: by 10.216.187.197 with SMTP id y47cs177522wem;
+ Thu, 8 Sep 2011 14:01:27 -0700 (PDT)
+Received: by 10.216.220.168 with SMTP id o40mr1165141wep.75.1315515686762;
+ Thu, 08 Sep 2011 14:01:26 -0700 (PDT)
+Return-Path: <MAILER-DAEMON@wildfire.ukcod.org.uk>
+Received: from wildfire.ukcod.org.uk (wildfire.ukcod.org.uk [89.238.145.74])
+ by mx.google.com with ESMTPS id k18si4719546wed.16.2011.09.08.14.01.25
+ (version=TLSv1/SSLv3 cipher=OTHER);
+ Thu, 08 Sep 2011 14:01:25 -0700 (PDT)
+Received-SPF: pass (google.com: best guess record for domain of MAILER-DAEMON@wildfire.ukcod.org.uk designates 89.238.145.74 as permitted sender) client-ip=89.238.145.74;
+Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of MAILER-DAEMON@wildfire.ukcod.org.uk designates 89.238.145.74 as permitted sender) smtp.mail=MAILER-DAEMON@wildfire.ukcod.org.uk
+Received: from foi by wildfire.ukcod.org.uk with local (Exim 4.69)
+ (envelope-from <MAILER-DAEMON@wildfire.ukcod.org.uk>)
+ id 1R1lio-0004zB-Fv
+ for team_delivery@whatdotheyknow.com; Thu, 08 Sep 2011 22:01:18 +0100
+Received: from mailproxy2.newsquest.co.uk ([93.174.8.201]:2528)
+ by wildfire.ukcod.org.uk with esmtp (Exim 4.69)
+ id 1R1lin-0004z2-Lk
+ for track@whatdotheyknow.com; Thu, 08 Sep 2011 22:01:17 +0100
+X-IronPort-AV: E=Sophos;i="4.68,352,1312153200";
+ d="scan'208";a="450582625"
+Content-Type: multipart/mixed; boundary="===============1667734580=="
+MIME-Version: 1.0
+Received: from sx-mailtraq.se.ad.newsquest.co.uk (sx-mailtraq.se.ad.newsquest.co.uk [10.50.6.12])
+ by nqsussex.co.uk with ESMTP (Mailtraq/2.12.0.2278) id NQSSF0865193
+ for track@whatdotheyknow.com; Thu, 08 Sep 2011 22:01:04 +0100
+From: "bjarne.stroustrup" <bjarne.stroustrup@example.co.uk>
+To: track@whatdotheyknow.com
+Date: Thu, 08 Sep 2011 22:01:01 +0100
+Message-ID: <THRGF086ADB9@example.co.uk>
+Subject: Automatic Response
+X-Hops: 1
+X-POST-MessageClass: 9; Autoresponder
+
+--===============1667734580==
+MIME-Version: 1.0
+Content-Type: text/plain; charset=""
+
+I am out of the office until Tuesday, January 20. If your email is
+urgent please resend it to news@example.co.uk.
+Thanks very much
+Boris
+
+--===============1667734580==
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: quoted-printable
+Content-Disposition: inline
+
+This email has been scanned for viruses and other threats using Newsquest's=
+ Ironport email filters.
+
+This document is private and confidential.
+All property, copyright and other rights in it and its contents belong to
+ewsquest Media Group Limited.
+It must not be read, copied, disclosed or otherwise used without Newsquest=
+=E2=80=99s authorisation. Newsquest may exercise its legal rights and remed=
+ies in the event of any such unauthorised use.
+
+
+--===============1667734580==--
+
diff --git a/spec/fixtures/files/track-response-messagelabs-oof-1.email b/spec/fixtures/files/track-response-messagelabs-oof-1.email
new file mode 100644
index 000000000..7cd5d6b8d
--- /dev/null
+++ b/spec/fixtures/files/track-response-messagelabs-oof-1.email
@@ -0,0 +1,62 @@
+Delivered-To: mysociety.robin@gmail.com
+Received: by 10.216.187.197 with SMTP id y47cs96363wem;
+ Tue, 6 Sep 2011 13:24:49 -0700 (PDT)
+Received: by 10.216.229.200 with SMTP id h50mr234738weq.32.1315340689299;
+ Tue, 06 Sep 2011 13:24:49 -0700 (PDT)
+Return-Path: <rick.rollington@parliament.uk>
+Received: from majestic.ukcod.org.uk (majestic.ukcod.org.uk [89.238.145.68])
+ by mx.google.com with ESMTPS id j13si9391756wed.109.2011.09.06.13.24.48
+ (version=TLSv1/SSLv3 cipher=OTHER);
+ Tue, 06 Sep 2011 13:24:49 -0700 (PDT)
+Received-SPF: pass (google.com: domain of rick.rollington@parliament.uk designates 89.238.145.68 as permitted sender) client-ip=89.238.145.68;
+Authentication-Results: mx.google.com; spf=pass (google.com: domain of rick.rollington@parliament.uk designates 89.238.145.68 as permitted sender) smtp.mail=rick.rollington@parliament.uk
+Received: from mail82.messagelabs.com ([195.245.231.67]:4996)
+ by majestic.ukcod.org.uk with esmtp (Exim 4.72)
+ (envelope-from <rick.rollington@parliament.uk>)
+ id 1R12CI-000465-Gx
+ for team@whatdotheyknow.com; Tue, 06 Sep 2011 21:24:42 +0100
+X-Env-Sender: rick.rollington@parliament.uk
+X-Msg-Ref: server-4.tower-82.messagelabs.com!1315340670!59450288!1
+X-Originating-IP: [194.60.38.7]
+X-StarScan-Version: 6.3.6; banners=-,-,-
+X-VirusChecked: Checked
+Received: (qmail 4246 invoked from network); 6 Sep 2011 20:24:31 -0000
+Received: from hpux13x.parliament.uk (HELO hpux13x.parliament.uk) (194.60.38.7)
+ by server-4.tower-82.messagelabs.com with DHE-RSA-AES256-SHA encrypted SMTP; 6 Sep 2011 20:24:31 -0000
+Received: from MMEH001.parliament.uk (mmeh001.parliament.uk [10.100.70.11])
+ by hpux13x.parliament.uk with ESMTP id p86KOKNw039771
+ for <team@whatdotheyknow.com>; Tue, 6 Sep 2011 21:24:20 +0100 (BST)
+Received: from MMEM001.parliament.uk ([169.254.1.45]) by MMEH001.parliament.uk
+ ([10.100.70.11]) with mapi; Tue, 6 Sep 2011 21:24:20 +0100
+From: "ROLLINGTON, Rick" <rick.rollington@parliament.uk>
+To: WhatDoTheyKnow <team@whatdotheyknow.com>
+Date: Tue, 6 Sep 2011 21:24:20 +0100
+Subject: Out of Office
+Thread-Topic: Out of Office
+Thread-Index: Acxs0vWVKlHifbrXTBmxr7r0Rh9bhwAAAAGd
+Message-ID: <93A0DC80C8953B4B88DB2726AE921E264E8DE93980@MMEM001.parliament.uk>
+Accept-Language: en-US, en-GB
+Content-Language: en-US
+X-MS-Has-Attach:
+X-MS-TNEF-Correlator:
+acceptlanguage: en-US, en-GB
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: quoted-printable
+MIME-Version: 1.0
+List-Id: Admin Team for What Do They Know <team@whatdotheyknow.com>
+
+Thank you for your email.
+
+I will be out of the office between xnd August and yth September.
+
+For urgent enquiries please email Paul the Pony at, paul.the.pony@parliame=
+nt.uk
+
+
+________________________________
+UK Parliament Disclaimer:
+This e-mail is confidential to the intended recipient. If you have received=
+ it in error, please notify the sender and delete it from your system. Any =
+unauthorised use, disclosure, or copying is not permitted. This e-mail has =
+been checked for viruses, but no liability is accepted for any damage cause=
+d by any virus transmitted by this e-mail. \ No newline at end of file
diff --git a/spec/fixtures/files/track-response-multipart-report.email b/spec/fixtures/files/track-response-multipart-report.email
new file mode 100644
index 000000000..4f8e6d86b
--- /dev/null
+++ b/spec/fixtures/files/track-response-multipart-report.email
@@ -0,0 +1,113 @@
+Delivered-To: mysociety.robin@gmail.com
+Received: by 10.216.187.197 with SMTP id y47cs96752wem;
+ Tue, 6 Sep 2011 13:37:26 -0700 (PDT)
+Received: by 10.216.212.37 with SMTP id x37mr3361871weo.35.1315341445852;
+ Tue, 06 Sep 2011 13:37:25 -0700 (PDT)
+Return-Path: <>
+Received: from wildfire.ukcod.org.uk (wildfire.ukcod.org.uk [89.238.145.74])
+ by mx.google.com with ESMTPS id h49si1800318wed.40.2011.09.06.13.37.25
+ (version=TLSv1/SSLv3 cipher=OTHER);
+ Tue, 06 Sep 2011 13:37:25 -0700 (PDT)
+Received-SPF: pass (google.com: best guess record for domain of wildfire.ukcod.org.uk designates 89.238.145.74 as permitted sender) client-ip=89.238.145.74;
+Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of wildfire.ukcod.org.uk designates 89.238.145.74 as permitted sender) smtp.mail=
+Received: from cluster-a.mailcontrol.com ([85.115.52.190]:43258)
+ by wildfire.ukcod.org.uk with esmtp (Exim 4.69)
+ id 1R12OV-0003KQ-9c
+ for team@whatdotheyknow.com; Tue, 06 Sep 2011 21:37:19 +0100
+Received: from mail.example.com ([62.6.240.178])
+ by rly22a.srv.mailcontrol.com (MailControl) with ESMTP id p86KbIZV025877
+ (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO)
+ for <team@whatdotheyknow.com>; Tue, 6 Sep 2011 21:37:18 +0100
+Received: from MX05.example.com (10.100.14.57) by GCEX534.PHSGROUP.local
+ (10.100.21.78) with Microsoft SMTP Server id 14.1.270.1; Tue, 6 Sep 2011
+ 21:38:52 +0100
+From: <postmaster@xyz.local>
+To: <team@whatdotheyknow.com>
+Date: Tue, 6 Sep 2011 21:37:13 +0100
+MIME-Version: 1.0
+Content-Type: multipart/report; report-type=delivery-status;
+ boundary="9B095B5ADSN=_01CC68D9CD29F1E300015B60MX05.example.com"
+X-DSNContext: 7ce717b1 - 1148 - 00000002 - 00000000
+Message-ID: <DEU8FnRwh00000d1b@MX05.example.com>
+Subject: Delivery Status Notification (Failure)
+X-Scanned-By: MailControl A-12-01-02 (www.mailcontrol.com) on 10.65.0.132
+List-Id: Admin Team for What Do They Know <team@whatdotheyknow.com>
+
+--9B095B5ADSN=_01CC68D9CD29F1E300015B60MX05.example.com
+Content-Type: text/plain; charset="unicode-1-1-utf-7"
+
+This is an automatically generated Delivery Status Notification.
+
+Delivery to the following recipients failed.
+
+ FailedUser@example.com
+
+
+
+
+--9B095B5ADSN=_01CC68D9CD29F1E300015B60MX05.example.com
+Content-Type: message/delivery-status
+
+Reporting-MTA: dns;MX05.example.com
+Received-From-MTA: dns;MX04.example.com
+Arrival-Date: Tue, 6 Sep 2011 21:37:13 +0100
+
+Final-Recipient: rfc822;FailedUser@example.com
+Action: failed
+Status: 5.2.2
+X-Display-Name: Failed User
+
+
+--9B095B5ADSN=_01CC68D9CD29F1E300015B60MX05.example.com
+Content-Type: message/rfc822
+
+Received: from MX04.example.com ([10.100.14.56]) by MX05.example.com with
+ Microsoft SMTPSVC(5.0.2195.6713); Tue, 6 Sep 2011 21:37:13 +0100
+Received: from DCEX553.example.com ([10.211.10.27]) by MX04.example.com with
+ Microsoft SMTPSVC(5.0.2195.6713); Tue, 6 Sep 2011 21:37:13 +0100
+Received: from cluster-a.mailcontrol.com (85.115.52.190) by mail.example.com
+ (10.211.10.27) with Microsoft SMTP Server id 14.1.270.1; Tue, 6 Sep 2011
+ 20:36:49 +0100
+Received: from wildfire.ukcod.org.uk (wildfire.ukcod.org.uk [89.238.145.74])
+ by rly01a.srv.mailcontrol.com (MailControl) with ESMTP id p86KbAZN016792
+ (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO) for
+ <faileduser@example.com>; Tue, 6 Sep 2011 21:37:11 +0100
+Received: from foi by wildfire.ukcod.org.uk with local (Exim 4.69)
+ (envelope-from <team@whatdotheyknow.com>) id 1R12OL-0003K9-UE for
+ faileduser@example.com; Tue, 06 Sep 2011 21:37:10 +0100
+Date: Tue, 6 Sep 2011 21:37:09 +0100
+From: WhatDoTheyKnow <team@whatdotheyknow.com>
+To: Failed <faileduser@example.com>
+Subject: Your WhatDoTheyKnow email alert
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Precedence: bulk
+Auto-Submitted: auto-generated
+Message-ID: <E1R12OL-0003K9-UE@wildfire.ukcod.org.uk>
+X-Mailcontrol-Inbound: 7DN0MnCsYCrl5jj2!rZ4BuxxWQ2q0l7t3Lrex4V7ScCE2eoC2RNzHw==
+X-Spam-Score: -0.857
+X-Scanned-By: MailControl A-12-01-02 (www.mailcontrol.com) on 10.65.0.111
+Return-Path: team@whatdotheyknow.com
+X-OriginalArrivalTime: 06 Sep 2011 20:37:13.0070 (UTC) FILETIME=[C20250E0:01CC6CD4]
+
+Requests or responses matching 'bottled water cooler'
+=====================================================
+
+-- HS2 meetings - Agendas and Minutes --
+Warwickshire County Council sent a response to Richard Jones (21 July 2011)
+ "Dear Mr Jones FREEDOM OF INFORMATION ACT 2000 - INFORMATION
+ REQUEST Your request for information has now been considered. The
+ information you have..."
+http://www.whatdotheyknow.com/request/hs2_meetings_agendas_and_minutes_2#incoming-195748
+
+
+Alter your subscription
+=======================
+
+Please click on the link below to cancel or alter these emails.
+http://www.whatdotheyknow.com/c/f76ffwifzlo5sk4egr3
+
+-- the WhatDoTheyKnow team
+
+
+--9B095B5ADSN=_01CC68D9CD29F1E300015B60MX05.example.com-- \ No newline at end of file
diff --git a/spec/fixtures/users.yml b/spec/fixtures/users.yml
index 2485c95a0..16ffec034 100644
--- a/spec/fixtures/users.yml
+++ b/spec/fixtures/users.yml
@@ -10,6 +10,7 @@ bob_smith_user:
email_confirmed: true
admin_level: 'none'
ban_text: ''
+ locale: 'en'
about_me: 'I like making requests about fancy dogs and naughty chickens and stuff.'
silly_name_user:
id: "2"
@@ -20,9 +21,10 @@ silly_name_user:
hashed_password: 6b7cd45a5f35fd83febc0452a799530398bfb6e8 # jonespassword
updated_at: 2007-11-01 10:39:15.491593
created_at: 2007-11-01 10:39:15.491593
- email_confirmed: false
+ email_confirmed: true
admin_level: 'none'
ban_text: ''
+ locale: 'en'
about_me: ''
admin_user:
id: "3"
@@ -36,4 +38,18 @@ admin_user:
email_confirmed: false
admin_level: 'super'
ban_text: ''
+ locale: ''
+ about_me: ''
+unconfirmed_user:
+ id: "4"
+ name: "Unconfirmed"
+ url_name: unconfirmed
+ email: unconfirmed@localhost
+ salt: "-6116981980.392287733335677"
+ hashed_password: 6b7cd45a5f35fd83febc0452a799530398bfb6e8 # jonespassword
+ updated_at: 2007-11-01 10:39:15.491593
+ created_at: 2007-11-01 10:39:15.491593
+ email_confirmed: false
+ admin_level: 'none'
+ ban_text: ''
about_me: ''
diff --git a/spec/integration/errors_spec.rb b/spec/integration/errors_spec.rb
new file mode 100644
index 000000000..c64ca79e8
--- /dev/null
+++ b/spec/integration/errors_spec.rb
@@ -0,0 +1,45 @@
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+
+describe "When rendering errors" do
+
+ fixtures [ :info_requests,
+ :info_request_events,
+ :public_bodies,
+ :public_body_translations,
+ :users,
+ :raw_emails,
+ :outgoing_messages,
+ :incoming_messages,
+ :comments ]
+
+ before(:each) do
+ load_raw_emails_data(raw_emails)
+ ActionController::Base.consider_all_requests_local = false
+ end
+
+ after(:each) do
+ ActionController::Base.consider_all_requests_local = true
+ end
+
+ it "should render a 404 for unrouteable URLs" do
+ get("/frobsnasm")
+ response.code.should == "404"
+ response.body.should include("The page doesn't exist")
+ end
+ it "should render a 404 for users that don't exist" do
+ get("/user/wobsnasm")
+ response.code.should == "404"
+ end
+ it "should render a 404 for bodies that don't exist" do
+ get("/body/wobsnasm")
+ response.code.should == "404"
+ end
+ it "should render a 500 for general errors" do
+ ir = info_requests(:naughty_chicken_request)
+ # Set an invalid state for the request. Note that update_attribute doesn't run the validations
+ ir.update_attribute(:described_state, "crotchety")
+ get("/request/#{ir.url_title}")
+ response.code.should == "500"
+ end
+end
+
diff --git a/spec/integration/search_request_spec.rb b/spec/integration/search_request_spec.rb
index 9398519b7..dcd20c7bd 100644
--- a/spec/integration/search_request_spec.rb
+++ b/spec/integration/search_request_spec.rb
@@ -1,9 +1,63 @@
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe "When searching" do
+
+ fixtures [ :info_requests,
+ :info_request_events,
+ :public_bodies,
+ :public_body_translations,
+ :users,
+ :raw_emails,
+ :outgoing_messages,
+ :incoming_messages,
+ :comments ]
+
+ before(:each) do
+ emails = raw_emails.clone
+ load_raw_emails_data(emails)
+ end
+
it "should not strip quotes from quoted query" do
request_via_redirect("post", "/search", :query => '"mouse stilton"')
response.body.should include("&quot;mouse stilton&quot;")
end
+
+ it "should correctly execute simple search" do
+ request_via_redirect("post", "/search",
+ :query => 'bob'
+ )
+ response.body.should include("FOI requests")
+ end
+
+ it "should correctly filter searches for requests" do
+ request_via_redirect("post", "/search/bob/requests")
+ response.body.should_not include("One person found")
+ response.body.should include("FOI requests 1 to 2 of 2")
+ end
+ it "should correctly filter searches for users" do
+ request_via_redirect("post", "/search/bob/users")
+ response.body.should include("One person found")
+ response.body.should_not include("FOI requests 1 to 2 of 2")
+ end
+
+ it "should correctly filter searches for successful requests" do
+ request_via_redirect("post", "/search",
+ :query => "bob",
+ :latest_status => ['successful'])
+ response.body.should include("no requests matching your query")
+ end
+
+ it "should correctly filter searches for comments" do
+ request_via_redirect("post", "/search",
+ :query => "daftest",
+ :request_variety => ['comments'])
+ response.body.should include("One FOI request found")
+
+ request_via_redirect("post", "/search",
+ :query => "daftest",
+ :request_variety => ['response','sent'])
+ response.body.should include("no requests matching your query")
+ end
+
end
diff --git a/spec/lib/external_command_scripts/output.sh b/spec/lib/external_command_scripts/output.sh
deleted file mode 100755
index 0472c89a3..000000000
--- a/spec/lib/external_command_scripts/output.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-out_msg=${1:-out}
-err_msg=${2:-}
-repeats=${3:-10}
-exit_status=${4:-0}
-
-n=0
-while [ "$n" -lt "$repeats" ]
-do
- if [ -n "$out_msg" ]
- then
- echo "$out_msg $n"
- fi
- if [ -n "$err_msg" ]
- then
- echo >&2 "$err_msg $n"
- fi
- n=$[$n + 1]
-done
-
-exit "$exit_status"
diff --git a/spec/lib/external_command_spec.rb b/spec/lib/external_command_spec.rb
deleted file mode 100644
index 0ff1a9c0a..000000000
--- a/spec/lib/external_command_spec.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# This is a test of the external_command library
-
-require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
-script_dir = File.join(File.dirname(__FILE__), 'external_command_scripts')
-output_script = File.join(script_dir, "output.sh")
-
-require 'external_command'
-
-describe "when running ExternalCommand" do
-
- it "should get correct status code for /bin/true" do
- t = ExternalCommand.new("/bin/true").run()
- t.status.should == 0
- t.out.should == ""
- t.err.should == ""
- end
-
- it "should get correct status code for /bin/false" do
- f = ExternalCommand.new("/bin/false").run()
- f.status.should == 1
- f.out.should == ""
- f.err.should == ""
- end
-
- it "should get stdout and stderr" do
- f = ExternalCommand.new(output_script, "out", "err", "10", "23").run()
- f.status.should == 23
- f.out.should == (0..9).map {|i| "out #{i}\n"}.join("")
- f.err.should == (0..9).map {|i| "err #{i}\n"}.join("")
- end
-
- it "should work with large amounts of data" do
- f = ExternalCommand.new(output_script, "a longer output line", "a longer error line", "10000", "5").run()
- f.status.should == 5
- f.out.should == (0..9999).map {|i| "a longer output line #{i}\n"}.join("")
- f.err.should == (0..9999).map {|i| "a longer error line #{i}\n"}.join("")
- end
-
-end
-
diff --git a/spec/models/customstates.rb b/spec/models/customstates.rb
index 406d4ead9..3488e6730 100644
--- a/spec/models/customstates.rb
+++ b/spec/models/customstates.rb
@@ -5,16 +5,6 @@ module InfoRequestCustomStates
end
# Mixin methods for InfoRequest
- def theme_display_status(status)
- if status == 'deadline_extended'
- _("Deadline extended.")
- elsif status == 'wrong_response'
- _("Wrong Response.")
- else
- raise _("unknown status ") + status
- end
- end
-
def theme_calculate_status
return 'waiting_classification' if self.awaiting_description
waiting_response = self.described_state == "waiting_response" || self.described_state == "deadline_extended"
@@ -41,6 +31,16 @@ module InfoRequestCustomStates
end
module ClassMethods
+ def theme_display_status(status)
+ if status == 'deadline_extended'
+ _("Deadline extended.")
+ elsif status == 'wrong_response'
+ _("Wrong Response.")
+ else
+ raise _("unknown status ") + status
+ end
+ end
+
def theme_extra_states
return ['deadline_extended',
'wrong_response']
diff --git a/spec/models/incoming_message_spec.rb b/spec/models/incoming_message_spec.rb
index 183a258af..d6923da21 100644
--- a/spec/models/incoming_message_spec.rb
+++ b/spec/models/incoming_message_spec.rb
@@ -79,11 +79,21 @@ describe IncomingMessage, " folding quoted parts of emails" do
end
describe IncomingMessage, " checking validity to reply to" do
- def test_email(email, result)
+ def test_email(result, email, return_path, autosubmitted)
@address = mock(TMail::Address)
@address.stub!(:spec).and_return(email)
+
+ @return_path = mock(TMail::ReturnPathHeader)
+ @return_path.stub!(:addr).and_return(return_path)
+
+ @autosubmitted = mock(TMail::KeywordsHeader)
+ @autosubmitted.stub!(:keys).and_return(autosubmitted)
+
@mail = mock(TMail::Mail)
@mail.stub!(:from_addrs).and_return( [ @address ] )
+ @mail.stub!(:[]).with("return-path").and_return(@return_path)
+ @mail.stub!(:[]).with("auto-submitted").and_return(@autosubmitted)
+
@incoming_message = IncomingMessage.new()
@incoming_message.stub!(:mail).and_return(@mail)
@@ -91,27 +101,63 @@ describe IncomingMessage, " checking validity to reply to" do
end
it "says a valid email is fine" do
- test_email("team@mysociety.org", true)
+ test_email(true, "team@mysociety.org", nil, [])
end
it "says postmaster email is bad" do
- test_email("postmaster@mysociety.org", false)
+ test_email(false, "postmaster@mysociety.org", nil, [])
end
it "says Mailer-Daemon email is bad" do
- test_email("Mailer-Daemon@mysociety.org", false)
+ test_email(false, "Mailer-Daemon@mysociety.org", nil, [])
end
it "says case mangled MaIler-DaemOn email is bad" do
- test_email("MaIler-DaemOn@mysociety.org", false)
+ test_email(false, "MaIler-DaemOn@mysociety.org", nil, [])
end
it "says Auto_Reply email is bad" do
- test_email("Auto_Reply@mysociety.org", false)
+ test_email(false, "Auto_Reply@mysociety.org", nil, [])
end
it "says DoNotReply email is bad" do
- test_email("DoNotReply@tube.tfl.gov.uk", false)
+ test_email(false, "DoNotReply@tube.tfl.gov.uk", nil, [])
+ end
+
+ it "says a filled-out return-path is fine" do
+ test_email(true, "team@mysociety.org", "Return-path: <foo@baz.com>", [])
+ end
+
+ it "says an empty return-path is bad" do
+ test_email(false, "team@mysociety.org", "<>", [])
+ end
+
+ it "says an auto-submitted keyword is bad" do
+ test_email(false, "team@mysociety.org", nil, ["auto-replied"])
+ end
+
+end
+
+describe IncomingMessage, " checking validity to reply to with real emails" do
+ fixtures :incoming_messages, :raw_emails, :public_bodies, :public_body_translations, :info_requests, :users
+
+ after(:all) do
+ ActionMailer::Base.deliveries.clear
+ end
+ it "should allow a reply to plain emails" do
+ ir = info_requests(:fancy_dog_request)
+ receive_incoming_mail('incoming-request-plain.email', ir.incoming_email)
+ ir.incoming_messages[1].valid_to_reply_to?.should == true
+ end
+ it "should not allow a reply to emails with empty return-paths" do
+ ir = info_requests(:fancy_dog_request)
+ receive_incoming_mail('empty-return-path.email', ir.incoming_email)
+ ir.incoming_messages[1].valid_to_reply_to?.should == false
+ end
+ it "should not allow a reply to emails with autoresponse headers" do
+ ir = info_requests(:fancy_dog_request)
+ receive_incoming_mail('autoresponse-header.email', ir.incoming_email)
+ ir.incoming_messages[1].valid_to_reply_to?.should == false
end
end
diff --git a/spec/models/outgoing_mailer_spec.rb b/spec/models/outgoing_mailer_spec.rb
index d7587cb41..c96a3fb74 100644
--- a/spec/models/outgoing_mailer_spec.rb
+++ b/spec/models/outgoing_mailer_spec.rb
@@ -112,7 +112,6 @@ describe OutgoingMailer, "when working out follow up subjects" do
it "should not add Re: prefix if there already is a lower case re: prefix" do
ir = info_requests(:fancy_dog_request)
im = ir.incoming_messages[0]
- puts im.raw_email.data
om = outgoing_messages(:useless_outgoing_message)
om.incoming_message_followup = im
diff --git a/spec/models/public_body_spec.rb b/spec/models/public_body_spec.rb
index 3d00d37fb..33ab8ffdb 100644
--- a/spec/models/public_body_spec.rb
+++ b/spec/models/public_body_spec.rb
@@ -227,16 +227,35 @@ describe PublicBody, "when searching" do
end
describe PublicBody, " when loading CSV files" do
+ before(:each) do
+ # InternalBody is created the first time it's accessed, which happens sometimes during imports,
+ # depending on the tag used. By accessing it here before every test, it doesn't disturb our checks later on
+ PublicBody.internal_admin_body
+ end
+
+ it "should import even if no email is provided" do
+ errors, notes = PublicBody.import_csv("1,aBody", '', 'replace', true, 'someadmin') # true means dry run
+ errors.should == []
+ notes.size.should == 2
+ notes.should == [
+ "line 1: creating new authority 'aBody' (locale: en):\n\t{\"name\":\"aBody\"}",
+ "Notes: Some bodies are in database, but not in CSV file:\n Department for Humpadinking\n Geraldine Quango\nYou may want to delete them manually.\n"
+ ]
+ end
+
it "should do a dry run successfully" do
original_count = PublicBody.count
csv_contents = load_file_fixture("fake-authority-type.csv")
- errors, notes = PublicBody.import_csv(csv_contents, 'fake', true, 'someadmin') # true means dry run
+ errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', true, 'someadmin') # true means dry run
errors.should == []
- notes.size.should == 3
- notes.should == ["line 1: new authority 'North West Fake Authority' with email north_west_foi@localhost",
- "line 2: new authority 'Scottish Fake Authority' with email scottish_foi@localhost",
- "line 3: new authority 'Fake Authority of Northern Ireland' with email ni_foi@localhost"]
+ notes.size.should == 4
+ notes.should == [
+ "line 1: creating new authority 'North West Fake Authority' (locale: en):\n\t\{\"name\":\"North West Fake Authority\",\"request_email\":\"north_west_foi@localhost\"\}",
+ "line 2: creating new authority 'Scottish Fake Authority' (locale: en):\n\t\{\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\"\}",
+ "line 3: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t\{\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\"\}",
+ "Notes: Some bodies are in database, but not in CSV file:\n Department for Humpadinking\n Geraldine Quango\nYou may want to delete them manually.\n"
+ ]
PublicBody.count.should == original_count
end
@@ -245,44 +264,105 @@ describe PublicBody, " when loading CSV files" do
original_count = PublicBody.count
csv_contents = load_file_fixture("fake-authority-type.csv")
- errors, notes = PublicBody.import_csv(csv_contents, 'fake', false, 'someadmin') # false means real run
+ errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', false, 'someadmin') # false means real run
errors.should == []
- notes.size.should == 3
- notes.should == ["line 1: new authority 'North West Fake Authority' with email north_west_foi@localhost",
- "line 2: new authority 'Scottish Fake Authority' with email scottish_foi@localhost",
- "line 3: new authority 'Fake Authority of Northern Ireland' with email ni_foi@localhost"]
+ notes.size.should == 4
+ notes.should == [
+ "line 1: creating new authority 'North West Fake Authority' (locale: en):\n\t\{\"name\":\"North West Fake Authority\",\"request_email\":\"north_west_foi@localhost\"\}",
+ "line 2: creating new authority 'Scottish Fake Authority' (locale: en):\n\t\{\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\"\}",
+ "line 3: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t\{\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\"\}",
+ "Notes: Some bodies are in database, but not in CSV file:\n Department for Humpadinking\n Geraldine Quango\nYou may want to delete them manually.\n"
+ ]
PublicBody.count.should == original_count + 3
end
+ it "should do imports without a tag successfully" do
+ original_count = PublicBody.count
+
+ csv_contents = load_file_fixture("fake-authority-type.csv")
+ errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', false, 'someadmin') # false means real run
+ errors.should == []
+ notes.size.should == 4
+ notes.should == [
+ "line 1: creating new authority 'North West Fake Authority' (locale: en):\n\t\{\"name\":\"North West Fake Authority\",\"request_email\":\"north_west_foi@localhost\"\}",
+ "line 2: creating new authority 'Scottish Fake Authority' (locale: en):\n\t\{\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\"\}",
+ "line 3: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t\{\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\"\}",
+ "Notes: Some bodies are in database, but not in CSV file:\n Department for Humpadinking\n Geraldine Quango\nYou may want to delete them manually.\n"
+ ]
+ PublicBody.count.should == original_count + 3
+ end
+
it "should handle a field list and fields out of order" do
original_count = PublicBody.count
csv_contents = load_file_fixture("fake-authority-type-with-field-names.csv")
- errors, notes = PublicBody.import_csv(csv_contents, 'fake', true, 'someadmin') # true means dry run
+ errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', true, 'someadmin') # true means dry run
errors.should == []
- notes.size.should == 3
- notes.should == ["line 2: new authority 'North West Fake Authority' with email north_west_foi@localhost",
- "line 3: new authority 'Scottish Fake Authority' with email scottish_foi@localhost",
- "line 4: new authority 'Fake Authority of Northern Ireland' with email ni_foi@localhost"]
+ notes.size.should == 4
+ notes.should == [
+ "line 2: creating new authority 'North West Fake Authority' (locale: en):\n\t\{\"name\":\"North West Fake Authority\",\"request_email\":\"north_west_foi@localhost\",\"home_page\":\"http://northwest.org\"\}",
+ "line 3: creating new authority 'Scottish Fake Authority' (locale: en):\n\t\{\"tag_string\":\"scottish\",\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\",\"home_page\":\"http://scottish.org\"\}",
+ "line 4: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t\{\"tag_string\":\"fake aTag\",\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\"\}",
+ "Notes: Some bodies are in database, but not in CSV file:\n Department for Humpadinking\n Geraldine Quango\nYou may want to delete them manually.\n"
+ ]
PublicBody.count.should == original_count
end
+
+ it "should import tags successfully when the import tag is not set" do
+ csv_contents = load_file_fixture("fake-authority-type-with-field-names.csv")
+ errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', false, 'someadmin') # false means real run
+
+ PublicBody.find_by_name('North West Fake Authority').tag_array_for_search.should == []
+ PublicBody.find_by_name('Scottish Fake Authority').tag_array_for_search.should == ['scottish']
+ PublicBody.find_by_name('Fake Authority of Northern Ireland').tag_array_for_search.should == ['fake', 'aTag']
+
+ # Import again to check the 'add' tag functionality works
+ new_tags_file = load_file_fixture('fake-authority-add-tags.rb')
+ errors, notes = PublicBody.import_csv(new_tags_file, '', 'add', false, 'someadmin') # false means real run
+
+ # Check tags were added successfully
+ PublicBody.find_by_name('North West Fake Authority').tag_array_for_search.should == ['aTag']
+ PublicBody.find_by_name('Scottish Fake Authority').tag_array_for_search.should == ['scottish', 'aTag']
+ PublicBody.find_by_name('Fake Authority of Northern Ireland').tag_array_for_search.should == ['fake', 'aTag']
+ end
+
+ it "should import tags successfully when the import tag is set" do
+ csv_contents = load_file_fixture("fake-authority-type-with-field-names.csv")
+ errors, notes = PublicBody.import_csv(csv_contents, 'fake', 'add', false, 'someadmin') # false means real run
+
+ # Check new bodies were imported successfully
+ PublicBody.find_by_name('North West Fake Authority').tag_array_for_search.should == ['fake']
+ PublicBody.find_by_name('Scottish Fake Authority').tag_array_for_search.should == ['scottish', 'fake']
+ PublicBody.find_by_name('Fake Authority of Northern Ireland').tag_array_for_search.should == ['fake', 'aTag']
+
+ # Import again to check the 'replace' tag functionality works
+ new_tags_file = load_file_fixture('fake-authority-add-tags.rb')
+ errors, notes = PublicBody.import_csv(new_tags_file, 'fake', 'replace', false, 'someadmin') # false means real run
+
+ # Check tags were added successfully
+ PublicBody.find_by_name('North West Fake Authority').tag_array_for_search.should == ['aTag']
+ PublicBody.find_by_name('Scottish Fake Authority').tag_array_for_search.should == ['aTag']
+ PublicBody.find_by_name('Fake Authority of Northern Ireland').tag_array_for_search.should == ['fake', 'aTag']
+ end
it "should create bodies with names in multiple locales" do
original_count = PublicBody.count
csv_contents = load_file_fixture("fake-authority-type-with-field-names.csv")
- errors, notes = PublicBody.import_csv(csv_contents, 'fake', false, 'someadmin', ['es'])
+ errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', false, 'someadmin', [:en, :es])
errors.should == []
- notes.size.should == 6
+ notes.size.should == 7
notes.should == [
- "line 2: new authority 'North West Fake Authority' with email north_west_foi@localhost",
- "line 2: (aka 'Autoridad del Nordeste' in locale es)",
- "line 3: new authority 'Scottish Fake Authority' with email scottish_foi@localhost",
- "line 3: (aka 'Autoridad Escocesa' in locale es)",
- "line 4: new authority 'Fake Authority of Northern Ireland' with email ni_foi@localhost",
- "line 4: (aka 'Autoridad Irlandesa' in locale es)"]
+ "line 2: creating new authority 'North West Fake Authority' (locale: en):\n\t{\"name\":\"North West Fake Authority\",\"request_email\":\"north_west_foi@localhost\",\"home_page\":\"http://northwest.org\"}",
+ "line 2: creating new authority 'North West Fake Authority' (locale: es):\n\t{\"name\":\"Autoridad del Nordeste\"}",
+ "line 3: creating new authority 'Scottish Fake Authority' (locale: en):\n\t{\"tag_string\":\"scottish\",\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\",\"home_page\":\"http://scottish.org\"}",
+ "line 3: creating new authority 'Scottish Fake Authority' (locale: es):\n\t{\"name\":\"Autoridad Escocesa\"}",
+ "line 4: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t{\"tag_string\":\"fake aTag\",\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\"}",
+ "line 4: creating new authority 'Fake Authority of Northern Ireland' (locale: es):\n\t{\"name\":\"Autoridad Irlandesa\"}",
+ "Notes: Some bodies are in database, but not in CSV file:\n Department for Humpadinking\n Geraldine Quango\nYou may want to delete them manually.\n"
+ ]
PublicBody.count.should == original_count + 3
@@ -297,12 +377,18 @@ describe PublicBody, " when loading CSV files" do
original_count = PublicBody.count
csv_contents = load_file_fixture("fake-authority-type-with-field-names.csv")
- errors, notes = PublicBody.import_csv(csv_contents, 'fake', true, 'someadmin', ['xx']) # true means dry run
+ # Depending on the runtime environment (Ruby version? OS?) the list of available locales
+ # is made of strings or symbols, so we use 'en' here as a string to test both scenarios.
+ # See https://github.com/sebbacon/alaveteli/issues/193
+ errors, notes = PublicBody.import_csv(csv_contents, '', 'replace', true, 'someadmin', ['en', :xx]) # true means dry run
errors.should == []
- notes.size.should == 3
- notes.should == ["line 2: new authority 'North West Fake Authority' with email north_west_foi@localhost",
- "line 3: new authority 'Scottish Fake Authority' with email scottish_foi@localhost",
- "line 4: new authority 'Fake Authority of Northern Ireland' with email ni_foi@localhost"]
+ notes.size.should == 4
+ notes.should == [
+ "line 2: creating new authority 'North West Fake Authority' (locale: en):\n\t{\"name\":\"North West Fake Authority\",\"request_email\":\"north_west_foi@localhost\",\"home_page\":\"http://northwest.org\"}",
+ "line 3: creating new authority 'Scottish Fake Authority' (locale: en):\n\t{\"tag_string\":\"scottish\",\"name\":\"Scottish Fake Authority\",\"request_email\":\"scottish_foi@localhost\",\"home_page\":\"http://scottish.org\"}",
+ "line 4: creating new authority 'Fake Authority of Northern Ireland' (locale: en):\n\t{\"tag_string\":\"fake aTag\",\"name\":\"Fake Authority of Northern Ireland\",\"request_email\":\"ni_foi@localhost\"}",
+ "Notes: Some bodies are in database, but not in CSV file:\n Department for Humpadinking\n Geraldine Quango\nYou may want to delete them manually.\n"
+ ]
PublicBody.count.should == original_count
end
diff --git a/spec/models/track_mailer_spec.rb b/spec/models/track_mailer_spec.rb
index 828904d02..67a64ee10 100644
--- a/spec/models/track_mailer_spec.rb
+++ b/spec/models/track_mailer_spec.rb
@@ -21,7 +21,9 @@ describe TrackMailer do
@user = mock_model(User, :no_xapian_reindex= => false,
:last_daily_track_email= => true,
:save! => true,
- :url_name => 'test-name')
+ :url_name => 'test-name',
+ :get_locale => 'en',
+ :should_be_emailed? => true)
User.stub!(:find).and_return([@user])
@user.stub!(:no_xapian_reindex=)
end
@@ -43,6 +45,9 @@ describe TrackMailer do
@user.should_receive(:save!)
TrackMailer.alert_tracks
end
+ it 'should return true' do
+ TrackMailer.alert_tracks.should == true
+ end
describe 'for each tracked thing' do
@@ -109,6 +114,39 @@ describe TrackMailer do
end
+ describe 'when a user should not be emailed' do
+ before do
+ @user = mock_model(User, :no_xapian_reindex= => false,
+ :last_daily_track_email= => true,
+ :save! => true,
+ :url_name => 'test-name',
+ :should_be_emailed? => false)
+ User.stub!(:find).and_return([@user])
+ @user.stub!(:no_xapian_reindex=)
+ end
+
+ it 'should not ask for any daily track things for the user' do
+ expected_conditions = [ "tracking_user_id = ? and track_medium = ?", @user.id, 'email_daily' ]
+ TrackThing.should_not_receive(:find).with(:all, :conditions => expected_conditions).and_return([])
+ TrackMailer.alert_tracks
+ end
+
+
+ it 'should not set the no_xapian_reindex flag on the user' do
+ @user.should_not_receive(:no_xapian_reindex=).with(true)
+ TrackMailer.alert_tracks
+ end
+
+ it 'should not update the time of the user\'s last daily tracking email' do
+ @user.should_not_receive(:last_daily_track_email=).with(Time.now)
+ @user.should_not_receive(:save!)
+ TrackMailer.alert_tracks
+ end
+ it 'should return false' do
+ TrackMailer.alert_tracks.should == false
+ end
+ end
+
end
describe 'delivering the email' do
diff --git a/spec/models/track_thing_spec.rb b/spec/models/track_thing_spec.rb
index 6b9cd6d4a..1a0324a78 100644
--- a/spec/models/track_thing_spec.rb
+++ b/spec/models/track_thing_spec.rb
@@ -28,5 +28,15 @@ describe TrackThing, "when tracking changes" do
found_track.should == @track_thing
end
+ it "will make some sane descriptions of search-based tracks" do
+ tests = [['bob variety:user', "users matching text 'bob'"],
+ ['bob (variety:sent OR variety:followup_sent OR variety:response OR variety:comment) (latest_status:successful OR latest_status:partially_successful OR latest_status:rejected OR latest_status:not_held)', "requests which are successful or unsuccessful or comments matching text 'bob'"],
+ ['(latest_status:waiting_response OR latest_status:waiting_clarification OR waiting_classification:true)', 'requests which are awaiting a response']]
+ for query, description in tests
+ track_thing = TrackThing.create_track_for_search_query(query)
+ track_thing.track_query_description.should == description
+ end
+ end
+
end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index ee6916ffc..751a61060 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -282,3 +282,26 @@ describe User, "when setting a profile photo" do
# end
end
+describe User, "when unconfirmed" do
+ fixtures :users
+
+ before do
+ @user = users(:unconfirmed_user)
+ end
+
+ it "should not be emailed" do
+ @user.should_be_emailed?.should be_false
+ end
+end
+
+describe User, "when emails have bounced" do
+ fixtures :users
+
+ it "should record bounces" do
+ User.record_bounce_for_email("bob@localhost", "The reason we think the email bounced (e.g. a bounce message)")
+
+ user = User.find_user_by_email("bob@localhost")
+ user.email_bounced_at.should_not be_nil
+ user.email_bounce_message.should == "The reason we think the email bounced (e.g. a bounce message)"
+ end
+end
diff --git a/spec/script/handle-mail-replies_spec.rb b/spec/script/handle-mail-replies_spec.rb
new file mode 100644
index 000000000..eae0b516b
--- /dev/null
+++ b/spec/script/handle-mail-replies_spec.rb
@@ -0,0 +1,58 @@
+require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
+require "external_command"
+
+def mail_reply_test(email_filename)
+ Dir.chdir RAILS_ROOT do
+ xc = ExternalCommand.new("script/handle-mail-replies", "--test")
+ xc.run(load_file_fixture(email_filename))
+
+ xc.err.should == ""
+ return xc
+ end
+end
+
+describe "When filtering" do
+ it "should detect an Exim bounce" do
+ r = mail_reply_test("track-response-exim-bounce.email")
+ r.status.should == 1
+ r.out.should == "user@example.com\n"
+ end
+
+ it "should pass on a non-bounce message" do
+ r = mail_reply_test("incoming-request-bad-uuencoding.email")
+ r.status.should == 0
+ r.out.should == ""
+ end
+
+ it "should detect a multipart bounce" do
+ r = mail_reply_test("track-response-multipart-report.email")
+ r.status.should == 1
+ r.out.should == "FailedUser@example.com\n"
+ end
+
+ it "should detect a generic out-of-office" do
+ r = mail_reply_test("track-response-generic-oof.email")
+ r.status.should == 2
+ end
+
+ it "should detect an Exchange-style out-of-office" do
+ r = mail_reply_test("track-response-exchange-oof-1.email")
+ r.status.should == 2
+ end
+
+ it "should detect a Lotus Domino-style out-of-office" do
+ r = mail_reply_test("track-response-lotus-oof-1.email")
+ r.status.should == 2
+ end
+
+ it "should detect a Messagelabs-style out-of-office" do
+ r = mail_reply_test("track-response-messagelabs-oof-1.email")
+ r.status.should == 2
+ end
+
+ it "should detect an out-of-office that has an X-POST-MessageClass header" do
+ r = mail_reply_test("track-response-messageclass-oof.email")
+ r.status.should == 2
+ end
+end
+
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 42c5ff6bf..ffe48c731 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -113,9 +113,9 @@ def validate_as_body(html)
"<html><head><title>Test</title></head><body>#{html}</body></html>")
end
-def basic_auth_login(request)
- username = MySociety::Config.get('ADMIN_USERNAME')
- password = MySociety::Config.get('ADMIN_PASSWORD')
+def basic_auth_login(request, username = nil, password = nil)
+ username = MySociety::Config.get('ADMIN_USERNAME') if username.nil?
+ password = MySociety::Config.get('ADMIN_PASSWORD') if password.nil?
request.env["HTTP_AUTHORIZATION"] = "Basic " + Base64::encode64("#{username}:#{password}")
end
@@ -148,7 +148,7 @@ if $tempfilecount.nil?
end
def load_raw_emails_data(raw_emails)
- raw_email = raw_emails(:useless_raw_email)
+ raw_email = raw_emails(:useless_raw_email)
begin
raw_email.destroy_file_representation!
rescue Errno::ENOENT
diff --git a/spec/views/public_body/show.rhtml_spec.rb b/spec/views/public_body/show.rhtml_spec.rb
index 7793b9b38..cd81888eb 100644
--- a/spec/views/public_body/show.rhtml_spec.rb
+++ b/spec/views/public_body/show.rhtml_spec.rb
@@ -1,7 +1,6 @@
require File.dirname(__FILE__) + '/../../spec_helper'
describe "when viewing a body" do
-
before do
@pb = mock_model(PublicBody,
:name => 'Test Quango',
@@ -28,6 +27,8 @@ describe "when viewing a body" do
assigns[:xapian_requests] = @xap
assigns[:page] = 1
assigns[:per_page] = 10
+ # work round a bug in ActionController::TestRequest; allows request.query_string to work in the template
+ request.env["REQUEST_URI"] = ""
end
it "should be successful" do
@@ -47,11 +48,11 @@ describe "when viewing a body" do
it "should tell total number of requests" do
render "public_body/show"
- response.should include_text("4 Freedom of Information requests made")
+ response.should include_text("4 Freedom of Information requests")
end
it "should cope with no results" do
- @xap.stub!(:results).and_return([])
+ @pb.stub!(:info_requests).and_return([])
render "public_body/show"
response.should have_tag("p", /Nobody has made any Freedom of Information requests/m)
end
@@ -67,10 +68,10 @@ describe "when viewing a body" do
@pb.stub!(:get_tag_values).and_return(['98765', '12345'])
render "public_body/show"
- response.should have_tag("div#request_sidebar") do
+ response.should have_tag("div#header_right") do
with_tag("a[href*=?]", /charity-commission.gov.uk.*RegisteredCharityNumber=98765$/)
end
- response.should have_tag("div#request_sidebar") do
+ response.should have_tag("div#header_right") do
with_tag("a[href*=?]", /charity-commission.gov.uk.*RegisteredCharityNumber=12345$/)
end
end
@@ -80,7 +81,7 @@ describe "when viewing a body" do
@pb.stub!(:get_tag_values).and_return(['SC1234'])
render "public_body/show"
- response.should have_tag("div#request_sidebar") do
+ response.should have_tag("div#header_right") do
with_tag("a[href*=?]", /www.oscr.org.uk.*id=SC1234$/)
end
end
@@ -88,7 +89,7 @@ describe "when viewing a body" do
it "should not link to Charity Commission site if we don't have number" do
render "public_body/show"
- response.should have_tag("div#request_sidebar") do
+ response.should have_tag("div#header_right") do
without_tag("a[href*=?]", /charity-commission.gov.uk/)
end
end
diff --git a/spec/views/request/_after_actions.rhtml_spec.rb b/spec/views/request/_after_actions.rhtml_spec.rb
index a92ef2dda..c73f35d33 100644
--- a/spec/views/request/_after_actions.rhtml_spec.rb
+++ b/spec/views/request/_after_actions.rhtml_spec.rb
@@ -79,30 +79,5 @@ describe 'when displaying actions that can be taken with regard to a request' do
it 'should display a link for the request owner to request a review' do
expect_owner_link('Request an internal review')
end
-
- describe 'when there is no last response' do
-
- before do
- assigns[:last_response] = nil
- end
-
- it 'should display a link for the request owner to send a follow up' do
- expect_owner_link('Send follow up to test public body')
- end
-
- end
-
- describe 'when there is a last response' do
- before do
- assigns[:last_response] = mock_model(IncomingMessage,
- :valid_to_reply_to? => false)
- end
-
- it 'should display a link for the request owner to reply to the last response' do
- expect_owner_link('Reply to test public body')
- end
-
- end
-
-end \ No newline at end of file
+end
diff --git a/spec/views/request/list.rhtml_spec.rb b/spec/views/request/list.rhtml_spec.rb
index 578bd5cc8..60a28eec5 100644
--- a/spec/views/request/list.rhtml_spec.rb
+++ b/spec/views/request/list.rhtml_spec.rb
@@ -5,7 +5,8 @@ describe "when listing recent requests" do
before do
assigns[:page] = 1
assigns[:per_page] = 10
-
+ # work round a bug in ActionController::TestRequest; allows request.query_string to work in the template
+ request.env["REQUEST_URI"] = ""
# we're not testing the interlock plugin's cache
template.stub!(:view_cache).and_yield
end
@@ -32,9 +33,7 @@ describe "when listing recent requests" do
it "should be successful" do
assigns[:list_results] = [ make_mock_event, make_mock_event ]
assigns[:matches_estimated] = 2
-
render "request/list"
-
response.should have_tag("div.request_listing")
response.should_not have_tag("p", /No requests of this sort yet/m)
end
@@ -42,7 +41,6 @@ describe "when listing recent requests" do
it "should cope with no results" do
assigns[:list_results] = [ ]
assigns[:matches_estimated] = 0
-
render "request/list"
response.should have_tag("p", /No requests of this sort yet/m)
response.should_not have_tag("div.request_listing")
diff --git a/vendor/gems/fast_gettext-0.5.10/.specification b/vendor/gems/fast_gettext-0.5.10/.specification
index 7e1bcf3dc..7e241fff7 100644
--- a/vendor/gems/fast_gettext-0.5.10/.specification
+++ b/vendor/gems/fast_gettext-0.5.10/.specification
@@ -2,7 +2,7 @@
name: fast_gettext
version: !ruby/object:Gem::Version
hash: 31
- prerelease: false
+ prerelease:
segments:
- 0
- 5
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
requirements: []
rubyforge_project:
-rubygems_version: 1.3.7
+rubygems_version: 1.4.2
signing_key:
specification_version: 3
summary: A simple, fast and threadsafe implementation of GetText
diff --git a/vendor/gems/fast_gettext-0.5.10/lib/fast_gettext/mo_file.rb b/vendor/gems/fast_gettext-0.5.10/lib/fast_gettext/mo_file.rb
index a6508b05d..3829e511b 100644
--- a/vendor/gems/fast_gettext-0.5.10/lib/fast_gettext/mo_file.rb
+++ b/vendor/gems/fast_gettext-0.5.10/lib/fast_gettext/mo_file.rb
@@ -22,8 +22,12 @@ module FastGettext
#returns the plural forms or all singular translations that where found
def plural(*msgids)
translations = plural_translations(msgids)
- return translations unless translations.empty?
- msgids.map{|msgid| self[msgid] || msgid} #try to translate each id
+ return translations
+ # XXX: 20111004 - Temporary patch for release/0.4 until we upgrade the fast_gettext gem
+ # to 0.60. The code used to say 'unless translations.empty?', but that's wrong:
+ # we must return [] if not found - otherwise chained repositories won't work.
+ # Also removed:
+ # msgids.map{|msgid| self[msgid] || msgid} #try to translate each id
end
def pluralisation_rule
diff --git a/vendor/gems/gettext-2.1.0/.specification b/vendor/gems/gettext-2.1.0/.specification
index 43cf26fff..d318db351 100644
--- a/vendor/gems/gettext-2.1.0/.specification
+++ b/vendor/gems/gettext-2.1.0/.specification
@@ -1,6 +1,12 @@
--- !ruby/object:Gem::Specification
name: gettext
version: !ruby/object:Gem::Version
+ hash: 11
+ prerelease:
+ segments:
+ - 2
+ - 1
+ - 0
version: 2.1.0
platform: ruby
authors:
@@ -14,15 +20,21 @@ default_executable:
dependencies:
- !ruby/object:Gem::Dependency
name: locale
- type: :runtime
- version_requirement:
- version_requirements: !ruby/object:Gem::Requirement
+ prerelease: false
+ requirement: &id001 !ruby/object:Gem::Requirement
+ none: false
requirements:
- - ">="
- !ruby/object:Gem::Version
+ hash: 5
+ segments:
+ - 2
+ - 0
+ - 5
version: 2.0.5
- version:
-description: Ruby-GetText-Package is a GNU GetText-like program for Ruby. The catalog file(po-file) is same format with GNU GetText. So you can use GNU GetText tools for maintaining.
+ type: :runtime
+ version_requirements: *id001
+description: " Ruby-GetText-Package is a GNU GetText-like program for Ruby.\n The catalog file(po-file) is same format with GNU GetText.\n So you can use GNU GetText tools for maintaining.\n"
email: mutomasa at gmail.com
executables:
- rmsgmerge
@@ -791,27 +803,35 @@ files:
- samples/hello.rb
has_rdoc: true
homepage: http://gettext.rubyforge.org/
+licenses: []
+
post_install_message:
rdoc_options: []
require_paths:
- lib
required_ruby_version: !ruby/object:Gem::Requirement
+ none: false
requirements:
- - ">="
- !ruby/object:Gem::Version
+ hash: 3
+ segments:
+ - 0
version: "0"
- version:
required_rubygems_version: !ruby/object:Gem::Requirement
+ none: false
requirements:
- - ">="
- !ruby/object:Gem::Version
+ hash: 3
+ segments:
+ - 0
version: "0"
- version:
requirements: []
rubyforge_project: gettext
-rubygems_version: 1.2.0
+rubygems_version: 1.4.2
signing_key:
specification_version: 3
summary: Ruby-GetText-Package is a libary and tools to localize messages.
diff --git a/vendor/gems/json-1.5.1/.specification b/vendor/gems/json-1.5.1/.specification
index 26813246a..323455f68 100644
--- a/vendor/gems/json-1.5.1/.specification
+++ b/vendor/gems/json-1.5.1/.specification
@@ -36,6 +36,7 @@ post_install_message:
rdoc_options: []
require_paths:
+- bin
- lib
required_ruby_version: !ruby/object:Gem::Requirement
requirements:
@@ -56,10 +57,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
requirements: []
rubyforge_project: json
-rubygems_version: 1.3.7
+rubygems_version: 1.4.2
signing_key:
specification_version: 3
summary: JSON Implementation for Ruby
test_files: []
-
diff --git a/vendor/gems/locale-2.0.5/.specification b/vendor/gems/locale-2.0.5/.specification
index 7d3263441..0150358f4 100644
--- a/vendor/gems/locale-2.0.5/.specification
+++ b/vendor/gems/locale-2.0.5/.specification
@@ -1,6 +1,12 @@
--- !ruby/object:Gem::Specification
name: locale
version: !ruby/object:Gem::Version
+ hash: 5
+ prerelease:
+ segments:
+ - 2
+ - 0
+ - 5
version: 2.0.5
platform: ruby
authors:
@@ -13,7 +19,7 @@ date: 2009-11-13 00:00:00 +00:00
default_executable:
dependencies: []
-description: Ruby-Locale is the pure ruby library which provides basic APIs for localization.
+description: " Ruby-Locale is the pure ruby library which provides basic APIs for localization.\n"
email: mutomasa at gmail.com
executables: []
@@ -70,27 +76,35 @@ files:
- samples/sample_1.rb
has_rdoc: true
homepage: http://locale.rubyforge.org/
+licenses: []
+
post_install_message:
rdoc_options: []
require_paths:
- lib
required_ruby_version: !ruby/object:Gem::Requirement
+ none: false
requirements:
- - ">="
- !ruby/object:Gem::Version
+ hash: 3
+ segments:
+ - 0
version: "0"
- version:
required_rubygems_version: !ruby/object:Gem::Requirement
+ none: false
requirements:
- - ">="
- !ruby/object:Gem::Version
+ hash: 3
+ segments:
+ - 0
version: "0"
- version:
requirements: []
rubyforge_project: locale
-rubygems_version: 1.2.0
+rubygems_version: 1.4.2
signing_key:
specification_version: 3
summary: Ruby-Locale is the pure ruby library which provides basic APIs for localization.
diff --git a/vendor/gems/rack-1.1.0/.specification b/vendor/gems/rack-1.1.0/.specification
index 1e78d1e42..b0c27ec96 100644
--- a/vendor/gems/rack-1.1.0/.specification
+++ b/vendor/gems/rack-1.1.0/.specification
@@ -263,7 +263,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
requirements: []
rubyforge_project: rack
-rubygems_version: 1.3.7
+rubygems_version: 1.4.2
signing_key:
specification_version: 3
summary: a modular Ruby webserver interface
diff --git a/vendor/gems/rdoc-2.4.3/.document b/vendor/gems/rdoc-2.4.3/.document
new file mode 100644
index 000000000..1c483f467
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/.document
@@ -0,0 +1,4 @@
+History.txt
+README.txt
+RI.txt
+lib
diff --git a/vendor/gems/rdoc-2.4.3/.specification b/vendor/gems/rdoc-2.4.3/.specification
new file mode 100644
index 000000000..7686b6c1b
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/.specification
@@ -0,0 +1,57 @@
+--- !ruby/object:Gem::Specification
+name: rdoc
+version: !ruby/object:Gem::Version
+ version: 2.4.3
+platform: ruby
+authors: []
+
+autorequire:
+bindir: bin
+cert_chain: []
+
+date: 2011-08-24 00:00:00 +01:00
+default_executable:
+dependencies: []
+
+description:
+email:
+executables: []
+
+extensions: []
+
+extra_rdoc_files: []
+
+files:
+- lib
+- lib/rdoc
+- lib/rdoc.rb
+has_rdoc: false
+homepage:
+post_install_message:
+rdoc_options: []
+
+require_paths:
+- bin
+- bin
+- lib
+required_ruby_version: !ruby/object:Gem::Requirement
+ requirements:
+ - - ">="
+ - !ruby/object:Gem::Version
+ version: "0"
+ version:
+required_rubygems_version: !ruby/object:Gem::Requirement
+ requirements:
+ - - ">="
+ - !ruby/object:Gem::Version
+ version: "0"
+ version:
+requirements: []
+
+rubyforge_project:
+rubygems_version: 1.2.0
+signing_key:
+specification_version: 2
+summary:
+test_files: []
+
diff --git a/vendor/gems/rdoc-2.4.3/History.txt b/vendor/gems/rdoc-2.4.3/History.txt
new file mode 100644
index 000000000..be15d1420
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/History.txt
@@ -0,0 +1,260 @@
+=== 2.4.3 / 2009-04-01
+
+* 2 Bug Fixes
+ * Corrected patch for file links
+ * Corrected display of file popup
+
+=== 2.4.2 / 2009-03-25
+
+* 2 Minor Enhancements
+ * Added --pipe for turning RDoc on stdin into HTML
+ * Added rdoc/task.rb containing a replacement for rake/rdoctask.rb. Use
+ RDoc::Task now instead of Rake::RDocTask.
+
+* 10 Bug Fixes
+ * Writing the ri cache file to the proper directory. Bug #24459 by Lars
+ Christensen.
+ * Possible fix for Dir::[] and Pathname interaction on 1.9. Bug #24650 by
+ tiburon.
+ * Fixed scanning constants for if/end, etc. pairs. Bug #24609 by Ryan
+ Davis.
+ * Fixed private methods in the C parser. Bug #24599 by Aaron Patterson.
+ * Fixed display of markup on RDoc main page. Bug #24168 by rhubarb.
+ * Fixed display of \\ character in documentation proceeding words.
+ Bug #22112 by James Gray. See RDoc for details.
+ * Fixed parsing and display of arg params for some corner cases. Bug #21113
+ by Csiszár Attila.
+ * Fixed links in Files box. Patch #24403 by Eric Wong.
+ * Toplevel methods now appear in Object. Bug #22677 by Ryan Davis.
+ * Added back --promiscuous which didn't do anything you cared about. Why
+ did you enable it? Nobody looked at that page! Oh, it warns, too.
+
+=== 2.4.1 / 2009-02-26
+
+* 1 Minor Enhancements
+ * Added :attr:, :attr_reader:, :attr_writer:, :attr_accessor: directives.
+ Replaces --accessor. See RDoc::Parser::Ruby for details.
+
+* 3 Bug Fixes
+ * Don't complain when exiting normally. Bug by Matt Neuburg.
+ * Restore --inline-source that warns
+ * Fixed links to files in Darkfish output
+
+=== 2.4.0 / 2009-02-24
+
+* 9 Minor Enhancements
+ * `ri -f html` is now XHTML-happy
+ * Clarified RDoc::Markup link syntax. Bug #23517 by Eric Armstrong.
+ * Number of threads to parse with is now configurable
+ * Darkfish can now use alternate templates from $LOAD_PATH via -T
+ * Removed F95 parser in favor of the rdoc-f95 gem
+ * Moved HTML and XML generators to unmaintained
+ * No gem will be provided as it's too difficult to make them work
+ * Removed options --one-file, --style=, --inline-source, --promiscuous,
+ --op-name
+ * Removed support for --accessor, use regular documentation or
+ the method directive instead. See RDoc::Parser::Ruby
+ * Removed --ri-system as it is unused by Ruby's makefiles
+ * Added method list to index.html
+
+* 6 Bug Fixes
+ * nodoc'd classes no longer appear in the index. Bug #23751 by Clifford
+ Heath.
+ * Fix 1.9 compatibility issues. Bug #23815 by paddor.
+ * Darkfish now respects --charset
+ * RDoc no longer attempts to be lazy when building HTML. This is a
+ workaround. Bug #23893 by Stefano Crocco.
+ * RDoc doesn't crash with def (blah).foo() end
+ * RDoc doesn't crash with #define functions
+
+=== 2.3.0 / 2009-01-28
+
+* 3 Major Enhancements
+ * Michael Granger's Darkfish generator is now the default for HTML output
+ * Various rdoc generation speedups by Hongli Lai. Patches #22555, #22556,
+ #22557, #22562, #22565.
+ * rdoc/discover.rb files are loaded automatically from installed gems
+
+* 8 Minor Enhancements
+ * Added a space after the commas in ri class method lists. RubyForge
+ enhancement #22182.
+ * Improved ri --interactive
+ * Generators can now override generated file locations
+ * Moved unmaintained CHM generator to it's own package
+ * Moved unmaintained extra HTML templates to their own package
+ * Removed experimental texinfo generator
+ * Converted to minitest
+ * Known classes and modules list outputs once per line now for grep
+
+* 11 Bug Fixes
+ * Fix missing superclass in ri output
+ * Fix an RDoc crash when told to parse an empty file
+ * Ignore nonexistent files instead of crashing
+ * .txt and .rdoc files are always considered text. Patch #22897 by Aaron
+ Patterson.
+ * When merging ri data with a nonexistant directory, RDoc no longer crashes
+ * Fix visibility of methods in XML output. Issue by Yehuda Katz.
+ * Fixed relative link generation
+ * Fix crash, RDoc now ignores comments above local variable assignments in
+ modules
+ * RDoc now only accepts adjacent comments for rb_define_module and
+ rb_define_class
+ * C file RDoc is no longer included in token stream
+ * Scan all gem paths to match gem name for ri output
+
+=== 2.2.1 / 2008-09-24
+This version provides some minor fixes and enhancements to 2.2.0 intended
+to polish RDoc for Ruby 1.9.1.
+
+* 3 Minor Enhancements
+ * Support for parsing RDoc from SWIG. Ruby patch #10742 by Gonzalo
+ Garramuno, #13993 by Steven Jenkins.
+ * Simple support for Perl POD documentation. Patch by Hugh Sasse.
+ * Changed the default character set of RDoc's output from iso-8859-1 to
+ utf-8.
+
+* 9 Bug Fixes
+ * Explicitly set the html template's text color, so that the generated
+ documentation will display correctly on browsers with custom text and
+ background color settings (patch by Luther Thompson).
+ * Ensure that RDoc correctly will associate an alias and a method, even
+ if it encounters the alias first because the alias lives in a different
+ file.
+ * Fix the parsing of multiline constants (patch by Chris Alfeld and
+ Joel VanderWerf)
+ * Make --exclude usuable. Ruby patch #11671 by Trans.
+ * Detect inline C functions. Ruby Bug #11993 by Florian Frank.
+ * Fix an issue in which RDoc might not document a class'
+ superclass correctly if the class was defined in multiple files and
+ depending on the order in which RDoc processed the files. This should
+ ensure that the child class -> parent class relationship is correct in
+ ri documentation, allowing ri to lookup inherited methods (i.e., File.read).
+ * Stop ri from crashing when it looks for a completely bogus method (i.e.,
+ File#reada). Now, ri exits with a helpful error message.
+ * Fixed missing display of constant values in ri.
+ * Fixed display of constants in ri's html output.
+
+=== 2.2.0 / 2008-09-19
+This version includes some significant enhancements to ri. See RI.txt for
+documentation about ri.
+
+* 5 Major Enhancements
+ * More extensive unit tests (special thanks to Chris Lowis for contributing
+ a test).
+ * Made ri twice as fast for the most common use case of displaying
+ information for a class or a fully-qualified method
+ (i.e., ri Array#flatten, after ri has created a cache the first time that
+ it runs).
+ * Made ri many times faster when searching for an unqualified method (i.e.,
+ ri read, again after the first such search has populated ri's cache)
+ * Changed ri to do regular expression searches for unqualified methods;
+ now, a regular expression for a method can be passed to ri on the
+ command-line.
+ * Added an interactive mode to ri (patch by Daniel Choi). Now, when ri
+ is given a -i argument, it will allow the user to disambiguate
+ unqualified methods if more than one is present and also will allow a
+ user to get information for a class' method.
+
+* 8 Minor Enhancements
+ * RDoc now adds the package title to the web pages that it generates
+ for files and classes/modules, which helps them appear better in
+ search engine results.
+ * RDoc now automatically generates cross-reference links for classes and
+ methods specified relative to the global namespace (i.e., ::A::B::C#method).
+ * All built-in templates now output valid, strict XHTML.
+ * The documentation is slightly better organized (the markup details were
+ merged into the RDoc module's documentation).
+ * Improved rdoc's HTML generation speed by about 20% (on Windows, the
+ boost seems larger).
+ * Provided an ri command-line option to control its caching behavior.
+ * Improved RDoc's documentation. Added RI.txt to document ri.
+ * Allow HTML templates distributed as gems to be loaded with the -T option,
+ just like the standard templates in rdoc/generator/html (so an HTML
+ template lib/new_template.rb in a gem can be used with rdoc -T new_template)
+
+* 25 Bug fixes:
+ * Fixed prototype detection in C parser. Can process ruby 1.8 C files
+ again.
+ * Fixed the main page for frameless template. Patch by Marcin Raczkowski.
+ * Fixed the main page for frame templates. Now, if no main page is
+ specified, RDoc will default to the README.
+ * Fixed missing stylesheet in generated chm. Patch by Gordon Thiesfeld.
+ * Fixed the parsing of module names starting with '::'. Patch by
+ Giuseppe Bilotta.
+ * Fixed a case where RDoc first would encounter Foo::Bar and then would
+ encounter class Foo. Previously, RDoc erroneously would have considered
+ that both a Foo class and a Foo module existed.
+ * Fix a clase where RDoc would not generate correct cross-reference links
+ to a class contained within a module of the same name (i.e. RDoc::RDoc)
+ * Prevented RDoc from trying to parse binary files, which would produce
+ garbage output.
+ * RDoc now correctly converts ' characters to apostrophes, opening single
+ quotes, and closing single quotes in most cases (smart single quotes).
+ * RDoc now correctly converts " characters to opening double quotes and
+ and closing double quotes in most cases (smart double quotes).
+ * (c) correctly is converted into the copyright symbol.
+ * '&' characters in text now correctly are translated to HTML character codes.
+ * Fixed missing stylesheet in generated chm. Patch by Gordon Thiesfeld.
+ * Fixed broken method links in the built-in templates.
+ * RDoc properly links to files and classes in the one page HTML template.
+ * The kilmer and hefss templates properly syntax highlight when inlining
+ source code.
+ * The kilmer and hefss template class pages properly display methods again.
+ * Fixed broken class, file, and method links in the frameless template.
+ * Fixed the clipping of source code in the html and frameless templates when
+ the source code cannot fit into the window; a scrollbar now will allow
+ all of the source code to be viewed.
+ * Fixed the missing constant descriptions in the html and frameless
+ templates.
+ * Fixed the ri command-line options that customize the directories to be
+ searched for documentation.
+ * Fixed the XML generator. Patch by Anthony Durity.
+ * Stopped the XML template from generating invalid XML due to malformed
+ embedded ruby.
+ * Adding missing information about a class' constants to the XML template.
+ * Fixed the horizontal rule markup (---) so that it correctly adds a
+ horizontal rule rather than suppressing all text that follows.
+
+=== 2.1.0 / 2008-07-20
+
+* 3 Major Enhancements:
+ * RDoc now knows about meta-programmed methods, see RDoc::Parser::Ruby
+ * Reorganized parsers under RDoc::Parser base class
+ * ri now walks the ancestors of a class looking for a method e.g. ri
+ File#read displays documentation for IO#read (may require regeneration of
+ ri data)
+* 5 Minor Enhancements:
+ * Allow links to files
+ * Default options now taken from RDOCOPT environment variable
+ * Class method documentation can be found at toplevel now (def X.foo)
+ * Allow HTML templates distributed as gems to be loaded with the -T option,
+ just like the standard templates in rdoc/generator/html (so an HTML
+ template lib/new_template.rb in a gem can be used with rdoc -T new_template)
+ * `rdoc -v` prints out files, classes, modules and methods as it goes
+* 11 Bug Fixes:
+ * `ri Foo.bar` now looks for class methods also
+ * Sections work in the default template again
+ * Doesn't warn about :foo:: list item being an unrecognized directive
+ * RDoc no longer converts characters inside tt tags
+ * Fixed "unitialized constant RDoc::Markup::ToHtml::HTML"
+ * Fixed generation of relative links
+ * Fixed various diagram generation issues
+ * Fixed templates broken by switch to erb
+ * Fixed issue with <!-- --> style comments
+ * Lowercase words are no longer rdoc'd as methods without leading #, as
+ described in the documentation
+ * RDoc now correctly sets superclasses if they were originally unknown
+
+=== 2.0.0 / 2008-04-10
+
+* 3 Major Enhancements:
+ * Renamespaced everything RDoc under the RDoc module.
+ * New `ri` implementation.
+ * Reads from a cache in ~/.ri/ for enhanced speed.
+ * RubyGems aware, only searches latest gem versions.
+ * Now up to over 100 tests and 200 assertions.
+* 4 Minor Enhancements:
+ * Switched to an ERb-based TemplatePage, see RDoc::TemplatePage.
+ * Class/module ri now displays attribute and constant comments.
+ * Cross-references can be disabled with a leading \.
+ * Relaxed parsing for some RDoc inline markup.
diff --git a/vendor/gems/rdoc-2.4.3/Manifest.txt b/vendor/gems/rdoc-2.4.3/Manifest.txt
new file mode 100644
index 000000000..bccf64e52
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/Manifest.txt
@@ -0,0 +1,126 @@
+.autotest
+.document
+History.txt
+Manifest.txt
+README.txt
+RI.txt
+Rakefile
+bin/rdoc
+bin/ri
+lib/rdoc.rb
+lib/rdoc/alias.rb
+lib/rdoc/anon_class.rb
+lib/rdoc/any_method.rb
+lib/rdoc/attr.rb
+lib/rdoc/cache.rb
+lib/rdoc/class_module.rb
+lib/rdoc/code_object.rb
+lib/rdoc/code_objects.rb
+lib/rdoc/constant.rb
+lib/rdoc/context.rb
+lib/rdoc/diagram.rb
+lib/rdoc/dot.rb
+lib/rdoc/generator.rb
+lib/rdoc/generator/darkfish.rb
+lib/rdoc/generator/markup.rb
+lib/rdoc/generator/ri.rb
+lib/rdoc/generator/template/darkfish/.document
+lib/rdoc/generator/template/darkfish/classpage.rhtml
+lib/rdoc/generator/template/darkfish/filepage.rhtml
+lib/rdoc/generator/template/darkfish/images/brick.png
+lib/rdoc/generator/template/darkfish/images/brick_link.png
+lib/rdoc/generator/template/darkfish/images/bug.png
+lib/rdoc/generator/template/darkfish/images/bullet_black.png
+lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.png
+lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.png
+lib/rdoc/generator/template/darkfish/images/date.png
+lib/rdoc/generator/template/darkfish/images/find.png
+lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif
+lib/rdoc/generator/template/darkfish/images/macFFBgHack.png
+lib/rdoc/generator/template/darkfish/images/package.png
+lib/rdoc/generator/template/darkfish/images/page_green.png
+lib/rdoc/generator/template/darkfish/images/page_white_text.png
+lib/rdoc/generator/template/darkfish/images/page_white_width.png
+lib/rdoc/generator/template/darkfish/images/plugin.png
+lib/rdoc/generator/template/darkfish/images/ruby.png
+lib/rdoc/generator/template/darkfish/images/tag_green.png
+lib/rdoc/generator/template/darkfish/images/wrench.png
+lib/rdoc/generator/template/darkfish/images/wrench_orange.png
+lib/rdoc/generator/template/darkfish/images/zoom.png
+lib/rdoc/generator/template/darkfish/index.rhtml
+lib/rdoc/generator/template/darkfish/js/darkfish.js
+lib/rdoc/generator/template/darkfish/js/jquery.js
+lib/rdoc/generator/template/darkfish/js/quicksearch.js
+lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js
+lib/rdoc/generator/template/darkfish/rdoc.css
+lib/rdoc/ghost_method.rb
+lib/rdoc/include.rb
+lib/rdoc/known_classes.rb
+lib/rdoc/markup.rb
+lib/rdoc/markup/attribute_manager.rb
+lib/rdoc/markup/formatter.rb
+lib/rdoc/markup/fragments.rb
+lib/rdoc/markup/inline.rb
+lib/rdoc/markup/lines.rb
+lib/rdoc/markup/preprocess.rb
+lib/rdoc/markup/to_flow.rb
+lib/rdoc/markup/to_html.rb
+lib/rdoc/markup/to_html_crossref.rb
+lib/rdoc/markup/to_latex.rb
+lib/rdoc/markup/to_test.rb
+lib/rdoc/markup/to_texinfo.rb
+lib/rdoc/meta_method.rb
+lib/rdoc/normal_class.rb
+lib/rdoc/normal_module.rb
+lib/rdoc/options.rb
+lib/rdoc/parser.rb
+lib/rdoc/parser/c.rb
+lib/rdoc/parser/perl.rb
+lib/rdoc/parser/ruby.rb
+lib/rdoc/parser/simple.rb
+lib/rdoc/rdoc.rb
+lib/rdoc/require.rb
+lib/rdoc/ri.rb
+lib/rdoc/ri/cache.rb
+lib/rdoc/ri/descriptions.rb
+lib/rdoc/ri/display.rb
+lib/rdoc/ri/driver.rb
+lib/rdoc/ri/formatter.rb
+lib/rdoc/ri/paths.rb
+lib/rdoc/ri/reader.rb
+lib/rdoc/ri/util.rb
+lib/rdoc/ri/writer.rb
+lib/rdoc/single_class.rb
+lib/rdoc/stats.rb
+lib/rdoc/task.rb
+lib/rdoc/tokenstream.rb
+lib/rdoc/top_level.rb
+test/binary.dat
+test/test.ja.rdoc
+test/test.ja.txt
+test/test_attribute_manager.rb
+test/test_rdoc_any_method.rb
+test/test_rdoc_code_object.rb
+test/test_rdoc_constant.rb
+test/test_rdoc_context.rb
+test/test_rdoc_include.rb
+test/test_rdoc_markup.rb
+test/test_rdoc_markup_attribute_manager.rb
+test/test_rdoc_markup_to_html.rb
+test/test_rdoc_markup_to_html_crossref.rb
+test/test_rdoc_normal_module.rb
+test/test_rdoc_parser.rb
+test/test_rdoc_parser_c.rb
+test/test_rdoc_parser_perl.rb
+test/test_rdoc_parser_ruby.rb
+test/test_rdoc_require.rb
+test/test_rdoc_ri_attribute_formatter.rb
+test/test_rdoc_ri_default_display.rb
+test/test_rdoc_ri_driver.rb
+test/test_rdoc_ri_formatter.rb
+test/test_rdoc_ri_html_formatter.rb
+test/test_rdoc_ri_overstrike_formatter.rb
+test/test_rdoc_task.rb
+test/test_rdoc_top_level.rb
+test/xref_data.rb
+test/xref_test_case.rb
diff --git a/vendor/gems/rdoc-2.4.3/README.txt b/vendor/gems/rdoc-2.4.3/README.txt
new file mode 100644
index 000000000..14a5c3134
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/README.txt
@@ -0,0 +1,47 @@
+= \RDoc
+
+* {RDoc Project Page}[http://rubyforge.org/projects/rdoc/]
+* {RDoc Documentation}[http://rdoc.rubyforge.org/]
+* {RDoc Bug Tracker}[http://rubyforge.org/tracker/?atid=2472&group_id=627&func=browse]
+
+== DESCRIPTION:
+
+RDoc is an application that produces documentation for one or more Ruby source
+files. RDoc includes the +rdoc+ and +ri+ tools for generating and displaying
+online documentation.
+
+At this point in time, RDoc 2.x is a work in progress and may incur further
+API changes beyond what has been made to RDoc 1.0.1. Command-line tools are
+largely unaffected, but internal APIs may shift rapidly.
+
+See RDoc for a description of RDoc's markup and basic use.
+
+== SYNOPSIS:
+
+ gem 'rdoc'
+ require 'rdoc/rdoc'
+ # ... see RDoc
+
+== BUGS:
+
+The markup engine has lots of little bugs. In particular:
+* Escaping does not work for all markup.
+* Typesetting is not always correct.
+* Some output formats (ri, for example) do not correctly handle all of the
+ markup.
+
+RDoc has some subtle bugs processing classes that are split across multiple
+files (bugs that may or may not manifest depending on the order in which
+the files are encountered). This issue can be tracked here[http://rubyforge.org/tracker/index.php?func=detail&aid=22135&group_id=627&atid=2475].
+
+If you find a bug, please report it at the RDoc project's
+tracker[http://rubyforge.org/tracker/?group_id=627] on RubyForge:
+
+== LICENSE:
+
+RDoc is Copyright (c) 2001-2003 Dave Thomas, The Pragmatic Programmers.
+Portions (c) 2007-2009 Eric Hodel. Portions copyright others, see individual
+files for details.
+
+It is free software, and may be redistributed under the terms specified in the
+README file of the Ruby distribution.
diff --git a/vendor/gems/rdoc-2.4.3/RI.txt b/vendor/gems/rdoc-2.4.3/RI.txt
new file mode 100644
index 000000000..27f9e2be7
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/RI.txt
@@ -0,0 +1,58 @@
+= RI
+== Background
++ri+ is a tool that allows Ruby documentation to be viewed on the command-line.
+It is part of RDoc and is expected to work on any platform supported by Ruby.
+
++ri+ will be a bit slow the first time that it runs (or any time that the
+underlying documentation changes) because it builds a cache in the +.ri+
+directory within the user's home directory in order to make future accesses
+faster.
+
+== Usage
+To see information for a class, do:
+ ri class_name
+
+For example, for the +Array+ class, do
+ ri Array
+
+To see information for an instance method, do:
+ ri class_name#method_name
+
+For example, for Array's +join+ method, do:
+ ri Array#join
+
+To see information for a class method, do:
+ ri class_name.method_name
+
+For example, for Module's +private+ method, do:
+ ri Module.private
+
+To search for all methods containing +read+, do:
+ ri read
+
+To search for all methods starting with +read+, do:
+ ri '^read'
+
+To search for all +read+ methods, do:
+ ri '^read$'
+
+== Options
++ri+ supports a variety of options, all of which can be viewed via +--help+.
+Of particular interest, are:
+[-d directory]
+ List of directories from which to source documentation in addition to
+ the standard directories. May be repeated. This can be used to specify
+ the location of site-specific documentation (which can be generated with
+ RDoc).
+[-i]
+ This makes +ri+ go into interactive mode. When +ri+ is in interactive mode,
+ it will allow the user to disambiguate lists of methods in case multiple
+ methods match against a method search string. It also will allow the user
+ to enter in a method name (with auto-completion, if readline is supported)
+ when viewing a class.
+[-T]
+ Send output to stdout, rather than to a pager.
+
+All options also can be specified through the +RI+ environment variable.
+Command-line options always override those specified in the +RI+ environment
+variable.
diff --git a/vendor/gems/rdoc-2.4.3/Rakefile b/vendor/gems/rdoc-2.4.3/Rakefile
new file mode 100644
index 000000000..efe2e5635
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/Rakefile
@@ -0,0 +1,71 @@
+require 'hoe'
+
+$rdoc_rakefile = true
+
+$:.unshift 'lib'
+require 'rdoc'
+
+Hoe.new "rdoc", RDoc::VERSION do |rdoc|
+ rdoc.developer 'Eric Hodel', 'drbrain@segment7.net'
+ rdoc.developer 'Dave Thomas', ''
+ rdoc.developer 'Phil Hagelberg', 'technomancy@gmail.com'
+ rdoc.developer 'Tony Strauss', 'tony.strauss@designingpatterns.com'
+ rdoc.remote_rdoc_dir = ''
+ rdoc.testlib = :minitest
+
+ rdoc.extra_dev_deps << ['minitest', '~> 1.3']
+ rdoc.spec_extras['required_rubygems_version'] = '>= 1.3'
+ rdoc.spec_extras['homepage'] = 'http://rdoc.rubyforge.org'
+end
+
+# These tasks expect to have the following directory structure:
+#
+# git/git.rubini.us/code # Rubinius git HEAD checkout
+# svn/ruby/trunk # ruby subversion HEAD checkout
+# svn/rdoc/trunk # RDoc subversion HEAD checkout
+#
+# If you don't have this directory structure, set RUBY_PATH and/or
+# RUBINIUS_PATH.
+
+diff_options = "-urpN --exclude '*svn*' --exclude '*swp' --exclude '*rbc'"
+rsync_options = "-avP --exclude '*svn*' --exclude '*swp' --exclude '*rbc' --exclude '*.rej' --exclude '*.orig'"
+
+rubinius_dir = ENV['RUBINIUS_PATH'] || '../../../git/git.rubini.us/code'
+ruby_dir = ENV['RUBY_PATH'] || '../../ruby/trunk'
+
+desc "Updates Ruby HEAD with the currently checked-out copy of RDoc."
+task :update_ruby do
+ sh "rsync #{rsync_options} bin/rdoc #{ruby_dir}/bin/rdoc"
+ sh "rsync #{rsync_options} bin/ri #{ruby_dir}/bin/ri"
+ sh "rsync #{rsync_options} lib/ #{ruby_dir}/lib"
+ sh "rsync #{rsync_options} test/ #{ruby_dir}/test/rdoc"
+end
+
+desc "Diffs Ruby HEAD with the currently checked-out copy of RDoc."
+task :diff_ruby do
+ options = "-urpN --exclude '*svn*' --exclude '*swp' --exclude '*rbc'"
+
+ sh "diff #{diff_options} bin/rdoc #{ruby_dir}/bin/rdoc; true"
+ sh "diff #{diff_options} bin/ri #{ruby_dir}/bin/ri; true"
+ sh "diff #{diff_options} lib/rdoc.rb #{ruby_dir}/lib/rdoc.rb; true"
+ sh "diff #{diff_options} lib/rdoc #{ruby_dir}/lib/rdoc; true"
+ sh "diff #{diff_options} test #{ruby_dir}/test/rdoc; true"
+end
+
+desc "Updates Rubinius HEAD with the currently checked-out copy of RDoc."
+task :update_rubinius do
+ sh "rsync #{rsync_options} bin/rdoc #{rubinius_dir}/lib/bin/rdoc.rb"
+ sh "rsync #{rsync_options} bin/ri #{rubinius_dir}/lib/bin/ri.rb"
+ sh "rsync #{rsync_options} lib/ #{rubinius_dir}/lib"
+ sh "rsync #{rsync_options} test/ #{rubinius_dir}/test/rdoc"
+end
+
+desc "Diffs Rubinius HEAD with the currently checked-out copy of RDoc."
+task :diff_rubinius do
+ sh "diff #{diff_options} bin/rdoc #{rubinius_dir}/lib/bin/rdoc.rb; true"
+ sh "diff #{diff_options} bin/ri #{rubinius_dir}/lib/bin/ri.rb; true"
+ sh "diff #{diff_options} lib/rdoc.rb #{rubinius_dir}/lib/rdoc.rb; true"
+ sh "diff #{diff_options} lib/rdoc #{rubinius_dir}/lib/rdoc; true"
+ sh "diff #{diff_options} test #{rubinius_dir}/test/rdoc; true"
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/bin/rdoc b/vendor/gems/rdoc-2.4.3/bin/rdoc
new file mode 100755
index 000000000..a94f4232e
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/bin/rdoc
@@ -0,0 +1,35 @@
+#!/usr/bin/env ruby
+#
+# RDoc: Documentation tool for source code
+# (see lib/rdoc/rdoc.rb for more information)
+#
+# Copyright (c) 2003 Dave Thomas
+# Released under the same terms as Ruby
+#
+# $Revision: 15033 $
+
+require 'rdoc/rdoc'
+
+begin
+ r = RDoc::RDoc.new
+ r.document ARGV
+rescue Interrupt
+ $stderr.puts
+ $stderr.puts "Interrupted"
+ exit 1
+rescue SystemExit
+ raise
+rescue Exception => e
+ if $DEBUG_RDOC then
+ $stderr.puts e.message
+ $stderr.puts "#{e.backtrace.join "\n\t"}"
+ $stderr.puts
+ else
+ $stderr.puts "uh-oh! RDoc had a problem:"
+ $stderr.puts e.message
+ $stderr.puts
+ $stderr.puts "run with --debug for full backtrace"
+ end
+ exit 1
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/bin/ri b/vendor/gems/rdoc-2.4.3/bin/ri
new file mode 100755
index 000000000..243557403
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/bin/ri
@@ -0,0 +1,5 @@
+#!/usr/bin/env ruby
+
+require 'rdoc/ri/driver'
+
+RDoc::RI::Driver.run ARGV
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc.rb
new file mode 100644
index 000000000..bb085ec15
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc.rb
@@ -0,0 +1,398 @@
+$DEBUG_RDOC = nil
+
+# :main: README.txt
+
+##
+# = \RDoc - Ruby Documentation System
+#
+# This package contains RDoc and RDoc::Markup. RDoc is an application that
+# produces documentation for one or more Ruby source files. It works similarly
+# to JavaDoc, parsing the source, and extracting the definition for classes,
+# modules, and methods (along with includes and requires). It associates with
+# these optional documentation contained in the immediately preceding comment
+# block, and then renders the result using a pluggable output formatter.
+# RDoc::Markup is a library that converts plain text into various output
+# formats. The markup library is used to interpret the comment blocks that
+# RDoc uses to document methods, classes, and so on.
+#
+# == Roadmap
+#
+# * If you want to use RDoc to create documentation for your Ruby source files,
+# read on.
+# * If you want to include extensions written in C, see RDoc::Parser::C
+# * If you want to drive RDoc programmatically, see RDoc::RDoc.
+# * If you want to use the library to format text blocks into HTML, have a look
+# at RDoc::Markup.
+# * If you want to try writing your own HTML output template, see
+# RDoc::Generator::HTML
+#
+# == Summary
+#
+# Once installed, you can create documentation using the +rdoc+ command
+#
+# % rdoc [options] [names...]
+#
+# For an up-to-date option summary, type
+# % rdoc --help
+#
+# A typical use might be to generate documentation for a package of Ruby
+# source (such as RDoc itself).
+#
+# % rdoc
+#
+# This command generates documentation for all the Ruby and C source
+# files in and below the current directory. These will be stored in a
+# documentation tree starting in the subdirectory +doc+.
+#
+# You can make this slightly more useful for your readers by having the
+# index page contain the documentation for the primary file. In our
+# case, we could type
+#
+# % rdoc --main rdoc.rb
+#
+# You'll find information on the various formatting tricks you can use
+# in comment blocks in the documentation this generates.
+#
+# RDoc uses file extensions to determine how to process each file. File names
+# ending +.rb+ and +.rbw+ are assumed to be Ruby source. Files
+# ending +.c+ are parsed as C files. All other files are assumed to
+# contain just Markup-style markup (with or without leading '#' comment
+# markers). If directory names are passed to RDoc, they are scanned
+# recursively for C and Ruby source files only.
+#
+# == \Options
+#
+# rdoc can be passed a variety of command-line options. In addition,
+# options can be specified via the +RDOCOPT+ environment variable, which
+# functions similarly to the +RUBYOPT+ environment variable.
+#
+# % export RDOCOPT="-S"
+#
+# will make rdoc default to inline method source code. Command-line options
+# always will override those in +RDOCOPT+.
+#
+# Run:
+#
+# rdoc --help
+#
+# for full details on rdoc's options.
+#
+# == Documenting Source Code
+#
+# Comment blocks can be written fairly naturally, either using <tt>#</tt> on
+# successive lines of the comment, or by including the comment in
+# a =begin/=end block. If you use the latter form, the =begin line must be
+# flagged with an RDoc tag:
+#
+# =begin rdoc
+# Documentation to be processed by RDoc.
+#
+# ...
+# =end
+#
+# RDoc stops processing comments if it finds a comment line containing
+# a <tt>--</tt>. This can be used to separate external from internal
+# comments, or to stop a comment being associated with a method, class, or
+# module. Commenting can be turned back on with a line that starts with a
+# <tt>++</tt>.
+#
+# ##
+# # Extract the age and calculate the date-of-birth.
+# #--
+# # FIXME: fails if the birthday falls on February 29th
+# #++
+# # The DOB is returned as a Time object.
+#
+# def get_dob(person)
+# # ...
+# end
+#
+# Names of classes, files, and any method names containing an
+# underscore or preceded by a hash character are automatically hyperlinked
+# from comment text to their description.
+#
+# Method parameter lists are extracted and displayed with the method
+# description. If a method calls +yield+, then the parameters passed to yield
+# will also be displayed:
+#
+# def fred
+# ...
+# yield line, address
+#
+# This will get documented as:
+#
+# fred() { |line, address| ... }
+#
+# You can override this using a comment containing ':yields: ...' immediately
+# after the method definition
+#
+# def fred # :yields: index, position
+# # ...
+#
+# yield line, address
+#
+# which will get documented as
+#
+# fred() { |index, position| ... }
+#
+# +:yields:+ is an example of a documentation directive. These appear
+# immediately after the start of the document element they are modifying.
+#
+# RDoc automatically cross-references words with underscores or camel-case.
+# To suppress cross-references, prefix the word with a \\ character. To
+# include special characters like "\\n", you'll need to use two \\
+# characters like "\\\\\\n".
+#
+# == \Markup
+#
+# * The markup engine looks for a document's natural left margin. This is
+# used as the initial margin for the document.
+#
+# * Consecutive lines starting at this margin are considered to be a
+# paragraph.
+#
+# * If a paragraph starts with a "*", "-", or with "<digit>.", then it is
+# taken to be the start of a list. The margin in increased to be the first
+# non-space following the list start flag. Subsequent lines should be
+# indented to this new margin until the list ends. For example:
+#
+# * this is a list with three paragraphs in
+# the first item. This is the first paragraph.
+#
+# And this is the second paragraph.
+#
+# 1. This is an indented, numbered list.
+# 2. This is the second item in that list
+#
+# This is the third conventional paragraph in the
+# first list item.
+#
+# * This is the second item in the original list
+#
+# * You can also construct labeled lists, sometimes called description
+# or definition lists. Do this by putting the label in square brackets
+# and indenting the list body:
+#
+# [cat] a small furry mammal
+# that seems to sleep a lot
+#
+# [ant] a little insect that is known
+# to enjoy picnics
+#
+# A minor variation on labeled lists uses two colons to separate the
+# label from the list body:
+#
+# cat:: a small furry mammal
+# that seems to sleep a lot
+#
+# ant:: a little insect that is known
+# to enjoy picnics
+#
+# This latter style guarantees that the list bodies' left margins are
+# aligned: think of them as a two column table.
+#
+# * Any line that starts to the right of the current margin is treated
+# as verbatim text. This is useful for code listings. The example of a
+# list above is also verbatim text.
+#
+# * A line starting with an equals sign (=) is treated as a
+# heading. Level one headings have one equals sign, level two headings
+# have two,and so on.
+#
+# * A line starting with three or more hyphens (at the current indent)
+# generates a horizontal rule. The more hyphens, the thicker the rule
+# (within reason, and if supported by the output device)
+#
+# * You can use markup within text (except verbatim) to change the
+# appearance of parts of that text. Out of the box, RDoc::Markup
+# supports word-based and general markup.
+#
+# Word-based markup uses flag characters around individual words:
+#
+# [<tt>\*word*</tt>] displays word in a *bold* font
+# [<tt>\_word_</tt>] displays word in an _emphasized_ font
+# [<tt>\+word+</tt>] displays word in a +code+ font
+#
+# General markup affects text between a start delimiter and and end
+# delimiter. Not surprisingly, these delimiters look like HTML markup.
+#
+# [<tt>\<b>text...</b></tt>] displays word in a *bold* font
+# [<tt>\<em>text...</em></tt>] displays word in an _emphasized_ font
+# [<tt>\<i>text...</i></tt>] displays word in an <i>italicized</i> font
+# [<tt>\<tt>text...\</tt></tt>] displays word in a +code+ font
+#
+# Unlike conventional Wiki markup, general markup can cross line
+# boundaries. You can turn off the interpretation of markup by
+# preceding the first character with a backslash. This only works for
+# simple markup, not HTML-style markup.
+#
+# * Hyperlinks to the web starting http:, mailto:, ftp:, or www. are
+# recognized. An HTTP url that references an external image file is
+# converted into an inline \<IMG..>. Hyperlinks starting 'link:' are
+# assumed to refer to local files whose path is relative to the --op
+# directory.
+#
+# Hyperlinks can also be of the form <tt>label</tt>[url], in which
+# case the label is used in the displayed text, and +url+ is
+# used as the target. If +label+ contains multiple words,
+# put it in braces: <em>{multi word label}[</em>url<em>]</em>.
+#
+# Example hyperlinks:
+#
+# link:RDoc.html
+# http://rdoc.rubyforge.org
+# mailto:user@example.com
+# {RDoc Documentation}[http://rdoc.rubyforge.org]
+# {RDoc Markup}[link:RDoc/Markup.html]
+#
+# == Directives
+#
+# [+:nodoc:+ / +:nodoc:+ all]
+# This directive prevents documentation for the element from
+# being generated. For classes and modules, the methods, aliases,
+# constants, and attributes directly within the affected class or
+# module also will be omitted. By default, though, modules and
+# classes within that class of module _will_ be documented. This is
+# turned off by adding the +all+ modifier.
+#
+# module MyModule # :nodoc:
+# class Input
+# end
+# end
+#
+# module OtherModule # :nodoc: all
+# class Output
+# end
+# end
+#
+# In the above code, only class <tt>MyModule::Input</tt> will be documented.
+# The +:nodoc:+ directive is global across all files for the class or module
+# to which it applies, so use +:stopdoc:+/+:startdoc:+ to suppress
+# documentation only for a particular set of methods, etc.
+#
+# [+:doc:+]
+# Forces a method or attribute to be documented even if it wouldn't be
+# otherwise. Useful if, for example, you want to include documentation of a
+# particular private method.
+#
+# [+:notnew:+]
+# Only applicable to the +initialize+ instance method. Normally RDoc
+# assumes that the documentation and parameters for +initialize+ are
+# actually for the +new+ method, and so fakes out a +new+ for the class.
+# The +:notnew:+ modifier stops this. Remember that +initialize+ is private,
+# so you won't see the documentation unless you use the +-a+ command line
+# option.
+#
+# Comment blocks can contain other directives:
+#
+# [<tt>:section: title</tt>]
+# Starts a new section in the output. The title following +:section:+ is
+# used as the section heading, and the remainder of the comment containing
+# the section is used as introductory text. Subsequent methods, aliases,
+# attributes, and classes will be documented in this section. A :section:
+# comment block may have one or more lines before the :section: directive.
+# These will be removed, and any identical lines at the end of the block are
+# also removed. This allows you to add visual cues such as:
+#
+# # ----------------------------------------
+# # :section: My Section
+# # This is the section that I wrote.
+# # See it glisten in the noon-day sun.
+# # ----------------------------------------
+#
+# [+:call-seq:+]
+# Lines up to the next blank line in the comment are treated as the method's
+# calling sequence, overriding the default parsing of method parameters and
+# yield arguments.
+#
+# [+:include:+ _filename_]
+# \Include the contents of the named file at this point. The file will be
+# searched for in the directories listed by the +--include+ option, or in
+# the current directory by default. The contents of the file will be
+# shifted to have the same indentation as the ':' at the start of
+# the :include: directive.
+#
+# [+:title:+ _text_]
+# Sets the title for the document. Equivalent to the <tt>--title</tt>
+# command line parameter. (The command line parameter overrides any :title:
+# directive in the source).
+#
+# [+:enddoc:+]
+# Document nothing further at the current level.
+#
+# [+:main:+ _name_]
+# Equivalent to the <tt>--main</tt> command line parameter.
+#
+# [+:stopdoc:+ / +:startdoc:+]
+# Stop and start adding new documentation elements to the current container.
+# For example, if a class has a number of constants that you don't want to
+# document, put a +:stopdoc:+ before the first, and a +:startdoc:+ after the
+# last. If you don't specify a +:startdoc:+ by the end of the container,
+# disables documentation for the entire class or module.
+#
+# == Other stuff
+#
+# RDoc is currently being maintained by Eric Hodel <drbrain@segment7.net>
+#
+# Dave Thomas <dave@pragmaticprogrammer.com> is the original author of RDoc.
+#
+# == Credits
+#
+# * The Ruby parser in rdoc/parse.rb is based heavily on the outstanding
+# work of Keiju ISHITSUKA of Nippon Rational Inc, who produced the Ruby
+# parser for irb and the rtags package.
+#
+# * Code to diagram classes and modules was written by Sergey A Yanovitsky
+# (Jah) of Enticla.
+#
+# * Charset patch from MoonWolf.
+#
+# * Rich Kilmer wrote the kilmer.rb output template.
+#
+# * Dan Brickley led the design of the RDF format.
+#
+# == License
+#
+# RDoc is Copyright (c) 2001-2003 Dave Thomas, The Pragmatic Programmers. It
+# is free software, and may be redistributed under the terms specified
+# in the README file of the Ruby distribution.
+#
+# == Warranty
+#
+# This software is provided "as is" and without any express or implied
+# warranties, including, without limitation, the implied warranties of
+# merchantibility and fitness for a particular purpose.
+
+module RDoc
+
+ ##
+ # Exception thrown by any rdoc error.
+
+ class Error < RuntimeError; end
+
+ RDocError = Error # :nodoc:
+
+ ##
+ # RDoc version you are using
+
+ VERSION = '2.4.3'
+
+ ##
+ # Name of the dotfile that contains the description of files to be processed
+ # in the current directory
+
+ DOT_DOC_FILENAME = ".document"
+
+ GENERAL_MODIFIERS = %w[nodoc].freeze
+
+ CLASS_MODIFIERS = GENERAL_MODIFIERS
+
+ ATTR_MODIFIERS = GENERAL_MODIFIERS
+
+ CONSTANT_MODIFIERS = GENERAL_MODIFIERS
+
+ METHOD_MODIFIERS = GENERAL_MODIFIERS +
+ %w[arg args yield yields notnew not-new not_new doc]
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/alias.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/alias.rb
new file mode 100644
index 000000000..74a8d4e7c
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/alias.rb
@@ -0,0 +1,54 @@
+require 'rdoc/code_object'
+
+##
+# Represent an alias, which is an old_name/new_name pair associated with a
+# particular context
+
+class RDoc::Alias < RDoc::CodeObject
+
+ ##
+ # Allow comments to be overridden
+
+ attr_writer :comment
+
+ ##
+ # Aliased name
+
+ attr_accessor :new_name
+
+ ##
+ # Aliasee's name
+
+ attr_accessor :old_name
+
+ ##
+ # Source file token stream
+
+ attr_accessor :text
+
+ ##
+ # Creates a new Alias with a token stream of +text+ that aliases +old_name+
+ # to +new_name+ and has +comment+
+
+ def initialize(text, old_name, new_name, comment)
+ super()
+ @text = text
+ @old_name = old_name
+ @new_name = new_name
+ self.comment = comment
+ end
+
+ def inspect # :nodoc:
+ "#<%s:0x%x %s.alias_method %s, %s>" % [
+ self.class, object_id,
+ parent.name, @old_name, @new_name,
+ ]
+ end
+
+ def to_s # :nodoc:
+ "alias: #{self.old_name} -> #{self.new_name}\n#{self.comment}"
+ end
+
+end
+
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/anon_class.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/anon_class.rb
new file mode 100644
index 000000000..0a684f2df
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/anon_class.rb
@@ -0,0 +1,10 @@
+require 'rdoc/class_module'
+
+##
+# An anonymous class like:
+#
+# c = Class.new do end
+
+class RDoc::AnonClass < RDoc::ClassModule
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/any_method.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/any_method.rb
new file mode 100644
index 000000000..b65fd9ab9
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/any_method.rb
@@ -0,0 +1,190 @@
+require 'rdoc/code_object'
+require 'rdoc/tokenstream'
+
+##
+# AnyMethod is the base class for objects representing methods
+
+class RDoc::AnyMethod < RDoc::CodeObject
+
+ ##
+ # Method name
+
+ attr_writer :name
+
+ ##
+ # public, protected, private
+
+ attr_accessor :visibility
+
+ ##
+ # Parameters yielded by the called block
+
+ attr_accessor :block_params
+
+ ##
+ # Don't rename \#initialize to \::new
+
+ attr_accessor :dont_rename_initialize
+
+ ##
+ # Is this a singleton method?
+
+ attr_accessor :singleton
+
+ ##
+ # Source file token stream
+
+ attr_reader :text
+
+ ##
+ # Array of other names for this method
+
+ attr_reader :aliases
+
+ ##
+ # Fragment reference for this method
+
+ attr_reader :aref
+
+ ##
+ # The method we're aliasing
+
+ attr_accessor :is_alias_for
+
+ ##
+ # Parameters for this method
+
+ attr_overridable :params, :param, :parameters, :parameter
+
+ ##
+ # Different ways to call this method
+
+ attr_accessor :call_seq
+
+ include RDoc::TokenStream
+
+ ##
+ # Resets method fragment reference counter
+
+ def self.reset
+ @@aref = 'M000000'
+ end
+
+ reset
+
+ def initialize(text, name)
+ super()
+ @text = text
+ @name = name
+ @token_stream = nil
+ @visibility = :public
+ @dont_rename_initialize = false
+ @block_params = nil
+ @aliases = []
+ @is_alias_for = nil
+ @call_seq = nil
+
+ @aref = @@aref
+ @@aref = @@aref.succ
+ end
+
+ ##
+ # Order by #singleton then #name
+
+ def <=>(other)
+ [@singleton ? 0 : 1, @name] <=> [other.singleton ? 0 : 1, other.name]
+ end
+
+ ##
+ # Adds +method+ as an alias for this method
+
+ def add_alias(method)
+ @aliases << method
+ end
+
+ ##
+ # HTML id-friendly method name
+
+ def html_name
+ @name.gsub(/[^a-z]+/, '-')
+ end
+
+ def inspect # :nodoc:
+ alias_for = @is_alias_for ? " (alias for #{@is_alias_for.name})" : nil
+ "#<%s:0x%x %s%s%s (%s)%s>" % [
+ self.class, object_id,
+ parent_name,
+ singleton ? '::' : '#',
+ name,
+ visibility,
+ alias_for,
+ ]
+ end
+
+ ##
+ # Full method name including namespace
+
+ def full_name
+ "#{@parent.full_name}#{pretty_name}"
+ end
+
+ ##
+ # Method name
+
+ def name
+ return @name if @name
+
+ @name = @call_seq[/^.*?\.(\w+)/, 1] || @call_seq
+ end
+
+ ##
+ # Pretty parameter list for this method
+
+ def param_seq
+ params = params.gsub(/\s*\#.*/, '')
+ params = params.tr("\n", " ").squeeze(" ")
+ params = "(#{params})" unless p[0] == ?(
+
+ if block = block_params then # yes, =
+ # If this method has explicit block parameters, remove any explicit
+ # &block
+ params.sub!(/,?\s*&\w+/)
+
+ block.gsub!(/\s*\#.*/, '')
+ block = block.tr("\n", " ").squeeze(" ")
+ if block[0] == ?(
+ block.sub!(/^\(/, '').sub!(/\)/, '')
+ end
+ params << " { |#{block}| ... }"
+ end
+
+ params
+ end
+
+ ##
+ # Path to this method
+
+ def path
+ "#{@parent.path}##{@aref}"
+ end
+
+ ##
+ # Method name with class/instance indicator
+
+ def pretty_name
+ "#{singleton ? '::' : '#'}#{@name}"
+ end
+
+ def to_s # :nodoc:
+ "#{self.class.name}: #{full_name} (#{@text})\n#{@comment}"
+ end
+
+ ##
+ # Type of method (class or instance)
+
+ def type
+ singleton ? 'class' : 'instance'
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/attr.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/attr.rb
new file mode 100644
index 000000000..235a5ab23
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/attr.rb
@@ -0,0 +1,79 @@
+require 'rdoc/code_object'
+
+##
+# An attribute created by \#attr, \#attr_reader, \#attr_writer or
+# \#attr_accessor
+
+class RDoc::Attr < RDoc::CodeObject
+
+ ##
+ # Name of the attribute
+
+ attr_accessor :name
+
+ ##
+ # Is the attribute readable, writable or both?
+
+ attr_accessor :rw
+
+ ##
+ # Source file token stream
+
+ attr_accessor :text
+
+ ##
+ # public, protected, private
+
+ attr_accessor :visibility
+
+ def initialize(text, name, rw, comment)
+ super()
+ @text = text
+ @name = name
+ @rw = rw
+ @visibility = :public
+ self.comment = comment
+ end
+
+ ##
+ # Attributes are ordered by name
+
+ def <=>(other)
+ self.name <=> other.name
+ end
+
+ ##
+ # An HTML id-friendly representation of #name
+
+ def html_name
+ @name.gsub(/[^a-z]+/, '-')
+ end
+
+ def inspect # :nodoc:
+ attr = case rw
+ when 'RW' then :attr_accessor
+ when 'R' then :attr_reader
+ when 'W' then :attr_writer
+ else
+ " (#{rw})"
+ end
+
+ "#<%s:0x%x %s.%s :%s>" % [
+ self.class, object_id,
+ parent_name, attr, @name,
+ ]
+ end
+
+ ##
+ # URL path for this attribute
+
+ def path
+ "#{@parent.path}##{@name}"
+ end
+
+ def to_s # :nodoc:
+ "attr: #{self.name} #{self.rw}\n#{self.comment}"
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/cache.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/cache.rb
new file mode 100644
index 000000000..bdd830a13
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/cache.rb
@@ -0,0 +1,41 @@
+require 'thread'
+require 'singleton'
+
+##
+# A generic, thread-safe in-memory cache. It's used for caching
+# RDoc::TemplatePage objects when generating RDoc output.
+
+class RDoc::Cache
+
+ include Singleton
+
+ ##
+ # Creates a new, empty cache
+
+ def initialize
+ @contents = {}
+ @lock = Mutex.new
+ end
+
+ ##
+ # Checks whether there's a value in the cache with key +key+. If so, then
+ # that value will be returned. Otherwise, the given block will be run, and
+ # its return value will be put into the cache, and returned.
+
+ def cache(key)
+ @lock.synchronize do
+ @contents[key] ||= yield
+ end
+ end
+
+ ##
+ # Clears the contents of the cache
+
+ def clear
+ @lock.synchronize do
+ @contents.clear
+ end
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/class_module.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/class_module.rb
new file mode 100644
index 000000000..dc8874f9f
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/class_module.rb
@@ -0,0 +1,87 @@
+require 'rdoc/context'
+
+##
+# ClassModule is the base class for objects representing either a class or a
+# module.
+
+class RDoc::ClassModule < RDoc::Context
+
+ attr_accessor :diagram
+
+ ##
+ # Creates a new ClassModule with +name+ with optional +superclass+
+
+ def initialize(name, superclass = 'Object')
+ @diagram = nil
+ @full_name = nil
+ @name = name
+ @superclass = superclass
+ super()
+ end
+
+ ##
+ # Finds a class or module with +name+ in this namespace or its descendents
+
+ def find_class_named(name)
+ return self if full_name == name
+ @classes.each_value {|c| return c if c.find_class_named(name) }
+ nil
+ end
+
+ ##
+ # Return the fully qualified name of this class or module
+
+ def full_name
+ @full_name ||= if RDoc::ClassModule === @parent then
+ "#{@parent.full_name}::#{@name}"
+ else
+ @name
+ end
+ end
+
+ ##
+ # 'module' or 'class'
+
+ def type
+ module? ? 'module' : 'class'
+ end
+
+ ##
+ # Does this object represent a module?
+
+ def module?
+ false
+ end
+
+ ##
+ # Path to this class or module
+
+ def path
+ http_url RDoc::RDoc.current.generator.class_dir
+ end
+
+ ##
+ # Get the superclass of this class. Attempts to retrieve the superclass
+ # object, returns the name if it is not known.
+
+ def superclass
+ raise NoMethodError, "#{full_name} is a module" if module?
+
+ RDoc::TopLevel.find_class_named(@superclass) || @superclass
+ end
+
+ ##
+ # Set the superclass of this class to +superclass+
+
+ def superclass=(superclass)
+ raise NoMethodError, "#{full_name} is a module" if module?
+
+ @superclass = superclass if @superclass.nil? or @superclass == 'Object'
+ end
+
+ def to_s # :nodoc:
+ "#{self.class}: #{full_name} #{@comment} #{super}"
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/code_object.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/code_object.rb
new file mode 100644
index 000000000..2b7d9cded
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/code_object.rb
@@ -0,0 +1,152 @@
+require 'rdoc'
+
+##
+# We contain the common stuff for contexts (which are containers) and other
+# elements (methods, attributes and so on)
+
+class RDoc::CodeObject
+
+ ##
+ # Our comment
+
+ attr_reader :comment
+
+ ##
+ # Do we document our children?
+
+ attr_reader :document_children
+
+ ##
+ # Do we document ourselves?
+
+ attr_reader :document_self
+
+ ##
+ # Are we done documenting (ie, did we come across a :enddoc:)?
+
+ attr_accessor :done_documenting
+
+ ##
+ # Force documentation of this CodeObject
+
+ attr_accessor :force_documentation
+
+ ##
+ # Our parent CodeObject
+
+ attr_accessor :parent
+
+ ##
+ # Which section are we in
+
+ attr_accessor :section
+
+ ##
+ # We are the model of the code, but we know that at some point we will be
+ # worked on by viewers. By implementing the Viewable protocol, viewers can
+ # associated themselves with these objects.
+
+ attr_accessor :viewer
+
+ ##
+ # There's a wee trick we pull. Comment blocks can have directives that
+ # override the stuff we extract during the parse. So, we have a special
+ # class method, attr_overridable, that lets code objects list those
+ # directives. When a comment is assigned, we then extract out any matching
+ # directives and update our object
+
+ def self.attr_overridable(name, *aliases)
+ @overridables ||= {}
+
+ attr_accessor name
+
+ aliases.unshift name
+
+ aliases.each do |directive_name|
+ @overridables[directive_name.to_s] = name
+ end
+ end
+
+ ##
+ # Creates a new CodeObject that will document itself and its children
+
+ def initialize
+ @comment = nil
+ @document_children = true
+ @document_self = true
+ @done_documenting = false
+ @force_documentation = false
+ @parent = nil
+ end
+
+ ##
+ # Replaces our comment with +comment+, unless it is empty.
+
+ def comment=(comment)
+ @comment = comment unless comment.empty?
+ end
+
+ ##
+ # Enables or disables documentation of this CodeObject's children. Calls
+ # remove_classes_and_modules when disabling.
+
+ def document_children=(document_children)
+ @document_children = document_children
+ remove_classes_and_modules unless document_children
+ end
+
+ ##
+ # Enables or disables documentation of this CodeObject. Calls
+ # remove_methods_etc when disabling.
+
+ def document_self=(document_self)
+ @document_self = document_self
+ remove_methods_etc unless document_self
+ end
+
+ ##
+ # File name of our parent
+
+ def parent_file_name
+ @parent ? @parent.base_name : '(unknown)'
+ end
+
+ ##
+ # Name of our parent
+
+ def parent_name
+ @parent ? @parent.full_name : '(unknown)'
+ end
+
+ ##
+ # Callback called upon disabling documentation of children. See
+ # #document_children=
+
+ def remove_classes_and_modules
+ end
+
+ ##
+ # Callback called upon disabling documentation of ourself. See
+ # #document_self=
+
+ def remove_methods_etc
+ end
+
+ ##
+ # Enable capture of documentation
+
+ def start_doc
+ @document_self = true
+ @document_children = true
+ end
+
+ ##
+ # Disable capture of documentation
+
+ def stop_doc
+ @document_self = false
+ @document_children = false
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/code_objects.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/code_objects.rb
new file mode 100644
index 000000000..c60dad92d
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/code_objects.rb
@@ -0,0 +1,23 @@
+# We represent the various high-level code constructs that appear in Ruby
+# programs: classes, modules, methods, and so on.
+
+require 'rdoc/code_object'
+require 'rdoc/context'
+require 'rdoc/top_level'
+
+require 'rdoc/class_module'
+require 'rdoc/normal_class'
+require 'rdoc/normal_module'
+require 'rdoc/anon_class'
+require 'rdoc/single_class'
+
+require 'rdoc/any_method'
+require 'rdoc/alias'
+require 'rdoc/ghost_method'
+require 'rdoc/meta_method'
+
+require 'rdoc/attr'
+require 'rdoc/constant'
+require 'rdoc/require'
+require 'rdoc/include'
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/constant.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/constant.rb
new file mode 100644
index 000000000..56566da8c
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/constant.rb
@@ -0,0 +1,36 @@
+require 'rdoc/code_object'
+
+##
+# A constant
+
+class RDoc::Constant < RDoc::CodeObject
+
+ ##
+ # The constant's name
+
+ attr_accessor :name
+
+ ##
+ # The constant's value
+
+ attr_accessor :value
+
+ ##
+ # Creates a new constant with +name+, +value+ and +comment+
+
+ def initialize(name, value, comment)
+ super()
+ @name = name
+ @value = value
+ self.comment = comment
+ end
+
+ ##
+ # Path to this constant
+
+ def path
+ "#{@parent.path}##{@name}"
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/context.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/context.rb
new file mode 100644
index 000000000..b6763991d
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/context.rb
@@ -0,0 +1,712 @@
+require 'thread'
+require 'rdoc/code_object'
+
+##
+# A Context is something that can hold modules, classes, methods, attributes,
+# aliases, requires, and includes. Classes, modules, and files are all
+# Contexts.
+
+class RDoc::Context < RDoc::CodeObject
+
+ ##
+ # Types of methods
+
+ TYPES = %w[class instance]
+
+ ##
+ # Method visibilities
+
+ VISIBILITIES = [:public, :protected, :private]
+
+ ##
+ # Aliased methods
+
+ attr_reader :aliases
+
+ ##
+ # attr* methods
+
+ attr_reader :attributes
+
+ ##
+ # Constants defined
+
+ attr_reader :constants
+
+ ##
+ # Current section of documentation
+
+ attr_reader :current_section
+
+ ##
+ # Files this context is found in
+
+ attr_reader :in_files
+
+ ##
+ # Modules this context includes
+
+ attr_reader :includes
+
+ ##
+ # Methods defined in this context
+
+ attr_reader :method_list
+
+ ##
+ # Name of this class excluding namespace. See also full_name
+
+ attr_reader :name
+
+ ##
+ # Files this context requires
+
+ attr_reader :requires
+
+ ##
+ # Sections in this context
+
+ attr_reader :sections
+
+ ##
+ # Aliases that haven't been resolved to a method
+
+ attr_accessor :unmatched_alias_lists
+
+ ##
+ # Current visibility of this context
+
+ attr_reader :visibility
+
+ ##
+ # A per-comment section of documentation like:
+ #
+ # # :SECTION: The title
+ # # The body
+
+ class Section
+
+ ##
+ # Section comment
+
+ attr_reader :comment
+
+ ##
+ # Context this Section lives in
+
+ attr_reader :parent
+
+ ##
+ # Section sequence number (for linking)
+
+ attr_reader :sequence
+
+ ##
+ # Section title
+
+ attr_reader :title
+
+ @@sequence = "SEC00000"
+ @@sequence_lock = Mutex.new
+
+ ##
+ # Creates a new section with +title+ and +comment+
+
+ def initialize(parent, title, comment)
+ @parent = parent
+ @title = title
+
+ @@sequence_lock.synchronize do
+ @@sequence.succ!
+ @sequence = @@sequence.dup
+ end
+
+ set_comment comment
+ end
+
+ ##
+ # Sections are equal when they have the same #sequence
+
+ def ==(other)
+ self.class === other and @sequence == other.sequence
+ end
+
+ def inspect # :nodoc:
+ "#<%s:0x%x %s %p>" % [
+ self.class, object_id,
+ @sequence, title
+ ]
+ end
+
+ ##
+ # Set the comment for this section from the original comment block If
+ # the first line contains :section:, strip it and use the rest.
+ # Otherwise remove lines up to the line containing :section:, and look
+ # for those lines again at the end and remove them. This lets us write
+ #
+ # # blah blah blah
+ # #
+ # # :SECTION: The title
+ # # The body
+
+ def set_comment(comment)
+ return unless comment
+
+ if comment =~ /^#[ \t]*:section:.*\n/ then
+ start = $`
+ rest = $'
+
+ if start.empty?
+ @comment = rest
+ else
+ @comment = rest.sub(/#{start.chomp}\Z/, '')
+ end
+ else
+ @comment = comment
+ end
+
+ @comment = nil if @comment.empty?
+ end
+
+ end
+
+ ##
+ # Creates an unnamed empty context with public visibility
+
+ def initialize
+ super
+
+ @in_files = []
+
+ @name ||= "unknown"
+ @comment ||= ""
+ @parent = nil
+ @visibility = :public
+
+ @current_section = Section.new self, nil, nil
+ @sections = [@current_section]
+
+ initialize_methods_etc
+ initialize_classes_and_modules
+ end
+
+ ##
+ # Sets the defaults for classes and modules
+
+ def initialize_classes_and_modules
+ @classes = {}
+ @modules = {}
+ end
+
+ ##
+ # Sets the defaults for methods and so-forth
+
+ def initialize_methods_etc
+ @method_list = []
+ @attributes = []
+ @aliases = []
+ @requires = []
+ @includes = []
+ @constants = []
+
+ # This Hash maps a method name to a list of unmatched aliases (aliases of
+ # a method not yet encountered).
+ @unmatched_alias_lists = {}
+ end
+
+ ##
+ # Contexts are sorted by full_name
+
+ def <=>(other)
+ full_name <=> other.full_name
+ end
+
+ ##
+ # Adds +an_alias+ that is automatically resolved
+
+ def add_alias(an_alias)
+ meth = find_instance_method_named(an_alias.old_name)
+
+ if meth then
+ add_alias_impl an_alias, meth
+ else
+ add_to @aliases, an_alias
+ unmatched_alias_list = @unmatched_alias_lists[an_alias.old_name] ||= []
+ unmatched_alias_list.push an_alias
+ end
+
+ an_alias
+ end
+
+ ##
+ # Adds +an_alias+ pointing to +meth+
+
+ def add_alias_impl(an_alias, meth)
+ new_meth = RDoc::AnyMethod.new an_alias.text, an_alias.new_name
+ new_meth.is_alias_for = meth
+ new_meth.singleton = meth.singleton
+ new_meth.params = meth.params
+ new_meth.comment = "Alias for \##{meth.name}"
+ meth.add_alias new_meth
+ add_method new_meth
+ end
+
+ ##
+ # Adds +attribute+
+
+ def add_attribute(attribute)
+ add_to @attributes, attribute
+ end
+
+ ##
+ # Adds a class named +name+ with +superclass+.
+ #
+ # Given <tt>class Container::Item</tt> RDoc assumes +Container+ is a module
+ # unless it later sees <tt>class Container</tt>. add_class automatically
+ # upgrades +name+ to a class in this case.
+
+ def add_class(class_type, name, superclass = 'Object')
+ klass = add_class_or_module @classes, class_type, name, superclass
+
+ # If the parser encounters Container::Item before encountering
+ # Container, then it assumes that Container is a module. This may not
+ # be the case, so remove Container from the module list if present and
+ # transfer any contained classes and modules to the new class.
+
+ RDoc::TopLevel.lock.synchronize do
+ mod = RDoc::TopLevel.modules_hash.delete klass.full_name
+
+ if mod then
+ klass.classes_hash.update mod.classes_hash
+ klass.modules_hash.update mod.modules_hash
+ klass.method_list.concat mod.method_list
+
+ @modules.delete klass.name
+ end
+
+ RDoc::TopLevel.classes_hash[klass.full_name] = klass
+ end
+
+ klass
+ end
+
+ ##
+ # Instantiates a +class_type+ named +name+ and adds it the modules or
+ # classes Hash +collection+.
+
+ def add_class_or_module(collection, class_type, name, superclass = nil)
+ full_name = if RDoc::TopLevel === self then # HACK
+ name
+ else
+ "#{self.full_name}::#{name}"
+ end
+ mod = collection[name]
+
+ if mod then
+ mod.superclass = superclass unless mod.module?
+ else
+ all = nil
+
+ RDoc::TopLevel.lock.synchronize do
+ all = if class_type == RDoc::NormalModule then
+ RDoc::TopLevel.modules_hash
+ else
+ RDoc::TopLevel.classes_hash
+ end
+
+ mod = all[full_name]
+ end
+
+ unless mod then
+ mod = class_type.new name, superclass
+ else
+ # If the class has been encountered already, check that its
+ # superclass has been set (it may not have been, depending on the
+ # context in which it was encountered).
+ if class_type == RDoc::NormalClass then
+ mod.superclass = superclass unless mod.superclass
+ end
+ end
+
+ unless @done_documenting then
+ RDoc::TopLevel.lock.synchronize do
+ all[full_name] = mod
+ end
+ collection[name] = mod
+ end
+
+ mod.section = @current_section
+ mod.parent = self
+ end
+
+ mod
+ end
+
+ ##
+ # Adds +constant+
+
+ def add_constant(constant)
+ add_to @constants, constant
+ end
+
+ ##
+ # Adds included module +include+
+
+ def add_include(include)
+ add_to @includes, include
+ end
+
+ ##
+ # Adds +method+
+
+ def add_method(method)
+ method.visibility = @visibility
+ add_to @method_list, method
+
+ unmatched_alias_list = @unmatched_alias_lists[method.name]
+ if unmatched_alias_list then
+ unmatched_alias_list.each do |unmatched_alias|
+ add_alias_impl unmatched_alias, method
+ @aliases.delete unmatched_alias
+ end
+
+ @unmatched_alias_lists.delete method.name
+ end
+ end
+
+ ##
+ # Adds a module named +name+. If RDoc already knows +name+ is a class then
+ # that class is returned instead. See also #add_class
+
+ def add_module(class_type, name)
+ return @classes[name] if @classes.key? name
+
+ add_class_or_module @modules, class_type, name, nil
+ end
+
+ ##
+ # Adds +require+ to this context's top level
+
+ def add_require(require)
+ if RDoc::TopLevel === self then
+ add_to @requires, require
+ else
+ parent.add_require require
+ end
+ end
+
+ ##
+ # Adds +thing+ to the collection +array+
+
+ def add_to(array, thing)
+ array << thing if @document_self and not @done_documenting
+ thing.parent = self
+ thing.section = @current_section
+ end
+
+ ##
+ # Array of classes in this context
+
+ def classes
+ @classes.values
+ end
+
+ ##
+ # All classes and modules in this namespace
+
+ def classes_and_modules
+ classes + modules
+ end
+
+ ##
+ # Hash of classes keyed by class name
+
+ def classes_hash
+ @classes
+ end
+
+ ##
+ # Is part of this thing was defined in +file+?
+
+ def defined_in?(file)
+ @in_files.include?(file)
+ end
+
+ ##
+ # Iterator for attributes
+
+ def each_attribute # :yields: attribute
+ @attributes.each {|a| yield a}
+ end
+
+ ##
+ # Iterator for classes and modules
+
+ def each_classmodule(&block) # :yields: module
+ classes_and_modules.sort.each(&block)
+ end
+
+ ##
+ # Iterator for constants
+
+ def each_constant # :yields: constant
+ @constants.each {|c| yield c}
+ end
+
+ ##
+ # Iterator for included modules
+
+ def each_include # :yields: include
+ @includes.each do |i| yield i end
+ end
+
+ ##
+ # Iterator for methods
+
+ def each_method # :yields: method
+ @method_list.sort.each {|m| yield m}
+ end
+
+ ##
+ # Finds an attribute with +name+ in this context
+
+ def find_attribute_named(name)
+ @attributes.find { |m| m.name == name }
+ end
+
+ ##
+ # Finds a constant with +name+ in this context
+
+ def find_constant_named(name)
+ @constants.find {|m| m.name == name}
+ end
+
+ ##
+ # Find a module at a higher scope
+
+ def find_enclosing_module_named(name)
+ parent && parent.find_module_named(name)
+ end
+
+ ##
+ # Finds a file with +name+ in this context
+
+ def find_file_named(name)
+ top_level.class.find_file_named(name)
+ end
+
+ ##
+ # Finds an instance method with +name+ in this context
+
+ def find_instance_method_named(name)
+ @method_list.find { |meth| meth.name == name && !meth.singleton }
+ end
+
+ ##
+ # Finds a method, constant, attribute, module or files named +symbol+ in
+ # this context
+
+ def find_local_symbol(symbol)
+ find_method_named(symbol) or
+ find_constant_named(symbol) or
+ find_attribute_named(symbol) or
+ find_module_named(symbol) or
+ find_file_named(symbol)
+ end
+
+ ##
+ # Finds a instance or module method with +name+ in this context
+
+ def find_method_named(name)
+ @method_list.find { |meth| meth.name == name }
+ end
+
+ ##
+ # Find a module with +name+ using ruby's scoping rules
+
+ def find_module_named(name)
+ res = @modules[name] || @classes[name]
+ return res if res
+ return self if self.name == name
+ find_enclosing_module_named name
+ end
+
+ ##
+ # Look up +symbol+. If +method+ is non-nil, then we assume the symbol
+ # references a module that contains that method.
+
+ def find_symbol(symbol, method = nil)
+ result = nil
+
+ case symbol
+ when /^::(.*)/ then
+ result = top_level.find_symbol($1)
+ when /::/ then
+ modules = symbol.split(/::/)
+
+ unless modules.empty? then
+ module_name = modules.shift
+ result = find_module_named(module_name)
+
+ if result then
+ modules.each do |name|
+ result = result.find_module_named name
+ break unless result
+ end
+ end
+ end
+
+ else
+ # if a method is specified, then we're definitely looking for
+ # a module, otherwise it could be any symbol
+ if method then
+ result = find_module_named symbol
+ else
+ result = find_local_symbol symbol
+ if result.nil? then
+ if symbol =~ /^[A-Z]/ then
+ result = parent
+ while result && result.name != symbol do
+ result = result.parent
+ end
+ end
+ end
+ end
+ end
+
+ if result and method then
+ fail unless result.respond_to? :find_local_symbol
+ result = result.find_local_symbol(method)
+ end
+
+ result
+ end
+
+ ##
+ # URL for this with a +prefix+
+
+ def http_url(prefix)
+ path = full_name
+ path = path.gsub(/<<\s*(\w*)/, 'from-\1') if path =~ /<</
+ path = [prefix] + path.split('::')
+
+ File.join(*path.compact) + '.html'
+ end
+
+ ##
+ # Breaks method_list into a nested hash by type (class or instance) and
+ # visibility (public, protected private)
+
+ def methods_by_type
+ methods = {}
+
+ TYPES.each do |type|
+ visibilities = {}
+ VISIBILITIES.each do |vis|
+ visibilities[vis] = []
+ end
+
+ methods[type] = visibilities
+ end
+
+ each_method do |method|
+ methods[method.type][method.visibility] << method
+ end
+
+ methods
+ end
+
+ ##
+ # Yields Method and Attr entries matching the list of names in +methods+.
+ # Attributes are only returned when +singleton+ is false.
+
+ def methods_matching(methods, singleton = false)
+ count = 0
+
+ @method_list.each do |m|
+ if methods.include? m.name and m.singleton == singleton then
+ yield m
+ count += 1
+ end
+ end
+
+ return if count == methods.size || singleton
+
+ @attributes.each do |a|
+ yield a if methods.include? a.name
+ end
+ end
+
+ ##
+ # Array of modules in this context
+
+ def modules
+ @modules.values
+ end
+
+ ##
+ # Hash of modules keyed by module name
+
+ def modules_hash
+ @modules
+ end
+
+ ##
+ # Changes the visibility for new methods to +visibility+
+
+ def ongoing_visibility=(visibility)
+ @visibility = visibility
+ end
+
+ ##
+ # Record which file +top_level+ is in
+
+ def record_location(top_level)
+ @in_files << top_level unless @in_files.include?(top_level)
+ end
+
+ ##
+ # If a class's documentation is turned off after we've started collecting
+ # methods etc., we need to remove the ones we have
+
+ def remove_methods_etc
+ initialize_methods_etc
+ end
+
+ ##
+ # Given an array +methods+ of method names, set the visibility of each to
+ # +visibility+
+
+ def set_visibility_for(methods, visibility, singleton = false)
+ methods_matching methods, singleton do |m|
+ m.visibility = visibility
+ end
+ end
+
+ ##
+ # Removes classes and modules when we see a :nodoc: all
+
+ def remove_classes_and_modules
+ initialize_classes_and_modules
+ end
+
+ ##
+ # Creates a new section with +title+ and +comment+
+
+ def set_current_section(title, comment)
+ @current_section = Section.new self, title, comment
+ @sections << @current_section
+ end
+
+ ##
+ # Return the TopLevel that owns us
+
+ def top_level
+ return @top_level if defined? @top_level
+ @top_level = self
+ @top_level = @top_level.parent until RDoc::TopLevel === @top_level
+ @top_level
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/diagram.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/diagram.rb
new file mode 100644
index 000000000..9cddd5b39
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/diagram.rb
@@ -0,0 +1,340 @@
+# A wonderful hack by to draw package diagrams using the dot package.
+# Originally written by Jah, team Enticla.
+#
+# You must have the V1.7 or later in your path
+# http://www.research.att.com/sw/tools/graphviz/
+
+require 'rdoc/dot'
+
+module RDoc
+
+ ##
+ # Draw a set of diagrams representing the modules and classes in the
+ # system. We draw one diagram for each file, and one for each top-level
+ # class or module. This means there will be overlap. However, it also
+ # means that you'll get better context for objects.
+ #
+ # To use, simply
+ #
+ # d = Diagram.new(info) # pass in collection of top level infos
+ # d.draw
+ #
+ # The results will be written to the +dot+ subdirectory. The process
+ # also sets the +diagram+ attribute in each object it graphs to
+ # the name of the file containing the image. This can be used
+ # by output generators to insert images.
+
+ class Diagram
+
+ FONT = "Arial"
+
+ DOT_PATH = "dot"
+
+ ##
+ # Pass in the set of top level objects. The method also creates the
+ # subdirectory to hold the images
+
+ def initialize(info, options)
+ @info = info
+ @options = options
+ @counter = 0
+ FileUtils.mkdir_p(DOT_PATH)
+ @diagram_cache = {}
+ end
+
+ ##
+ # Draw the diagrams. We traverse the files, drawing a diagram for each. We
+ # also traverse each top-level class and module in that file drawing a
+ # diagram for these too.
+
+ def draw
+ unless @options.quiet
+ $stderr.print "Diagrams: "
+ $stderr.flush
+ end
+
+ @info.each_with_index do |i, file_count|
+ @done_modules = {}
+ @local_names = find_names(i)
+ @global_names = []
+ @global_graph = graph = DOT::Digraph.new('name' => 'TopLevel',
+ 'fontname' => FONT,
+ 'fontsize' => '8',
+ 'bgcolor' => 'lightcyan1',
+ 'compound' => 'true')
+
+ # it's a little hack %) i'm too lazy to create a separate class
+ # for default node
+ graph << DOT::Node.new('name' => 'node',
+ 'fontname' => FONT,
+ 'color' => 'black',
+ 'fontsize' => 8)
+
+ i.modules.each do |mod|
+ draw_module(mod, graph, true, i.relative_name)
+ end
+ add_classes(i, graph, i.relative_name)
+
+ i.diagram = convert_to_png("f_#{file_count}", graph)
+
+ # now go through and document each top level class and
+ # module independently
+ i.modules.each_with_index do |mod, count|
+ @done_modules = {}
+ @local_names = find_names(mod)
+ @global_names = []
+
+ @global_graph = graph = DOT::Digraph.new('name' => 'TopLevel',
+ 'fontname' => FONT,
+ 'fontsize' => '8',
+ 'bgcolor' => 'lightcyan1',
+ 'compound' => 'true')
+
+ graph << DOT::Node.new('name' => 'node',
+ 'fontname' => FONT,
+ 'color' => 'black',
+ 'fontsize' => 8)
+ draw_module(mod, graph, true)
+ mod.diagram = convert_to_png("m_#{file_count}_#{count}",
+ graph)
+ end
+ end
+ $stderr.puts unless @options.quiet
+ end
+
+ private
+
+ def find_names(mod)
+ return [mod.full_name] + mod.classes.collect{|cl| cl.full_name} +
+ mod.modules.collect{|m| find_names(m)}.flatten
+ end
+
+ def find_full_name(name, mod)
+ full_name = name.dup
+ return full_name if @local_names.include?(full_name)
+ mod_path = mod.full_name.split('::')[0..-2]
+ unless mod_path.nil?
+ until mod_path.empty?
+ full_name = mod_path.pop + '::' + full_name
+ return full_name if @local_names.include?(full_name)
+ end
+ end
+ return name
+ end
+
+ def draw_module(mod, graph, top_level = false, file = nil)
+ return if @done_modules[mod.full_name] and not top_level
+
+ @counter += 1
+ url = mod.http_url("classes")
+ m = DOT::Subgraph.new('name' => "cluster_#{mod.full_name.gsub( /:/,'_' )}",
+ 'label' => mod.name,
+ 'fontname' => FONT,
+ 'color' => 'blue',
+ 'style' => 'filled',
+ 'URL' => %{"#{url}"},
+ 'fillcolor' => top_level ? 'palegreen1' : 'palegreen3')
+
+ @done_modules[mod.full_name] = m
+ add_classes(mod, m, file)
+ graph << m
+
+ unless mod.includes.empty?
+ mod.includes.each do |inc|
+ m_full_name = find_full_name(inc.name, mod)
+ if @local_names.include?(m_full_name)
+ @global_graph << DOT::Edge.new('from' => "#{m_full_name.gsub( /:/,'_' )}",
+ 'to' => "#{mod.full_name.gsub( /:/,'_' )}",
+ 'ltail' => "cluster_#{m_full_name.gsub( /:/,'_' )}",
+ 'lhead' => "cluster_#{mod.full_name.gsub( /:/,'_' )}")
+ else
+ unless @global_names.include?(m_full_name)
+ path = m_full_name.split("::")
+ url = File.join('classes', *path) + ".html"
+ @global_graph << DOT::Node.new('name' => "#{m_full_name.gsub( /:/,'_' )}",
+ 'shape' => 'box',
+ 'label' => "#{m_full_name}",
+ 'URL' => %{"#{url}"})
+ @global_names << m_full_name
+ end
+ @global_graph << DOT::Edge.new('from' => "#{m_full_name.gsub( /:/,'_' )}",
+ 'to' => "#{mod.full_name.gsub( /:/,'_' )}",
+ 'lhead' => "cluster_#{mod.full_name.gsub( /:/,'_' )}")
+ end
+ end
+ end
+ end
+
+ def add_classes(container, graph, file = nil )
+
+ use_fileboxes = @options.fileboxes
+
+ files = {}
+
+ # create dummy node (needed if empty and for module includes)
+ if container.full_name
+ graph << DOT::Node.new('name' => "#{container.full_name.gsub( /:/,'_' )}",
+ 'label' => "",
+ 'width' => (container.classes.empty? and
+ container.modules.empty?) ?
+ '0.75' : '0.01',
+ 'height' => '0.01',
+ 'shape' => 'plaintext')
+ end
+
+ container.classes.each_with_index do |cl, cl_index|
+ last_file = cl.in_files[-1].relative_name
+
+ if use_fileboxes && !files.include?(last_file)
+ @counter += 1
+ files[last_file] =
+ DOT::Subgraph.new('name' => "cluster_#{@counter}",
+ 'label' => "#{last_file}",
+ 'fontname' => FONT,
+ 'color'=>
+ last_file == file ? 'red' : 'black')
+ end
+
+ next if cl.name == 'Object' || cl.name[0,2] == "<<"
+
+ url = cl.http_url("classes")
+
+ label = cl.name.dup
+ if use_fileboxes && cl.in_files.length > 1
+ label << '\n[' +
+ cl.in_files.collect {|i|
+ i.relative_name
+ }.sort.join( '\n' ) +
+ ']'
+ end
+
+ attrs = {
+ 'name' => "#{cl.full_name.gsub( /:/, '_' )}",
+ 'fontcolor' => 'black',
+ 'style'=>'filled',
+ 'color'=>'palegoldenrod',
+ 'label' => label,
+ 'shape' => 'ellipse',
+ 'URL' => %{"#{url}"}
+ }
+
+ c = DOT::Node.new(attrs)
+
+ if use_fileboxes
+ files[last_file].push c
+ else
+ graph << c
+ end
+ end
+
+ if use_fileboxes
+ files.each_value do |val|
+ graph << val
+ end
+ end
+
+ unless container.classes.empty?
+ container.classes.each_with_index do |cl, cl_index|
+ cl.includes.each do |m|
+ m_full_name = find_full_name(m.name, cl)
+ if @local_names.include?(m_full_name)
+ @global_graph << DOT::Edge.new('from' => "#{m_full_name.gsub( /:/,'_' )}",
+ 'to' => "#{cl.full_name.gsub( /:/,'_' )}",
+ 'ltail' => "cluster_#{m_full_name.gsub( /:/,'_' )}")
+ else
+ unless @global_names.include?(m_full_name)
+ path = m_full_name.split("::")
+ url = File.join('classes', *path) + ".html"
+ @global_graph << DOT::Node.new('name' => "#{m_full_name.gsub( /:/,'_' )}",
+ 'shape' => 'box',
+ 'label' => "#{m_full_name}",
+ 'URL' => %{"#{url}"})
+ @global_names << m_full_name
+ end
+ @global_graph << DOT::Edge.new('from' => "#{m_full_name.gsub( /:/,'_' )}",
+ 'to' => "#{cl.full_name.gsub( /:/, '_')}")
+ end
+ end
+
+ sclass = cl.superclass
+ next if sclass.nil? || sclass == 'Object'
+ sclass_full_name = find_full_name(sclass,cl)
+ unless @local_names.include?(sclass_full_name) or @global_names.include?(sclass_full_name)
+ path = sclass_full_name.split("::")
+ url = File.join('classes', *path) + ".html"
+ @global_graph << DOT::Node.new('name' => "#{sclass_full_name.gsub( /:/, '_' )}",
+ 'label' => sclass_full_name,
+ 'URL' => %{"#{url}"})
+ @global_names << sclass_full_name
+ end
+ @global_graph << DOT::Edge.new('from' => "#{sclass_full_name.gsub( /:/,'_' )}",
+ 'to' => "#{cl.full_name.gsub( /:/, '_')}")
+ end
+ end
+
+ container.modules.each do |submod|
+ draw_module(submod, graph)
+ end
+
+ end
+
+ def convert_to_png(file_base, graph)
+ str = graph.to_s
+ return @diagram_cache[str] if @diagram_cache[str]
+ op_type = @options.image_format
+ dotfile = File.join(DOT_PATH, file_base)
+ src = dotfile + ".dot"
+ dot = dotfile + "." + op_type
+
+ unless @options.quiet
+ $stderr.print "."
+ $stderr.flush
+ end
+
+ File.open(src, 'w+' ) do |f|
+ f << str << "\n"
+ end
+
+ system "dot", "-T#{op_type}", src, "-o", dot
+
+ # Now construct the imagemap wrapper around
+ # that png
+
+ ret = wrap_in_image_map(src, dot)
+ @diagram_cache[str] = ret
+ return ret
+ end
+
+ ##
+ # Extract the client-side image map from dot, and use it to generate the
+ # imagemap proper. Return the whole <map>..<img> combination, suitable for
+ # inclusion on the page
+
+ def wrap_in_image_map(src, dot)
+ res = ""
+ dot_map = `dot -Tismap #{src}`
+
+ if(!dot_map.empty?)
+ res << %{<map id="map" name="map">\n}
+ dot_map.split($/).each do |area|
+ unless area =~ /^rectangle \((\d+),(\d+)\) \((\d+),(\d+)\) ([\/\w.]+)\s*(.*)/
+ $stderr.puts "Unexpected output from dot:\n#{area}"
+ return nil
+ end
+
+ xs, ys = [$1.to_i, $3.to_i], [$2.to_i, $4.to_i]
+ url, area_name = $5, $6
+
+ res << %{ <area shape="rect" coords="#{xs.min},#{ys.min},#{xs.max},#{ys.max}" }
+ res << %{ href="#{url}" alt="#{area_name}" />\n}
+ end
+ res << "</map>\n"
+ end
+
+ res << %{<img src="#{dot}" usemap="#map" alt="#{dot}" />}
+ return res
+ end
+
+ end
+
+end
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/dot.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/dot.rb
new file mode 100644
index 000000000..fbd2cfba0
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/dot.rb
@@ -0,0 +1,249 @@
+module RDoc; end
+
+module RDoc::DOT
+
+ TAB = ' '
+ TAB2 = TAB * 2
+
+ # options for node declaration
+ NODE_OPTS = [
+ 'bgcolor',
+ 'color',
+ 'fontcolor',
+ 'fontname',
+ 'fontsize',
+ 'height',
+ 'width',
+ 'label',
+ 'layer',
+ 'rank',
+ 'shape',
+ 'shapefile',
+ 'style',
+ 'URL',
+ ]
+
+ # options for edge declaration
+ EDGE_OPTS = [
+ 'color',
+ 'decorate',
+ 'dir',
+ 'fontcolor',
+ 'fontname',
+ 'fontsize',
+ 'id',
+ 'label',
+ 'layer',
+ 'lhead',
+ 'ltail',
+ 'minlen',
+ 'style',
+ 'weight'
+ ]
+
+ # options for graph declaration
+ GRAPH_OPTS = [
+ 'bgcolor',
+ 'center',
+ 'clusterrank',
+ 'color',
+ 'compound',
+ 'concentrate',
+ 'fillcolor',
+ 'fontcolor',
+ 'fontname',
+ 'fontsize',
+ 'label',
+ 'layerseq',
+ 'margin',
+ 'mclimit',
+ 'nodesep',
+ 'nslimit',
+ 'ordering',
+ 'orientation',
+ 'page',
+ 'rank',
+ 'rankdir',
+ 'ranksep',
+ 'ratio',
+ 'size',
+ 'style',
+ 'URL'
+ ]
+
+ # a root class for any element in dot notation
+ class SimpleElement
+ attr_accessor :name
+
+ def initialize( params = {} )
+ @label = params['name'] ? params['name'] : ''
+ end
+
+ def to_s
+ @name
+ end
+ end
+
+ # an element that has options ( node, edge or graph )
+ class Element < SimpleElement
+ #attr_reader :parent
+ attr_accessor :name, :options
+
+ def initialize( params = {}, option_list = [] )
+ super( params )
+ @name = params['name'] ? params['name'] : nil
+ @parent = params['parent'] ? params['parent'] : nil
+ @options = {}
+ option_list.each{ |i|
+ @options[i] = params[i] if params[i]
+ }
+ @options['label'] ||= @name if @name != 'node'
+ end
+
+ def each_option
+ @options.each{ |i| yield i }
+ end
+
+ def each_option_pair
+ @options.each_pair{ |key, val| yield key, val }
+ end
+
+ #def parent=( thing )
+ # @parent.delete( self ) if defined?( @parent ) and @parent
+ # @parent = thing
+ #end
+ end
+
+
+ # this is used when we build nodes that have shape=record
+ # ports don't have options :)
+ class Port < SimpleElement
+ attr_accessor :label
+
+ def initialize( params = {} )
+ super( params )
+ @name = params['label'] ? params['label'] : ''
+ end
+ def to_s
+ ( @name && @name != "" ? "<#{@name}>" : "" ) + "#{@label}"
+ end
+ end
+
+ # node element
+ class Node < Element
+
+ def initialize( params = {}, option_list = NODE_OPTS )
+ super( params, option_list )
+ @ports = params['ports'] ? params['ports'] : []
+ end
+
+ def each_port
+ @ports.each{ |i| yield i }
+ end
+
+ def << ( thing )
+ @ports << thing
+ end
+
+ def push ( thing )
+ @ports.push( thing )
+ end
+
+ def pop
+ @ports.pop
+ end
+
+ def to_s( t = '' )
+
+ label = @options['shape'] != 'record' && @ports.length == 0 ?
+ @options['label'] ?
+ t + TAB + "label = \"#{@options['label']}\"\n" :
+ '' :
+ t + TAB + 'label = "' + " \\\n" +
+ t + TAB2 + "#{@options['label']}| \\\n" +
+ @ports.collect{ |i|
+ t + TAB2 + i.to_s
+ }.join( "| \\\n" ) + " \\\n" +
+ t + TAB + '"' + "\n"
+
+ t + "#{@name} [\n" +
+ @options.to_a.collect{ |i|
+ i[1] && i[0] != 'label' ?
+ t + TAB + "#{i[0]} = #{i[1]}" : nil
+ }.compact.join( ",\n" ) + ( label != '' ? ",\n" : "\n" ) +
+ label +
+ t + "]\n"
+ end
+ end
+
+ # subgraph element is the same to graph, but has another header in dot
+ # notation
+ class Subgraph < Element
+
+ def initialize( params = {}, option_list = GRAPH_OPTS )
+ super( params, option_list )
+ @nodes = params['nodes'] ? params['nodes'] : []
+ @dot_string = 'subgraph'
+ end
+
+ def each_node
+ @nodes.each{ |i| yield i }
+ end
+
+ def << ( thing )
+ @nodes << thing
+ end
+
+ def push( thing )
+ @nodes.push( thing )
+ end
+
+ def pop
+ @nodes.pop
+ end
+
+ def to_s( t = '' )
+ hdr = t + "#{@dot_string} #{@name} {\n"
+
+ options = @options.to_a.collect{ |name, val|
+ val && name != 'label' ?
+ t + TAB + "#{name} = #{val}" :
+ name ? t + TAB + "#{name} = \"#{val}\"" : nil
+ }.compact.join( "\n" ) + "\n"
+
+ nodes = @nodes.collect{ |i|
+ i.to_s( t + TAB )
+ }.join( "\n" ) + "\n"
+ hdr + options + nodes + t + "}\n"
+ end
+ end
+
+ # this is graph
+ class Digraph < Subgraph
+ def initialize( params = {}, option_list = GRAPH_OPTS )
+ super( params, option_list )
+ @dot_string = 'digraph'
+ end
+ end
+
+ # this is edge
+ class Edge < Element
+ attr_accessor :from, :to
+ def initialize( params = {}, option_list = EDGE_OPTS )
+ super( params, option_list )
+ @from = params['from'] ? params['from'] : nil
+ @to = params['to'] ? params['to'] : nil
+ end
+
+ def to_s( t = '' )
+ t + "#{@from} -> #{to} [\n" +
+ @options.to_a.collect{ |i|
+ i[1] && i[0] != 'label' ?
+ t + TAB + "#{i[0]} = #{i[1]}" :
+ i[1] ? t + TAB + "#{i[0]} = \"#{i[1]}\"" : nil
+ }.compact.join( "\n" ) + "\n" + t + "]\n"
+ end
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator.rb
new file mode 100644
index 000000000..b65002977
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator.rb
@@ -0,0 +1,8 @@
+require 'rdoc'
+
+##
+# Namespace for generators
+
+module RDoc::Generator
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/darkfish.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/darkfish.rb
new file mode 100644
index 000000000..4e5791cd3
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/darkfish.rb
@@ -0,0 +1,455 @@
+#!ruby
+# vim: noet ts=2 sts=8 sw=2
+
+require 'rubygems'
+gem 'rdoc', '>= 2.4' unless defined? $rdoc_rakefile
+
+require 'pp'
+require 'pathname'
+require 'fileutils'
+require 'erb'
+require 'yaml'
+
+require 'rdoc/rdoc'
+require 'rdoc/generator'
+require 'rdoc/generator/markup'
+
+#
+# Darkfish RDoc HTML Generator
+#
+# $Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $
+#
+# == Author/s
+# * Michael Granger (ged@FaerieMUD.org)
+#
+# == Contributors
+# * Mahlon E. Smith (mahlon@martini.nu)
+# * Eric Hodel (drbrain@segment7.net)
+#
+# == License
+#
+# Copyright (c) 2007, 2008, Michael Granger. 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 author/s, nor the names of the project's
+# 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 OWNER 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.
+#
+class RDoc::Generator::Darkfish
+
+ RDoc::RDoc.add_generator( self )
+
+ include ERB::Util
+
+ # Subversion rev
+ SVNRev = %$Rev: 52 $
+
+ # Subversion ID
+ SVNId = %$Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $
+
+ # Path to this file's parent directory. Used to find templates and other
+ # resources.
+ GENERATOR_DIR = File.join 'rdoc', 'generator'
+
+ # Release Version
+ VERSION = '1.1.6'
+
+ # Directory where generated classes live relative to the root
+ CLASS_DIR = nil
+
+ # Directory where generated files live relative to the root
+ FILE_DIR = nil
+
+
+ #################################################################
+ ### C L A S S M E T H O D S
+ #################################################################
+
+ ### Standard generator factory method
+ def self::for( options )
+ new( options )
+ end
+
+
+ #################################################################
+ ### I N S T A N C E M E T H O D S
+ #################################################################
+
+ ### Initialize a few instance variables before we start
+ def initialize( options )
+ @options = options
+ @options.diagram = false
+
+ template = @options.template || 'darkfish'
+
+ template_dir = $LOAD_PATH.map do |path|
+ File.join path, GENERATOR_DIR, 'template', template
+ end.find do |dir|
+ File.directory? dir
+ end
+
+ raise RDoc::Error, "could not find template #{template.inspect}" unless
+ template_dir
+
+ @template_dir = Pathname.new File.expand_path(template_dir)
+
+ @files = nil
+ @classes = nil
+
+ @basedir = Pathname.pwd.expand_path
+ end
+
+ ######
+ public
+ ######
+
+ # The output directory
+ attr_reader :outputdir
+
+
+ ### Output progress information if debugging is enabled
+ def debug_msg( *msg )
+ return unless $DEBUG_RDOC
+ $stderr.puts( *msg )
+ end
+
+ def class_dir
+ CLASS_DIR
+ end
+
+ def file_dir
+ FILE_DIR
+ end
+
+ ### Create the directories the generated docs will live in if
+ ### they don't already exist.
+ def gen_sub_directories
+ @outputdir.mkpath
+ end
+
+ ### Copy over the stylesheet into the appropriate place in the output
+ ### directory.
+ def write_style_sheet
+ debug_msg "Copying static files"
+ options = { :verbose => $DEBUG_RDOC, :noop => $dryrun }
+
+ FileUtils.cp @template_dir + 'rdoc.css', '.', options
+
+ Dir[(@template_dir + "{js,images}/**/*").to_s].each do |path|
+ next if File.directory? path
+ next if path =~ /#{File::SEPARATOR}\./
+
+ dst = Pathname.new(path).relative_path_from @template_dir
+
+ # I suck at glob
+ dst_dir = dst.dirname
+ FileUtils.mkdir_p dst_dir, options unless File.exist? dst_dir
+
+ FileUtils.cp @template_dir + path, dst, options
+ end
+ end
+
+ ### Build the initial indices and output objects
+ ### based on an array of TopLevel objects containing
+ ### the extracted information.
+ def generate( top_levels )
+ @outputdir = Pathname.new( @options.op_dir ).expand_path( @basedir )
+
+ @files = top_levels.sort
+ @classes = RDoc::TopLevel.all_classes_and_modules.sort
+ @methods = @classes.map { |m| m.method_list }.flatten.sort
+ @modsort = get_sorted_module_list( @classes )
+
+ # Now actually write the output
+ write_style_sheet
+ generate_index
+ generate_class_files
+ generate_file_files
+
+ rescue StandardError => err
+ debug_msg "%s: %s\n %s" % [ err.class.name, err.message, err.backtrace.join("\n ") ]
+ raise
+ end
+
+ #########
+ protected
+ #########
+
+ ### Return a list of the documented modules sorted by salience first, then
+ ### by name.
+ def get_sorted_module_list( classes )
+ nscounts = classes.inject({}) do |counthash, klass|
+ top_level = klass.full_name.gsub( /::.*/, '' )
+ counthash[top_level] ||= 0
+ counthash[top_level] += 1
+
+ counthash
+ end
+
+ # Sort based on how often the top level namespace occurs, and then on the
+ # name of the module -- this works for projects that put their stuff into
+ # a namespace, of course, but doesn't hurt if they don't.
+ classes.sort_by do |klass|
+ top_level = klass.full_name.gsub( /::.*/, '' )
+ [
+ nscounts[ top_level ] * -1,
+ klass.full_name
+ ]
+ end.select do |klass|
+ klass.document_self
+ end
+ end
+
+ ### Generate an index page which lists all the classes which
+ ### are documented.
+ def generate_index
+ debug_msg "Rendering the index page..."
+
+ templatefile = @template_dir + 'index.rhtml'
+ template_src = templatefile.read
+ template = ERB.new( template_src, nil, '<>' )
+ template.filename = templatefile.to_s
+ context = binding()
+
+ output = nil
+
+ begin
+ output = template.result( context )
+ rescue NoMethodError => err
+ raise RDoc::Error, "Error while evaluating %s: %s (at %p)" % [
+ templatefile,
+ err.message,
+ eval( "_erbout[-50,50]", context )
+ ], err.backtrace
+ end
+
+ outfile = @basedir + @options.op_dir + 'index.html'
+ unless $dryrun
+ debug_msg "Outputting to %s" % [outfile.expand_path]
+ outfile.open( 'w', 0644 ) do |fh|
+ fh.print( output )
+ end
+ else
+ debug_msg "Would have output to %s" % [outfile.expand_path]
+ end
+ end
+
+ ### Generate a documentation file for each class
+ def generate_class_files
+ debug_msg "Generating class documentation in #@outputdir"
+ templatefile = @template_dir + 'classpage.rhtml'
+
+ @classes.each do |klass|
+ debug_msg " working on %s (%s)" % [ klass.full_name, klass.path ]
+ outfile = @outputdir + klass.path
+ rel_prefix = @outputdir.relative_path_from( outfile.dirname )
+ svninfo = self.get_svninfo( klass )
+
+ debug_msg " rendering #{outfile}"
+ self.render_template( templatefile, binding(), outfile )
+ end
+ end
+
+ ### Generate a documentation file for each file
+ def generate_file_files
+ debug_msg "Generating file documentation in #@outputdir"
+ templatefile = @template_dir + 'filepage.rhtml'
+
+ @files.each do |file|
+ outfile = @outputdir + file.path
+ debug_msg " working on %s (%s)" % [ file.full_name, outfile ]
+ rel_prefix = @outputdir.relative_path_from( outfile.dirname )
+ context = binding()
+
+ debug_msg " rendering #{outfile}"
+ self.render_template( templatefile, binding(), outfile )
+ end
+ end
+
+
+ ### Return a string describing the amount of time in the given number of
+ ### seconds in terms a human can understand easily.
+ def time_delta_string( seconds )
+ return 'less than a minute' if seconds < 1.minute
+ return (seconds / 1.minute).to_s + ' minute' + (seconds/60 == 1 ? '' : 's') if seconds < 50.minutes
+ return 'about one hour' if seconds < 90.minutes
+ return (seconds / 1.hour).to_s + ' hours' if seconds < 18.hours
+ return 'one day' if seconds < 1.day
+ return 'about one day' if seconds < 2.days
+ return (seconds / 1.day).to_s + ' days' if seconds < 1.week
+ return 'about one week' if seconds < 2.week
+ return (seconds / 1.week).to_s + ' weeks' if seconds < 3.months
+ return (seconds / 1.month).to_s + ' months' if seconds < 1.year
+ return (seconds / 1.year).to_s + ' years'
+ end
+
+
+ # %q$Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $"
+ SVNID_PATTERN = /
+ \$Id:\s
+ (\S+)\s # filename
+ (\d+)\s # rev
+ (\d{4}-\d{2}-\d{2})\s # Date (YYYY-MM-DD)
+ (\d{2}:\d{2}:\d{2}Z)\s # Time (HH:MM:SSZ)
+ (\w+)\s # committer
+ \$$
+ /x
+
+ ### Try to extract Subversion information out of the first constant whose value looks like
+ ### a subversion Id tag. If no matching constant is found, and empty hash is returned.
+ def get_svninfo( klass )
+ constants = klass.constants or return {}
+
+ constants.find {|c| c.value =~ SVNID_PATTERN } or return {}
+
+ filename, rev, date, time, committer = $~.captures
+ commitdate = Time.parse( date + ' ' + time )
+
+ return {
+ :filename => filename,
+ :rev => Integer( rev ),
+ :commitdate => commitdate,
+ :commitdelta => time_delta_string( Time.now.to_i - commitdate.to_i ),
+ :committer => committer,
+ }
+ end
+
+
+ ### Load and render the erb template in the given +templatefile+ within the
+ ### specified +context+ (a Binding object) and write it out to +outfile+.
+ ### Both +templatefile+ and +outfile+ should be Pathname-like objects.
+
+ def render_template( templatefile, context, outfile )
+ template_src = templatefile.read
+ template = ERB.new( template_src, nil, '<>' )
+ template.filename = templatefile.to_s
+
+ output = begin
+ template.result( context )
+ rescue NoMethodError => err
+ raise RDoc::Error, "Error while evaluating %s: %s (at %p)" % [
+ templatefile.to_s,
+ err.message,
+ eval( "_erbout[-50,50]", context )
+ ], err.backtrace
+ end
+
+ unless $dryrun
+ outfile.dirname.mkpath
+ outfile.open( 'w', 0644 ) do |ofh|
+ ofh.print( output )
+ end
+ else
+ debug_msg " would have written %d bytes to %s" %
+ [ output.length, outfile ]
+ end
+ end
+
+end # Roc::Generator::Darkfish
+
+# :stopdoc:
+
+### Time constants
+module TimeConstantMethods # :nodoc:
+
+ ### Number of seconds (returns receiver unmodified)
+ def seconds
+ return self
+ end
+ alias_method :second, :seconds
+
+ ### Returns number of seconds in <receiver> minutes
+ def minutes
+ return self * 60
+ end
+ alias_method :minute, :minutes
+
+ ### Returns the number of seconds in <receiver> hours
+ def hours
+ return self * 60.minutes
+ end
+ alias_method :hour, :hours
+
+ ### Returns the number of seconds in <receiver> days
+ def days
+ return self * 24.hours
+ end
+ alias_method :day, :days
+
+ ### Return the number of seconds in <receiver> weeks
+ def weeks
+ return self * 7.days
+ end
+ alias_method :week, :weeks
+
+ ### Returns the number of seconds in <receiver> fortnights
+ def fortnights
+ return self * 2.weeks
+ end
+ alias_method :fortnight, :fortnights
+
+ ### Returns the number of seconds in <receiver> months (approximate)
+ def months
+ return self * 30.days
+ end
+ alias_method :month, :months
+
+ ### Returns the number of seconds in <receiver> years (approximate)
+ def years
+ return (self * 365.25.days).to_i
+ end
+ alias_method :year, :years
+
+
+ ### Returns the Time <receiver> number of seconds before the
+ ### specified +time+. E.g., 2.hours.before( header.expiration )
+ def before( time )
+ return time - self
+ end
+
+
+ ### Returns the Time <receiver> number of seconds ago. (e.g.,
+ ### expiration > 2.hours.ago )
+ def ago
+ return self.before( ::Time.now )
+ end
+
+
+ ### Returns the Time <receiver> number of seconds after the given +time+.
+ ### E.g., 10.minutes.after( header.expiration )
+ def after( time )
+ return time + self
+ end
+
+ # Reads best without arguments: 10.minutes.from_now
+ def from_now
+ return self.after( ::Time.now )
+ end
+end # module TimeConstantMethods
+
+
+# Extend Numeric with time constants
+class Numeric # :nodoc:
+ include TimeConstantMethods
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/markup.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/markup.rb
new file mode 100644
index 000000000..c492483b3
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/markup.rb
@@ -0,0 +1,194 @@
+require 'rdoc/code_objects'
+require 'rdoc/generator'
+require 'rdoc/markup/to_html_crossref'
+
+##
+# Handle common HTML markup tasks for various CodeObjects
+
+module RDoc::Generator::Markup
+
+ ##
+ # Generates a relative URL from this object's path to +target_path+
+
+ def aref_to(target_path)
+ RDoc::Markup::ToHtml.gen_relative_url path, target_path
+ end
+
+ ##
+ # Generates a relative URL from +from_path+ to this object's path
+
+ def as_href(from_path)
+ RDoc::Markup::ToHtml.gen_relative_url from_path, path
+ end
+
+ ##
+ # Handy wrapper for marking up this object's comment
+
+ def description
+ markup @comment
+ end
+
+ ##
+ # RDoc::Markup formatter object
+
+ def formatter
+ return @formatter if defined? @formatter
+
+ show_hash = RDoc::RDoc.current.options.show_hash
+ this = RDoc::Context === self ? self : @parent
+ @formatter = RDoc::Markup::ToHtmlCrossref.new this.path, this, show_hash
+ end
+
+ ##
+ # Convert a string in markup format into HTML.
+
+ def markup(str, remove_para = false)
+ return '' unless str
+
+ # Convert leading comment markers to spaces, but only if all non-blank
+ # lines have them
+ if str =~ /^(?>\s*)[^\#]/ then
+ content = str
+ else
+ content = str.gsub(/^\s*(#+)/) { $1.tr '#', ' ' }
+ end
+
+ res = formatter.convert content
+
+ if remove_para then
+ res.sub!(/^<p>/, '')
+ res.sub!(/<\/p>$/, '')
+ end
+
+ res
+ end
+
+ ##
+ # Build a webcvs URL starting for the given +url+ with +full_path+ appended
+ # as the destination path. If +url+ contains '%s' +full_path+ will be
+ # sprintf'd into +url+ instead.
+
+ def cvs_url(url, full_path)
+ if /%s/ =~ url then
+ sprintf url, full_path
+ else
+ url + full_path
+ end
+ end
+
+end
+
+class RDoc::AnyMethod
+
+ include RDoc::Generator::Markup
+
+ ##
+ # Prepend +src+ with line numbers. Relies on the first line of a source
+ # code listing having:
+ #
+ # # File xxxxx, line dddd
+
+ def add_line_numbers(src)
+ if src =~ /\A.*, line (\d+)/ then
+ first = $1.to_i - 1
+ last = first + src.count("\n")
+ size = last.to_s.length
+
+ line = first
+ src.gsub!(/^/) do
+ res = if line == first then
+ " " * (size + 2)
+ else
+ "%#{size}d: " % line
+ end
+
+ line += 1
+ res
+ end
+ end
+ end
+
+ ##
+ # Turns the method's token stream into HTML
+
+ def markup_code
+ return '' unless @token_stream
+
+ src = ""
+
+ @token_stream.each do |t|
+ next unless t
+ # style = STYLE_MAP[t.class]
+ style = case t
+ when RDoc::RubyToken::TkCONSTANT then "ruby-constant"
+ when RDoc::RubyToken::TkKW then "ruby-keyword kw"
+ when RDoc::RubyToken::TkIVAR then "ruby-ivar"
+ when RDoc::RubyToken::TkOp then "ruby-operator"
+ when RDoc::RubyToken::TkId then "ruby-identifier"
+ when RDoc::RubyToken::TkNode then "ruby-node"
+ when RDoc::RubyToken::TkCOMMENT then "ruby-comment cmt"
+ when RDoc::RubyToken::TkREGEXP then "ruby-regexp re"
+ when RDoc::RubyToken::TkSTRING then "ruby-value str"
+ when RDoc::RubyToken::TkVal then "ruby-value"
+ else
+ nil
+ end
+
+ text = CGI.escapeHTML(t.text)
+
+ if style
+ src << "<span class=\"#{style}\">#{text}</span>"
+ else
+ src << text
+ end
+ end
+
+ add_line_numbers src if RDoc::RDoc.current.options.include_line_numbers
+
+ src
+ end
+
+end
+
+class RDoc::Attr
+
+ include RDoc::Generator::Markup
+
+end
+
+class RDoc::Constant
+
+ include RDoc::Generator::Markup
+
+end
+
+class RDoc::Context
+
+ include RDoc::Generator::Markup
+
+end
+
+class RDoc::Context::Section
+
+ include RDoc::Generator::Markup
+
+end
+
+class RDoc::TopLevel
+
+ ##
+ # Returns a URL for this source file on some web repository. Use the -W
+ # command line option to set.
+
+ def cvs_url
+ url = RDoc::RDoc.current.options.webcvs
+
+ if /%s/ =~ url then
+ url % @absolute_name
+ else
+ url + @absolute_name
+ end
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb
new file mode 100644
index 000000000..44fc97d72
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/ri.rb
@@ -0,0 +1,230 @@
+require 'rdoc/generator'
+require 'rdoc/markup/to_flow'
+
+require 'rdoc/ri/cache'
+require 'rdoc/ri/reader'
+require 'rdoc/ri/writer'
+require 'rdoc/ri/descriptions'
+
+class RDoc::Generator::RI
+
+ RDoc::RDoc.add_generator self
+
+ ##
+ # Generator may need to return specific subclasses depending on the
+ # options they are passed. Because of this we create them using a factory
+
+ def self.for(options)
+ new(options)
+ end
+
+ ##
+ # Set up a new ri generator
+
+ def initialize(options) #:not-new:
+ @options = options
+ @ri_writer = RDoc::RI::Writer.new "."
+ @markup = RDoc::Markup.new
+ @to_flow = RDoc::Markup::ToFlow.new
+
+ @generated = {}
+ end
+
+ ##
+ # Build the initial indices and output objects based on an array of
+ # TopLevel objects containing the extracted information.
+
+ def generate(top_levels)
+ RDoc::TopLevel.all_classes_and_modules.each do |cls|
+ process_class cls
+ end
+ end
+
+ def process_class(from_class)
+ generate_class_info(from_class)
+
+ # now recurse into this class' constituent classes
+ from_class.each_classmodule do |mod|
+ process_class(mod)
+ end
+ end
+
+ def generate_class_info(cls)
+ case cls
+ when RDoc::NormalModule then
+ cls_desc = RDoc::RI::ModuleDescription.new
+ else
+ cls_desc = RDoc::RI::ClassDescription.new
+ superclass = cls.superclass
+ superclass = superclass.full_name unless String === superclass
+ cls_desc.superclass = superclass
+ end
+
+ cls_desc.name = cls.name
+ cls_desc.full_name = cls.full_name
+ cls_desc.comment = markup(cls.comment)
+
+ cls_desc.attributes = cls.attributes.sort.map do |a|
+ RDoc::RI::Attribute.new(a.name, a.rw, markup(a.comment))
+ end
+
+ cls_desc.constants = cls.constants.map do |c|
+ RDoc::RI::Constant.new(c.name, c.value, markup(c.comment))
+ end
+
+ cls_desc.includes = cls.includes.map do |i|
+ RDoc::RI::IncludedModule.new(i.name)
+ end
+
+ class_methods, instance_methods = method_list(cls)
+
+ cls_desc.class_methods = class_methods.map do |m|
+ RDoc::RI::MethodSummary.new(m.name)
+ end
+
+ cls_desc.instance_methods = instance_methods.map do |m|
+ RDoc::RI::MethodSummary.new(m.name)
+ end
+
+ update_or_replace(cls_desc)
+
+ class_methods.each do |m|
+ generate_method_info(cls_desc, m)
+ end
+
+ instance_methods.each do |m|
+ generate_method_info(cls_desc, m)
+ end
+ end
+
+ def generate_method_info(cls_desc, method)
+ meth_desc = RDoc::RI::MethodDescription.new
+ meth_desc.name = method.name
+ meth_desc.full_name = cls_desc.full_name
+ if method.singleton
+ meth_desc.full_name += "::"
+ else
+ meth_desc.full_name += "#"
+ end
+ meth_desc.full_name << method.name
+
+ meth_desc.comment = markup(method.comment)
+ meth_desc.params = params_of(method)
+ meth_desc.visibility = method.visibility.to_s
+ meth_desc.is_singleton = method.singleton
+ meth_desc.block_params = method.block_params
+
+ meth_desc.aliases = method.aliases.map do |a|
+ RDoc::RI::AliasName.new(a.name)
+ end
+
+ @ri_writer.add_method(cls_desc, meth_desc)
+ end
+
+ private
+
+ ##
+ # Returns a list of class and instance methods that we'll be documenting
+
+ def method_list(cls)
+ list = cls.method_list
+ unless @options.show_all
+ list = list.find_all do |m|
+ m.visibility == :public || m.visibility == :protected || m.force_documentation
+ end
+ end
+
+ c = []
+ i = []
+ list.sort.each do |m|
+ if m.singleton
+ c << m
+ else
+ i << m
+ end
+ end
+ return c,i
+ end
+
+ def params_of(method)
+ if method.call_seq
+ method.call_seq
+ else
+ params = method.params || ""
+
+ p = params.gsub(/\s*\#.*/, '')
+ p = p.tr("\n", " ").squeeze(" ")
+ p = "(" + p + ")" unless p[0] == ?(
+
+ if (block = method.block_params)
+ block.gsub!(/\s*\#.*/, '')
+ block = block.tr("\n", " ").squeeze(" ")
+ if block[0] == ?(
+ block.sub!(/^\(/, '').sub!(/\)/, '')
+ end
+ p << " {|#{block.strip}| ...}"
+ end
+ p
+ end
+ end
+
+ def markup(comment)
+ return nil if !comment || comment.empty?
+
+ # Convert leading comment markers to spaces, but only
+ # if all non-blank lines have them
+
+ if comment =~ /^(?>\s*)[^\#]/
+ content = comment
+ else
+ content = comment.gsub(/^\s*(#+)/) { $1.tr('#',' ') }
+ end
+ @markup.convert(content, @to_flow)
+ end
+
+ ##
+ # By default we replace existing classes with the same name. If the
+ # --merge option was given, we instead merge this definition into an
+ # existing class. We add our methods, aliases, etc to that class, but do
+ # not change the class's description.
+
+ def update_or_replace(cls_desc)
+ old_cls = nil
+
+ if @options.merge
+ rdr = RDoc::RI::Reader.new RDoc::RI::Cache.new(@options.op_dir)
+
+ namespace = rdr.top_level_namespace
+ namespace = rdr.lookup_namespace_in(cls_desc.name, namespace)
+ if namespace.empty?
+ $stderr.puts "You asked me to merge this source into existing "
+ $stderr.puts "documentation. This file references a class or "
+ $stderr.puts "module called #{cls_desc.name} which I don't"
+ $stderr.puts "have existing documentation for."
+ $stderr.puts
+ $stderr.puts "Perhaps you need to generate its documentation first"
+ exit 1
+ else
+ old_cls = namespace[0]
+ end
+ end
+
+ prev_cls = @generated[cls_desc.full_name]
+
+ if old_cls and not prev_cls then
+ old_desc = rdr.get_class old_cls
+ cls_desc.merge_in old_desc
+ end
+
+ if prev_cls then
+ cls_desc.merge_in prev_cls
+ end
+
+ @generated[cls_desc.full_name] = cls_desc
+
+ @ri_writer.remove_class cls_desc
+ @ri_writer.add_class cls_desc
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/.document b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/.document
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/.document
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/classpage.rhtml b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/classpage.rhtml
new file mode 100644
index 000000000..921fcef71
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/classpage.rhtml
@@ -0,0 +1,281 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=<%= @options.charset %>" http-equiv="Content-Type" />
+
+ <title><%= klass.type.capitalize %>: <%= klass.full_name %></title>
+
+ <link rel="stylesheet" href="<%= rel_prefix %>/rdoc.css" type="text/css" media="screen" />
+
+ <script src="<%= rel_prefix %>/js/jquery.js" type="text/javascript"
+ charset="utf-8"></script>
+ <script src="<%= rel_prefix %>/js/thickbox-compressed.js" type="text/javascript"
+ charset="utf-8"></script>
+ <script src="<%= rel_prefix %>/js/quicksearch.js" type="text/javascript"
+ charset="utf-8"></script>
+ <script src="<%= rel_prefix %>/js/darkfish.js" type="text/javascript"
+ charset="utf-8"></script>
+
+</head>
+<body class="<%= klass.type %>">
+
+ <div id="metadata">
+ <div id="file-metadata">
+ <div id="file-list-section" class="section">
+ <h3 class="section-header">In Files</h3>
+ <div class="section-body">
+ <ul>
+ <% klass.in_files.each do |tl| %>
+ <li><a href="<%= rel_prefix %>/<%= h tl.path %>?TB_iframe=true&amp;height=550&amp;width=785"
+ class="thickbox" title="<%= h tl.absolute_name %>"><%= h tl.absolute_name %></a></li>
+ <% end %>
+ </ul>
+ </div>
+ </div>
+
+ <% if !svninfo.empty? %>
+ <div id="file-svninfo-section" class="section">
+ <h3 class="section-header">Subversion Info</h3>
+ <div class="section-body">
+ <dl class="svninfo">
+ <dt>Rev</dt>
+ <dd><%= svninfo[:rev] %></dd>
+
+ <dt>Last Checked In</dt>
+ <dd><%= svninfo[:commitdate].strftime('%Y-%m-%d %H:%M:%S') %>
+ (<%= svninfo[:commitdelta] %> ago)</dd>
+
+ <dt>Checked in by</dt>
+ <dd><%= svninfo[:committer] %></dd>
+ </dl>
+ </div>
+ </div>
+ <% end %>
+ </div>
+
+ <div id="class-metadata">
+
+ <!-- Parent Class -->
+ <% if klass.type == 'class' %>
+ <div id="parent-class-section" class="section">
+ <h3 class="section-header">Parent</h3>
+ <% unless String === klass.superclass %>
+ <p class="link"><a href="<%= klass.aref_to klass.superclass.path %>"><%= klass.superclass.full_name %></a></p>
+ <% else %>
+ <p class="link"><%= klass.superclass %></p>
+ <% end %>
+ </div>
+ <% end %>
+
+ <!-- Namespace Contents -->
+ <% unless klass.classes_and_modules.empty? %>
+ <div id="namespace-list-section" class="section">
+ <h3 class="section-header">Namespace</h3>
+ <ul class="link-list">
+ <% (klass.modules.sort + klass.classes.sort).each do |mod| %>
+ <li><span class="type"><%= mod.type.upcase %></span> <a href="<%= klass.aref_to mod.path %>"><%= mod.full_name %></a></li>
+ <% end %>
+ </ul>
+ </div>
+ <% end %>
+
+ <!-- Method Quickref -->
+ <% unless klass.method_list.empty? %>
+ <div id="method-list-section" class="section">
+ <h3 class="section-header">Methods</h3>
+ <ul class="link-list">
+ <% klass.each_method do |meth| %>
+ <li><a href="#<%= meth.aref %>"><%= meth.singleton ? '::' : '#' %><%= meth.name %></a></li>
+ <% end %>
+ </ul>
+ </div>
+ <% end %>
+
+ <!-- Included Modules -->
+ <% unless klass.includes.empty? %>
+ <div id="includes-section" class="section">
+ <h3 class="section-header">Included Modules</h3>
+ <ul class="link-list">
+ <% klass.each_include do |inc| %>
+ <% unless String === inc.module %>
+ <li><a class="include" href="<%= klass.aref_to inc.module.path %>"><%= inc.module.full_name %></a></li>
+ <% else %>
+ <li><span class="include"><%= inc.name %></span></li>
+ <% end %>
+ <% end %>
+ </ul>
+ </div>
+ <% end %>
+ </div>
+
+ <div id="project-metadata">
+ <% simple_files = @files.select {|tl| tl.parser == RDoc::Parser::Simple } %>
+ <% unless simple_files.empty? then %>
+ <div id="fileindex-section" class="section project-section">
+ <h3 class="section-header">Files</h3>
+ <ul>
+ <% simple_files.each do |file| %>
+ <li class="file"><a href="<%= rel_prefix %>/<%= file.path %>"><%= h file.base_name %></a></li>
+ <% end %>
+ </ul>
+ </div>
+ <% end %>
+
+ <div id="classindex-section" class="section project-section">
+ <h3 class="section-header">Class Index
+ <span class="search-toggle"><img src="<%= rel_prefix %>/images/find.png"
+ height="16" width="16" alt="[+]"
+ title="show/hide quicksearch" /></span></h3>
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
+ <fieldset>
+ <legend>Quicksearch</legend>
+ <input type="text" name="quicksearch" value=""
+ class="quicksearch-field" />
+ </fieldset>
+ </form>
+
+ <ul class="link-list">
+ <% @modsort.each do |index_klass| %>
+ <li><a href="<%= rel_prefix %>/<%= index_klass.path %>"><%= index_klass.full_name %></a></li>
+ <% end %>
+ </ul>
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
+ </div>
+
+ <% if $DEBUG_RDOC %>
+ <div id="debugging-toggle"><img src="<%= rel_prefix %>/images/bug.png"
+ alt="toggle debugging" height="16" width="16" /></div>
+ <% end %>
+ </div>
+ </div>
+
+ <div id="documentation">
+ <h1 class="<%= klass.type %>"><%= klass.full_name %></h1>
+
+ <div id="description">
+ <%= klass.description %>
+ </div>
+
+ <!-- Constants -->
+ <% unless klass.constants.empty? %>
+ <div id="constants-list" class="section">
+ <h3 class="section-header">Constants</h3>
+ <dl>
+ <% klass.each_constant do |const| %>
+ <dt><a name="<%= const.name %>"><%= const.name %></a></dt>
+ <% if const.comment %>
+ <dd class="description"><%= const.description.strip %></dd>
+ <% else %>
+ <dd class="description missing-docs">(Not documented)</dd>
+ <% end %>
+ <% end %>
+ </dl>
+ </div>
+ <% end %>
+
+ <!-- Attributes -->
+ <% unless klass.attributes.empty? %>
+ <div id="attribute-method-details" class="method-section section">
+ <h3 class="section-header">Attributes</h3>
+
+ <% klass.each_attribute do |attrib| %>
+ <div id="<%= attrib.html_name %>-attribute-method" class="method-detail">
+ <a name="<%= h attrib.name %>"></a>
+ <% if attrib.rw =~ /w/i %>
+ <a name="<%= h attrib.name %>="></a>
+ <% end %>
+ <div class="method-heading attribute-method-heading">
+ <span class="method-name"><%= h attrib.name %></span><span
+ class="attribute-access-type">[<%= attrib.rw %>]</span>
+ </div>
+
+ <div class="method-description">
+ <% if attrib.comment %>
+ <%= attrib.description.strip %>
+ <% else %>
+ <p class="missing-docs">(Not documented)</p>
+ <% end %>
+ </div>
+ </div>
+ <% end %>
+ </div>
+ <% end %>
+
+ <!-- Methods -->
+ <% klass.methods_by_type.each do |type, visibilities|
+ next if visibilities.empty?
+ visibilities.each do |visibility, methods|
+ next if methods.empty? %>
+ <div id="<%= visibility %>-<%= type %>-method-details" class="method-section section">
+ <h3 class="section-header"><%= visibility.to_s.capitalize %> <%= type.capitalize %> Methods</h3>
+
+ <% methods.each do |method| %>
+ <div id="<%= method.html_name %>-method" class="method-detail <%= method.is_alias_for ? "method-alias" : '' %>">
+ <a name="<%= h method.aref %>"></a>
+
+ <div class="method-heading">
+ <% if method.call_seq %>
+ <span class="method-callseq"><%= method.call_seq.strip.gsub(/->/, '&rarr;').gsub( /^\w.*?\./m, '') %></span>
+ <span class="method-click-advice">click to toggle source</span>
+ <% else %>
+ <span class="method-name"><%= h method.name %></span><span
+ class="method-args"><%= method.params %></span>
+ <span class="method-click-advice">click to toggle source</span>
+ <% end %>
+ </div>
+
+ <div class="method-description">
+ <% if method.comment %>
+ <%= method.description.strip %>
+ <% else %>
+ <p class="missing-docs">(Not documented)</p>
+ <% end %>
+
+ <% if method.token_stream %>
+ <div class="method-source-code"
+ id="<%= method.html_name %>-source">
+<pre>
+<%= method.markup_code %>
+</pre>
+ </div>
+ <% end %>
+ </div>
+
+ <% unless method.aliases.empty? %>
+ <div class="aliases">
+ Also aliased as: <%= method.aliases.map do |aka|
+ %{<a href="#{ klass.aref_to aka.path}">#{h aka.name}</a>}
+ end.join(", ") %>
+ </div>
+ <% end %>
+ </div>
+
+ <% end %>
+ </div>
+ <% end
+ end %>
+
+ </div>
+
+
+ <div id="rdoc-debugging-section-dump" class="debugging-section">
+ <% if $DEBUG_RDOC
+ require 'pp' %>
+<pre><%= h PP.pp(klass, _erbout) %></pre>
+ </div>
+ <% else %>
+ <p>Disabled; run with --debug to generate this.</p>
+ <% end %>
+ </div>
+
+ <div id="validator-badges">
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
+ Rdoc Generator</a> <%= RDoc::Generator::Darkfish::VERSION %></small>.</p>
+ </div>
+
+</body>
+</html>
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/filepage.rhtml b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/filepage.rhtml
new file mode 100644
index 000000000..2627e8966
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/filepage.rhtml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta content="text/html; charset=<%= @options.charset %>" http-equiv="Content-Type" />
+
+ <title>File: <%= file.base_name %> [<%= @options.title %>]</title>
+
+ <link type="text/css" media="screen" href="<%= rel_prefix %>/rdoc.css" rel="stylesheet" />
+
+ <script src="<%= rel_prefix %>/js/jquery.js" type="text/javascript"
+ charset="utf-8"></script>
+ <script src="<%= rel_prefix %>/js/thickbox-compressed.js" type="text/javascript"
+ charset="utf-8"></script>
+ <script src="<%= rel_prefix %>/js/quicksearch.js" type="text/javascript"
+ charset="utf-8"></script>
+ <script src="<%= rel_prefix %>/js/darkfish.js" type="text/javascript"
+ charset="utf-8"></script>
+</head>
+
+<% if file.parser == RDoc::Parser::Simple %>
+<body class="file">
+ <div id="metadata">
+ <div id="project-metadata">
+ <% simple_files = @files.select { |f| f.parser == RDoc::Parser::Simple } %>
+ <% unless simple_files.empty? then %>
+ <div id="fileindex-section" class="section project-section">
+ <h3 class="section-header">Files</h3>
+ <ul>
+ <% simple_files.each do |f| %>
+ <li class="file"><a href="<%= rel_prefix %>/<%= f.path %>"><%= h f.base_name %></a></li>
+ <% end %>
+ </ul>
+ </div>
+ <% end %>
+
+ <div id="classindex-section" class="section project-section">
+ <h3 class="section-header">Class Index
+ <span class="search-toggle"><img src="<%= rel_prefix %>/images/find.png"
+ height="16" width="16" alt="[+]"
+ title="show/hide quicksearch" /></span></h3>
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
+ <fieldset>
+ <legend>Quicksearch</legend>
+ <input type="text" name="quicksearch" value=""
+ class="quicksearch-field" />
+ </fieldset>
+ </form>
+
+ <ul class="link-list">
+ <% @modsort.each do |index_klass| %>
+ <li><a href="<%= rel_prefix %>/<%= index_klass.path %>"><%= index_klass.full_name %></a></li>
+ <% end %>
+ </ul>
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
+ </div>
+
+ <% if $DEBUG_RDOC %>
+ <div id="debugging-toggle"><img src="<%= rel_prefix %>/images/bug.png"
+ alt="toggle debugging" height="16" width="16" /></div>
+ <% end %>
+ </div>
+ </div>
+
+ <div id="documentation">
+ <%= file.description %>
+ </div>
+
+ <div id="validator-badges">
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
+ Rdoc Generator</a> <%= RDoc::Generator::Darkfish::VERSION %></small>.</p>
+ </div>
+</body>
+<% else %>
+<body class="file file-popup">
+ <div id="metadata">
+ <dl>
+ <dt class="modified-date">Last Modified</dt>
+ <dd class="modified-date"><%= file.last_modified %></dd>
+
+ <% if file.requires %>
+ <dt class="requires">Requires</dt>
+ <dd class="requires">
+ <ul>
+ <% file.requires.each do |require| %>
+ <li><%= require.name %></li>
+ <% end %>
+ </ul>
+ </dd>
+ <% end %>
+
+ <% if @options.webcvs %>
+ <dt class="scs-url">Trac URL</dt>
+ <dd class="scs-url"><a target="_top"
+ href="<%= file.cvs_url %>"><%= file.cvs_url %></a></dd>
+ <% end %>
+ </dl>
+ </div>
+
+ <div id="documentation">
+ <% if file.comment %>
+ <div class="description">
+ <h2>Description</h2>
+ <%= file.description %>
+ </div>
+ <% end %>
+ </div>
+</body>
+<% end %>
+</html>
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/brick.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/brick.png
new file mode 100755
index 000000000..7851cf34c
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/brick.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/brick_link.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/brick_link.png
new file mode 100755
index 000000000..9ebf013a2
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/brick_link.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bug.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bug.png
new file mode 100644
index 000000000..2d5fb90ec
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bug.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_black.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_black.png
new file mode 100755
index 000000000..57619706d
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_black.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.png
new file mode 100755
index 000000000..b47ce55f6
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.png
new file mode 100755
index 000000000..9ab4a8966
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/date.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/date.png
new file mode 100755
index 000000000..783c83357
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/date.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/find.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/find.png
new file mode 100755
index 000000000..154747964
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/find.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif
new file mode 100644
index 000000000..82290f483
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/macFFBgHack.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/macFFBgHack.png
new file mode 100644
index 000000000..c6473b324
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/macFFBgHack.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/package.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/package.png
new file mode 100755
index 000000000..da3c2a2d7
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/package.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_green.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_green.png
new file mode 100755
index 000000000..de8e003f9
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_green.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_white_text.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_white_text.png
new file mode 100755
index 000000000..813f712f7
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_white_text.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_white_width.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_white_width.png
new file mode 100755
index 000000000..1eb880947
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/page_white_width.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/plugin.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/plugin.png
new file mode 100755
index 000000000..6187b15ae
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/plugin.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/ruby.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/ruby.png
new file mode 100755
index 000000000..f763a1688
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/ruby.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/tag_green.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/tag_green.png
new file mode 100755
index 000000000..83ec984bd
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/tag_green.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/wrench.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/wrench.png
new file mode 100755
index 000000000..5c8213fef
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/wrench.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/wrench_orange.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/wrench_orange.png
new file mode 100755
index 000000000..565a9330e
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/wrench_orange.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/zoom.png b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/zoom.png
new file mode 100755
index 000000000..908612e39
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/images/zoom.png
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/index.rhtml b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/index.rhtml
new file mode 100644
index 000000000..21c067606
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/index.rhtml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+ <meta content="text/html; charset=<%= @options.charset %>" http-equiv="Content-Type" />
+
+ <title><%= h @options.title %></title>
+
+ <link type="text/css" media="screen" href="rdoc.css" rel="stylesheet" />
+
+ <script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
+ <script src="js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
+ <script src="js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
+ <script src="js/darkfish.js" type="text/javascript" charset="utf-8"></script>
+
+</head>
+<body class="indexpage">
+
+ <% $stderr.sync = true %>
+ <h1><%= h @options.title %></h1>
+
+ <% if @options.main_page && main_page = @files.find { |f| f.full_name == @options.main_page } %>
+ <div id="main">
+ <%= main_page.description.sub(%r{^\s*<h1.*?/h1>}i, '') %>
+ </div>
+ <% else %>
+ <p>This is the API documentation for '<%= @options.title %>'.</p>
+ <% end %>
+
+ <% simple_files = @files.select {|tl| tl.parser == RDoc::Parser::Simple } %>
+ <% unless simple_files.empty? then %>
+ <h2>Files</h2>
+ <ul>
+ <% simple_files.sort.each do |file| %>
+ <li class="file"><a href="<%= file.path %>"><%= h file.base_name %></a></li>
+ <% end %>
+ </ul>
+ <% end %>
+
+ <h2>Classes/Modules</h2>
+ <ul>
+ <% @modsort.each do |klass| %>
+ <li class="<%= klass.type %>"><a href="<%= klass.path %>"><%= klass.full_name %></a></li>
+ <% end %>
+ </ul>
+
+ <h2>Methods</h2>
+ <ul>
+ <% RDoc::TopLevel.all_classes_and_modules.map do |mod|
+ mod.method_list
+ end.flatten.sort.each do |method| %>
+ <li><a href="<%= method.path %>"><%= method.pretty_name %> &mdash; <%= method.parent.full_name %></a></li>
+ <% end %>
+ </ul>
+
+ <div id="validator-badges">
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
+ Rdoc Generator</a> <%= RDoc::Generator::Darkfish::VERSION %></small>.</p>
+ </div>
+</body>
+</html>
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/darkfish.js b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/darkfish.js
new file mode 100644
index 000000000..43528fdde
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/darkfish.js
@@ -0,0 +1,116 @@
+/**
+ *
+ * Darkfish Page Functions
+ * $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $
+ *
+ * Author: Michael Granger <mgranger@laika.com>
+ *
+ */
+
+/* Provide console simulation for firebug-less environments */
+if (!("console" in window) || !("firebug" in console)) {
+ var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
+ "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
+
+ window.console = {};
+ for (var i = 0; i < names.length; ++i)
+ window.console[names[i]] = function() {};
+};
+
+
+/**
+ * Unwrap the first element that matches the given @expr@ from the targets and return them.
+ */
+$.fn.unwrap = function( expr ) {
+ return this.each( function() {
+ $(this).parents( expr ).eq( 0 ).after( this ).remove();
+ });
+};
+
+
+function showSource( e ) {
+ var target = e.target;
+ var codeSections = $(target).
+ parents('.method-detail').
+ find('.method-source-code');
+
+ $(target).
+ parents('.method-detail').
+ find('.method-source-code').
+ slideToggle();
+};
+
+function hookSourceViews() {
+ $('.method-description,.method-heading').click( showSource );
+};
+
+function toggleDebuggingSection() {
+ $('.debugging-section').slideToggle();
+};
+
+function hookDebuggingToggle() {
+ $('#debugging-toggle img').click( toggleDebuggingSection );
+};
+
+function hookQuickSearch() {
+ $('.quicksearch-field').each( function() {
+ var searchElems = $(this).parents('.section').find( 'li' );
+ var toggle = $(this).parents('.section').find('h3 .search-toggle');
+ // console.debug( "Toggle is: %o", toggle );
+ var qsbox = $(this).parents('form').get( 0 );
+
+ $(this).quicksearch( this, searchElems, {
+ noSearchResultsIndicator: 'no-class-search-results',
+ focusOnLoad: false
+ });
+ $(toggle).click( function() {
+ // console.debug( "Toggling qsbox: %o", qsbox );
+ $(qsbox).toggle();
+ });
+ });
+};
+
+function highlightTarget( anchor ) {
+ console.debug( "Highlighting target '%s'.", anchor );
+
+ $("a[name=" + anchor + "]").each( function() {
+ if ( !$(this).parent().parent().hasClass('target-section') ) {
+ console.debug( "Wrapping the target-section" );
+ $('div.method-detail').unwrap( 'div.target-section' );
+ $(this).parent().wrap( '<div class="target-section"></div>' );
+ } else {
+ console.debug( "Already wrapped." );
+ }
+ });
+};
+
+function highlightLocationTarget() {
+ console.debug( "Location hash: %s", window.location.hash );
+ if ( ! window.location.hash || window.location.hash.length == 0 ) return;
+
+ var anchor = window.location.hash.substring(1);
+ console.debug( "Found anchor: %s; matching %s", anchor, "a[name=" + anchor + "]" );
+
+ highlightTarget( anchor );
+};
+
+function highlightClickTarget( event ) {
+ console.debug( "Highlighting click target for event %o", event.target );
+ try {
+ var anchor = $(event.target).attr( 'href' ).substring(1);
+ console.debug( "Found target anchor: %s", anchor );
+ highlightTarget( anchor );
+ } catch ( err ) {
+ console.error( "Exception while highlighting: %o", err );
+ };
+};
+
+
+$(document).ready( function() {
+ hookSourceViews();
+ hookDebuggingToggle();
+ hookQuickSearch();
+ highlightLocationTarget();
+
+ $('ul.link-list a').bind( "click", highlightClickTarget );
+});
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/jquery.js b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/jquery.js
new file mode 100644
index 000000000..afe9e74c9
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/jquery.js
@@ -0,0 +1,32 @@
+/*
+ * jQuery 1.2.6 - New Wave Javascript
+ *
+ * Copyright (c) 2008 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2008-09-25 09:50:52 -0700 (Thu, 25 Sep 2008) $
+ * $Rev: 38 $
+ */
+(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
+return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
+return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
+selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
+return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
+this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
+return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
+jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
+script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
+for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
+for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
+jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
+ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
+while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
+while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
+for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
+jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
+xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
+jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
+for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
+s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
+e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})(); \ No newline at end of file
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/quicksearch.js b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/quicksearch.js
new file mode 100644
index 000000000..332772ac7
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/quicksearch.js
@@ -0,0 +1,114 @@
+/**
+ *
+ * JQuery QuickSearch - Hook up a form field to hide non-matching elements.
+ * $Id: quicksearch.js 53 2009-01-07 02:52:03Z deveiant $
+ *
+ * Author: Michael Granger <mgranger@laika.com>
+ *
+ */
+jQuery.fn.quicksearch = function( target, searchElems, options ) {
+ // console.debug( "Quicksearch fn" );
+
+ var settings = {
+ delay: 250,
+ clearButton: false,
+ highlightMatches: false,
+ focusOnLoad: false,
+ noSearchResultsIndicator: null
+ };
+ if ( options ) $.extend( settings, options );
+
+ return jQuery(this).each( function() {
+ // console.debug( "Creating a new quicksearch on %o for %o", this, searchElems );
+ new jQuery.quicksearch( this, searchElems, settings );
+ });
+};
+
+
+jQuery.quicksearch = function( searchBox, searchElems, settings ) {
+ var timeout;
+ var boxdiv = $(searchBox).parents('div').eq(0);
+
+ function init() {
+ setupKeyEventHandlers();
+ focusOnLoad();
+ };
+
+ function setupKeyEventHandlers() {
+ // console.debug( "Hooking up the 'keypress' event to %o", searchBox );
+ $(searchBox).
+ unbind( 'keyup' ).
+ keyup( function(e) { return onSearchKey( e.keyCode ); });
+ $(searchBox).
+ unbind( 'keypress' ).
+ keypress( function(e) {
+ switch( e.which ) {
+ // Execute the search on Enter, Tab, or Newline
+ case 9:
+ case 13:
+ case 10:
+ clearTimeout( timeout );
+ e.preventDefault();
+ doQuickSearch();
+ break;
+
+ // Allow backspace
+ case 8:
+ return true;
+ break;
+
+ // Only allow valid search characters
+ default:
+ return validQSChar( e.charCode );
+ }
+ });
+ };
+
+ function focusOnLoad() {
+ if ( !settings.focusOnLoad ) return false;
+ $(searchBox).focus();
+ };
+
+ function onSearchKey ( code ) {
+ clearTimeout( timeout );
+ // console.debug( "...scheduling search." );
+ timeout = setTimeout( doQuickSearch, settings.delay );
+ };
+
+ function validQSChar( code ) {
+ var c = String.fromCharCode( code );
+ return (
+ (c == ':') ||
+ (c >= 'a' && c <= 'z') ||
+ (c >= 'A' && c <= 'Z')
+ );
+ };
+
+ function doQuickSearch() {
+ var searchText = searchBox.value;
+ var pat = new RegExp( searchText, "im" );
+ var shownCount = 0;
+
+ if ( settings.noSearchResultsIndicator ) {
+ $('#' + settings.noSearchResultsIndicator).hide();
+ }
+
+ // All elements start out hidden
+ $(searchElems).each( function(index) {
+ var str = $(this).text();
+
+ if ( pat.test(str) ) {
+ shownCount += 1;
+ $(this).fadeIn();
+ } else {
+ $(this).hide();
+ }
+ });
+
+ if ( shownCount == 0 && settings.noSearchResultsIndicator ) {
+ $('#' + settings.noSearchResultsIndicator).slideDown();
+ }
+ };
+
+ init();
+};
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js
new file mode 100644
index 000000000..3a3fdae1f
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js
@@ -0,0 +1,10 @@
+/*
+ * Thickbox 3 - One Box To Rule Them All.
+ * By Cody Lindley (http://www.codylindley.com)
+ * Copyright (c) 2007 cody lindley
+ * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
+*/
+
+var tb_pathToImage = "../images/loadingAnimation.gif";
+
+eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('$(o).2S(9(){1u(\'a.18, 3n.18, 3i.18\');1w=1p 1t();1w.L=2H});9 1u(b){$(b).s(9(){6 t=X.Q||X.1v||M;6 a=X.u||X.23;6 g=X.1N||P;19(t,a,g);X.2E();H P})}9 19(d,f,g){3m{3(2t o.v.J.2i==="2g"){$("v","11").r({A:"28%",z:"28%"});$("11").r("22","2Z");3(o.1Y("1F")===M){$("v").q("<U 5=\'1F\'></U><4 5=\'B\'></4><4 5=\'8\'></4>");$("#B").s(G)}}n{3(o.1Y("B")===M){$("v").q("<4 5=\'B\'></4><4 5=\'8\'></4>");$("#B").s(G)}}3(1K()){$("#B").1J("2B")}n{$("#B").1J("2z")}3(d===M){d=""}$("v").q("<4 5=\'K\'><1I L=\'"+1w.L+"\' /></4>");$(\'#K\').2y();6 h;3(f.O("?")!==-1){h=f.3l(0,f.O("?"))}n{h=f}6 i=/\\.2s$|\\.2q$|\\.2m$|\\.2l$|\\.2k$/;6 j=h.1C().2h(i);3(j==\'.2s\'||j==\'.2q\'||j==\'.2m\'||j==\'.2l\'||j==\'.2k\'){1D="";1G="";14="";1z="";1x="";R="";1n="";1r=P;3(g){E=$("a[@1N="+g+"]").36();25(D=0;((D<E.1c)&&(R===""));D++){6 k=E[D].u.1C().2h(i);3(!(E[D].u==f)){3(1r){1z=E[D].Q;1x=E[D].u;R="<1e 5=\'1X\'>&1d;&1d;<a u=\'#\'>2T &2R;</a></1e>"}n{1D=E[D].Q;1G=E[D].u;14="<1e 5=\'1U\'>&1d;&1d;<a u=\'#\'>&2O; 2N</a></1e>"}}n{1r=1b;1n="1t "+(D+1)+" 2L "+(E.1c)}}}S=1p 1t();S.1g=9(){S.1g=M;6 a=2x();6 x=a[0]-1M;6 y=a[1]-1M;6 b=S.z;6 c=S.A;3(b>x){c=c*(x/b);b=x;3(c>y){b=b*(y/c);c=y}}n 3(c>y){b=b*(y/c);c=y;3(b>x){c=c*(x/b);b=x}}13=b+30;1a=c+2G;$("#8").q("<a u=\'\' 5=\'1L\' Q=\'1o\'><1I 5=\'2F\' L=\'"+f+"\' z=\'"+b+"\' A=\'"+c+"\' 23=\'"+d+"\'/></a>"+"<4 5=\'2D\'>"+d+"<4 5=\'2C\'>"+1n+14+R+"</4></4><4 5=\'2A\'><a u=\'#\' 5=\'Z\' Q=\'1o\'>1l</a> 1k 1j 1s</4>");$("#Z").s(G);3(!(14==="")){9 12(){3($(o).N("s",12)){$(o).N("s",12)}$("#8").C();$("v").q("<4 5=\'8\'></4>");19(1D,1G,g);H P}$("#1U").s(12)}3(!(R==="")){9 1i(){$("#8").C();$("v").q("<4 5=\'8\'></4>");19(1z,1x,g);H P}$("#1X").s(1i)}o.1h=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}n 3(I==3k){3(!(R=="")){o.1h="";1i()}}n 3(I==3j){3(!(14=="")){o.1h="";12()}}};16();$("#K").C();$("#1L").s(G);$("#8").r({Y:"T"})};S.L=f}n{6 l=f.2r(/^[^\\?]+\\??/,\'\');6 m=2p(l);13=(m[\'z\']*1)+30||3h;1a=(m[\'A\']*1)+3g||3f;W=13-30;V=1a-3e;3(f.O(\'2j\')!=-1){1E=f.1B(\'3d\');$("#15").C();3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"</4><4 5=\'2e\'><a u=\'#\' 5=\'Z\' Q=\'1o\'>1l</a> 1k 1j 1s</4></4><U 1W=\'0\' 2d=\'0\' L=\'"+1E[0]+"\' 5=\'15\' 1v=\'15"+1f.2c(1f.1y()*2b)+"\' 1g=\'1m()\' J=\'z:"+(W+29)+"p;A:"+(V+17)+"p;\' > </U>")}n{$("#B").N();$("#8").q("<U 1W=\'0\' 2d=\'0\' L=\'"+1E[0]+"\' 5=\'15\' 1v=\'15"+1f.2c(1f.1y()*2b)+"\' 1g=\'1m()\' J=\'z:"+(W+29)+"p;A:"+(V+17)+"p;\'> </U>")}}n{3($("#8").r("Y")!="T"){3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"</4><4 5=\'2e\'><a u=\'#\' 5=\'Z\'>1l</a> 1k 1j 1s</4></4><4 5=\'F\' J=\'z:"+W+"p;A:"+V+"p\'></4>")}n{$("#B").N();$("#8").q("<4 5=\'F\' 3c=\'3b\' J=\'z:"+W+"p;A:"+V+"p;\'></4>")}}n{$("#F")[0].J.z=W+"p";$("#F")[0].J.A=V+"p";$("#F")[0].3a=0;$("#1H").11(d)}}$("#Z").s(G);3(f.O(\'37\')!=-1){$("#F").q($(\'#\'+m[\'26\']).1T());$("#8").24(9(){$(\'#\'+m[\'26\']).q($("#F").1T())});16();$("#K").C();$("#8").r({Y:"T"})}n 3(f.O(\'2j\')!=-1){16();3($.1q.35){$("#K").C();$("#8").r({Y:"T"})}}n{$("#F").34(f+="&1y="+(1p 33().32()),9(){16();$("#K").C();1u("#F a.18");$("#8").r({Y:"T"})})}}3(!m[\'1A\']){o.21=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}}}}31(e){}}9 1m(){$("#K").C();$("#8").r({Y:"T"})}9 G(){$("#2Y").N("s");$("#Z").N("s");$("#8").2X("2W",9(){$(\'#8,#B,#1F\').2V("24").N().C()});$("#K").C();3(2t o.v.J.2i=="2g"){$("v","11").r({A:"1Z",z:"1Z"});$("11").r("22","")}o.1h="";o.21="";H P}9 16(){$("#8").r({2U:\'-\'+20((13/2),10)+\'p\',z:13+\'p\'});3(!(1V.1q.2Q&&1V.1q.2P<7)){$("#8").r({38:\'-\'+20((1a/2),10)+\'p\'})}}9 2p(a){6 b={};3(!a){H b}6 c=a.1B(/[;&]/);25(6 i=0;i<c.1c;i++){6 d=c[i].1B(\'=\');3(!d||d.1c!=2){39}6 e=2a(d[0]);6 f=2a(d[1]);f=f.2r(/\\+/g,\' \');b[e]=f}H b}9 2x(){6 a=o.2M;6 w=1S.2o||1R.2o||(a&&a.1Q)||o.v.1Q;6 h=1S.1P||1R.1P||(a&&a.2n)||o.v.2n;1O=[w,h];H 1O}9 1K(){6 a=2K.2J.1C();3(a.O(\'2I\')!=-1&&a.O(\'3o\')!=-1){H 1b}}',62,211,'|||if|div|id|var||TB_window|function||||||||||||||else|document|px|append|css|click||href|body||||width|height|TB_overlay|remove|TB_Counter|TB_TempArray|TB_ajaxContent|tb_remove|return|keycode|style|TB_load|src|null|unbind|indexOf|false|title|TB_NextHTML|imgPreloader|block|iframe|ajaxContentH|ajaxContentW|this|display|TB_closeWindowButton||html|goPrev|TB_WIDTH|TB_PrevHTML|TB_iframeContent|tb_position||thickbox|tb_show|TB_HEIGHT|true|length|nbsp|span|Math|onload|onkeydown|goNext|Esc|or|close|tb_showIframe|TB_imageCount|Close|new|browser|TB_FoundURL|Key|Image|tb_init|name|imgLoader|TB_NextURL|random|TB_NextCaption|modal|split|toLowerCase|TB_PrevCaption|urlNoQuery|TB_HideSelect|TB_PrevURL|TB_ajaxWindowTitle|img|addClass|tb_detectMacXFF|TB_ImageOff|150|rel|arrayPageSize|innerHeight|clientWidth|self|window|children|TB_prev|jQuery|frameborder|TB_next|getElementById|auto|parseInt|onkeyup|overflow|alt|unload|for|inlineId||100||unescape|1000|round|hspace|TB_closeAjaxWindow|TB_title|undefined|match|maxHeight|TB_iframe|bmp|gif|png|clientHeight|innerWidth|tb_parseQuery|jpeg|replace|jpg|typeof|which|keyCode|event|tb_getPageSize|show|TB_overlayBG|TB_closeWindow|TB_overlayMacFFBGHack|TB_secondLine|TB_caption|blur|TB_Image|60|tb_pathToImage|mac|userAgent|navigator|of|documentElement|Prev|lt|version|msie|gt|ready|Next|marginLeft|trigger|fast|fadeOut|TB_imageOff|hidden||catch|getTime|Date|load|safari|get|TB_inline|marginTop|continue|scrollTop|TB_modal|class|TB_|45|440|40|630|input|188|190|substr|try|area|firefox'.split('|'),0,{})) \ No newline at end of file
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/rdoc.css b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/rdoc.css
new file mode 100644
index 000000000..bca0a021c
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/generator/template/darkfish/rdoc.css
@@ -0,0 +1,696 @@
+/*
+ * "Darkfish" Rdoc CSS
+ * $Id: rdoc.css 54 2009-01-27 01:09:48Z deveiant $
+ *
+ * Author: Michael Granger <ged@FaerieMUD.org>
+ *
+ */
+
+/* Base Green is: #6C8C22 */
+
+*{ padding: 0; margin: 0; }
+
+body {
+ background: #efefef;
+ font: 14px "Helvetica Neue", Helvetica, Tahoma, sans-serif;
+}
+body.class, body.module, body.file {
+ margin-left: 40px;
+}
+body.file-popup {
+ font-size: 90%;
+ margin-left: 0;
+}
+
+h1 {
+ font-size: 300%;
+ text-shadow: rgba(135,145,135,0.65) 2px 2px 3px;
+ color: #6C8C22;
+}
+h2,h3,h4 { margin-top: 1.5em; }
+
+a {
+ color: #6C8C22;
+ text-decoration: none;
+}
+a:hover {
+ border-bottom: 1px dotted #6C8C22;
+}
+
+pre {
+ background: #ddd;
+ padding: 0.5em 0;
+}
+
+
+/* @group Generic Classes */
+
+.initially-hidden {
+ display: none;
+}
+
+.quicksearch-field {
+ width: 98%;
+ background: #ddd;
+ border: 1px solid #aaa;
+ height: 1.5em;
+ -webkit-border-radius: 4px;
+}
+.quicksearch-field:focus {
+ background: #f1edba;
+}
+
+.missing-docs {
+ font-size: 120%;
+ background: white url(images/wrench_orange.png) no-repeat 4px center;
+ color: #ccc;
+ line-height: 2em;
+ border: 1px solid #d00;
+ opacity: 1;
+ padding-left: 20px;
+ text-indent: 24px;
+ letter-spacing: 3px;
+ font-weight: bold;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+}
+
+.target-section {
+ border: 2px solid #dcce90;
+ border-left-width: 8px;
+ padding: 0 1em;
+ background: #fff3c2;
+}
+
+/* @end */
+
+
+/* @group Index Page, Standalone file pages */
+body.indexpage {
+ margin: 1em 3em;
+}
+body.indexpage p,
+body.indexpage div,
+body.file p {
+ margin: 1em 0;
+}
+
+.indexpage ul,
+.file #documentation ul {
+ line-height: 160%;
+ list-style: none;
+}
+.indexpage ul a,
+.file #documentation ul a {
+ font-size: 16px;
+}
+
+.indexpage li,
+.file #documentation li {
+ padding-left: 20px;
+ background: url(images/bullet_black.png) no-repeat left 4px;
+}
+.indexpage li.module {
+ background: url(images/package.png) no-repeat left 4px;
+}
+.indexpage li.class {
+ background: url(images/ruby.png) no-repeat left 4px;
+}
+.indexpage li.file {
+ background: url(images/page_white_text.png) no-repeat left 4px;
+}
+
+/* @end */
+
+/* @group Top-Level Structure */
+
+.class #metadata,
+.file #metadata,
+.module #metadata {
+ float: left;
+ width: 260px;
+}
+
+.class #documentation,
+.file #documentation,
+.module #documentation {
+ margin: 2em 1em 5em 300px;
+ min-width: 340px;
+}
+
+.file #metadata {
+ margin: 0.8em;
+}
+
+#validator-badges {
+ clear: both;
+ margin: 1em 1em 2em;
+}
+
+/* @end */
+
+/* @group Metadata Section */
+#metadata .section {
+ background-color: #dedede;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border: 1px solid #aaa;
+ margin: 0 8px 16px;
+ font-size: 90%;
+ overflow: hidden;
+}
+#metadata h3.section-header {
+ margin: 0;
+ padding: 2px 8px;
+ background: #ccc;
+ color: #666;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-bottom: 1px solid #aaa;
+}
+#metadata ul,
+#metadata dl,
+#metadata p {
+ padding: 8px;
+ list-style: none;
+}
+
+#file-metadata ul {
+ padding-left: 28px;
+ list-style-image: url(images/page_green.png);
+}
+
+dl.svninfo {
+ color: #666;
+ margin: 0;
+}
+dl.svninfo dt {
+ font-weight: bold;
+}
+
+ul.link-list li {
+ white-space: nowrap;
+}
+ul.link-list .type {
+ font-size: 8px;
+ text-transform: uppercase;
+ color: white;
+ background: #969696;
+ padding: 2px 4px;
+ -webkit-border-radius: 5px;
+}
+
+/* @end */
+
+
+/* @group Project Metadata Section */
+#project-metadata {
+ margin-top: 3em;
+}
+
+.file #project-metadata {
+ margin-top: 0em;
+}
+
+#project-metadata .section {
+ border: 1px solid #aaa;
+}
+#project-metadata h3.section-header {
+ border-bottom: 1px solid #aaa;
+ position: relative;
+}
+#project-metadata h3.section-header .search-toggle {
+ position: absolute;
+ right: 5px;
+}
+
+
+#project-metadata form {
+ color: #777;
+ background: #ccc;
+ padding: 8px 8px 16px;
+ border-bottom: 1px solid #bbb;
+}
+#project-metadata fieldset {
+ border: 0;
+}
+
+#no-class-search-results {
+ margin: 0 auto 1em;
+ text-align: center;
+ font-size: 14px;
+ font-weight: bold;
+ color: #aaa;
+}
+
+/* @end */
+
+
+/* @group Documentation Section */
+#description {
+ font-size: 100%;
+ color: #333;
+}
+
+#description p {
+ margin: 1em 0.4em;
+}
+
+#description ul {
+ margin-left: 2em;
+}
+#description ul li {
+ line-height: 1.4em;
+}
+
+#description dl,
+#documentation dl {
+ margin: 8px 1.5em;
+ border: 1px solid #ccc;
+}
+#description dl {
+ font-size: 14px;
+}
+
+#description dt,
+#documentation dt {
+ padding: 2px 4px;
+ font-weight: bold;
+ background: #ddd;
+}
+#description dd,
+#documentation dd {
+ padding: 2px 12px;
+}
+#description dd + dt,
+#documentation dd + dt {
+ margin-top: 0.7em;
+}
+
+#documentation .section {
+ font-size: 90%;
+}
+#documentation h3.section-header {
+ margin-top: 2em;
+ padding: 0.75em 0.5em;
+ background-color: #dedede;
+ color: #333;
+ font-size: 150%;
+ border: 1px solid #bbb;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+}
+
+#constants-list > dl,
+#attributes-list > dl {
+ margin: 1em 0 2em;
+ border: 0;
+}
+#constants-list > dl dt,
+#attributes-list > dl dt {
+ padding-left: 0;
+ font-weight: bold;
+ font-family: Monaco, "Andale Mono";
+ background: inherit;
+}
+#constants-list > dl dt a,
+#attributes-list > dl dt a {
+ color: inherit;
+}
+#constants-list > dl dd,
+#attributes-list > dl dd {
+ margin: 0 0 1em 0;
+ padding: 0;
+ color: #666;
+}
+
+/* @group Method Details */
+
+#documentation .method-source-code {
+ display: none;
+}
+
+#documentation .method-detail {
+ margin: 0.5em 0;
+ padding: 0.5em 0;
+ cursor: pointer;
+}
+#documentation .method-detail:hover {
+ background-color: #f1edba;
+}
+#documentation .method-alias {
+ font-style: oblique;
+}
+#documentation .method-heading {
+ position: relative;
+ padding: 2px 4px 0 20px;
+ font-size: 125%;
+ font-weight: bold;
+ color: #333;
+ background: url(images/brick.png) no-repeat left bottom;
+}
+#documentation .method-heading a {
+ color: inherit;
+}
+#documentation .method-click-advice {
+ position: absolute;
+ top: 2px;
+ right: 5px;
+ font-size: 10px;
+ color: #9b9877;
+ visibility: hidden;
+ padding-right: 20px;
+ line-height: 20px;
+ background: url(images/zoom.png) no-repeat right top;
+}
+#documentation .method-detail:hover .method-click-advice {
+ visibility: visible;
+}
+
+#documentation .method-alias .method-heading {
+ color: #666;
+ background: url(images/brick_link.png) no-repeat left bottom;
+}
+
+#documentation .method-description,
+#documentation .aliases {
+ margin: 0 20px;
+ line-height: 1.2em;
+ color: #666;
+}
+#documentation .aliases {
+ padding-top: 4px;
+ font-style: italic;
+ cursor: default;
+}
+#documentation .method-description p {
+ padding: 0;
+}
+#documentation .method-description p + p {
+ margin-bottom: 0.5em;
+}
+
+#documentation .attribute-method-heading {
+ background: url(images/tag_green.png) no-repeat left bottom;
+}
+#documentation #attribute-method-details .method-detail:hover {
+ background-color: transparent;
+ cursor: default;
+}
+#documentation .attribute-access-type {
+ font-size: 60%;
+ text-transform: uppercase;
+ vertical-align: super;
+ padding: 0 2px;
+}
+/* @end */
+
+/* @end */
+
+
+
+/* @group Source Code */
+
+a.source-toggle {
+ font-size: 90%;
+}
+a.source-toggle img {
+
+}
+
+div.method-source-code {
+ background: #262626;
+ color: #efefef;
+ margin: 1em;
+ padding: 0.5em;
+ border: 1px dashed #999;
+ overflow: hidden;
+}
+
+div.method-source-code pre {
+ background: inherit;
+ padding: 0;
+ color: white;
+ overflow: hidden;
+}
+
+/* @group Ruby keyword styles */
+
+.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
+
+.ruby-constant { color: #7fffd4; background: transparent; }
+.ruby-keyword { color: #00ffff; background: transparent; }
+.ruby-ivar { color: #eedd82; background: transparent; }
+.ruby-operator { color: #00ffee; background: transparent; }
+.ruby-identifier { color: #ffdead; background: transparent; }
+.ruby-node { color: #ffa07a; background: transparent; }
+.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
+.ruby-regexp { color: #ffa07a; background: transparent; }
+.ruby-value { color: #7fffd4; background: transparent; }
+
+/* @end */
+/* @end */
+
+
+/* @group File Popup Contents */
+
+.file #metadata,
+.file-popup #metadata {
+}
+
+.file-popup dl {
+ font-size: 80%;
+ padding: 0.75em;
+ background-color: #dedede;
+ color: #333;
+ border: 1px solid #bbb;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+}
+.file dt {
+ font-weight: bold;
+ padding-left: 22px;
+ line-height: 20px;
+ background: url(images/page_white_width.png) no-repeat left top;
+}
+.file dt.modified-date {
+ background: url(images/date.png) no-repeat left top;
+}
+.file dt.requires {
+ background: url(images/plugin.png) no-repeat left top;
+}
+.file dt.scs-url {
+ background: url(images/wrench.png) no-repeat left top;
+}
+
+.file dl dd {
+ margin: 0 0 1em 0;
+}
+.file #metadata dl dd ul {
+ list-style: circle;
+ margin-left: 20px;
+ padding-top: 0;
+}
+.file #metadata dl dd ul li {
+}
+
+
+.file h2 {
+ margin-top: 2em;
+ padding: 0.75em 0.5em;
+ background-color: #dedede;
+ color: #333;
+ font-size: 120%;
+ border: 1px solid #bbb;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+}
+
+/* @end */
+
+
+
+
+/* @group ThickBox Styles */
+#TB_window {
+ font: 12px Arial, Helvetica, sans-serif;
+ color: #333333;
+}
+
+#TB_secondLine {
+ font: 10px Arial, Helvetica, sans-serif;
+ color:#666666;
+}
+
+#TB_window a:link {color: #666666;}
+#TB_window a:visited {color: #666666;}
+#TB_window a:hover {color: #000;}
+#TB_window a:active {color: #666666;}
+#TB_window a:focus{color: #666666;}
+
+#TB_overlay {
+ position: fixed;
+ z-index:100;
+ top: 0px;
+ left: 0px;
+ height:100%;
+ width:100%;
+}
+
+.TB_overlayMacFFBGHack {background: url(images/macFFBgHack.png) repeat;}
+.TB_overlayBG {
+ background-color:#000;
+ filter:alpha(opacity=75);
+ -moz-opacity: 0.75;
+ opacity: 0.75;
+}
+
+* html #TB_overlay { /* ie6 hack */
+ position: absolute;
+ height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
+}
+
+#TB_window {
+ position: fixed;
+ background: #ffffff;
+ z-index: 102;
+ color:#000000;
+ display:none;
+ border: 4px solid #525252;
+ text-align:left;
+ top:50%;
+ left:50%;
+}
+
+* html #TB_window { /* ie6 hack */
+position: absolute;
+margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
+}
+
+#TB_window img#TB_Image {
+ display:block;
+ margin: 15px 0 0 15px;
+ border-right: 1px solid #ccc;
+ border-bottom: 1px solid #ccc;
+ border-top: 1px solid #666;
+ border-left: 1px solid #666;
+}
+
+#TB_caption{
+ height:25px;
+ padding:7px 30px 10px 25px;
+ float:left;
+}
+
+#TB_closeWindow{
+ height:25px;
+ padding:11px 25px 10px 0;
+ float:right;
+}
+
+#TB_closeAjaxWindow{
+ padding:7px 10px 5px 0;
+ margin-bottom:1px;
+ text-align:right;
+ float:right;
+}
+
+#TB_ajaxWindowTitle{
+ float:left;
+ padding:7px 0 5px 10px;
+ margin-bottom:1px;
+ font-size: 22px;
+}
+
+#TB_title{
+ background-color: #6C8C22;
+ color: #dedede;
+ height:40px;
+}
+#TB_title a {
+ color: white !important;
+ border-bottom: 1px dotted #dedede;
+}
+
+#TB_ajaxContent{
+ clear:both;
+ padding:2px 15px 15px 15px;
+ overflow:auto;
+ text-align:left;
+ line-height:1.4em;
+}
+
+#TB_ajaxContent.TB_modal{
+ padding:15px;
+}
+
+#TB_ajaxContent p{
+ padding:5px 0px 5px 0px;
+}
+
+#TB_load{
+ position: fixed;
+ display:none;
+ height:13px;
+ width:208px;
+ z-index:103;
+ top: 50%;
+ left: 50%;
+ margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */
+}
+
+* html #TB_load { /* ie6 hack */
+position: absolute;
+margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
+}
+
+#TB_HideSelect{
+ z-index:99;
+ position:fixed;
+ top: 0;
+ left: 0;
+ background-color:#fff;
+ border:none;
+ filter:alpha(opacity=0);
+ -moz-opacity: 0;
+ opacity: 0;
+ height:100%;
+ width:100%;
+}
+
+* html #TB_HideSelect { /* ie6 hack */
+ position: absolute;
+ height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
+}
+
+#TB_iframeContent{
+ clear:both;
+ border:none;
+ margin-bottom:-1px;
+ margin-top:1px;
+ _margin-bottom:1px;
+}
+
+/* @end */
+
+/* @group Debugging Section */
+
+#debugging-toggle {
+ text-align: center;
+}
+#debugging-toggle img {
+ cursor: pointer;
+}
+
+#rdoc-debugging-section-dump {
+ display: none;
+ margin: 0 2em 2em;
+ background: #ccc;
+ border: 1px solid #999;
+}
+
+
+
+/* @end */
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ghost_method.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ghost_method.rb
new file mode 100644
index 000000000..192b46f51
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ghost_method.rb
@@ -0,0 +1,8 @@
+require 'rdoc/any_method'
+
+##
+# GhostMethod represents a method referenced only by a comment
+
+class RDoc::GhostMethod < RDoc::AnyMethod
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/include.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/include.rb
new file mode 100644
index 000000000..9be906158
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/include.rb
@@ -0,0 +1,39 @@
+require 'rdoc/code_object'
+
+##
+# A Module include in a class with \#include
+
+class RDoc::Include < RDoc::CodeObject
+
+ ##
+ # Name of included module
+
+ attr_accessor :name
+
+ ##
+ # Creates a new Include for +name+ with +comment+
+
+ def initialize(name, comment)
+ super()
+ @name = name
+ self.comment = comment
+ end
+
+ def inspect # :nodoc:
+ "#<%s:0x%x %s.include %s>" % [
+ self.class,
+ object_id,
+ parent_name, @name,
+ ]
+ end
+
+ ##
+ # Attempts to locate the included module object. Returns the name if not
+ # known.
+
+ def module
+ RDoc::TopLevel.find_module_named(@name) || @name
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/known_classes.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/known_classes.rb
new file mode 100644
index 000000000..dbb1802f5
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/known_classes.rb
@@ -0,0 +1,68 @@
+module RDoc
+
+ ##
+ # Ruby's built-in classes, modules and exceptions
+
+ KNOWN_CLASSES = {
+ "rb_cArray" => "Array",
+ "rb_cBignum" => "Bignum",
+ "rb_cClass" => "Class",
+ "rb_cData" => "Data",
+ "rb_cDir" => "Dir",
+ "rb_cFalseClass" => "FalseClass",
+ "rb_cFile" => "File",
+ "rb_cFixnum" => "Fixnum",
+ "rb_cFloat" => "Float",
+ "rb_cHash" => "Hash",
+ "rb_cIO" => "IO",
+ "rb_cInteger" => "Integer",
+ "rb_cModule" => "Module",
+ "rb_cNilClass" => "NilClass",
+ "rb_cNumeric" => "Numeric",
+ "rb_cObject" => "Object",
+ "rb_cProc" => "Proc",
+ "rb_cRange" => "Range",
+ "rb_cRegexp" => "Regexp",
+ "rb_cRubyVM" => "RubyVM",
+ "rb_cString" => "String",
+ "rb_cStruct" => "Struct",
+ "rb_cSymbol" => "Symbol",
+ "rb_cThread" => "Thread",
+ "rb_cTime" => "Time",
+ "rb_cTrueClass" => "TrueClass",
+
+ "rb_eArgError" => "ArgError",
+ "rb_eEOFError" => "EOFError",
+ "rb_eException" => "Exception",
+ "rb_eFatal" => "Fatal",
+ "rb_eFloatDomainError" => "FloatDomainError",
+ "rb_eIOError" => "IOError",
+ "rb_eIndexError" => "IndexError",
+ "rb_eInterrupt" => "Interrupt",
+ "rb_eLoadError" => "LoadError",
+ "rb_eNameError" => "NameError",
+ "rb_eNoMemError" => "NoMemError",
+ "rb_eNotImpError" => "NotImpError",
+ "rb_eRangeError" => "RangeError",
+ "rb_eRuntimeError" => "RuntimeError",
+ "rb_eScriptError" => "ScriptError",
+ "rb_eSecurityError" => "SecurityError",
+ "rb_eSignal" => "Signal",
+ "rb_eStandardError" => "StandardError",
+ "rb_eSyntaxError" => "SyntaxError",
+ "rb_eSystemCallError" => "SystemCallError",
+ "rb_eSystemExit" => "SystemExit",
+ "rb_eTypeError" => "TypeError",
+ "rb_eZeroDivError" => "ZeroDivError",
+
+ "rb_mComparable" => "Comparable",
+ "rb_mEnumerable" => "Enumerable",
+ "rb_mErrno" => "Errno",
+ "rb_mFileTest" => "FileTest",
+ "rb_mGC" => "GC",
+ "rb_mKernel" => "Kernel",
+ "rb_mMath" => "Math",
+ "rb_mProcess" => "Process"
+ }
+
+end
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup.rb
new file mode 100644
index 000000000..9d22b3894
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup.rb
@@ -0,0 +1,378 @@
+require 'rdoc'
+
+##
+# RDoc::Markup parses plain text documents and attempts to decompose them into
+# their constituent parts. Some of these parts are high-level: paragraphs,
+# chunks of verbatim text, list entries and the like. Other parts happen at
+# the character level: a piece of bold text, a word in code font. This markup
+# is similar in spirit to that used on WikiWiki webs, where folks create web
+# pages using a simple set of formatting rules.
+#
+# RDoc::Markup itself does no output formatting: this is left to a different
+# set of classes.
+#
+# RDoc::Markup is extendable at runtime: you can add \new markup elements to
+# be recognised in the documents that RDoc::Markup parses.
+#
+# RDoc::Markup is intended to be the basis for a family of tools which share
+# the common requirement that simple, plain-text should be rendered in a
+# variety of different output formats and media. It is envisaged that
+# RDoc::Markup could be the basis for formatting RDoc style comment blocks,
+# Wiki entries, and online FAQs.
+#
+# == Synopsis
+#
+# This code converts +input_string+ to HTML. The conversion takes place in
+# the +convert+ method, so you can use the same RDoc::Markup converter to
+# convert multiple input strings.
+#
+# require 'rdoc/markup/to_html'
+#
+# h = RDoc::Markup::ToHtml.new
+#
+# puts h.convert(input_string)
+#
+# You can extend the RDoc::Markup parser to recognise new markup
+# sequences, and to add special processing for text that matches a
+# regular expression. Here we make WikiWords significant to the parser,
+# and also make the sequences {word} and \<no>text...</no> signify
+# strike-through text. When then subclass the HTML output class to deal
+# with these:
+#
+# require 'rdoc/markup'
+# require 'rdoc/markup/to_html'
+#
+# class WikiHtml < RDoc::Markup::ToHtml
+# def handle_special_WIKIWORD(special)
+# "<font color=red>" + special.text + "</font>"
+# end
+# end
+#
+# m = RDoc::Markup.new
+# m.add_word_pair("{", "}", :STRIKE)
+# m.add_html("no", :STRIKE)
+#
+# m.add_special(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)
+#
+# wh = WikiHtml.new
+# wh.add_tag(:STRIKE, "<strike>", "</strike>")
+#
+# puts "<body>#{wh.convert ARGF.read}</body>"
+#
+#--
+# Author:: Dave Thomas, dave@pragmaticprogrammer.com
+# License:: Ruby license
+
+class RDoc::Markup
+
+ SPACE = ?\s
+
+ # List entries look like:
+ # * text
+ # 1. text
+ # [label] text
+ # label:: text
+ #
+ # Flag it as a list entry, and work out the indent for subsequent lines
+
+ SIMPLE_LIST_RE = /^(
+ ( \* (?# bullet)
+ |- (?# bullet)
+ |\d+\. (?# numbered )
+ |[A-Za-z]\. (?# alphabetically numbered )
+ )
+ \s+
+ )\S/x
+
+ LABEL_LIST_RE = /^(
+ ( \[.*?\] (?# labeled )
+ |\S.*:: (?# note )
+ )(?:\s+|$)
+ )/x
+
+ ##
+ # Take a block of text and use various heuristics to determine it's
+ # structure (paragraphs, lists, and so on). Invoke an event handler as we
+ # identify significant chunks.
+
+ def initialize
+ @am = RDoc::Markup::AttributeManager.new
+ @output = nil
+ end
+
+ ##
+ # Add to the sequences used to add formatting to an individual word (such
+ # as *bold*). Matching entries will generate attributes that the output
+ # formatters can recognize by their +name+.
+
+ def add_word_pair(start, stop, name)
+ @am.add_word_pair(start, stop, name)
+ end
+
+ ##
+ # Add to the sequences recognized as general markup.
+
+ def add_html(tag, name)
+ @am.add_html(tag, name)
+ end
+
+ ##
+ # Add to other inline sequences. For example, we could add WikiWords using
+ # something like:
+ #
+ # parser.add_special(/\b([A-Z][a-z]+[A-Z]\w+)/, :WIKIWORD)
+ #
+ # Each wiki word will be presented to the output formatter via the
+ # accept_special method.
+
+ def add_special(pattern, name)
+ @am.add_special(pattern, name)
+ end
+
+ ##
+ # We take a string, split it into lines, work out the type of each line,
+ # and from there deduce groups of lines (for example all lines in a
+ # paragraph). We then invoke the output formatter using a Visitor to
+ # display the result.
+
+ def convert(str, op)
+ lines = str.split(/\r?\n/).map { |line| Line.new line }
+ @lines = Lines.new lines
+
+ return "" if @lines.empty?
+ @lines.normalize
+ assign_types_to_lines
+ group = group_lines
+ # call the output formatter to handle the result
+ #group.each { |line| p line }
+ group.accept @am, op
+ end
+
+ private
+
+ ##
+ # Look through the text at line indentation. We flag each line as being
+ # Blank, a paragraph, a list element, or verbatim text.
+
+ def assign_types_to_lines(margin = 0, level = 0)
+ while line = @lines.next
+ if line.blank? then
+ line.stamp :BLANK, level
+ next
+ end
+
+ # if a line contains non-blanks before the margin, then it must belong
+ # to an outer level
+
+ text = line.text
+
+ for i in 0...margin
+ if text[i] != SPACE
+ @lines.unget
+ return
+ end
+ end
+
+ active_line = text[margin..-1]
+
+ # Rules (horizontal lines) look like
+ #
+ # --- (three or more hyphens)
+ #
+ # The more hyphens, the thicker the rule
+ #
+
+ if /^(---+)\s*$/ =~ active_line
+ line.stamp :RULE, level, $1.length-2
+ next
+ end
+
+ # Then look for list entries. First the ones that have to have
+ # text following them (* xxx, - xxx, and dd. xxx)
+
+ if SIMPLE_LIST_RE =~ active_line
+ offset = margin + $1.length
+ prefix = $2
+ prefix_length = prefix.length
+
+ flag = case prefix
+ when "*","-" then :BULLET
+ when /^\d/ then :NUMBER
+ when /^[A-Z]/ then :UPPERALPHA
+ when /^[a-z]/ then :LOWERALPHA
+ else raise "Invalid List Type: #{self.inspect}"
+ end
+
+ line.stamp :LIST, level+1, prefix, flag
+ text[margin, prefix_length] = " " * prefix_length
+ assign_types_to_lines(offset, level + 1)
+ next
+ end
+
+ if LABEL_LIST_RE =~ active_line
+ offset = margin + $1.length
+ prefix = $2
+ prefix_length = prefix.length
+
+ next if handled_labeled_list(line, level, margin, offset, prefix)
+ end
+
+ # Headings look like
+ # = Main heading
+ # == Second level
+ # === Third
+ #
+ # Headings reset the level to 0
+
+ if active_line[0] == ?= and active_line =~ /^(=+)\s*(.*)/
+ prefix_length = $1.length
+ prefix_length = 6 if prefix_length > 6
+ line.stamp :HEADING, 0, prefix_length
+ line.strip_leading(margin + prefix_length)
+ next
+ end
+
+ # If the character's a space, then we have verbatim text,
+ # otherwise
+
+ if active_line[0] == SPACE
+ line.strip_leading(margin) if margin > 0
+ line.stamp :VERBATIM, level
+ else
+ line.stamp :PARAGRAPH, level
+ end
+ end
+ end
+
+ ##
+ # Handle labeled list entries, We have a special case to deal with.
+ # Because the labels can be long, they force the remaining block of text
+ # over the to right:
+ #
+ # this is a long label that I wrote:: and here is the
+ # block of text with
+ # a silly margin
+ #
+ # So we allow the special case. If the label is followed by nothing, and
+ # if the following line is indented, then we take the indent of that line
+ # as the new margin.
+ #
+ # this is a long label that I wrote::
+ # here is a more reasonably indented block which
+ # will be attached to the label.
+ #
+
+ def handled_labeled_list(line, level, margin, offset, prefix)
+ prefix_length = prefix.length
+ text = line.text
+ flag = nil
+
+ case prefix
+ when /^\[/ then
+ flag = :LABELED
+ prefix = prefix[1, prefix.length-2]
+ when /:$/ then
+ flag = :NOTE
+ prefix.chop!
+ else
+ raise "Invalid List Type: #{self.inspect}"
+ end
+
+ # body is on the next line
+ if text.length <= offset then
+ original_line = line
+ line = @lines.next
+ return false unless line
+ text = line.text
+
+ for i in 0..margin
+ if text[i] != SPACE
+ @lines.unget
+ return false
+ end
+ end
+
+ i = margin
+ i += 1 while text[i] == SPACE
+
+ if i >= text.length then
+ @lines.unget
+ return false
+ else
+ offset = i
+ prefix_length = 0
+
+ if text[offset..-1] =~ SIMPLE_LIST_RE then
+ @lines.unget
+ line = original_line
+ line.text = ''
+ else
+ @lines.delete original_line
+ end
+ end
+ end
+
+ line.stamp :LIST, level+1, prefix, flag
+ text[margin, prefix_length] = " " * prefix_length
+ assign_types_to_lines(offset, level + 1)
+ return true
+ end
+
+ ##
+ # Return a block consisting of fragments which are paragraphs, list
+ # entries or verbatim text. We merge consecutive lines of the same type
+ # and level together. We are also slightly tricky with lists: the lines
+ # following a list introduction look like paragraph lines at the next
+ # level, and we remap them into list entries instead.
+
+ def group_lines
+ @lines.rewind
+
+ in_list = false
+ wanted_type = wanted_level = nil
+
+ block = LineCollection.new
+ group = nil
+
+ while line = @lines.next
+ if line.level == wanted_level and line.type == wanted_type
+ group.add_text(line.text)
+ else
+ group = block.fragment_for(line)
+ block.add(group)
+
+ if line.type == :LIST
+ wanted_type = :PARAGRAPH
+ else
+ wanted_type = line.type
+ end
+
+ wanted_level = line.type == :HEADING ? line.param : line.level
+ end
+ end
+
+ block.normalize
+ block
+ end
+
+ ##
+ # For debugging, we allow access to our line contents as text.
+
+ def content
+ @lines.as_text
+ end
+ public :content
+
+ ##
+ # For debugging, return the list of line types.
+
+ def get_line_types
+ @lines.line_types
+ end
+ public :get_line_types
+
+end
+
+require 'rdoc/markup/fragments'
+require 'rdoc/markup/inline'
+require 'rdoc/markup/lines'
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/attribute_manager.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/attribute_manager.rb
new file mode 100644
index 000000000..5c253b10c
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/attribute_manager.rb
@@ -0,0 +1,311 @@
+require 'rdoc/markup/inline'
+
+##
+# Manages changes of attributes in a block of text
+
+class RDoc::Markup::AttributeManager
+
+ ##
+ # The NUL character
+
+ NULL = "\000".freeze
+
+ ##
+ # We work by substituting non-printing characters in to the text. For now
+ # I'm assuming that I can substitute a character in the range 0..8 for a 7
+ # bit character without damaging the encoded string, but this might be
+ # optimistic
+
+ A_PROTECT = 004
+ PROTECT_ATTR = A_PROTECT.chr
+
+ ##
+ # This maps delimiters that occur around words (such as *bold* or +tt+)
+ # where the start and end delimiters and the same. This lets us optimize
+ # the regexp
+
+ MATCHING_WORD_PAIRS = {}
+
+ ##
+ # And this is used when the delimiters aren't the same. In this case the
+ # hash maps a pattern to the attribute character
+
+ WORD_PAIR_MAP = {}
+
+ ##
+ # This maps HTML tags to the corresponding attribute char
+
+ HTML_TAGS = {}
+
+ ##
+ # And this maps _special_ sequences to a name. A special sequence is
+ # something like a WikiWord
+
+ SPECIAL = {}
+
+ ##
+ # Return an attribute object with the given turn_on and turn_off bits set
+
+ def attribute(turn_on, turn_off)
+ RDoc::Markup::AttrChanger.new turn_on, turn_off
+ end
+
+ def change_attribute(current, new)
+ diff = current ^ new
+ attribute(new & diff, current & diff)
+ end
+
+ def changed_attribute_by_name(current_set, new_set)
+ current = new = 0
+ current_set.each do |name|
+ current |= RDoc::Markup::Attribute.bitmap_for(name)
+ end
+
+ new_set.each do |name|
+ new |= RDoc::Markup::Attribute.bitmap_for(name)
+ end
+
+ change_attribute(current, new)
+ end
+
+ def copy_string(start_pos, end_pos)
+ res = @str[start_pos...end_pos]
+ res.gsub!(/\000/, '')
+ res
+ end
+
+ ##
+ # Map attributes like <b>text</b>to the sequence
+ # \001\002<char>\001\003<char>, where <char> is a per-attribute specific
+ # character
+
+ def convert_attrs(str, attrs)
+ # first do matching ones
+ tags = MATCHING_WORD_PAIRS.keys.join("")
+
+ re = /(^|\W)([#{tags}])([#:\\]?[\w.\/-]+?\S?)\2(\W|$)/
+
+ 1 while str.gsub!(re) do
+ attr = MATCHING_WORD_PAIRS[$2]
+ attrs.set_attrs($`.length + $1.length + $2.length, $3.length, attr)
+ $1 + NULL * $2.length + $3 + NULL * $2.length + $4
+ end
+
+ # then non-matching
+ unless WORD_PAIR_MAP.empty? then
+ WORD_PAIR_MAP.each do |regexp, attr|
+ str.gsub!(regexp) {
+ attrs.set_attrs($`.length + $1.length, $2.length, attr)
+ NULL * $1.length + $2 + NULL * $3.length
+ }
+ end
+ end
+ end
+
+ ##
+ # Converts HTML tags to RDoc attributes
+
+ def convert_html(str, attrs)
+ tags = HTML_TAGS.keys.join '|'
+
+ 1 while str.gsub!(/<(#{tags})>(.*?)<\/\1>/i) {
+ attr = HTML_TAGS[$1.downcase]
+ html_length = $1.length + 2
+ seq = NULL * html_length
+ attrs.set_attrs($`.length + html_length, $2.length, attr)
+ seq + $2 + seq + NULL
+ }
+ end
+
+ ##
+ # Converts special sequences to RDoc attributes
+
+ def convert_specials(str, attrs)
+ unless SPECIAL.empty?
+ SPECIAL.each do |regexp, attr|
+ str.scan(regexp) do
+ attrs.set_attrs($`.length, $&.length,
+ attr | RDoc::Markup::Attribute::SPECIAL)
+ end
+ end
+ end
+ end
+
+ ##
+ # A \ in front of a character that would normally be processed turns off
+ # processing. We do this by turning \< into <#{PROTECT}
+
+ PROTECTABLE = %w[<\\]
+
+ ##
+ # Escapes special sequences of text to prevent conversion to RDoc
+
+ def mask_protected_sequences
+ protect_pattern = Regexp.new("\\\\([#{Regexp.escape(PROTECTABLE.join(''))}])")
+ @str.gsub!(protect_pattern, "\\1#{PROTECT_ATTR}")
+ end
+
+ ##
+ # Unescapes special sequences of text
+
+ def unmask_protected_sequences
+ @str.gsub!(/(.)#{PROTECT_ATTR}/, "\\1\000")
+ end
+
+ ##
+ # Creates a new attribute manager that understands bold, emphasized and
+ # teletype text.
+
+ def initialize
+ add_word_pair("*", "*", :BOLD)
+ add_word_pair("_", "_", :EM)
+ add_word_pair("+", "+", :TT)
+
+ add_html("em", :EM)
+ add_html("i", :EM)
+ add_html("b", :BOLD)
+ add_html("tt", :TT)
+ add_html("code", :TT)
+ end
+
+ ##
+ # Adds a markup class with +name+ for words wrapped in the +start+ and
+ # +stop+ character. To make words wrapped with "*" bold:
+ #
+ # am.add_word_pair '*', '*', :BOLD
+
+ def add_word_pair(start, stop, name)
+ raise ArgumentError, "Word flags may not start with '<'" if
+ start[0,1] == '<'
+
+ bitmap = RDoc::Markup::Attribute.bitmap_for name
+
+ if start == stop then
+ MATCHING_WORD_PAIRS[start] = bitmap
+ else
+ pattern = /(#{Regexp.escape start})(\S+)(#{Regexp.escape stop})/
+ WORD_PAIR_MAP[pattern] = bitmap
+ end
+
+ PROTECTABLE << start[0,1]
+ PROTECTABLE.uniq!
+ end
+
+ ##
+ # Adds a markup class with +name+ for words surrounded by HTML tag +tag+.
+ # To process emphasis tags:
+ #
+ # am.add_html 'em', :EM
+
+ def add_html(tag, name)
+ HTML_TAGS[tag.downcase] = RDoc::Markup::Attribute.bitmap_for name
+ end
+
+ ##
+ # Adds a special handler for +pattern+ with +name+. A simple URL handler
+ # would be:
+ #
+ # @am.add_special(/((https?:)\S+\w)/, :HYPERLINK)
+
+ def add_special(pattern, name)
+ SPECIAL[pattern] = RDoc::Markup::Attribute.bitmap_for name
+ end
+
+ ##
+ # Processes +str+ converting attributes, HTML and specials
+
+ def flow(str)
+ @str = str
+
+ mask_protected_sequences
+
+ @attrs = RDoc::Markup::AttrSpan.new @str.length
+
+ convert_attrs(@str, @attrs)
+ convert_html(@str, @attrs)
+ convert_specials(str, @attrs)
+
+ unmask_protected_sequences
+
+ split_into_flow
+ end
+
+ ##
+ # Debug method that prints a string along with its attributes
+
+ def display_attributes
+ puts
+ puts @str.tr(NULL, "!")
+ bit = 1
+ 16.times do |bno|
+ line = ""
+ @str.length.times do |i|
+ if (@attrs[i] & bit) == 0
+ line << " "
+ else
+ if bno.zero?
+ line << "S"
+ else
+ line << ("%d" % (bno+1))
+ end
+ end
+ end
+ puts(line) unless line =~ /^ *$/
+ bit <<= 1
+ end
+ end
+
+ def split_into_flow
+ res = []
+ current_attr = 0
+ str = ""
+
+ str_len = @str.length
+
+ # skip leading invisible text
+ i = 0
+ i += 1 while i < str_len and @str[i].chr == "\0"
+ start_pos = i
+
+ # then scan the string, chunking it on attribute changes
+ while i < str_len
+ new_attr = @attrs[i]
+ if new_attr != current_attr
+ if i > start_pos
+ res << copy_string(start_pos, i)
+ start_pos = i
+ end
+
+ res << change_attribute(current_attr, new_attr)
+ current_attr = new_attr
+
+ if (current_attr & RDoc::Markup::Attribute::SPECIAL) != 0 then
+ i += 1 while
+ i < str_len and (@attrs[i] & RDoc::Markup::Attribute::SPECIAL) != 0
+
+ res << RDoc::Markup::Special.new(current_attr,
+ copy_string(start_pos, i))
+ start_pos = i
+ next
+ end
+ end
+
+ # move on, skipping any invisible characters
+ begin
+ i += 1
+ end while i < str_len and @str[i].chr == "\0"
+ end
+
+ # tidy up trailing text
+ if start_pos < str_len
+ res << copy_string(start_pos, str_len)
+ end
+
+ # and reset to all attributes off
+ res << change_attribute(current_attr, 0) if current_attr != 0
+
+ res
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/formatter.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/formatter.rb
new file mode 100644
index 000000000..a499d12ea
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/formatter.rb
@@ -0,0 +1,25 @@
+require 'rdoc/markup'
+
+##
+# Base class for RDoc markup formatters
+#
+# Formatters use a visitor pattern to convert content into output.
+
+class RDoc::Markup::Formatter
+
+ ##
+ # Creates a new Formatter
+
+ def initialize
+ @markup = RDoc::Markup.new
+ end
+
+ ##
+ # Marks up +content+
+
+ def convert(content)
+ @markup.convert content, self
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/fragments.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/fragments.rb
new file mode 100644
index 000000000..bbe0bced0
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/fragments.rb
@@ -0,0 +1,377 @@
+require 'rdoc/markup'
+require 'rdoc/markup/lines'
+
+class RDoc::Markup
+
+ ##
+ # A Fragment is a chunk of text, subclassed as a paragraph, a list
+ # entry, or verbatim text.
+
+ class Fragment
+ attr_reader :level, :param, :txt
+ attr_accessor :type
+
+ ##
+ # This is a simple factory system that lets us associate fragement
+ # types (a string) with a subclass of fragment
+
+ TYPE_MAP = {}
+
+ def self.type_name(name)
+ TYPE_MAP[name] = self
+ end
+
+ def self.for(line)
+ klass = TYPE_MAP[line.type] ||
+ raise("Unknown line type: '#{line.type.inspect}:' '#{line.text}'")
+ return klass.new(line.level, line.param, line.flag, line.text)
+ end
+
+ def initialize(level, param, type, txt)
+ @level = level
+ @param = param
+ @type = type
+ @txt = ""
+ add_text(txt) if txt
+ end
+
+ def add_text(txt)
+ @txt << " " if @txt.length > 0
+ @txt << txt.tr_s("\n ", " ").strip
+ end
+
+ def to_s
+ "L#@level: #{self.class.name.split('::')[-1]}\n#@txt"
+ end
+
+ end
+
+ ##
+ # A paragraph is a fragment which gets wrapped to fit. We remove all
+ # newlines when we're created, and have them put back on output.
+
+ class Paragraph < Fragment
+ type_name :PARAGRAPH
+ end
+
+ ##
+ # An empty line
+
+ class BlankLine < Paragraph
+ type_name :BLANK
+ end
+
+ ##
+ # A heading
+
+ class Heading < Paragraph
+ type_name :HEADING
+
+ ##
+ # Level of heading, smaller is more important
+
+ def head_level
+ @param.to_i
+ end
+
+ end
+
+ ##
+ # A List is a fragment with some kind of label
+
+ class ListBase < Paragraph
+ LIST_TYPES = [
+ :BULLET,
+ :NUMBER,
+ :UPPERALPHA,
+ :LOWERALPHA,
+ :LABELED,
+ :NOTE,
+ ]
+ end
+
+ ##
+ # An item in a list
+
+ class ListItem < ListBase
+ type_name :LIST
+
+ def to_s # :nodoc:
+ text = if [:NOTE, :LABELED].include? type then
+ "#{@param}: #{@txt}"
+ else
+ @txt
+ end
+
+ "L#@level: #{type} #{self.class.name.split('::')[-1]}\n#{text}"
+ end
+
+ end
+
+ ##
+ # Start of a list
+
+ class ListStart < ListBase
+
+ ##
+ # Creates a ListStart with nesting +level+
+
+ def initialize(level, param, type)
+ super(level, param, type, nil)
+ end
+ end
+
+ ##
+ # End of a list
+
+ class ListEnd < ListBase
+
+ ##
+ # Creates a ListEnd with nesting +level+
+
+ def initialize(level, type)
+ super(level, "", type, nil)
+ end
+ end
+
+ ##
+ # Verbatim code contains lines that don't get wrapped.
+
+ class Verbatim < Fragment
+ type_name :VERBATIM
+
+ ##
+ # Adds +txt+ to this verbatim
+
+ def add_text(txt)
+ @txt << txt.chomp << "\n"
+ end
+
+ end
+
+ ##
+ # A horizontal rule
+
+ class Rule < Fragment
+ type_name :RULE
+ end
+
+ ##
+ # Collect groups of lines together. Each group will end up containing a flow
+ # of text.
+
+ class LineCollection
+
+ ##
+ # Creates a new collection of lines
+
+ def initialize
+ @fragments = []
+ end
+
+ ##
+ # Adds +fragment+ to the collection
+
+ def add(fragment)
+ @fragments << fragment
+ end
+
+ ##
+ # Iterates over the lines in the collection
+
+ def each(&b)
+ @fragments.each(&b)
+ end
+
+ def to_a # :nodoc:
+ @fragments.map {|fragment| fragment.to_s}
+ end
+
+ ##
+ # Factory for different fragment types
+
+ def fragment_for(*args)
+ Fragment.for(*args)
+ end
+
+ ##
+ # Tidy up at the end
+
+ def normalize
+ change_verbatim_blank_lines
+ add_list_start_and_ends
+ add_list_breaks
+ tidy_blank_lines
+ end
+
+ def to_s # :nodoc:
+ @fragments.join("\n----\n")
+ end
+
+ def accept(am, visitor)
+ visitor.start_accepting
+
+ @fragments.each do |fragment|
+ case fragment
+ when Verbatim
+ visitor.accept_verbatim(am, fragment)
+ when Rule
+ visitor.accept_rule(am, fragment)
+ when ListStart
+ visitor.accept_list_start(am, fragment)
+ when ListEnd
+ visitor.accept_list_end(am, fragment)
+ when ListItem
+ visitor.accept_list_item(am, fragment)
+ when BlankLine
+ visitor.accept_blank_line(am, fragment)
+ when Heading
+ visitor.accept_heading(am, fragment)
+ when Paragraph
+ visitor.accept_paragraph(am, fragment)
+ end
+ end
+
+ visitor.end_accepting
+ end
+
+ private
+
+ ##
+ # If you have:
+ #
+ # normal paragraph text.
+ #
+ # this is code
+ #
+ # and more code
+ #
+ # You'll end up with the fragments Paragraph, BlankLine, Verbatim,
+ # BlankLine, Verbatim, BlankLine, etc.
+ #
+ # The BlankLine in the middle of the verbatim chunk needs to be changed to
+ # a real verbatim newline, and the two verbatim blocks merged
+
+ def change_verbatim_blank_lines
+ frag_block = nil
+ blank_count = 0
+ @fragments.each_with_index do |frag, i|
+ if frag_block.nil?
+ frag_block = frag if Verbatim === frag
+ else
+ case frag
+ when Verbatim
+ blank_count.times { frag_block.add_text("\n") }
+ blank_count = 0
+ frag_block.add_text(frag.txt)
+ @fragments[i] = nil # remove out current fragment
+ when BlankLine
+ if frag_block
+ blank_count += 1
+ @fragments[i] = nil
+ end
+ else
+ frag_block = nil
+ blank_count = 0
+ end
+ end
+ end
+ @fragments.compact!
+ end
+
+ ##
+ # List nesting is implicit given the level of indentation. Make it
+ # explicit, just to make life a tad easier for the output processors
+
+ def add_list_start_and_ends
+ level = 0
+ res = []
+ type_stack = []
+
+ @fragments.each do |fragment|
+ # $stderr.puts "#{level} : #{fragment.class.name} : #{fragment.level}"
+ new_level = fragment.level
+ while (level < new_level)
+ level += 1
+ type = fragment.type
+ res << ListStart.new(level, fragment.param, type) if type
+ type_stack.push type
+ # $stderr.puts "Start: #{level}"
+ end
+
+ while level > new_level
+ type = type_stack.pop
+ res << ListEnd.new(level, type) if type
+ level -= 1
+ # $stderr.puts "End: #{level}, #{type}"
+ end
+
+ res << fragment
+ level = fragment.level
+ end
+ level.downto(1) do |i|
+ type = type_stack.pop
+ res << ListEnd.new(i, type) if type
+ end
+
+ @fragments = res
+ end
+
+ ##
+ # Inserts start/ends between list entries at the same level that have
+ # different element types
+
+ def add_list_breaks
+ res = @fragments
+
+ @fragments = []
+ list_stack = []
+
+ res.each do |fragment|
+ case fragment
+ when ListStart
+ list_stack.push fragment
+ when ListEnd
+ start = list_stack.pop
+ fragment.type = start.type
+ when ListItem
+ l = list_stack.last
+ if fragment.type != l.type
+ @fragments << ListEnd.new(l.level, l.type)
+ start = ListStart.new(l.level, fragment.param, fragment.type)
+ @fragments << start
+ list_stack.pop
+ list_stack.push start
+ end
+ else
+ ;
+ end
+ @fragments << fragment
+ end
+ end
+
+ ##
+ # Tidy up the blank lines:
+ # * change Blank/ListEnd into ListEnd/Blank
+ # * remove blank lines at the front
+
+ def tidy_blank_lines
+ (@fragments.size - 1).times do |i|
+ if BlankLine === @fragments[i] and ListEnd === @fragments[i+1] then
+ @fragments[i], @fragments[i+1] = @fragments[i+1], @fragments[i]
+ end
+ end
+
+ # remove leading blanks
+ @fragments.each_with_index do |f, i|
+ break unless f.kind_of? BlankLine
+ @fragments[i] = nil
+ end
+
+ @fragments.compact!
+ end
+
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/inline.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/inline.rb
new file mode 100644
index 000000000..ce091aabc
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/inline.rb
@@ -0,0 +1,126 @@
+require 'rdoc/markup'
+
+class RDoc::Markup
+
+ ##
+ # We manage a set of attributes. Each attribute has a symbol name and a bit
+ # value.
+
+ class Attribute
+ SPECIAL = 1
+
+ @@name_to_bitmap = { :_SPECIAL_ => SPECIAL }
+ @@next_bitmap = 2
+
+ def self.bitmap_for(name)
+ bitmap = @@name_to_bitmap[name]
+ unless bitmap then
+ bitmap = @@next_bitmap
+ @@next_bitmap <<= 1
+ @@name_to_bitmap[name] = bitmap
+ end
+ bitmap
+ end
+
+ def self.as_string(bitmap)
+ return "none" if bitmap.zero?
+ res = []
+ @@name_to_bitmap.each do |name, bit|
+ res << name if (bitmap & bit) != 0
+ end
+ res.join(",")
+ end
+
+ def self.each_name_of(bitmap)
+ @@name_to_bitmap.each do |name, bit|
+ next if bit == SPECIAL
+ yield name.to_s if (bitmap & bit) != 0
+ end
+ end
+
+ end
+
+ AttrChanger = Struct.new :turn_on, :turn_off
+
+ ##
+ # An AttrChanger records a change in attributes. It contains a bitmap of the
+ # attributes to turn on, and a bitmap of those to turn off.
+
+ class AttrChanger
+ def to_s # :nodoc:
+ "Attr: +#{Attribute.as_string(turn_on)}/-#{Attribute.as_string(turn_on)}"
+ end
+ end
+
+ ##
+ # An array of attributes which parallels the characters in a string.
+
+ class AttrSpan
+
+ ##
+ # Creates a new AttrSpan for +length+ characters
+
+ def initialize(length)
+ @attrs = Array.new(length, 0)
+ end
+
+ ##
+ # Toggles +bits+ from +start+ to +length+
+ def set_attrs(start, length, bits)
+ for i in start ... (start+length)
+ @attrs[i] |= bits
+ end
+ end
+
+ ##
+ # Acccesses flags for character +n+
+
+ def [](n)
+ @attrs[n]
+ end
+
+ end
+
+ ##
+ # Hold details of a special sequence
+
+ class Special
+
+ ##
+ # Special type
+
+ attr_reader :type
+
+ ##
+ # Special text
+
+ attr_accessor :text
+
+ ##
+ # Creates a new special sequence of +type+ with +text+
+
+ def initialize(type, text)
+ @type, @text = type, text
+ end
+
+ ##
+ # Specials are equal when the have the same text and type
+
+ def ==(o)
+ self.text == o.text && self.type == o.type
+ end
+
+ def inspect # :nodoc:
+ "#<RDoc::Markup::Special:0x%x @type=%p, name=%p @text=%p>" % [
+ object_id, @type, RDoc::Markup::Attribute.as_string(type), text.dump]
+ end
+
+ def to_s # :nodoc:
+ "Special: type=#{type}, name=#{RDoc::Markup::Attribute.as_string type}, text=#{text.dump}"
+ end
+
+ end
+
+end
+
+require 'rdoc/markup/attribute_manager'
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/lines.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/lines.rb
new file mode 100644
index 000000000..6ec8e0937
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/lines.rb
@@ -0,0 +1,156 @@
+class RDoc::Markup
+
+ ##
+ # We store the lines we're working on as objects of class Line. These
+ # contain the text of the line, along with a flag indicating the line type,
+ # and an indentation level.
+
+ class Line
+
+ ##
+ # Not really
+
+ INFINITY = 9999
+
+ LINE_TYPES = [
+ :BLANK,
+ :HEADING,
+ :LIST,
+ :PARAGRAPH,
+ :RULE,
+ :VERBATIM,
+ ]
+
+ # line type
+ attr_accessor :type
+
+ # The indentation nesting level
+ attr_accessor :level
+
+ # The contents
+ attr_accessor :text
+
+ # A prefix or parameter. For LIST lines, this is
+ # the text that introduced the list item (the label)
+ attr_accessor :param
+
+ # A flag. For list lines, this is the type of the list
+ attr_accessor :flag
+
+ # the number of leading spaces
+ attr_accessor :leading_spaces
+
+ # true if this line has been deleted from the list of lines
+ attr_accessor :deleted
+
+ def initialize(text)
+ @text = text.dup
+ @deleted = false
+
+ # expand tabs
+ 1 while @text.gsub!(/\t+/) { ' ' * (8*$&.length - $`.length % 8)} && $~ #`
+
+ # Strip trailing whitespace
+ @text.sub!(/\s+$/, '')
+
+ # and look for leading whitespace
+ if @text.length > 0
+ @text =~ /^(\s*)/
+ @leading_spaces = $1.length
+ else
+ @leading_spaces = INFINITY
+ end
+ end
+
+ # Return true if this line is blank
+ def blank?
+ @text.empty?
+ end
+
+ # stamp a line with a type, a level, a prefix, and a flag
+ def stamp(type, level, param="", flag=nil)
+ @type, @level, @param, @flag = type, level, param, flag
+ end
+
+ ##
+ # Strip off the leading margin
+
+ def strip_leading(size)
+ if @text.size > size
+ @text[0,size] = ""
+ else
+ @text = ""
+ end
+ end
+
+ def to_s
+ "#@type#@level: #@text"
+ end
+ end
+
+ ##
+ # A container for all the lines.
+
+ class Lines
+
+ include Enumerable
+
+ attr_reader :lines # :nodoc:
+
+ def initialize(lines)
+ @lines = lines
+ rewind
+ end
+
+ def empty?
+ @lines.size.zero?
+ end
+
+ def each
+ @lines.each do |line|
+ yield line unless line.deleted
+ end
+ end
+
+# def [](index)
+# @lines[index]
+# end
+
+ def rewind
+ @nextline = 0
+ end
+
+ def next
+ begin
+ res = @lines[@nextline]
+ @nextline += 1 if @nextline < @lines.size
+ end while res and res.deleted and @nextline < @lines.size
+ res
+ end
+
+ def unget
+ @nextline -= 1
+ end
+
+ def delete(a_line)
+ a_line.deleted = true
+ end
+
+ def normalize
+ margin = @lines.collect{|l| l.leading_spaces}.min
+ margin = 0 if margin == :INFINITY
+ @lines.each {|line| line.strip_leading(margin) } if margin > 0
+ end
+
+ def as_text
+ @lines.map {|l| l.text}.join("\n")
+ end
+
+ def line_types
+ @lines.map {|l| l.type }
+ end
+
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/preprocess.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/preprocess.rb
new file mode 100644
index 000000000..a175d179c
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/preprocess.rb
@@ -0,0 +1,80 @@
+require 'rdoc/markup'
+
+##
+# Handle common directives that can occur in a block of text:
+#
+# : include : filename
+
+class RDoc::Markup::PreProcess
+
+ ##
+ # Creates a new pre-processor for +input_file_name+ that will look for
+ # included files in +include_path+
+
+ def initialize(input_file_name, include_path)
+ @input_file_name = input_file_name
+ @include_path = include_path
+ end
+
+ ##
+ # Look for common options in a chunk of text. Options that we don't handle
+ # are yielded to the caller.
+
+ def handle(text)
+ text.gsub!(/^([ \t]*#?[ \t]*):(\w+):([ \t]*)(.+)?\n/) do
+ next $& if $3.empty? and $4 and $4[0, 1] == ':'
+
+ prefix = $1
+ directive = $2.downcase
+ param = $4
+
+ case directive
+ when 'include' then
+ filename = param.split[0]
+ include_file filename, prefix
+
+ else
+ result = yield directive, param
+ result = "#{prefix}:#{directive}: #{param}\n" unless result
+ result
+ end
+ end
+ end
+
+ private
+
+ ##
+ # Include a file, indenting it correctly.
+
+ def include_file(name, indent)
+ if full_name = find_include_file(name) then
+ content = File.read full_name
+
+ # strip leading '#'s, but only if all lines start with them
+ if content =~ /^[^#]/ then
+ content.gsub(/^/, indent)
+ else
+ content.gsub(/^#?/, indent)
+ end
+ else
+ $stderr.puts "Couldn't find file to include '#{name}' from #{@input_file_name}"
+ ''
+ end
+ end
+
+ ##
+ # Look for the given file in the directory containing the current file,
+ # and then in each of the directories specified in the RDOC_INCLUDE path
+
+ def find_include_file(name)
+ to_search = [ File.dirname(@input_file_name) ].concat @include_path
+ to_search.each do |dir|
+ full_name = File.join(dir, name)
+ stat = File.stat(full_name) rescue next
+ return full_name if stat.readable?
+ end
+ nil
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_flow.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_flow.rb
new file mode 100644
index 000000000..3556a4fa0
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_flow.rb
@@ -0,0 +1,211 @@
+require 'rdoc/markup/formatter'
+require 'rdoc/markup/fragments'
+require 'rdoc/markup/inline'
+require 'cgi'
+
+class RDoc::Markup
+
+ module Flow
+
+ ##
+ # Paragraph
+
+ P = Struct.new(:body)
+
+ ##
+ # Verbatim
+
+ VERB = Struct.new(:body)
+
+ ##
+ # Horizontal rule
+
+ RULE = Struct.new(:width)
+
+ ##
+ # List
+
+ class LIST
+ attr_reader :type, :contents
+ def initialize(type)
+ @type = type
+ @contents = []
+ end
+ def <<(stuff)
+ @contents << stuff
+ end
+ end
+
+ ##
+ # List item
+
+ LI = Struct.new(:label, :body)
+
+ ##
+ # Heading
+
+ H = Struct.new(:level, :text)
+
+ end
+
+ class ToFlow < RDoc::Markup::Formatter
+
+ LIST_TYPE_TO_HTML = {
+ :BULLET => [ "<ul>", "</ul>" ],
+ :NUMBER => [ "<ol>", "</ol>" ],
+ :UPPERALPHA => [ "<ol>", "</ol>" ],
+ :LOWERALPHA => [ "<ol>", "</ol>" ],
+ :LABELED => [ "<dl>", "</dl>" ],
+ :NOTE => [ "<table>", "</table>" ],
+ }
+
+ InlineTag = Struct.new(:bit, :on, :off)
+
+ def initialize
+ super
+
+ init_tags
+ end
+
+ ##
+ # Set up the standard mapping of attributes to HTML tags
+
+ def init_tags
+ @attr_tags = [
+ InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:BOLD), "<b>", "</b>"),
+ InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:TT), "<tt>", "</tt>"),
+ InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:EM), "<em>", "</em>"),
+ ]
+ end
+
+ ##
+ # Add a new set of HTML tags for an attribute. We allow separate start and
+ # end tags for flexibility
+
+ def add_tag(name, start, stop)
+ @attr_tags << InlineTag.new(RDoc::Markup::Attribute.bitmap_for(name), start, stop)
+ end
+
+ ##
+ # Given an HTML tag, decorate it with class information and the like if
+ # required. This is a no-op in the base class, but is overridden in HTML
+ # output classes that implement style sheets
+
+ def annotate(tag)
+ tag
+ end
+
+ ##
+ # :section: Visitor
+
+ def start_accepting
+ @res = []
+ @list_stack = []
+ end
+
+ def end_accepting
+ @res
+ end
+
+ def accept_paragraph(am, fragment)
+ @res << Flow::P.new((convert_flow(am.flow(fragment.txt))))
+ end
+
+ def accept_verbatim(am, fragment)
+ @res << Flow::VERB.new((convert_flow(am.flow(fragment.txt))))
+ end
+
+ def accept_rule(am, fragment)
+ size = fragment.param
+ size = 10 if size > 10
+ @res << Flow::RULE.new(size)
+ end
+
+ def accept_list_start(am, fragment)
+ @list_stack.push(@res)
+ list = Flow::LIST.new(fragment.type)
+ @res << list
+ @res = list
+ end
+
+ def accept_list_end(am, fragment)
+ @res = @list_stack.pop
+ end
+
+ def accept_list_item(am, fragment)
+ @res << Flow::LI.new(fragment.param, convert_flow(am.flow(fragment.txt)))
+ end
+
+ def accept_blank_line(am, fragment)
+ # @res << annotate("<p />") << "\n"
+ end
+
+ def accept_heading(am, fragment)
+ @res << Flow::H.new(fragment.head_level, convert_flow(am.flow(fragment.txt)))
+ end
+
+ private
+
+ def on_tags(res, item)
+ attr_mask = item.turn_on
+ return if attr_mask.zero?
+
+ @attr_tags.each do |tag|
+ if attr_mask & tag.bit != 0
+ res << annotate(tag.on)
+ end
+ end
+ end
+
+ def off_tags(res, item)
+ attr_mask = item.turn_off
+ return if attr_mask.zero?
+
+ @attr_tags.reverse_each do |tag|
+ if attr_mask & tag.bit != 0
+ res << annotate(tag.off)
+ end
+ end
+ end
+
+ def convert_flow(flow)
+ res = ""
+ flow.each do |item|
+ case item
+ when String
+ res << convert_string(item)
+ when AttrChanger
+ off_tags(res, item)
+ on_tags(res, item)
+ when Special
+ res << convert_special(item)
+ else
+ raise "Unknown flow element: #{item.inspect}"
+ end
+ end
+ res
+ end
+
+ def convert_string(item)
+ CGI.escapeHTML(item)
+ end
+
+ def convert_special(special)
+ handled = false
+ Attribute.each_name_of(special.type) do |name|
+ method_name = "handle_special_#{name}"
+ if self.respond_to? method_name
+ special.text = send(method_name, special)
+ handled = true
+ end
+ end
+
+ raise "Unhandled special: #{special}" unless handled
+
+ special.text
+ end
+
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_html.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_html.rb
new file mode 100644
index 000000000..9e431502c
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_html.rb
@@ -0,0 +1,406 @@
+require 'rdoc/markup/formatter'
+require 'rdoc/markup/fragments'
+require 'rdoc/markup/inline'
+
+require 'cgi'
+
+class RDoc::Markup::ToHtml < RDoc::Markup::Formatter
+
+ LIST_TYPE_TO_HTML = {
+ :BULLET => %w[<ul> </ul>],
+ :NUMBER => %w[<ol> </ol>],
+ :UPPERALPHA => %w[<ol> </ol>],
+ :LOWERALPHA => %w[<ol> </ol>],
+ :LABELED => %w[<dl> </dl>],
+ :NOTE => %w[<table> </table>],
+ }
+
+ InlineTag = Struct.new(:bit, :on, :off)
+
+ def initialize
+ super
+
+ # @in_tt - tt nested levels count
+ # @tt_bit - cache
+ @in_tt = 0
+ @tt_bit = RDoc::Markup::Attribute.bitmap_for :TT
+
+ # external hyperlinks
+ @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK)
+
+ # and links of the form <text>[<url>]
+ @markup.add_special(/(((\{.*?\})|\b\S+?)\[\S+?\.\S+?\])/, :TIDYLINK)
+
+ init_tags
+ end
+
+ ##
+ # Converts a target url to one that is relative to a given path
+
+ def self.gen_relative_url(path, target)
+ from = File.dirname path
+ to, to_file = File.split target
+
+ from = from.split "/"
+ to = to.split "/"
+
+ from.delete '.'
+ to.delete '.'
+
+ while from.size > 0 and to.size > 0 and from[0] == to[0] do
+ from.shift
+ to.shift
+ end
+
+ from.fill ".."
+ from.concat to
+ from << to_file
+ File.join(*from)
+ end
+
+ ##
+ # Generate a hyperlink for url, labeled with text. Handle the
+ # special cases for img: and link: described under handle_special_HYPERLINK
+
+ def gen_url(url, text)
+ if url =~ /([A-Za-z]+):(.*)/ then
+ type = $1
+ path = $2
+ else
+ type = "http"
+ path = url
+ url = "http://#{url}"
+ end
+
+ if type == "link" then
+ url = if path[0, 1] == '#' then # is this meaningful?
+ path
+ else
+ self.class.gen_relative_url @from_path, path
+ end
+ end
+
+ if (type == "http" or type == "link") and
+ url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
+ "<img src=\"#{url}\" />"
+ else
+ "<a href=\"#{url}\">#{text.sub(%r{^#{type}:/*}, '')}</a>"
+ end
+ end
+
+ ##
+ # And we're invoked with a potential external hyperlink mailto:
+ # just gets inserted. http: links are checked to see if they
+ # reference an image. If so, that image gets inserted using an
+ # <img> tag. Otherwise a conventional <a href> is used. We also
+ # support a special type of hyperlink, link:, which is a reference
+ # to a local file whose path is relative to the --op directory.
+
+ def handle_special_HYPERLINK(special)
+ url = special.text
+ gen_url url, url
+ end
+
+ ##
+ # Here's a hypedlink where the label is different to the URL
+ # <label>[url] or {long label}[url]
+
+ def handle_special_TIDYLINK(special)
+ text = special.text
+
+ return text unless text =~ /\{(.*?)\}\[(.*?)\]/ or text =~ /(\S+)\[(.*?)\]/
+
+ label = $1
+ url = $2
+ gen_url url, label
+ end
+
+ ##
+ # are we currently inside tt tags?
+
+ def in_tt?
+ @in_tt > 0
+ end
+
+ ##
+ # is +tag+ a tt tag?
+
+ def tt?(tag)
+ tag.bit == @tt_bit
+ end
+
+ ##
+ # Set up the standard mapping of attributes to HTML tags
+
+ def init_tags
+ @attr_tags = [
+ InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:BOLD), "<b>", "</b>"),
+ InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:TT), "<tt>", "</tt>"),
+ InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:EM), "<em>", "</em>"),
+ ]
+ end
+
+ ##
+ # Add a new set of HTML tags for an attribute. We allow separate start and
+ # end tags for flexibility.
+
+ def add_tag(name, start, stop)
+ @attr_tags << InlineTag.new(RDoc::Markup::Attribute.bitmap_for(name), start, stop)
+ end
+
+ ##
+ # Given an HTML tag, decorate it with class information and the like if
+ # required. This is a no-op in the base class, but is overridden in HTML
+ # output classes that implement style sheets.
+
+ def annotate(tag)
+ tag
+ end
+
+ ##
+ # This is a higher speed (if messier) version of wrap
+
+ def wrap(txt, line_len = 76)
+ res = ""
+ sp = 0
+ ep = txt.length
+ while sp < ep
+ # scan back for a space
+ p = sp + line_len - 1
+ if p >= ep
+ p = ep
+ else
+ while p > sp and txt[p] != ?\s
+ p -= 1
+ end
+ if p <= sp
+ p = sp + line_len
+ while p < ep and txt[p] != ?\s
+ p += 1
+ end
+ end
+ end
+ res << txt[sp...p] << "\n"
+ sp = p
+ sp += 1 while sp < ep and txt[sp] == ?\s
+ end
+ res
+ end
+
+ ##
+ # :section: Visitor
+
+ def start_accepting
+ @res = ""
+ @in_list_entry = []
+ end
+
+ def end_accepting
+ @res
+ end
+
+ def accept_paragraph(am, fragment)
+ @res << annotate("<p>") + "\n"
+ @res << wrap(convert_flow(am.flow(fragment.txt)))
+ @res << annotate("</p>") + "\n"
+ end
+
+ def accept_verbatim(am, fragment)
+ @res << annotate("<pre>") + "\n"
+ @res << CGI.escapeHTML(fragment.txt)
+ @res << annotate("</pre>") << "\n"
+ end
+
+ def accept_rule(am, fragment)
+ size = fragment.param
+ size = 10 if size > 10
+ @res << "<hr size=\"#{size}\"></hr>"
+ end
+
+ def accept_list_start(am, fragment)
+ @res << html_list_name(fragment.type, true) << "\n"
+ @in_list_entry.push false
+ end
+
+ def accept_list_end(am, fragment)
+ if tag = @in_list_entry.pop
+ @res << annotate(tag) << "\n"
+ end
+ @res << html_list_name(fragment.type, false) << "\n"
+ end
+
+ def accept_list_item(am, fragment)
+ if tag = @in_list_entry.last
+ @res << annotate(tag) << "\n"
+ end
+
+ @res << list_item_start(am, fragment)
+
+ @res << wrap(convert_flow(am.flow(fragment.txt))) << "\n"
+
+ @in_list_entry[-1] = list_end_for(fragment.type)
+ end
+
+ def accept_blank_line(am, fragment)
+ # @res << annotate("<p />") << "\n"
+ end
+
+ def accept_heading(am, fragment)
+ @res << convert_heading(fragment.head_level, am.flow(fragment.txt))
+ end
+
+ private
+
+ def on_tags(res, item)
+ attr_mask = item.turn_on
+ return if attr_mask.zero?
+
+ @attr_tags.each do |tag|
+ if attr_mask & tag.bit != 0
+ res << annotate(tag.on)
+ @in_tt += 1 if tt?(tag)
+ end
+ end
+ end
+
+ def off_tags(res, item)
+ attr_mask = item.turn_off
+ return if attr_mask.zero?
+
+ @attr_tags.reverse_each do |tag|
+ if attr_mask & tag.bit != 0
+ @in_tt -= 1 if tt?(tag)
+ res << annotate(tag.off)
+ end
+ end
+ end
+
+ def convert_flow(flow)
+ res = ""
+
+ flow.each do |item|
+ case item
+ when String
+ res << convert_string(item)
+ when RDoc::Markup::AttrChanger
+ off_tags(res, item)
+ on_tags(res, item)
+ when RDoc::Markup::Special
+ res << convert_special(item)
+ else
+ raise "Unknown flow element: #{item.inspect}"
+ end
+ end
+
+ res
+ end
+
+ def convert_string(item)
+ in_tt? ? convert_string_simple(item) : convert_string_fancy(item)
+ end
+
+ def convert_string_simple(item)
+ CGI.escapeHTML item
+ end
+
+ ##
+ # some of these patterns are taken from SmartyPants...
+
+ def convert_string_fancy(item)
+ # convert ampersand before doing anything else
+ item.gsub(/&/, '&amp;').
+
+ # convert -- to em-dash, (-- to en-dash)
+ gsub(/---?/, '&#8212;'). #gsub(/--/, '&#8211;').
+
+ # convert ... to elipsis (and make sure .... becomes .<elipsis>)
+ gsub(/\.\.\.\./, '.&#8230;').gsub(/\.\.\./, '&#8230;').
+
+ # convert single closing quote
+ gsub(%r{([^ \t\r\n\[\{\(])\'}, '\1&#8217;'). # }
+ gsub(%r{\'(?=\W|s\b)}, '&#8217;').
+
+ # convert single opening quote
+ gsub(/'/, '&#8216;').
+
+ # convert double closing quote
+ gsub(%r{([^ \t\r\n\[\{\(])\"(?=\W)}, '\1&#8221;'). # }
+
+ # convert double opening quote
+ gsub(/"/, '&#8220;').
+
+ # convert copyright
+ gsub(/\(c\)/, '&#169;').
+
+ # convert registered trademark
+ gsub(/\(r\)/, '&#174;')
+ end
+
+ def convert_special(special)
+ handled = false
+ RDoc::Markup::Attribute.each_name_of(special.type) do |name|
+ method_name = "handle_special_#{name}"
+ if self.respond_to? method_name
+ special.text = send(method_name, special)
+ handled = true
+ end
+ end
+ raise "Unhandled special: #{special}" unless handled
+ special.text
+ end
+
+ def convert_heading(level, flow)
+ res =
+ annotate("<h#{level}>") +
+ convert_flow(flow) +
+ annotate("</h#{level}>\n")
+ end
+
+ def html_list_name(list_type, is_open_tag)
+ tags = LIST_TYPE_TO_HTML[list_type] || raise("Invalid list type: #{list_type.inspect}")
+ annotate(tags[ is_open_tag ? 0 : 1])
+ end
+
+ def list_item_start(am, fragment)
+ case fragment.type
+ when :BULLET, :NUMBER then
+ annotate("<li>")
+
+ when :UPPERALPHA then
+ annotate("<li type=\"A\">")
+
+ when :LOWERALPHA then
+ annotate("<li type=\"a\">")
+
+ when :LABELED then
+ annotate("<dt>") +
+ convert_flow(am.flow(fragment.param)) +
+ annotate("</dt>") +
+ annotate("<dd>")
+
+ when :NOTE then
+ annotate("<tr>") +
+ annotate("<td valign=\"top\">") +
+ convert_flow(am.flow(fragment.param)) +
+ annotate("</td>") +
+ annotate("<td>")
+ else
+ raise "Invalid list type"
+ end
+ end
+
+ def list_end_for(fragment_type)
+ case fragment_type
+ when :BULLET, :NUMBER, :UPPERALPHA, :LOWERALPHA then
+ "</li>"
+ when :LABELED then
+ "</dd>"
+ when :NOTE then
+ "</td></tr>"
+ else
+ raise "Invalid list type"
+ end
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_html_crossref.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_html_crossref.rb
new file mode 100644
index 000000000..e6c6f6a77
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_html_crossref.rb
@@ -0,0 +1,140 @@
+require 'rdoc/markup/to_html'
+
+##
+# Subclass of the RDoc::Markup::ToHtml class that supports looking up words
+# from a context. Those that are found will be hyperlinked.
+
+class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
+
+ ##
+ # Regular expressions to match class and method references.
+ #
+ # 1) There can be a '\' in front of text to suppress any cross-references
+ # 2) There can be a '::' in front of class names to reference from the
+ # top-level namespace.
+ # 3) The method can be followed by parenthesis which may
+
+ CLASS_REGEXP_STR = '\\\\?((?:\:{2})?[A-Z]\w*(?:\:\:\w+)*)'
+ METHOD_REGEXP_STR = '(\w+[!?=]?)(?:\([\.\w+\*\/\+\-\=\<\>]*\))?'
+
+ ##
+ # Regular expressions matching text that should potentially have
+ # cross-reference links generated are passed to add_special. Note that
+ # these expressions are meant to pick up text for which cross-references
+ # have been suppressed, since the suppression characters are removed by the
+ # code that is triggered.
+
+ CROSSREF_REGEXP = /(
+ # A::B::C.meth
+ #{CLASS_REGEXP_STR}[\.\#]#{METHOD_REGEXP_STR}
+
+ # Stand-alone method (proceeded by a #)
+ | \\?\##{METHOD_REGEXP_STR}
+
+ # A::B::C
+ # The stuff after CLASS_REGEXP_STR is a
+ # nasty hack. CLASS_REGEXP_STR unfortunately matches
+ # words like dog and cat (these are legal "class"
+ # names in Fortran 95). When a word is flagged as a
+ # potential cross-reference, limitations in the markup
+ # engine suppress other processing, such as typesetting.
+ # This is particularly noticeable for contractions.
+ # In order that words like "can't" not
+ # be flagged as potential cross-references, only
+ # flag potential class cross-references if the character
+ # after the cross-referece is a space or sentence
+ # punctuation.
+ | #{CLASS_REGEXP_STR}(?=[\s\)\.\?\!\,\;]|\z)
+
+ # Things that look like filenames
+ # The key thing is that there must be at least
+ # one special character (period, slash, or
+ # underscore).
+ | [\/\w]+[_\/\.][\w\/\.]+
+
+ # Things that have markup suppressed
+ | \\[^\s]
+ )/x
+
+ ##
+ # RDoc::CodeObject for generating references
+
+ attr_accessor :context
+
+ ##
+ # Creates a new crossref resolver that generates links relative to +context+
+ # which lives at +from_path+ in the generated files. '#' characters on
+ # references are removed unless +show_hash+ is true.
+
+ def initialize(from_path, context, show_hash)
+ raise ArgumentError, 'from_path cannot be nil' if from_path.nil?
+ super()
+
+ @markup.add_special(CROSSREF_REGEXP, :CROSSREF)
+
+ @from_path = from_path
+ @context = context
+ @show_hash = show_hash
+
+ @seen = {}
+ end
+
+ ##
+ # We're invoked when any text matches the CROSSREF pattern (defined in
+ # MarkUp). If we find the corresponding reference, generate a hyperlink.
+ # If the name we're looking for contains no punctuation, we look for it up
+ # the module/class chain. For example, HyperlinkHtml is found, even without
+ # the Generator:: prefix, because we look for it in module Generator first.
+
+ def handle_special_CROSSREF(special)
+ name = special.text
+
+ # This ensures that words entirely consisting of lowercase letters will
+ # not have cross-references generated (to suppress lots of erroneous
+ # cross-references to "new" in text, for instance)
+ return name if name =~ /\A[a-z]*\z/
+
+ return @seen[name] if @seen.include? name
+
+ if name[0, 1] == '#' then
+ lookup = name[1..-1]
+ name = lookup unless @show_hash
+ else
+ lookup = name
+ end
+
+ # Find class, module, or method in class or module.
+ #
+ # Do not, however, use an if/elsif/else chain to do so. Instead, test
+ # each possible pattern until one matches. The reason for this is that a
+ # string like "YAML.txt" could be the txt() class method of class YAML (in
+ # which case it would match the first pattern, which splits the string
+ # into container and method components and looks up both) or a filename
+ # (in which case it would match the last pattern, which just checks
+ # whether the string as a whole is a known symbol).
+
+ if /#{CLASS_REGEXP_STR}[\.\#]#{METHOD_REGEXP_STR}/ =~ lookup then
+ container = $1
+ method = $2
+ ref = @context.find_symbol container, method
+ end
+
+ ref = @context.find_symbol lookup unless ref
+
+ out = if lookup == '\\' then
+ lookup
+ elsif lookup =~ /^\\/ then
+ $'
+ elsif ref and ref.document_self then
+ "<a href=\"#{ref.as_href(@from_path)}\">#{name}</a>"
+ else
+ name
+ end
+
+ @seen[name] = out
+
+ out
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_latex.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_latex.rb
new file mode 100644
index 000000000..aac5c495e
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_latex.rb
@@ -0,0 +1,328 @@
+require 'rdoc/markup/formatter'
+require 'rdoc/markup/fragments'
+require 'rdoc/markup/inline'
+
+require 'cgi'
+
+##
+# Convert SimpleMarkup to basic LaTeX report format.
+
+class RDoc::Markup::ToLaTeX < RDoc::Markup::Formatter
+
+ BS = "\020" # \
+ OB = "\021" # {
+ CB = "\022" # }
+ DL = "\023" # Dollar
+
+ BACKSLASH = "#{BS}symbol#{OB}92#{CB}"
+ HAT = "#{BS}symbol#{OB}94#{CB}"
+ BACKQUOTE = "#{BS}symbol#{OB}0#{CB}"
+ TILDE = "#{DL}#{BS}sim#{DL}"
+ LESSTHAN = "#{DL}<#{DL}"
+ GREATERTHAN = "#{DL}>#{DL}"
+
+ def self.l(str)
+ str.tr('\\', BS).tr('{', OB).tr('}', CB).tr('$', DL)
+ end
+
+ def l(arg)
+ RDoc::Markup::ToLaTeX.l(arg)
+ end
+
+ LIST_TYPE_TO_LATEX = {
+ :BULLET => [ l("\\begin{itemize}"), l("\\end{itemize}") ],
+ :NUMBER => [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\arabic" ],
+ :UPPERALPHA => [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\Alph" ],
+ :LOWERALPHA => [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\alph" ],
+ :LABELED => [ l("\\begin{description}"), l("\\end{description}") ],
+ :NOTE => [
+ l("\\begin{tabularx}{\\linewidth}{@{} l X @{}}"),
+ l("\\end{tabularx}") ],
+ }
+
+ InlineTag = Struct.new(:bit, :on, :off)
+
+ def initialize
+ init_tags
+ @list_depth = 0
+ @prev_list_types = []
+ end
+
+ ##
+ # Set up the standard mapping of attributes to LaTeX
+
+ def init_tags
+ @attr_tags = [
+ InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:BOLD), l("\\textbf{"), l("}")),
+ InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:TT), l("\\texttt{"), l("}")),
+ InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:EM), l("\\emph{"), l("}")),
+ ]
+ end
+
+ ##
+ # Escape a LaTeX string
+
+ def escape(str)
+ $stderr.print "FE: ", str if $DEBUG_RDOC
+ s = str.
+ sub(/\s+$/, '').
+ gsub(/([_\${}&%#])/, "#{BS}\\1").
+ gsub(/\\/, BACKSLASH).
+ gsub(/\^/, HAT).
+ gsub(/~/, TILDE).
+ gsub(/</, LESSTHAN).
+ gsub(/>/, GREATERTHAN).
+ gsub(/,,/, ",{},").
+ gsub(/\`/, BACKQUOTE)
+ $stderr.print "-> ", s, "\n" if $DEBUG_RDOC
+ s
+ end
+
+ ##
+ # Add a new set of LaTeX tags for an attribute. We allow
+ # separate start and end tags for flexibility
+
+ def add_tag(name, start, stop)
+ @attr_tags << InlineTag.new(RDoc::Markup::Attribute.bitmap_for(name), start, stop)
+ end
+
+ ##
+ # This is a higher speed (if messier) version of wrap
+
+ def wrap(txt, line_len = 76)
+ res = ""
+ sp = 0
+ ep = txt.length
+ while sp < ep
+ # scan back for a space
+ p = sp + line_len - 1
+ if p >= ep
+ p = ep
+ else
+ while p > sp and txt[p] != ?\s
+ p -= 1
+ end
+ if p <= sp
+ p = sp + line_len
+ while p < ep and txt[p] != ?\s
+ p += 1
+ end
+ end
+ end
+ res << txt[sp...p] << "\n"
+ sp = p
+ sp += 1 while sp < ep and txt[sp] == ?\s
+ end
+ res
+ end
+
+ ##
+ # :section: Visitor
+
+ def start_accepting
+ @res = ""
+ @in_list_entry = []
+ end
+
+ def end_accepting
+ @res.tr(BS, '\\').tr(OB, '{').tr(CB, '}').tr(DL, '$')
+ end
+
+ def accept_paragraph(am, fragment)
+ @res << wrap(convert_flow(am.flow(fragment.txt)))
+ @res << "\n"
+ end
+
+ def accept_verbatim(am, fragment)
+ @res << "\n\\begin{code}\n"
+ @res << fragment.txt.sub(/[\n\s]+\Z/, '')
+ @res << "\n\\end{code}\n\n"
+ end
+
+ def accept_rule(am, fragment)
+ size = fragment.param
+ size = 10 if size > 10
+ @res << "\n\n\\rule{\\linewidth}{#{size}pt}\n\n"
+ end
+
+ def accept_list_start(am, fragment)
+ @res << list_name(fragment.type, true) << "\n"
+ @in_list_entry.push false
+ end
+
+ def accept_list_end(am, fragment)
+ if tag = @in_list_entry.pop
+ @res << tag << "\n"
+ end
+ @res << list_name(fragment.type, false) << "\n"
+ end
+
+ def accept_list_item(am, fragment)
+ if tag = @in_list_entry.last
+ @res << tag << "\n"
+ end
+ @res << list_item_start(am, fragment)
+ @res << wrap(convert_flow(am.flow(fragment.txt))) << "\n"
+ @in_list_entry[-1] = list_end_for(fragment.type)
+ end
+
+ def accept_blank_line(am, fragment)
+ # @res << "\n"
+ end
+
+ def accept_heading(am, fragment)
+ @res << convert_heading(fragment.head_level, am.flow(fragment.txt))
+ end
+
+ private
+
+ def on_tags(res, item)
+ attr_mask = item.turn_on
+ return if attr_mask.zero?
+
+ @attr_tags.each do |tag|
+ if attr_mask & tag.bit != 0
+ res << tag.on
+ end
+ end
+ end
+
+ def off_tags(res, item)
+ attr_mask = item.turn_off
+ return if attr_mask.zero?
+
+ @attr_tags.reverse_each do |tag|
+ if attr_mask & tag.bit != 0
+ res << tag.off
+ end
+ end
+ end
+
+ def convert_flow(flow)
+ res = ""
+ flow.each do |item|
+ case item
+ when String
+ $stderr.puts "Converting '#{item}'" if $DEBUG_RDOC
+ res << convert_string(item)
+ when AttrChanger
+ off_tags(res, item)
+ on_tags(res, item)
+ when Special
+ res << convert_special(item)
+ else
+ raise "Unknown flow element: #{item.inspect}"
+ end
+ end
+ res
+ end
+
+ ##
+ # some of these patterns are taken from SmartyPants...
+
+ def convert_string(item)
+ escape(item).
+
+ # convert ... to elipsis (and make sure .... becomes .<elipsis>)
+ gsub(/\.\.\.\./, '.\ldots{}').gsub(/\.\.\./, '\ldots{}').
+
+ # convert single closing quote
+ gsub(%r{([^ \t\r\n\[\{\(])\'}, '\1\'').
+ gsub(%r{\'(?=\W|s\b)}, "'" ).
+
+ # convert single opening quote
+ gsub(/'/, '`').
+
+ # convert double closing quote
+ gsub(%r{([^ \t\r\n\[\{\(])\"(?=\W)}, "\\1''").
+
+ # convert double opening quote
+ gsub(/"/, "``").
+
+ # convert copyright
+ gsub(/\(c\)/, '\copyright{}')
+
+ end
+
+ def convert_special(special)
+ handled = false
+ Attribute.each_name_of(special.type) do |name|
+ method_name = "handle_special_#{name}"
+ if self.respond_to? method_name
+ special.text = send(method_name, special)
+ handled = true
+ end
+ end
+ raise "Unhandled special: #{special}" unless handled
+ special.text
+ end
+
+ def convert_heading(level, flow)
+ res =
+ case level
+ when 1 then "\\chapter{"
+ when 2 then "\\section{"
+ when 3 then "\\subsection{"
+ when 4 then "\\subsubsection{"
+ else "\\paragraph{"
+ end +
+ convert_flow(flow) +
+ "}\n"
+ end
+
+ def list_name(list_type, is_open_tag)
+ tags = LIST_TYPE_TO_LATEX[list_type] || raise("Invalid list type: #{list_type.inspect}")
+ if tags[2] # enumerate
+ if is_open_tag
+ @list_depth += 1
+ if @prev_list_types[@list_depth] != tags[2]
+ case @list_depth
+ when 1
+ roman = "i"
+ when 2
+ roman = "ii"
+ when 3
+ roman = "iii"
+ when 4
+ roman = "iv"
+ else
+ raise("Too deep list: level #{@list_depth}")
+ end
+ @prev_list_types[@list_depth] = tags[2]
+ return l("\\renewcommand{\\labelenum#{roman}}{#{tags[2]}{enum#{roman}}}") + "\n" + tags[0]
+ end
+ else
+ @list_depth -= 1
+ end
+ end
+ tags[ is_open_tag ? 0 : 1]
+ end
+
+ def list_item_start(am, fragment)
+ case fragment.type
+ when :BULLET, :NUMBER, :UPPERALPHA, :LOWERALPHA then
+ "\\item "
+
+ when :LABELED then
+ "\\item[" + convert_flow(am.flow(fragment.param)) + "] "
+
+ when :NOTE then
+ convert_flow(am.flow(fragment.param)) + " & "
+ else
+ raise "Invalid list type"
+ end
+ end
+
+ def list_end_for(fragment_type)
+ case fragment_type
+ when :BULLET, :NUMBER, :UPPERALPHA, :LOWERALPHA, :LABELED then
+ ""
+ when :NOTE
+ "\\\\\n"
+ else
+ raise "Invalid list type"
+ end
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_test.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_test.rb
new file mode 100644
index 000000000..b55a0ccef
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_test.rb
@@ -0,0 +1,53 @@
+require 'rdoc/markup'
+require 'rdoc/markup/formatter'
+
+##
+# This Markup outputter is used for testing purposes.
+
+class RDoc::Markup::ToTest < RDoc::Markup::Formatter
+
+ ##
+ # :section: Visitor
+
+ def start_accepting
+ @res = []
+ end
+
+ def end_accepting
+ @res
+ end
+
+ def accept_paragraph(am, fragment)
+ @res << fragment.to_s
+ end
+
+ def accept_verbatim(am, fragment)
+ @res << fragment.to_s
+ end
+
+ def accept_list_start(am, fragment)
+ @res << fragment.to_s
+ end
+
+ def accept_list_end(am, fragment)
+ @res << fragment.to_s
+ end
+
+ def accept_list_item(am, fragment)
+ @res << fragment.to_s
+ end
+
+ def accept_blank_line(am, fragment)
+ @res << fragment.to_s
+ end
+
+ def accept_heading(am, fragment)
+ @res << fragment.to_s
+ end
+
+ def accept_rule(am, fragment)
+ @res << fragment.to_s
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_texinfo.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_texinfo.rb
new file mode 100644
index 000000000..2b75e00b2
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/markup/to_texinfo.rb
@@ -0,0 +1,73 @@
+require 'rdoc/markup/formatter'
+require 'rdoc/markup/fragments'
+require 'rdoc/markup/inline'
+
+require 'rdoc/markup'
+require 'rdoc/markup/formatter'
+
+##
+# Convert SimpleMarkup to basic TexInfo format
+#
+# TODO: WTF is AttributeManager for?
+
+class RDoc::Markup::ToTexInfo < RDoc::Markup::Formatter
+
+ def format(text)
+ text.txt.
+ gsub(/@/, "@@").
+ gsub(/\{/, "@{").
+ gsub(/\}/, "@}").
+ # gsub(/,/, "@,"). # technically only required in cross-refs
+ gsub(/\+([\w]+)\+/, "@code{\\1}").
+ gsub(/\<tt\>([^<]+)\<\/tt\>/, "@code{\\1}").
+ gsub(/\*([\w]+)\*/, "@strong{\\1}").
+ gsub(/\<b\>([^<]+)\<\/b\>/, "@strong{\\1}").
+ gsub(/_([\w]+)_/, "@emph{\\1}").
+ gsub(/\<em\>([^<]+)\<\/em\>/, "@emph{\\1}")
+ end
+
+ # :section: Visitor
+
+ def start_accepting
+ @text = []
+ end
+
+ def end_accepting
+ @text.join("\n")
+ end
+
+ def accept_paragraph(attributes, text)
+ @text << format(text)
+ end
+
+ def accept_verbatim(attributes, text)
+ @text << "@verb{|#{format(text)}|}"
+ end
+
+ def accept_heading(attributes, text)
+ heading = ['@majorheading', '@chapheading'][text.head_level - 1] || '@heading'
+ @text << "#{heading} #{format(text)}"
+ end
+
+ def accept_list_start(attributes, text)
+ @text << '@itemize @bullet'
+ end
+
+ def accept_list_end(attributes, text)
+ @text << '@end itemize'
+ end
+
+ def accept_list_item(attributes, text)
+ @text << "@item\n#{format(text)}"
+ end
+
+ def accept_blank_line(attributes, text)
+ @text << "\n"
+ end
+
+ def accept_rule(attributes, text)
+ @text << '-----'
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/meta_method.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/meta_method.rb
new file mode 100644
index 000000000..e0c065c2b
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/meta_method.rb
@@ -0,0 +1,8 @@
+require 'rdoc/any_method'
+
+##
+# MetaMethod represents a meta-programmed method
+
+class RDoc::MetaMethod < RDoc::AnyMethod
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/normal_class.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/normal_class.rb
new file mode 100644
index 000000000..9a5c5e33a
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/normal_class.rb
@@ -0,0 +1,18 @@
+require 'rdoc/class_module'
+
+##
+# A normal class, neither singleton nor anonymous
+
+class RDoc::NormalClass < RDoc::ClassModule
+
+ def inspect # :nodoc:
+ superclass = @superclass ? " < #{@superclass}" : nil
+ "<%s:0x%x class %s%s includes: %p attributes: %p methods: %p aliases: %p>" % [
+ self.class, object_id,
+ full_name, superclass, @includes, @attributes, @method_list, @aliases
+ ]
+ end
+
+end
+
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/normal_module.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/normal_module.rb
new file mode 100644
index 000000000..6f561c7b6
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/normal_module.rb
@@ -0,0 +1,34 @@
+require 'rdoc/class_module'
+
+##
+# A normal module, like NormalClass
+
+class RDoc::NormalModule < RDoc::ClassModule
+
+ ##
+ # Appends +comment+ to the current comment, but separated by a rule
+
+ def comment=(comment)
+ return if comment.empty?
+ comment = @comment << "\n# ---\n" << comment unless @comment.empty?
+
+ super
+ end
+
+ def inspect # :nodoc:
+ "#<%s:0x%x module %s includes: %p attributes: %p methods: %p aliases: %p>" % [
+ self.class, object_id,
+ full_name, @includes, @attributes, @method_list, @aliases
+ ]
+ end
+
+ ##
+ # This is a module, returns true
+
+ def module?
+ true
+ end
+
+end
+
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/options.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/options.rb
new file mode 100644
index 000000000..40f1bfccd
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/options.rb
@@ -0,0 +1,542 @@
+require 'optparse'
+
+require 'rdoc/ri/paths'
+
+##
+# RDoc::Options handles the parsing and storage of options
+
+class RDoc::Options
+
+ ##
+ # Character-set
+
+ attr_reader :charset
+
+ ##
+ # Should diagrams be drawn?
+
+ attr_accessor :diagram
+
+ ##
+ # Files matching this pattern will be excluded
+
+ attr_accessor :exclude
+
+ ##
+ # Should we draw fileboxes in diagrams?
+
+ attr_reader :fileboxes
+
+ ##
+ # The list of files to be processed
+
+ attr_accessor :files
+
+ ##
+ # Scan newer sources than the flag file if true.
+
+ attr_reader :force_update
+
+ ##
+ # Description of the output generator (set with the <tt>-fmt</tt> option)
+
+ attr_accessor :generator
+
+ ##
+ # Formatter to mark up text with
+
+ attr_accessor :formatter
+
+ ##
+ # Image format for diagrams
+
+ attr_reader :image_format
+
+ ##
+ # Include line numbers in the source listings?
+
+ attr_reader :include_line_numbers
+
+ ##
+ # Name of the file, class or module to display in the initial index page (if
+ # not specified the first file we encounter is used)
+
+ attr_accessor :main_page
+
+ ##
+ # Merge into classes of the same name when generating ri
+
+ attr_reader :merge
+
+ ##
+ # The name of the output directory
+
+ attr_accessor :op_dir
+
+ ##
+ # Is RDoc in pipe mode?
+
+ attr_accessor :pipe
+
+ ##
+ # Array of directories to search for files to satisfy an :include:
+
+ attr_reader :rdoc_include
+
+ ##
+ # Include private and protected methods in the output?
+
+ attr_accessor :show_all
+
+ ##
+ # Include the '#' at the front of hyperlinked instance method names
+
+ attr_reader :show_hash
+
+ ##
+ # The number of columns in a tab
+
+ attr_reader :tab_width
+
+ ##
+ # Template to be used when generating output
+
+ attr_reader :template
+
+ ##
+ # Number of threads to parse with
+
+ attr_accessor :threads
+
+ ##
+ # Documentation title
+
+ attr_reader :title
+
+ ##
+ # Verbosity, zero means quiet
+
+ attr_accessor :verbosity
+
+ ##
+ # URL of web cvs frontend
+
+ attr_reader :webcvs
+
+ def initialize # :nodoc:
+ require 'rdoc/rdoc'
+ @op_dir = 'doc'
+ @show_all = false
+ @main_page = nil
+ @merge = false
+ @exclude = []
+ @generators = RDoc::RDoc::GENERATORS
+ @generator = RDoc::Generator::Darkfish
+ @generator_name = nil
+ @rdoc_include = []
+ @title = nil
+ @template = nil
+ @threads = if RUBY_PLATFORM == 'java' then
+ Java::java::lang::Runtime.getRuntime.availableProcessors * 2
+ else
+ 2
+ end
+ @diagram = false
+ @fileboxes = false
+ @show_hash = false
+ @image_format = 'png'
+ @tab_width = 8
+ @include_line_numbers = false
+ @force_update = true
+ @verbosity = 1
+ @pipe = false
+
+ @webcvs = nil
+
+ @charset = 'utf-8'
+ end
+
+ ##
+ # Parse command line options.
+
+ def parse(argv)
+ opts = OptionParser.new do |opt|
+ opt.program_name = File.basename $0
+ opt.version = RDoc::VERSION
+ opt.release = nil
+ opt.summary_indent = ' ' * 4
+ opt.banner = <<-EOF
+Usage: #{opt.program_name} [options] [names...]
+
+ Files are parsed, and the information they contain collected, before any
+ output is produced. This allows cross references between all files to be
+ resolved. If a name is a directory, it is traversed. If no names are
+ specified, all Ruby files in the current directory (and subdirectories) are
+ processed.
+
+ How RDoc generates output depends on the output formatter being used, and on
+ the options you give.
+
+ - Darkfish creates frameless HTML output by Michael Granger.
+
+ - ri creates ri data files
+ EOF
+
+ opt.separator nil
+ opt.separator "Parsing Options:"
+ opt.separator nil
+
+ opt.on("--all", "-a",
+ "Include all methods (not just public) in",
+ "the output.") do |value|
+ @show_all = value
+ end
+
+ opt.separator nil
+
+ opt.on("--exclude=PATTERN", "-x", Regexp,
+ "Do not process files or directories",
+ "matching PATTERN.") do |value|
+ @exclude << value
+ end
+
+ opt.separator nil
+
+ opt.on("--extension=NEW=OLD", "-E",
+ "Treat files ending with .new as if they",
+ "ended with .old. Using '-E cgi=rb' will",
+ "cause xxx.cgi to be parsed as a Ruby file.") do |value|
+ new, old = value.split(/=/, 2)
+
+ unless new and old then
+ raise OptionParser::InvalidArgument, "Invalid parameter to '-E'"
+ end
+
+ unless RDoc::ParserFactory.alias_extension old, new then
+ raise OptionParser::InvalidArgument, "Unknown extension .#{old} to -E"
+ end
+ end
+
+ opt.separator nil
+
+ opt.on("--force-update", "-U",
+ "Forces rdoc to scan all sources even if",
+ "newer than the flag file.") do |value|
+ @force_update = value
+ end
+
+ opt.separator nil
+
+ opt.on("--pipe",
+ "Convert RDoc on stdin to HTML") do
+ @pipe = true
+ end
+
+ opt.separator nil
+
+ opt.on("--threads=THREADS", Integer,
+ "Number of threads to parse with.") do |threads|
+ @threads = threads
+ end
+
+ opt.separator nil
+ opt.separator "Generator Options:"
+ opt.separator nil
+
+ opt.on("--charset=CHARSET", "-c",
+ "Specifies the output HTML character-set.") do |value|
+ @charset = value
+ end
+
+ opt.separator nil
+
+ generator_text = @generators.keys.map { |name| " #{name}" }.sort
+
+ opt.on("--fmt=FORMAT", "--format=FORMAT", "-f", @generators.keys,
+ "Set the output formatter. One of:", *generator_text) do |value|
+ @generator_name = value.downcase
+ setup_generator
+ end
+
+ opt.separator nil
+
+ opt.on("--include=DIRECTORIES", "-i", Array,
+ "Set (or add to) the list of directories to",
+ "be searched when satisfying :include:",
+ "requests. Can be used more than once.") do |value|
+ @rdoc_include.concat value.map { |dir| dir.strip }
+ end
+
+ opt.separator nil
+
+ opt.on("--line-numbers", "-N",
+ "Include line numbers in the source code.") do |value|
+ @include_line_numbers = value
+ end
+
+ opt.separator nil
+
+ opt.on("--main=NAME", "-m",
+ "NAME will be the initial page displayed.") do |value|
+ @main_page = value
+ end
+
+ opt.separator nil
+
+ opt.on("--output=DIR", "--op", "-o",
+ "Set the output directory.") do |value|
+ @op_dir = value
+ end
+
+ opt.separator nil
+
+ opt.on("--show-hash", "-H",
+ "A name of the form #name in a comment is a",
+ "possible hyperlink to an instance method",
+ "name. When displayed, the '#' is removed",
+ "unless this option is specified.") do |value|
+ @show_hash = value
+ end
+
+ opt.separator nil
+
+ opt.on("--tab-width=WIDTH", "-w", OptionParser::DecimalInteger,
+ "Set the width of tab characters.") do |value|
+ @tab_width = value
+ end
+
+ opt.separator nil
+
+ opt.on("--template=NAME", "-T",
+ "Set the template used when generating",
+ "output.") do |value|
+ @template = value
+ end
+
+ opt.separator nil
+
+ opt.on("--title=TITLE", "-t",
+ "Set TITLE as the title for HTML output.") do |value|
+ @title = value
+ end
+
+ opt.separator nil
+
+ opt.on("--webcvs=URL", "-W",
+ "Specify a URL for linking to a web frontend",
+ "to CVS. If the URL contains a '\%s', the",
+ "name of the current file will be",
+ "substituted; if the URL doesn't contain a",
+ "'\%s', the filename will be appended to it.") do |value|
+ @webcvs = value
+ end
+
+ opt.separator nil
+ opt.separator "Diagram Options:"
+ opt.separator nil
+
+ image_formats = %w[gif png jpg jpeg]
+ opt.on("--image-format=FORMAT", "-I", image_formats,
+ "Sets output image format for diagrams. Can",
+ "be #{image_formats.join ', '}. If this option",
+ "is omitted, png is used. Requires",
+ "diagrams.") do |value|
+ @image_format = value
+ end
+
+ opt.separator nil
+
+ opt.on("--diagram", "-d",
+ "Generate diagrams showing modules and",
+ "classes. You need dot V1.8.6 or later to",
+ "use the --diagram option correctly. Dot is",
+ "available from http://graphviz.org") do |value|
+ check_diagram
+ @diagram = true
+ end
+
+ opt.separator nil
+
+ opt.on("--fileboxes", "-F",
+ "Classes are put in boxes which represents",
+ "files, where these classes reside. Classes",
+ "shared between more than one file are",
+ "shown with list of files that are sharing",
+ "them. Silently discarded if --diagram is",
+ "not given.") do |value|
+ @fileboxes = value
+ end
+
+ opt.separator nil
+ opt.separator "ri Generator Options:"
+ opt.separator nil
+
+ opt.on("--ri", "-r",
+ "Generate output for use by `ri`. The files",
+ "are stored in the '.rdoc' directory under",
+ "your home directory unless overridden by a",
+ "subsequent --op parameter, so no special",
+ "privileges are needed.") do |value|
+ @generator_name = "ri"
+ @op_dir = RDoc::RI::Paths::HOMEDIR
+ setup_generator
+ end
+
+ opt.separator nil
+
+ opt.on("--ri-site", "-R",
+ "Generate output for use by `ri`. The files",
+ "are stored in a site-wide directory,",
+ "making them accessible to others, so",
+ "special privileges are needed.") do |value|
+ @generator_name = "ri"
+ @op_dir = RDoc::RI::Paths::SITEDIR
+ setup_generator
+ end
+
+ opt.separator nil
+
+ opt.on("--merge", "-M",
+ "When creating ri output, merge previously",
+ "processed classes into previously",
+ "documented classes of the same name.") do |value|
+ @merge = value
+ end
+
+ opt.separator nil
+ opt.separator "Generic Options:"
+ opt.separator nil
+
+ opt.on("--debug", "-D",
+ "Displays lots on internal stuff.") do |value|
+ $DEBUG_RDOC = value
+ end
+
+ opt.on("--quiet", "-q",
+ "Don't show progress as we parse.") do |value|
+ @verbosity = 0
+ end
+
+ opt.on("--verbose", "-v",
+ "Display extra progress as we parse.") do |value|
+ @verbosity = 2
+ end
+
+ opt.separator nil
+ opt.separator 'Deprecated options - these warn when set'
+ opt.separator nil
+
+ opt.on("--inline-source", "-S") do |value|
+ warn "--inline-source will be removed from RDoc on or after August 2009"
+ end
+
+ opt.on("--promiscuous", "-p") do |value|
+ warn "--promiscuous will be removed from RDoc on or after August 2009"
+ end
+
+ opt.separator nil
+ end
+
+ argv.insert(0, *ENV['RDOCOPT'].split) if ENV['RDOCOPT']
+
+ opts.parse! argv
+
+ @files = argv.dup
+
+ @rdoc_include << "." if @rdoc_include.empty?
+
+ if @exclude.empty? then
+ @exclude = nil
+ else
+ @exclude = Regexp.new(@exclude.join("|"))
+ end
+
+ check_files
+
+ # If no template was specified, use the default template for the output
+ # formatter
+
+ @template ||= @generator_name
+
+ rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e
+ puts opts
+ puts
+ puts e
+ exit 1
+ end
+
+ ##
+ # Set the title, but only if not already set. This means that a title set
+ # from the command line trumps one set in a source file
+
+ def title=(string)
+ @title ||= string
+ end
+
+ ##
+ # Don't display progress as we process the files
+
+ def quiet
+ @verbosity.zero?
+ end
+
+ def quiet=(bool)
+ @verbosity = bool ? 0 : 1
+ end
+
+ private
+
+ ##
+ # Set up an output generator for the format in @generator_name
+
+ def setup_generator
+ @generator = @generators[@generator_name]
+
+ unless @generator then
+ raise OptionParser::InvalidArgument, "Invalid output formatter"
+ end
+ end
+
+ # Check that the right version of 'dot' is available. Unfortunately this
+ # doesn't work correctly under Windows NT, so we'll bypass the test under
+ # Windows.
+
+ def check_diagram
+ return if RUBY_PLATFORM =~ /mswin|cygwin|mingw|bccwin/
+
+ ok = false
+ ver = nil
+
+ IO.popen "dot -V 2>&1" do |io|
+ ver = io.read
+ if ver =~ /dot.+version(?:\s+gviz)?\s+(\d+)\.(\d+)/ then
+ ok = ($1.to_i > 1) || ($1.to_i == 1 && $2.to_i >= 8)
+ end
+ end
+
+ unless ok then
+ if ver =~ /^dot.+version/ then
+ $stderr.puts "Warning: You may need dot V1.8.6 or later to use\n",
+ "the --diagram option correctly. You have:\n\n ",
+ ver,
+ "\nDiagrams might have strange background colors.\n\n"
+ else
+ $stderr.puts "You need the 'dot' program to produce diagrams.",
+ "(see http://www.research.att.com/sw/tools/graphviz/)\n\n"
+ exit
+ end
+ end
+ end
+
+ ##
+ # Check that the files on the command line exist
+
+ def check_files
+ @files.each do |f|
+ stat = File.stat f rescue next
+ raise RDoc::Error, "file '#{f}' not readable" unless stat.readable?
+ end
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/parser.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/parser.rb
new file mode 100644
index 000000000..df3becd0a
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/parser.rb
@@ -0,0 +1,138 @@
+require 'rdoc'
+require 'rdoc/code_objects'
+require 'rdoc/markup/preprocess'
+require 'rdoc/stats'
+
+##
+# A parser is simple a class that implements
+#
+# #initialize(file_name, body, options)
+#
+# and
+#
+# #scan
+#
+# The initialize method takes a file name to be used, the body of the file,
+# and an RDoc::Options object. The scan method is then called to return an
+# appropriately parsed TopLevel code object.
+#
+# The ParseFactory is used to redirect to the correct parser given a
+# filename extension. This magic works because individual parsers have to
+# register themselves with us as they are loaded in. The do this using the
+# following incantation
+#
+# require "rdoc/parser"
+#
+# class RDoc::Parser::Xyz < RDoc::Parser
+# parse_files_matching /\.xyz$/ # <<<<
+#
+# def initialize(file_name, body, options)
+# ...
+# end
+#
+# def scan
+# ...
+# end
+# end
+#
+# Just to make life interesting, if we suspect a plain text file, we also
+# look for a shebang line just in case it's a potential shell script
+
+class RDoc::Parser
+
+ @parsers = []
+
+ class << self
+ attr_reader :parsers
+ end
+
+ ##
+ # Alias an extension to another extension. After this call, files ending
+ # "new_ext" will be parsed using the same parser as "old_ext"
+
+ def self.alias_extension(old_ext, new_ext)
+ old_ext = old_ext.sub(/^\.(.*)/, '\1')
+ new_ext = new_ext.sub(/^\.(.*)/, '\1')
+
+ parser = can_parse "xxx.#{old_ext}"
+ return false unless parser
+
+ RDoc::Parser.parsers.unshift [/\.#{new_ext}$/, parser]
+
+ true
+ end
+
+ ##
+ # Shamelessly stolen from the ptools gem (since RDoc cannot depend on
+ # the gem).
+
+ def self.binary?(file)
+ s = (File.read(file, File.stat(file).blksize) || "").split(//)
+
+ if s.size > 0 then
+ ((s.size - s.grep(" ".."~").size) / s.size.to_f) > 0.30
+ else
+ false
+ end
+ end
+ private_class_method :binary?
+
+ ##
+ # Return a parser that can handle a particular extension
+
+ def self.can_parse(file_name)
+ parser = RDoc::Parser.parsers.find { |regexp,| regexp =~ file_name }.last
+
+ #
+ # The default parser should *NOT* parse binary files.
+ #
+ if parser == RDoc::Parser::Simple && file_name !~ /\.(txt|rdoc)$/ then
+ if binary? file_name then
+ return nil
+ end
+ end
+
+ return parser
+ end
+
+ ##
+ # Find the correct parser for a particular file name. Return a SimpleParser
+ # for ones that we don't know
+
+ def self.for(top_level, file_name, body, options, stats)
+ # If no extension, look for shebang
+ if file_name !~ /\.\w+$/ && body =~ %r{\A#!(.+)} then
+ shebang = $1
+ case shebang
+ when %r{env\s+ruby}, %r{/ruby}
+ file_name = "dummy.rb"
+ end
+ end
+
+ parser = can_parse file_name
+
+ # This method must return a parser.
+ parser ||= RDoc::Parser::Simple
+
+ parser.new top_level, file_name, body, options, stats
+ end
+
+ ##
+ # Record which file types this parser can understand.
+
+ def self.parse_files_matching(regexp)
+ RDoc::Parser.parsers.unshift [regexp, self]
+ end
+
+ def initialize(top_level, file_name, content, options, stats)
+ @top_level = top_level
+ @file_name = file_name
+ @content = content
+ @options = options
+ @stats = stats
+ end
+
+end
+
+require 'rdoc/parser/simple'
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/c.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/c.rb
new file mode 100644
index 000000000..5a11889b3
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/c.rb
@@ -0,0 +1,678 @@
+require 'rdoc/parser'
+require 'rdoc/parser/ruby'
+require 'rdoc/known_classes'
+
+##
+# We attempt to parse C extension files. Basically we look for
+# the standard patterns that you find in extensions: <tt>rb_define_class,
+# rb_define_method</tt> and so on. We also try to find the corresponding
+# C source for the methods and extract comments, but if we fail
+# we don't worry too much.
+#
+# The comments associated with a Ruby method are extracted from the C
+# comment block associated with the routine that _implements_ that
+# method, that is to say the method whose name is given in the
+# <tt>rb_define_method</tt> call. For example, you might write:
+#
+# /*
+# * Returns a new array that is a one-dimensional flattening of this
+# * array (recursively). That is, for every element that is an array,
+# * extract its elements into the new array.
+# *
+# * s = [ 1, 2, 3 ] #=> [1, 2, 3]
+# * t = [ 4, 5, 6, [7, 8] ] #=> [4, 5, 6, [7, 8]]
+# * a = [ s, t, 9, 10 ] #=> [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]
+# * a.flatten #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+# */
+# static VALUE
+# rb_ary_flatten(ary)
+# VALUE ary;
+# {
+# ary = rb_obj_dup(ary);
+# rb_ary_flatten_bang(ary);
+# return ary;
+# }
+#
+# ...
+#
+# void
+# Init_Array()
+# {
+# ...
+# rb_define_method(rb_cArray, "flatten", rb_ary_flatten, 0);
+#
+# Here RDoc will determine from the rb_define_method line that there's a
+# method called "flatten" in class Array, and will look for the implementation
+# in the method rb_ary_flatten. It will then use the comment from that
+# method in the HTML output. This method must be in the same source file
+# as the rb_define_method.
+#
+# C classes can be diagrammed (see /tc/dl/ruby/ruby/error.c), and RDoc
+# integrates C and Ruby source into one tree
+#
+# The comment blocks may include special directives:
+#
+# [Document-class: <i>name</i>]
+# This comment block is documentation for the given class. Use this
+# when the <tt>Init_xxx</tt> method is not named after the class.
+#
+# [Document-method: <i>name</i>]
+# This comment documents the named method. Use when RDoc cannot
+# automatically find the method from it's declaration
+#
+# [call-seq: <i>text up to an empty line</i>]
+# Because C source doesn't give descripive names to Ruby-level parameters,
+# you need to document the calling sequence explicitly
+#
+# In addition, RDoc assumes by default that the C method implementing a
+# Ruby function is in the same source file as the rb_define_method call.
+# If this isn't the case, add the comment:
+#
+# rb_define_method(....); // in: filename
+#
+# As an example, we might have an extension that defines multiple classes
+# in its Init_xxx method. We could document them using
+#
+# /*
+# * Document-class: MyClass
+# *
+# * Encapsulate the writing and reading of the configuration
+# * file. ...
+# */
+#
+# /*
+# * Document-method: read_value
+# *
+# * call-seq:
+# * cfg.read_value(key) -> value
+# * cfg.read_value(key} { |key| } -> value
+# *
+# * Return the value corresponding to +key+ from the configuration.
+# * In the second form, if the key isn't found, invoke the
+# * block and return its value.
+# */
+
+class RDoc::Parser::C < RDoc::Parser
+
+ parse_files_matching(/\.(?:([CcHh])\1?|c([+xp])\2|y)\z/)
+
+ ##
+ # C file the parser is parsing
+
+ attr_accessor :content
+
+ ##
+ # Resets cross-file state. Call when parsing different projects that need
+ # separate documentation.
+
+ def self.reset
+ @@enclosure_classes = {}
+ @@known_bodies = {}
+ end
+
+ reset
+
+ ##
+ # Prepare to parse a C file
+
+ def initialize(top_level, file_name, content, options, stats)
+ super
+
+ @known_classes = RDoc::KNOWN_CLASSES.dup
+ @content = handle_tab_width handle_ifdefs_in(@content)
+ @classes = Hash.new
+ @file_dir = File.dirname(@file_name)
+ end
+
+ def do_aliases
+ @content.scan(%r{rb_define_alias\s*\(\s*(\w+),\s*"([^"]+)",\s*"([^"]+)"\s*\)}m) do
+ |var_name, new_name, old_name|
+ class_name = @known_classes[var_name] || var_name
+ class_obj = find_class(var_name, class_name)
+
+ as = class_obj.add_alias RDoc::Alias.new("", old_name, new_name, "")
+
+ @stats.add_alias as
+ end
+ end
+
+ def do_classes
+ @content.scan(/(\w+)\s* = \s*rb_define_module\s*\(\s*"(\w+)"\s*\)/mx) do
+ |var_name, class_name|
+ handle_class_module(var_name, "module", class_name, nil, nil)
+ end
+
+ # The '.' lets us handle SWIG-generated files
+ @content.scan(/([\w\.]+)\s* = \s*rb_define_class\s*
+ \(
+ \s*"(\w+)",
+ \s*(\w+)\s*
+ \)/mx) do |var_name, class_name, parent|
+ handle_class_module(var_name, "class", class_name, parent, nil)
+ end
+
+ @content.scan(/(\w+)\s*=\s*boot_defclass\s*\(\s*"(\w+?)",\s*(\w+?)\s*\)/) do
+ |var_name, class_name, parent|
+ parent = nil if parent == "0"
+ handle_class_module(var_name, "class", class_name, parent, nil)
+ end
+
+ @content.scan(/(\w+)\s* = \s*rb_define_module_under\s*
+ \(
+ \s*(\w+),
+ \s*"(\w+)"
+ \s*\)/mx) do |var_name, in_module, class_name|
+ handle_class_module(var_name, "module", class_name, nil, in_module)
+ end
+
+ @content.scan(/([\w\.]+)\s* = \s*rb_define_class_under\s*
+ \(
+ \s*(\w+),
+ \s*"(\w+)",
+ \s*([\w\*\s\(\)\.\->]+)\s* # for SWIG
+ \s*\)/mx) do |var_name, in_module, class_name, parent|
+ handle_class_module(var_name, "class", class_name, parent, in_module)
+ end
+ end
+
+ def do_constants
+ @content.scan(%r{\Wrb_define_
+ (
+ variable |
+ readonly_variable |
+ const |
+ global_const |
+ )
+ \s*\(
+ (?:\s*(\w+),)?
+ \s*"(\w+)",
+ \s*(.*?)\s*\)\s*;
+ }xm) do |type, var_name, const_name, definition|
+ var_name = "rb_cObject" if !var_name or var_name == "rb_mKernel"
+ handle_constants(type, var_name, const_name, definition)
+ end
+ end
+
+ ##
+ # Look for includes of the form:
+ #
+ # rb_include_module(rb_cArray, rb_mEnumerable);
+
+ def do_includes
+ @content.scan(/rb_include_module\s*\(\s*(\w+?),\s*(\w+?)\s*\)/) do |c,m|
+ if cls = @classes[c]
+ m = @known_classes[m] || m
+ cls.add_include RDoc::Include.new(m, "")
+ end
+ end
+ end
+
+ def do_methods
+ @content.scan(%r{rb_define_
+ (
+ singleton_method |
+ method |
+ module_function |
+ private_method
+ )
+ \s*\(\s*([\w\.]+),
+ \s*"([^"]+)",
+ \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,
+ \s*(-?\w+)\s*\)
+ (?:;\s*/[*/]\s+in\s+(\w+?\.[cy]))?
+ }xm) do
+ |type, var_name, meth_name, meth_body, param_count, source_file|
+
+ # Ignore top-object and weird struct.c dynamic stuff
+ next if var_name == "ruby_top_self"
+ next if var_name == "nstr"
+ next if var_name == "envtbl"
+ next if var_name == "argf" # it'd be nice to handle this one
+
+ var_name = "rb_cObject" if var_name == "rb_mKernel"
+ handle_method(type, var_name, meth_name,
+ meth_body, param_count, source_file)
+ end
+
+ @content.scan(%r{rb_define_attr\(
+ \s*([\w\.]+),
+ \s*"([^"]+)",
+ \s*(\d+),
+ \s*(\d+)\s*\);
+ }xm) do |var_name, attr_name, attr_reader, attr_writer|
+ #var_name = "rb_cObject" if var_name == "rb_mKernel"
+ handle_attr(var_name, attr_name,
+ attr_reader.to_i != 0,
+ attr_writer.to_i != 0)
+ end
+
+ @content.scan(%r{rb_define_global_function\s*\(
+ \s*"([^"]+)",
+ \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,
+ \s*(-?\w+)\s*\)
+ (?:;\s*/[*/]\s+in\s+(\w+?\.[cy]))?
+ }xm) do |meth_name, meth_body, param_count, source_file|
+ handle_method("method", "rb_mKernel", meth_name,
+ meth_body, param_count, source_file)
+ end
+
+ @content.scan(/define_filetest_function\s*\(
+ \s*"([^"]+)",
+ \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,
+ \s*(-?\w+)\s*\)/xm) do
+ |meth_name, meth_body, param_count|
+
+ handle_method("method", "rb_mFileTest", meth_name, meth_body, param_count)
+ handle_method("singleton_method", "rb_cFile", meth_name, meth_body, param_count)
+ end
+ end
+
+ def find_attr_comment(attr_name)
+ if @content =~ %r{((?>/\*.*?\*/\s+))
+ rb_define_attr\((?:\s*(\w+),)?\s*"#{attr_name}"\s*,.*?\)\s*;}xmi
+ $1
+ elsif @content =~ %r{Document-attr:\s#{attr_name}\s*?\n((?>.*?\*/))}m
+ $1
+ else
+ ''
+ end
+ end
+
+ ##
+ # Find the C code corresponding to a Ruby method
+
+ def find_body(class_name, meth_name, meth_obj, body, quiet = false)
+ case body
+ when %r"((?>/\*.*?\*/\s*))((?:(?:static|SWIGINTERN)\s+)?(?:intern\s+)?VALUE\s+#{meth_name}
+ \s*(\([^)]*\))([^;]|$))"xm
+ comment = $1
+ body_text = $2
+ params = $3
+
+ remove_private_comments comment if comment
+
+ # see if we can find the whole body
+
+ re = Regexp.escape(body_text) + '[^(]*^\{.*?^\}'
+ body_text = $& if /#{re}/m =~ body
+
+ # The comment block may have been overridden with a 'Document-method'
+ # block. This happens in the interpreter when multiple methods are
+ # vectored through to the same C method but those methods are logically
+ # distinct (for example Kernel.hash and Kernel.object_id share the same
+ # implementation
+
+ override_comment = find_override_comment class_name, meth_obj.name
+ comment = override_comment if override_comment
+
+ find_modifiers comment, meth_obj if comment
+
+# meth_obj.params = params
+ meth_obj.start_collecting_tokens
+ meth_obj.add_token RDoc::RubyToken::Token.new(1,1).set_text(body_text)
+ meth_obj.comment = mangle_comment comment
+ when %r{((?>/\*.*?\*/\s*))^\s*(\#\s*define\s+#{meth_name}\s+(\w+))}m
+ comment = $1
+ body_text = $2
+ find_body class_name, $3, meth_obj, body, true
+ find_modifiers comment, meth_obj
+
+ meth_obj.start_collecting_tokens
+ meth_obj.add_token RDoc::RubyToken::Token.new(1,1).set_text(body_text)
+ meth_obj.comment = mangle_comment(comment) + meth_obj.comment.to_s
+ when %r{^\s*\#\s*define\s+#{meth_name}\s+(\w+)}m
+ unless find_body(class_name, $1, meth_obj, body, true)
+ warn "No definition for #{meth_name}" unless @options.quiet
+ return false
+ end
+ else
+ # No body, but might still have an override comment
+ comment = find_override_comment(class_name, meth_obj.name)
+
+ if comment
+ find_modifiers(comment, meth_obj)
+ meth_obj.comment = mangle_comment(comment)
+ else
+ warn "No definition for #{meth_name}" unless @options.quiet
+ return false
+ end
+ end
+ true
+ end
+
+ def find_class(raw_name, name)
+ unless @classes[raw_name]
+ if raw_name =~ /^rb_m/
+ container = @top_level.add_module RDoc::NormalModule, name
+ else
+ container = @top_level.add_class RDoc::NormalClass, name
+ end
+
+ container.record_location @top_level
+ @classes[raw_name] = container
+ end
+ @classes[raw_name]
+ end
+
+ ##
+ # Look for class or module documentation above Init_+class_name+(void),
+ # in a Document-class +class_name+ (or module) comment or above an
+ # rb_define_class (or module). If a comment is supplied above a matching
+ # Init_ and a rb_define_class the Init_ comment is used.
+ #
+ # /*
+ # * This is a comment for Foo
+ # */
+ # Init_Foo(void) {
+ # VALUE cFoo = rb_define_class("Foo", rb_cObject);
+ # }
+ #
+ # /*
+ # * Document-class: Foo
+ # * This is a comment for Foo
+ # */
+ # Init_foo(void) {
+ # VALUE cFoo = rb_define_class("Foo", rb_cObject);
+ # }
+ #
+ # /*
+ # * This is a comment for Foo
+ # */
+ # VALUE cFoo = rb_define_class("Foo", rb_cObject);
+
+ def find_class_comment(class_name, class_meth)
+ comment = nil
+
+ if @content =~ %r{((?>/\*.*?\*/\s+))
+ (static\s+)?void\s+Init_#{class_name}\s*(?:_\(\s*)?\(\s*(?:void\s*)\)}xmi then
+ comment = $1
+ elsif @content =~ %r{Document-(?:class|module):\s+#{class_name}\s*?(?:<\s+[:,\w]+)?\n((?>.*?\*/))}m then
+ comment = $1
+ elsif @content =~ %r{((?>/\*.*?\*/\s+))
+ ([\w\.\s]+\s* = \s+)?rb_define_(class|module).*?"(#{class_name})"}xm then
+ comment = $1
+ end
+
+ class_meth.comment = mangle_comment comment if comment
+ end
+
+ ##
+ # Finds a comment matching +type+ and +const_name+ either above the
+ # comment or in the matching Document- section.
+
+ def find_const_comment(type, const_name)
+ if @content =~ %r{((?>^\s*/\*.*?\*/\s+))
+ rb_define_#{type}\((?:\s*(\w+),)?\s*"#{const_name}"\s*,.*?\)\s*;}xmi
+ $1
+ elsif @content =~ %r{Document-(?:const|global|variable):\s#{const_name}\s*?\n((?>.*?\*/))}m
+ $1
+ else
+ ''
+ end
+ end
+
+ ##
+ # If the comment block contains a section that looks like:
+ #
+ # call-seq:
+ # Array.new
+ # Array.new(10)
+ #
+ # use it for the parameters.
+
+ def find_modifiers(comment, meth_obj)
+ if comment.sub!(/:nodoc:\s*^\s*\*?\s*$/m, '') or
+ comment.sub!(/\A\/\*\s*:nodoc:\s*\*\/\Z/, '')
+ meth_obj.document_self = false
+ end
+ if comment.sub!(/call-seq:(.*?)^\s*\*?\s*$/m, '') or
+ comment.sub!(/\A\/\*\s*call-seq:(.*?)\*\/\Z/, '')
+ seq = $1
+ seq.gsub!(/^\s*\*\s*/, '')
+ meth_obj.call_seq = seq
+ end
+ end
+
+ def find_override_comment(class_name, meth_name)
+ name = Regexp.escape(meth_name)
+ if @content =~ %r{Document-method:\s+#{class_name}(?:\.|::|#)#{name}\s*?\n((?>.*?\*/))}m then
+ $1
+ elsif @content =~ %r{Document-method:\s#{name}\s*?\n((?>.*?\*/))}m then
+ $1
+ end
+ end
+
+ def handle_attr(var_name, attr_name, reader, writer)
+ rw = ''
+ if reader
+ #@stats.num_methods += 1
+ rw << 'R'
+ end
+ if writer
+ #@stats.num_methods += 1
+ rw << 'W'
+ end
+
+ class_name = @known_classes[var_name]
+
+ return unless class_name
+
+ class_obj = find_class(var_name, class_name)
+
+ if class_obj
+ comment = find_attr_comment(attr_name)
+ unless comment.empty?
+ comment = mangle_comment(comment)
+ end
+ att = RDoc::Attr.new '', attr_name, rw, comment
+ class_obj.add_attribute(att)
+ end
+ end
+
+ def handle_class_module(var_name, class_mod, class_name, parent, in_module)
+ parent_name = @known_classes[parent] || parent
+
+ if in_module
+ enclosure = @classes[in_module] || @@enclosure_classes[in_module]
+ unless enclosure
+ if enclosure = @known_classes[in_module]
+ handle_class_module(in_module, (/^rb_m/ =~ in_module ? "module" : "class"),
+ enclosure, nil, nil)
+ enclosure = @classes[in_module]
+ end
+ end
+ unless enclosure
+ warn("Enclosing class/module '#{in_module}' for " +
+ "#{class_mod} #{class_name} not known")
+ return
+ end
+ else
+ enclosure = @top_level
+ end
+
+ if class_mod == "class" then
+ full_name = if RDoc::ClassModule === enclosure then
+ enclosure.full_name + "::#{class_name}"
+ else
+ class_name
+ end
+
+ if @content =~ %r{Document-class:\s+#{full_name}\s*<\s+([:,\w]+)} then
+ parent_name = $1
+ end
+ cm = enclosure.add_class RDoc::NormalClass, class_name, parent_name
+ @stats.add_class cm
+ else
+ cm = enclosure.add_module RDoc::NormalModule, class_name
+ @stats.add_module cm
+ end
+
+ cm.record_location enclosure.top_level
+
+ find_class_comment cm.full_name, cm
+
+ @classes[var_name] = cm
+ @@enclosure_classes[var_name] = cm
+ @known_classes[var_name] = cm.full_name
+ end
+
+ ##
+ # Adds constant comments. By providing some_value: at the start ofthe
+ # comment you can override the C value of the comment to give a friendly
+ # definition.
+ #
+ # /* 300: The perfect score in bowling */
+ # rb_define_const(cFoo, "PERFECT", INT2FIX(300);
+ #
+ # Will override +INT2FIX(300)+ with the value +300+ in the output RDoc.
+ # Values may include quotes and escaped colons (\:).
+
+ def handle_constants(type, var_name, const_name, definition)
+ #@stats.num_constants += 1
+ class_name = @known_classes[var_name]
+
+ return unless class_name
+
+ class_obj = find_class(var_name, class_name)
+
+ unless class_obj
+ warn("Enclosing class/module '#{const_name}' for not known")
+ return
+ end
+
+ comment = find_const_comment(type, const_name)
+
+ # In the case of rb_define_const, the definition and comment are in
+ # "/* definition: comment */" form. The literal ':' and '\' characters
+ # can be escaped with a backslash.
+ if type.downcase == 'const' then
+ elements = mangle_comment(comment).split(':')
+ if elements.nil? or elements.empty? then
+ con = RDoc::Constant.new(const_name, definition,
+ mangle_comment(comment))
+ else
+ new_definition = elements[0..-2].join(':')
+ if new_definition.empty? then # Default to literal C definition
+ new_definition = definition
+ else
+ new_definition.gsub!("\:", ":")
+ new_definition.gsub!("\\", '\\')
+ end
+ new_definition.sub!(/\A(\s+)/, '')
+ new_comment = $1.nil? ? elements.last : "#{$1}#{elements.last.lstrip}"
+ con = RDoc::Constant.new(const_name, new_definition,
+ mangle_comment(new_comment))
+ end
+ else
+ con = RDoc::Constant.new const_name, definition, mangle_comment(comment)
+ end
+
+ class_obj.add_constant(con)
+ end
+
+ ##
+ # Removes #ifdefs that would otherwise confuse us
+
+ def handle_ifdefs_in(body)
+ body.gsub(/^#ifdef HAVE_PROTOTYPES.*?#else.*?\n(.*?)#endif.*?\n/m, '\1')
+ end
+
+ def handle_method(type, var_name, meth_name, meth_body, param_count,
+ source_file = nil)
+ class_name = @known_classes[var_name]
+
+ return unless class_name
+
+ class_obj = find_class var_name, class_name
+
+ if class_obj then
+ if meth_name == "initialize" then
+ meth_name = "new"
+ type = "singleton_method"
+ end
+
+ meth_obj = RDoc::AnyMethod.new '', meth_name
+ meth_obj.singleton = %w[singleton_method module_function].include? type
+
+ p_count = (Integer(param_count) rescue -1)
+
+ if p_count < 0
+ meth_obj.params = "(...)"
+ elsif p_count == 0
+ meth_obj.params = "()"
+ else
+ meth_obj.params = "(" + (1..p_count).map{|i| "p#{i}"}.join(", ") + ")"
+ end
+
+ if source_file then
+ file_name = File.join(@file_dir, source_file)
+ body = (@@known_bodies[source_file] ||= File.read(file_name))
+ else
+ body = @content
+ end
+
+ if find_body(class_name, meth_body, meth_obj, body) and meth_obj.document_self then
+ class_obj.add_method meth_obj
+ @stats.add_method meth_obj
+ meth_obj.visibility = :private if 'private_method' == type
+ end
+ end
+ end
+
+ def handle_tab_width(body)
+ if /\t/ =~ body
+ tab_width = @options.tab_width
+ body.split(/\n/).map do |line|
+ 1 while line.gsub!(/\t+/) { ' ' * (tab_width*$&.length - $`.length % tab_width)} && $~ #`
+ line
+ end .join("\n")
+ else
+ body
+ end
+ end
+
+ ##
+ # Remove the /*'s and leading asterisks from C comments
+
+ def mangle_comment(comment)
+ comment.sub!(%r{/\*+}) { " " * $&.length }
+ comment.sub!(%r{\*+/}) { " " * $&.length }
+ comment.gsub!(/^[ \t]*\*/m) { " " * $&.length }
+ comment
+ end
+
+ ##
+ # Removes lines that are commented out that might otherwise get picked up
+ # when scanning for classes and methods
+
+ def remove_commented_out_lines
+ @content.gsub!(%r{//.*rb_define_}, '//')
+ end
+
+ def remove_private_comments(comment)
+ comment.gsub!(/\/?\*--\n(.*?)\/?\*\+\+/m, '')
+ comment.sub!(/\/?\*--\n.*/m, '')
+ end
+
+ ##
+ # Extract the classes/modules and methods from a C file and return the
+ # corresponding top-level object
+
+ def scan
+ remove_commented_out_lines
+ do_classes
+ do_constants
+ do_methods
+ do_includes
+ do_aliases
+ @top_level
+ end
+
+ def warn(msg)
+ $stderr.puts
+ $stderr.puts msg
+ $stderr.flush
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/perl.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/perl.rb
new file mode 100644
index 000000000..43d1e9ff6
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/perl.rb
@@ -0,0 +1,165 @@
+require 'rdoc/parser'
+
+##
+#
+# This is an attamept to write a basic parser for Perl's
+# POD (Plain old Documentation) format. Ruby code must
+# co-exist with Perl, and some tasks are easier in Perl
+# than Ruby because of existing libraries.
+#
+# One difficult is that Perl POD has no means of identifying
+# the classes (packages) and methods (subs) with which it
+# is associated, it is more like literate programming in so
+# far as it just happens to be in the same place as the code,
+# but need not be.
+#
+# We would like to support all the markup the POD provides
+# so that it will convert happily to HTML. At the moment
+# I don't think I can do that: time constraints.
+#
+
+class RDoc::Parser::PerlPOD < RDoc::Parser
+
+ parse_files_matching(/.p[lm]$/)
+
+ ##
+ # Prepare to parse a perl file
+
+ def initialize(top_level, file_name, content, options, stats)
+ super
+
+ preprocess = RDoc::Markup::PreProcess.new @file_name, @options.rdoc_include
+
+ preprocess.handle @content do |directive, param|
+ warn "Unrecognized directive '#{directive}' in #{@file_name}"
+ end
+ end
+
+ ##
+ # Extract the Pod(-like) comments from the code.
+ # At its most basic there will ne no need to distinguish
+ # between the different types of header, etc.
+ #
+ # This uses a simple finite state machine, in a very
+ # procedural pattern. I could "replace case with polymorphism"
+ # but I think it would obscure the intent, scatter the
+ # code all over tha place. This machine is necessary
+ # because POD requires that directives be preceded by
+ # blank lines, so reading line by line is necessary,
+ # and preserving state about what is seen is necesary.
+
+ def scan
+
+ @top_level.comment ||= ""
+ state=:code_blank
+ line_number = 0
+ line = nil
+
+ # This started out as a really long nested case statement,
+ # which also led to repetitive code. I'd like to avoid that
+ # so I'm using a "table" instead.
+
+ # Firstly we need some procs to do the transition and processing
+ # work. Because these are procs they are closures, and they can
+ # use variables in the local scope.
+ #
+ # First, the "nothing to see here" stuff.
+ code_noop = lambda do
+ if line =~ /^\s+$/
+ state = :code_blank
+ end
+ end
+
+ pod_noop = lambda do
+ if line =~ /^\s+$/
+ state = :pod_blank
+ end
+ @top_level.comment += filter(line)
+ end
+
+ begin_noop = lambda do
+ if line =~ /^\s+$/
+ state = :begin_blank
+ end
+ @top_level.comment += filter(line)
+ end
+
+ # Now for the blocks that process code and comments...
+
+ transit_to_pod = lambda do
+ case line
+ when /^=(?:pod|head\d+)/
+ state = :pod_no_blank
+ @top_level.comment += filter(line)
+ when /^=over/
+ state = :over_no_blank
+ @top_level.comment += filter(line)
+ when /^=(?:begin|for)/
+ state = :begin_no_blank
+ end
+ end
+
+ process_pod = lambda do
+ case line
+ when /^\s*$/
+ state = :pod_blank
+ @top_level.comment += filter(line)
+ when /^=cut/
+ state = :code_no_blank
+ when /^=end/
+ $stderr.puts "'=end' unexpected at #{line_number} in #{@file_name}"
+ else
+ @top_level.comment += filter(line)
+ end
+ end
+
+
+ process_begin = lambda do
+ case line
+ when /^\s*$/
+ state = :begin_blank
+ @top_level.comment += filter(line)
+ when /^=end/
+ state = :code_no_blank
+ when /^=cut/
+ $stderr.puts "'=cut' unexpected at #{line_number} in #{@file_name}"
+ else
+ @top_level.comment += filter(line)
+ end
+
+ end
+
+
+ transitions = { :code_no_blank => code_noop,
+ :code_blank => transit_to_pod,
+ :pod_no_blank => pod_noop,
+ :pod_blank => process_pod,
+ :begin_no_blank => begin_noop,
+ :begin_blank => process_begin}
+ @content.each_line do |l|
+ line = l
+ line_number += 1
+ transitions[state].call
+ end # each line
+
+ @top_level
+ end
+
+ # Filter the perl markup that does the same as the rdoc
+ # filtering. Only basic for now. Will probably need a
+ # proper parser to cope with C<<...>> etc
+ def filter(comment)
+ return '' if comment =~ /^=pod\s*$/
+ comment.gsub!(/^=pod/, '==')
+ comment.gsub!(/^=head(\d+)/) do
+ "=" * $1.to_i
+ end
+ comment.gsub!(/=item/, '');
+ comment.gsub!(/C<(.*?)>/, '<tt>\1</tt>');
+ comment.gsub!(/I<(.*?)>/, '<i>\1</i>');
+ comment.gsub!(/B<(.*?)>/, '<b>\1</b>');
+ comment
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/ruby.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/ruby.rb
new file mode 100644
index 000000000..84e292d47
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/ruby.rb
@@ -0,0 +1,2904 @@
+##
+# This file contains stuff stolen outright from:
+#
+# rtags.rb -
+# ruby-lex.rb - ruby lexcal analyzer
+# ruby-token.rb - ruby tokens
+# by Keiju ISHITSUKA (Nippon Rational Inc.)
+#
+
+require 'e2mmap'
+require 'irb/slex'
+
+require 'rdoc/code_objects'
+require 'rdoc/tokenstream'
+require 'rdoc/markup/preprocess'
+require 'rdoc/parser'
+
+$TOKEN_DEBUG ||= nil
+#$TOKEN_DEBUG = $DEBUG_RDOC
+
+##
+# Definitions of all tokens involved in the lexical analysis
+
+module RDoc::RubyToken
+
+ EXPR_BEG = :EXPR_BEG
+ EXPR_MID = :EXPR_MID
+ EXPR_END = :EXPR_END
+ EXPR_ARG = :EXPR_ARG
+ EXPR_FNAME = :EXPR_FNAME
+ EXPR_DOT = :EXPR_DOT
+ EXPR_CLASS = :EXPR_CLASS
+
+ class Token
+ NO_TEXT = "??".freeze
+
+ attr_accessor :text
+ attr_reader :line_no
+ attr_reader :char_no
+
+ def initialize(line_no, char_no)
+ @line_no = line_no
+ @char_no = char_no
+ @text = NO_TEXT
+ end
+
+ def ==(other)
+ self.class == other.class and
+ other.line_no == @line_no and
+ other.char_no == @char_no and
+ other.text == @text
+ end
+
+ ##
+ # Because we're used in contexts that expect to return a token, we set the
+ # text string and then return ourselves
+
+ def set_text(text)
+ @text = text
+ self
+ end
+
+ end
+
+ class TkNode < Token
+ attr :node
+ end
+
+ class TkId < Token
+ def initialize(line_no, char_no, name)
+ super(line_no, char_no)
+ @name = name
+ end
+ attr :name
+ end
+
+ class TkKW < TkId
+ end
+
+ class TkVal < Token
+ def initialize(line_no, char_no, value = nil)
+ super(line_no, char_no)
+ set_text(value)
+ end
+ end
+
+ class TkOp < Token
+ def name
+ self.class.op_name
+ end
+ end
+
+ class TkOPASGN < TkOp
+ def initialize(line_no, char_no, op)
+ super(line_no, char_no)
+ op = TkReading2Token[op] unless Symbol === op
+ @op = op
+ end
+ attr :op
+ end
+
+ class TkUnknownChar < Token
+ def initialize(line_no, char_no, id)
+ super(line_no, char_no)
+ @name = char_no.chr
+ end
+ attr :name
+ end
+
+ class TkError < Token
+ end
+
+ def set_token_position(line, char)
+ @prev_line_no = line
+ @prev_char_no = char
+ end
+
+ def Token(token, value = nil)
+ tk = nil
+ case token
+ when String, Symbol
+ source = String === token ? TkReading2Token : TkSymbol2Token
+ raise TkReading2TokenNoKey, token if (tk = source[token]).nil?
+ tk = Token(tk[0], value)
+ else
+ tk = if (token.ancestors & [TkId, TkVal, TkOPASGN, TkUnknownChar]).empty?
+ token.new(@prev_line_no, @prev_char_no)
+ else
+ token.new(@prev_line_no, @prev_char_no, value)
+ end
+ end
+ tk
+ end
+
+ TokenDefinitions = [
+ [:TkCLASS, TkKW, "class", EXPR_CLASS],
+ [:TkMODULE, TkKW, "module", EXPR_CLASS],
+ [:TkDEF, TkKW, "def", EXPR_FNAME],
+ [:TkUNDEF, TkKW, "undef", EXPR_FNAME],
+ [:TkBEGIN, TkKW, "begin", EXPR_BEG],
+ [:TkRESCUE, TkKW, "rescue", EXPR_MID],
+ [:TkENSURE, TkKW, "ensure", EXPR_BEG],
+ [:TkEND, TkKW, "end", EXPR_END],
+ [:TkIF, TkKW, "if", EXPR_BEG, :TkIF_MOD],
+ [:TkUNLESS, TkKW, "unless", EXPR_BEG, :TkUNLESS_MOD],
+ [:TkTHEN, TkKW, "then", EXPR_BEG],
+ [:TkELSIF, TkKW, "elsif", EXPR_BEG],
+ [:TkELSE, TkKW, "else", EXPR_BEG],
+ [:TkCASE, TkKW, "case", EXPR_BEG],
+ [:TkWHEN, TkKW, "when", EXPR_BEG],
+ [:TkWHILE, TkKW, "while", EXPR_BEG, :TkWHILE_MOD],
+ [:TkUNTIL, TkKW, "until", EXPR_BEG, :TkUNTIL_MOD],
+ [:TkFOR, TkKW, "for", EXPR_BEG],
+ [:TkBREAK, TkKW, "break", EXPR_END],
+ [:TkNEXT, TkKW, "next", EXPR_END],
+ [:TkREDO, TkKW, "redo", EXPR_END],
+ [:TkRETRY, TkKW, "retry", EXPR_END],
+ [:TkIN, TkKW, "in", EXPR_BEG],
+ [:TkDO, TkKW, "do", EXPR_BEG],
+ [:TkRETURN, TkKW, "return", EXPR_MID],
+ [:TkYIELD, TkKW, "yield", EXPR_END],
+ [:TkSUPER, TkKW, "super", EXPR_END],
+ [:TkSELF, TkKW, "self", EXPR_END],
+ [:TkNIL, TkKW, "nil", EXPR_END],
+ [:TkTRUE, TkKW, "true", EXPR_END],
+ [:TkFALSE, TkKW, "false", EXPR_END],
+ [:TkAND, TkKW, "and", EXPR_BEG],
+ [:TkOR, TkKW, "or", EXPR_BEG],
+ [:TkNOT, TkKW, "not", EXPR_BEG],
+ [:TkIF_MOD, TkKW],
+ [:TkUNLESS_MOD, TkKW],
+ [:TkWHILE_MOD, TkKW],
+ [:TkUNTIL_MOD, TkKW],
+ [:TkALIAS, TkKW, "alias", EXPR_FNAME],
+ [:TkDEFINED, TkKW, "defined?", EXPR_END],
+ [:TklBEGIN, TkKW, "BEGIN", EXPR_END],
+ [:TklEND, TkKW, "END", EXPR_END],
+ [:Tk__LINE__, TkKW, "__LINE__", EXPR_END],
+ [:Tk__FILE__, TkKW, "__FILE__", EXPR_END],
+
+ [:TkIDENTIFIER, TkId],
+ [:TkFID, TkId],
+ [:TkGVAR, TkId],
+ [:TkIVAR, TkId],
+ [:TkCONSTANT, TkId],
+
+ [:TkINTEGER, TkVal],
+ [:TkFLOAT, TkVal],
+ [:TkSTRING, TkVal],
+ [:TkXSTRING, TkVal],
+ [:TkREGEXP, TkVal],
+ [:TkCOMMENT, TkVal],
+
+ [:TkDSTRING, TkNode],
+ [:TkDXSTRING, TkNode],
+ [:TkDREGEXP, TkNode],
+ [:TkNTH_REF, TkId],
+ [:TkBACK_REF, TkId],
+
+ [:TkUPLUS, TkOp, "+@"],
+ [:TkUMINUS, TkOp, "-@"],
+ [:TkPOW, TkOp, "**"],
+ [:TkCMP, TkOp, "<=>"],
+ [:TkEQ, TkOp, "=="],
+ [:TkEQQ, TkOp, "==="],
+ [:TkNEQ, TkOp, "!="],
+ [:TkGEQ, TkOp, ">="],
+ [:TkLEQ, TkOp, "<="],
+ [:TkANDOP, TkOp, "&&"],
+ [:TkOROP, TkOp, "||"],
+ [:TkMATCH, TkOp, "=~"],
+ [:TkNMATCH, TkOp, "!~"],
+ [:TkDOT2, TkOp, ".."],
+ [:TkDOT3, TkOp, "..."],
+ [:TkAREF, TkOp, "[]"],
+ [:TkASET, TkOp, "[]="],
+ [:TkLSHFT, TkOp, "<<"],
+ [:TkRSHFT, TkOp, ">>"],
+ [:TkCOLON2, TkOp],
+ [:TkCOLON3, TkOp],
+# [:OPASGN, TkOp], # +=, -= etc. #
+ [:TkASSOC, TkOp, "=>"],
+ [:TkQUESTION, TkOp, "?"], #?
+ [:TkCOLON, TkOp, ":"], #:
+
+ [:TkfLPAREN], # func( #
+ [:TkfLBRACK], # func[ #
+ [:TkfLBRACE], # func{ #
+ [:TkSTAR], # *arg
+ [:TkAMPER], # &arg #
+ [:TkSYMBOL, TkId], # :SYMBOL
+ [:TkSYMBEG, TkId],
+ [:TkGT, TkOp, ">"],
+ [:TkLT, TkOp, "<"],
+ [:TkPLUS, TkOp, "+"],
+ [:TkMINUS, TkOp, "-"],
+ [:TkMULT, TkOp, "*"],
+ [:TkDIV, TkOp, "/"],
+ [:TkMOD, TkOp, "%"],
+ [:TkBITOR, TkOp, "|"],
+ [:TkBITXOR, TkOp, "^"],
+ [:TkBITAND, TkOp, "&"],
+ [:TkBITNOT, TkOp, "~"],
+ [:TkNOTOP, TkOp, "!"],
+
+ [:TkBACKQUOTE, TkOp, "`"],
+
+ [:TkASSIGN, Token, "="],
+ [:TkDOT, Token, "."],
+ [:TkLPAREN, Token, "("], #(exp)
+ [:TkLBRACK, Token, "["], #[arry]
+ [:TkLBRACE, Token, "{"], #{hash}
+ [:TkRPAREN, Token, ")"],
+ [:TkRBRACK, Token, "]"],
+ [:TkRBRACE, Token, "}"],
+ [:TkCOMMA, Token, ","],
+ [:TkSEMICOLON, Token, ";"],
+
+ [:TkRD_COMMENT],
+ [:TkSPACE],
+ [:TkNL],
+ [:TkEND_OF_SCRIPT],
+
+ [:TkBACKSLASH, TkUnknownChar, "\\"],
+ [:TkAT, TkUnknownChar, "@"],
+ [:TkDOLLAR, TkUnknownChar, "\$"], #"
+ ]
+
+ # {reading => token_class}
+ # {reading => [token_class, *opt]}
+ TkReading2Token = {}
+ TkSymbol2Token = {}
+
+ def self.def_token(token_n, super_token = Token, reading = nil, *opts)
+ token_n = token_n.id2name unless String === token_n
+
+ fail AlreadyDefinedToken, token_n if const_defined?(token_n)
+
+ token_c = Class.new super_token
+ const_set token_n, token_c
+# token_c.inspect
+
+ if reading
+ if TkReading2Token[reading]
+ fail TkReading2TokenDuplicateError, token_n, reading
+ end
+ if opts.empty?
+ TkReading2Token[reading] = [token_c]
+ else
+ TkReading2Token[reading] = [token_c].concat(opts)
+ end
+ end
+ TkSymbol2Token[token_n.intern] = token_c
+
+ if token_c <= TkOp
+ token_c.class_eval %{
+ def self.op_name; "#{reading}"; end
+ }
+ end
+ end
+
+ for defs in TokenDefinitions
+ def_token(*defs)
+ end
+
+ NEWLINE_TOKEN = TkNL.new(0,0)
+ NEWLINE_TOKEN.set_text("\n")
+
+end
+
+##
+# Lexical analyzer for Ruby source
+
+class RDoc::RubyLex
+
+ ##
+ # Read an input stream character by character. We allow for unlimited
+ # ungetting of characters just read.
+ #
+ # We simplify the implementation greatly by reading the entire input
+ # into a buffer initially, and then simply traversing it using
+ # pointers.
+ #
+ # We also have to allow for the <i>here document diversion</i>. This
+ # little gem comes about when the lexer encounters a here
+ # document. At this point we effectively need to split the input
+ # stream into two parts: one to read the body of the here document,
+ # the other to read the rest of the input line where the here
+ # document was initially encountered. For example, we might have
+ #
+ # do_something(<<-A, <<-B)
+ # stuff
+ # for
+ # A
+ # stuff
+ # for
+ # B
+ #
+ # When the lexer encounters the <<A, it reads until the end of the
+ # line, and keeps it around for later. It then reads the body of the
+ # here document. Once complete, it needs to read the rest of the
+ # original line, but then skip the here document body.
+ #
+
+ class BufferedReader
+
+ attr_reader :line_num
+
+ def initialize(content, options)
+ @options = options
+
+ if /\t/ =~ content
+ tab_width = @options.tab_width
+ content = content.split(/\n/).map do |line|
+ 1 while line.gsub!(/\t+/) { ' ' * (tab_width*$&.length - $`.length % tab_width)} && $~ #`
+ line
+ end .join("\n")
+ end
+ @content = content
+ @content << "\n" unless @content[-1,1] == "\n"
+ @size = @content.size
+ @offset = 0
+ @hwm = 0
+ @line_num = 1
+ @read_back_offset = 0
+ @last_newline = 0
+ @newline_pending = false
+ end
+
+ def column
+ @offset - @last_newline
+ end
+
+ def getc
+ return nil if @offset >= @size
+ ch = @content[@offset, 1]
+
+ @offset += 1
+ @hwm = @offset if @hwm < @offset
+
+ if @newline_pending
+ @line_num += 1
+ @last_newline = @offset - 1
+ @newline_pending = false
+ end
+
+ if ch == "\n"
+ @newline_pending = true
+ end
+ ch
+ end
+
+ def getc_already_read
+ getc
+ end
+
+ def ungetc(ch)
+ raise "unget past beginning of file" if @offset <= 0
+ @offset -= 1
+ if @content[@offset] == ?\n
+ @newline_pending = false
+ end
+ end
+
+ def get_read
+ res = @content[@read_back_offset...@offset]
+ @read_back_offset = @offset
+ res
+ end
+
+ def peek(at)
+ pos = @offset + at
+ if pos >= @size
+ nil
+ else
+ @content[pos, 1]
+ end
+ end
+
+ def peek_equal(str)
+ @content[@offset, str.length] == str
+ end
+
+ def divert_read_from(reserve)
+ @content[@offset, 0] = reserve
+ @size = @content.size
+ end
+ end
+
+ # end of nested class BufferedReader
+
+ extend Exception2MessageMapper
+ def_exception(:AlreadyDefinedToken, "Already defined token(%s)")
+ def_exception(:TkReading2TokenNoKey, "key nothing(key='%s')")
+ def_exception(:TkSymbol2TokenNoKey, "key nothing(key='%s')")
+ def_exception(:TkReading2TokenDuplicateError,
+ "key duplicate(token_n='%s', key='%s')")
+ def_exception(:SyntaxError, "%s")
+
+ include RDoc::RubyToken
+ include IRB
+
+ attr_reader :continue
+ attr_reader :lex_state
+
+ def self.debug?
+ false
+ end
+
+ def initialize(content, options)
+ lex_init
+
+ @options = options
+
+ @reader = BufferedReader.new content, @options
+
+ @exp_line_no = @line_no = 1
+ @base_char_no = 0
+ @indent = 0
+
+ @ltype = nil
+ @quoted = nil
+ @lex_state = EXPR_BEG
+ @space_seen = false
+
+ @continue = false
+ @line = ""
+
+ @skip_space = false
+ @read_auto_clean_up = false
+ @exception_on_syntax_error = true
+ end
+
+ attr_accessor :skip_space
+ attr_accessor :read_auto_clean_up
+ attr_accessor :exception_on_syntax_error
+ attr_reader :indent
+
+ # io functions
+ def line_no
+ @reader.line_num
+ end
+
+ def char_no
+ @reader.column
+ end
+
+ def get_read
+ @reader.get_read
+ end
+
+ def getc
+ @reader.getc
+ end
+
+ def getc_of_rests
+ @reader.getc_already_read
+ end
+
+ def gets
+ c = getc or return
+ l = ""
+ begin
+ l.concat c unless c == "\r"
+ break if c == "\n"
+ end while c = getc
+ l
+ end
+
+
+ def ungetc(c = nil)
+ @reader.ungetc(c)
+ end
+
+ def peek_equal?(str)
+ @reader.peek_equal(str)
+ end
+
+ def peek(i = 0)
+ @reader.peek(i)
+ end
+
+ def lex
+ until (TkNL === (tk = token) or TkEND_OF_SCRIPT === tk) and
+ not @continue or tk.nil?
+ end
+
+ line = get_read
+
+ if line == "" and TkEND_OF_SCRIPT === tk or tk.nil? then
+ nil
+ else
+ line
+ end
+ end
+
+ def token
+ set_token_position(line_no, char_no)
+ begin
+ begin
+ tk = @OP.match(self)
+ @space_seen = TkSPACE === tk
+ rescue SyntaxError => e
+ raise RDoc::Error, "syntax error: #{e.message}" if
+ @exception_on_syntax_error
+
+ tk = TkError.new(line_no, char_no)
+ end
+ end while @skip_space and TkSPACE === tk
+ if @read_auto_clean_up
+ get_read
+ end
+# throw :eof unless tk
+ tk
+ end
+
+ ENINDENT_CLAUSE = [
+ "case", "class", "def", "do", "for", "if",
+ "module", "unless", "until", "while", "begin" #, "when"
+ ]
+ DEINDENT_CLAUSE = ["end" #, "when"
+ ]
+
+ PERCENT_LTYPE = {
+ "q" => "\'",
+ "Q" => "\"",
+ "x" => "\`",
+ "r" => "/",
+ "w" => "]"
+ }
+
+ PERCENT_PAREN = {
+ "{" => "}",
+ "[" => "]",
+ "<" => ">",
+ "(" => ")"
+ }
+
+ Ltype2Token = {
+ "\'" => TkSTRING,
+ "\"" => TkSTRING,
+ "\`" => TkXSTRING,
+ "/" => TkREGEXP,
+ "]" => TkDSTRING
+ }
+ Ltype2Token.default = TkSTRING
+
+ DLtype2Token = {
+ "\"" => TkDSTRING,
+ "\`" => TkDXSTRING,
+ "/" => TkDREGEXP,
+ }
+
+ def lex_init()
+ @OP = IRB::SLex.new
+ @OP.def_rules("\0", "\004", "\032") do |chars, io|
+ Token(TkEND_OF_SCRIPT).set_text(chars)
+ end
+
+ @OP.def_rules(" ", "\t", "\f", "\r", "\13") do |chars, io|
+ @space_seen = TRUE
+ while (ch = getc) =~ /[ \t\f\r\13]/
+ chars << ch
+ end
+ ungetc
+ Token(TkSPACE).set_text(chars)
+ end
+
+ @OP.def_rule("#") do
+ |op, io|
+ identify_comment
+ end
+
+ @OP.def_rule("=begin", proc{@prev_char_no == 0 && peek(0) =~ /\s/}) do
+ |op, io|
+ str = op
+ @ltype = "="
+
+
+ begin
+ line = ""
+ begin
+ ch = getc
+ line << ch
+ end until ch == "\n"
+ str << line
+ end until line =~ /^=end/
+
+ ungetc
+
+ @ltype = nil
+
+ if str =~ /\A=begin\s+rdoc/i
+ str.sub!(/\A=begin.*\n/, '')
+ str.sub!(/^=end.*/m, '')
+ Token(TkCOMMENT).set_text(str)
+ else
+ Token(TkRD_COMMENT)#.set_text(str)
+ end
+ end
+
+ @OP.def_rule("\n") do
+ print "\\n\n" if RDoc::RubyLex.debug?
+ case @lex_state
+ when EXPR_BEG, EXPR_FNAME, EXPR_DOT
+ @continue = TRUE
+ else
+ @continue = FALSE
+ @lex_state = EXPR_BEG
+ end
+ Token(TkNL).set_text("\n")
+ end
+
+ @OP.def_rules("*", "**",
+ "!", "!=", "!~",
+ "=", "==", "===",
+ "=~", "<=>",
+ "<", "<=",
+ ">", ">=", ">>") do
+ |op, io|
+ @lex_state = EXPR_BEG
+ Token(op).set_text(op)
+ end
+
+ @OP.def_rules("<<") do
+ |op, io|
+ tk = nil
+ if @lex_state != EXPR_END && @lex_state != EXPR_CLASS &&
+ (@lex_state != EXPR_ARG || @space_seen)
+ c = peek(0)
+ if /[-\w_\"\'\`]/ =~ c
+ tk = identify_here_document
+ end
+ end
+ if !tk
+ @lex_state = EXPR_BEG
+ tk = Token(op).set_text(op)
+ end
+ tk
+ end
+
+ @OP.def_rules("'", '"') do
+ |op, io|
+ identify_string(op)
+ end
+
+ @OP.def_rules("`") do
+ |op, io|
+ if @lex_state == EXPR_FNAME
+ Token(op).set_text(op)
+ else
+ identify_string(op)
+ end
+ end
+
+ @OP.def_rules('?') do
+ |op, io|
+ if @lex_state == EXPR_END
+ @lex_state = EXPR_BEG
+ Token(TkQUESTION).set_text(op)
+ else
+ ch = getc
+ if @lex_state == EXPR_ARG && ch !~ /\s/
+ ungetc
+ @lex_state = EXPR_BEG
+ Token(TkQUESTION).set_text(op)
+ else
+ str = op
+ str << ch
+ if (ch == '\\') #'
+ str << read_escape
+ end
+ @lex_state = EXPR_END
+ Token(TkINTEGER).set_text(str)
+ end
+ end
+ end
+
+ @OP.def_rules("&", "&&", "|", "||") do
+ |op, io|
+ @lex_state = EXPR_BEG
+ Token(op).set_text(op)
+ end
+
+ @OP.def_rules("+=", "-=", "*=", "**=",
+ "&=", "|=", "^=", "<<=", ">>=", "||=", "&&=") do
+ |op, io|
+ @lex_state = EXPR_BEG
+ op =~ /^(.*)=$/
+ Token(TkOPASGN, $1).set_text(op)
+ end
+
+ @OP.def_rule("+@", proc{@lex_state == EXPR_FNAME}) do |op, io|
+ Token(TkUPLUS).set_text(op)
+ end
+
+ @OP.def_rule("-@", proc{@lex_state == EXPR_FNAME}) do |op, io|
+ Token(TkUMINUS).set_text(op)
+ end
+
+ @OP.def_rules("+", "-") do
+ |op, io|
+ catch(:RET) do
+ if @lex_state == EXPR_ARG
+ if @space_seen and peek(0) =~ /[0-9]/
+ throw :RET, identify_number(op)
+ else
+ @lex_state = EXPR_BEG
+ end
+ elsif @lex_state != EXPR_END and peek(0) =~ /[0-9]/
+ throw :RET, identify_number(op)
+ else
+ @lex_state = EXPR_BEG
+ end
+ Token(op).set_text(op)
+ end
+ end
+
+ @OP.def_rule(".") do
+ @lex_state = EXPR_BEG
+ if peek(0) =~ /[0-9]/
+ ungetc
+ identify_number("")
+ else
+ # for obj.if
+ @lex_state = EXPR_DOT
+ Token(TkDOT).set_text(".")
+ end
+ end
+
+ @OP.def_rules("..", "...") do
+ |op, io|
+ @lex_state = EXPR_BEG
+ Token(op).set_text(op)
+ end
+
+ lex_int2
+ end
+
+ def lex_int2
+ @OP.def_rules("]", "}", ")") do
+ |op, io|
+ @lex_state = EXPR_END
+ @indent -= 1
+ Token(op).set_text(op)
+ end
+
+ @OP.def_rule(":") do
+ if @lex_state == EXPR_END || peek(0) =~ /\s/
+ @lex_state = EXPR_BEG
+ tk = Token(TkCOLON)
+ else
+ @lex_state = EXPR_FNAME
+ tk = Token(TkSYMBEG)
+ end
+ tk.set_text(":")
+ end
+
+ @OP.def_rule("::") do
+ if @lex_state == EXPR_BEG or @lex_state == EXPR_ARG && @space_seen
+ @lex_state = EXPR_BEG
+ tk = Token(TkCOLON3)
+ else
+ @lex_state = EXPR_DOT
+ tk = Token(TkCOLON2)
+ end
+ tk.set_text("::")
+ end
+
+ @OP.def_rule("/") do
+ |op, io|
+ if @lex_state == EXPR_BEG || @lex_state == EXPR_MID
+ identify_string(op)
+ elsif peek(0) == '='
+ getc
+ @lex_state = EXPR_BEG
+ Token(TkOPASGN, :/).set_text("/=") #")
+ elsif @lex_state == EXPR_ARG and @space_seen and peek(0) !~ /\s/
+ identify_string(op)
+ else
+ @lex_state = EXPR_BEG
+ Token("/").set_text(op)
+ end
+ end
+
+ @OP.def_rules("^") do
+ @lex_state = EXPR_BEG
+ Token("^").set_text("^")
+ end
+
+ @OP.def_rules(",", ";") do
+ |op, io|
+ @lex_state = EXPR_BEG
+ Token(op).set_text(op)
+ end
+
+ @OP.def_rule("~") do
+ @lex_state = EXPR_BEG
+ Token("~").set_text("~")
+ end
+
+ @OP.def_rule("~@", proc{@lex_state = EXPR_FNAME}) do
+ @lex_state = EXPR_BEG
+ Token("~").set_text("~@")
+ end
+
+ @OP.def_rule("(") do
+ @indent += 1
+ if @lex_state == EXPR_BEG || @lex_state == EXPR_MID
+ @lex_state = EXPR_BEG
+ tk = Token(TkfLPAREN)
+ else
+ @lex_state = EXPR_BEG
+ tk = Token(TkLPAREN)
+ end
+ tk.set_text("(")
+ end
+
+ @OP.def_rule("[]", proc{@lex_state == EXPR_FNAME}) do
+ Token("[]").set_text("[]")
+ end
+
+ @OP.def_rule("[]=", proc{@lex_state == EXPR_FNAME}) do
+ Token("[]=").set_text("[]=")
+ end
+
+ @OP.def_rule("[") do
+ @indent += 1
+ if @lex_state == EXPR_FNAME
+ t = Token(TkfLBRACK)
+ else
+ if @lex_state == EXPR_BEG || @lex_state == EXPR_MID
+ t = Token(TkLBRACK)
+ elsif @lex_state == EXPR_ARG && @space_seen
+ t = Token(TkLBRACK)
+ else
+ t = Token(TkfLBRACK)
+ end
+ @lex_state = EXPR_BEG
+ end
+ t.set_text("[")
+ end
+
+ @OP.def_rule("{") do
+ @indent += 1
+ if @lex_state != EXPR_END && @lex_state != EXPR_ARG
+ t = Token(TkLBRACE)
+ else
+ t = Token(TkfLBRACE)
+ end
+ @lex_state = EXPR_BEG
+ t.set_text("{")
+ end
+
+ @OP.def_rule('\\') do #'
+ if getc == "\n"
+ @space_seen = true
+ @continue = true
+ Token(TkSPACE).set_text("\\\n")
+ else
+ ungetc
+ Token("\\").set_text("\\") #"
+ end
+ end
+
+ @OP.def_rule('%') do
+ |op, io|
+ if @lex_state == EXPR_BEG || @lex_state == EXPR_MID
+ identify_quotation('%')
+ elsif peek(0) == '='
+ getc
+ Token(TkOPASGN, "%").set_text("%=")
+ elsif @lex_state == EXPR_ARG and @space_seen and peek(0) !~ /\s/
+ identify_quotation('%')
+ else
+ @lex_state = EXPR_BEG
+ Token("%").set_text("%")
+ end
+ end
+
+ @OP.def_rule('$') do #'
+ identify_gvar
+ end
+
+ @OP.def_rule('@') do
+ if peek(0) =~ /[@\w_]/
+ ungetc
+ identify_identifier
+ else
+ Token("@").set_text("@")
+ end
+ end
+
+ @OP.def_rule("__END__", proc{@prev_char_no == 0 && peek(0) =~ /[\r\n]/}) do
+ throw :eof
+ end
+
+ @OP.def_rule("") do
+ |op, io|
+ printf "MATCH: start %s: %s\n", op, io.inspect if RDoc::RubyLex.debug?
+ if peek(0) =~ /[0-9]/
+ t = identify_number("")
+ elsif peek(0) =~ /[\w_]/
+ t = identify_identifier
+ end
+ printf "MATCH: end %s: %s\n", op, io.inspect if RDoc::RubyLex.debug?
+ t
+ end
+ end
+
+ def identify_gvar
+ @lex_state = EXPR_END
+ str = "$"
+
+ tk = case ch = getc
+ when /[~_*$?!@\/\\;,=:<>".]/ #"
+ str << ch
+ Token(TkGVAR, str)
+
+ when "-"
+ str << "-" << getc
+ Token(TkGVAR, str)
+
+ when "&", "`", "'", "+"
+ str << ch
+ Token(TkBACK_REF, str)
+
+ when /[1-9]/
+ str << ch
+ while (ch = getc) =~ /[0-9]/
+ str << ch
+ end
+ ungetc
+ Token(TkNTH_REF)
+ when /\w/
+ ungetc
+ ungetc
+ return identify_identifier
+ else
+ ungetc
+ Token("$")
+ end
+ tk.set_text(str)
+ end
+
+ def identify_identifier
+ token = ""
+ token.concat getc if peek(0) =~ /[$@]/
+ token.concat getc if peek(0) == "@"
+
+ while (ch = getc) =~ /\w|_/
+ print ":", ch, ":" if RDoc::RubyLex.debug?
+ token.concat ch
+ end
+ ungetc
+
+ if ch == "!" or ch == "?"
+ token.concat getc
+ end
+ # fix token
+
+ # $stderr.puts "identifier - #{token}, state = #@lex_state"
+
+ case token
+ when /^\$/
+ return Token(TkGVAR, token).set_text(token)
+ when /^\@/
+ @lex_state = EXPR_END
+ return Token(TkIVAR, token).set_text(token)
+ end
+
+ if @lex_state != EXPR_DOT
+ print token, "\n" if RDoc::RubyLex.debug?
+
+ token_c, *trans = TkReading2Token[token]
+ if token_c
+ # reserved word?
+
+ if (@lex_state != EXPR_BEG &&
+ @lex_state != EXPR_FNAME &&
+ trans[1])
+ # modifiers
+ token_c = TkSymbol2Token[trans[1]]
+ @lex_state = trans[0]
+ else
+ if @lex_state != EXPR_FNAME
+ if ENINDENT_CLAUSE.include?(token)
+ @indent += 1
+ elsif DEINDENT_CLAUSE.include?(token)
+ @indent -= 1
+ end
+ @lex_state = trans[0]
+ else
+ @lex_state = EXPR_END
+ end
+ end
+ return Token(token_c, token).set_text(token)
+ end
+ end
+
+ if @lex_state == EXPR_FNAME
+ @lex_state = EXPR_END
+ if peek(0) == '='
+ token.concat getc
+ end
+ elsif @lex_state == EXPR_BEG || @lex_state == EXPR_DOT
+ @lex_state = EXPR_ARG
+ else
+ @lex_state = EXPR_END
+ end
+
+ if token[0, 1] =~ /[A-Z]/
+ return Token(TkCONSTANT, token).set_text(token)
+ elsif token[token.size - 1, 1] =~ /[!?]/
+ return Token(TkFID, token).set_text(token)
+ else
+ return Token(TkIDENTIFIER, token).set_text(token)
+ end
+ end
+
+ def identify_here_document
+ ch = getc
+ if ch == "-"
+ ch = getc
+ indent = true
+ end
+ if /['"`]/ =~ ch # '
+ lt = ch
+ quoted = ""
+ while (c = getc) && c != lt
+ quoted.concat c
+ end
+ else
+ lt = '"'
+ quoted = ch.dup
+ while (c = getc) && c =~ /\w/
+ quoted.concat c
+ end
+ ungetc
+ end
+
+ ltback, @ltype = @ltype, lt
+ reserve = ""
+
+ while ch = getc
+ reserve << ch
+ if ch == "\\" #"
+ ch = getc
+ reserve << ch
+ elsif ch == "\n"
+ break
+ end
+ end
+
+ str = ""
+ while (l = gets)
+ l.chomp!
+ l.strip! if indent
+ break if l == quoted
+ str << l.chomp << "\n"
+ end
+
+ @reader.divert_read_from(reserve)
+
+ @ltype = ltback
+ @lex_state = EXPR_END
+ Token(Ltype2Token[lt], str).set_text(str.dump)
+ end
+
+ def identify_quotation(initial_char)
+ ch = getc
+ if lt = PERCENT_LTYPE[ch]
+ initial_char += ch
+ ch = getc
+ elsif ch =~ /\W/
+ lt = "\""
+ else
+ fail SyntaxError, "unknown type of %string ('#{ch}')"
+ end
+# if ch !~ /\W/
+# ungetc
+# next
+# end
+ #@ltype = lt
+ @quoted = ch unless @quoted = PERCENT_PAREN[ch]
+ identify_string(lt, @quoted, ch, initial_char)
+ end
+
+ def identify_number(start)
+ str = start.dup
+
+ if start == "+" or start == "-" or start == ""
+ start = getc
+ str << start
+ end
+
+ @lex_state = EXPR_END
+
+ if start == "0"
+ if peek(0) == "x"
+ ch = getc
+ str << ch
+ match = /[0-9a-f_]/
+ else
+ match = /[0-7_]/
+ end
+ while ch = getc
+ if ch !~ match
+ ungetc
+ break
+ else
+ str << ch
+ end
+ end
+ return Token(TkINTEGER).set_text(str)
+ end
+
+ type = TkINTEGER
+ allow_point = TRUE
+ allow_e = TRUE
+ while ch = getc
+ case ch
+ when /[0-9_]/
+ str << ch
+
+ when allow_point && "."
+ type = TkFLOAT
+ if peek(0) !~ /[0-9]/
+ ungetc
+ break
+ end
+ str << ch
+ allow_point = false
+
+ when allow_e && "e", allow_e && "E"
+ str << ch
+ type = TkFLOAT
+ if peek(0) =~ /[+-]/
+ str << getc
+ end
+ allow_e = false
+ allow_point = false
+ else
+ ungetc
+ break
+ end
+ end
+ Token(type).set_text(str)
+ end
+
+ def identify_string(ltype, quoted = ltype, opener=nil, initial_char = nil)
+ @ltype = ltype
+ @quoted = quoted
+ subtype = nil
+
+ str = ""
+ str << initial_char if initial_char
+ str << (opener||quoted)
+
+ nest = 0
+ begin
+ while ch = getc
+ str << ch
+ if @quoted == ch
+ if nest == 0
+ break
+ else
+ nest -= 1
+ end
+ elsif opener == ch
+ nest += 1
+ elsif @ltype != "'" && @ltype != "]" and ch == "#"
+ ch = getc
+ if ch == "{"
+ subtype = true
+ str << ch << skip_inner_expression
+ else
+ ungetc(ch)
+ end
+ elsif ch == '\\' #'
+ str << read_escape
+ end
+ end
+ if @ltype == "/"
+ if peek(0) =~ /i|o|n|e|s/
+ str << getc
+ end
+ end
+ if subtype
+ Token(DLtype2Token[ltype], str)
+ else
+ Token(Ltype2Token[ltype], str)
+ end.set_text(str)
+ ensure
+ @ltype = nil
+ @quoted = nil
+ @lex_state = EXPR_END
+ end
+ end
+
+ def skip_inner_expression
+ res = ""
+ nest = 0
+ while (ch = getc)
+ res << ch
+ if ch == '}'
+ break if nest.zero?
+ nest -= 1
+ elsif ch == '{'
+ nest += 1
+ end
+ end
+ res
+ end
+
+ def identify_comment
+ @ltype = "#"
+ comment = "#"
+ while ch = getc
+ if ch == "\\"
+ ch = getc
+ if ch == "\n"
+ ch = " "
+ else
+ comment << "\\"
+ end
+ else
+ if ch == "\n"
+ @ltype = nil
+ ungetc
+ break
+ end
+ end
+ comment << ch
+ end
+ return Token(TkCOMMENT).set_text(comment)
+ end
+
+ def read_escape
+ res = ""
+ case ch = getc
+ when /[0-7]/
+ ungetc ch
+ 3.times do
+ case ch = getc
+ when /[0-7]/
+ when nil
+ break
+ else
+ ungetc
+ break
+ end
+ res << ch
+ end
+
+ when "x"
+ res << ch
+ 2.times do
+ case ch = getc
+ when /[0-9a-fA-F]/
+ when nil
+ break
+ else
+ ungetc
+ break
+ end
+ res << ch
+ end
+
+ when "M"
+ res << ch
+ if (ch = getc) != '-'
+ ungetc
+ else
+ res << ch
+ if (ch = getc) == "\\" #"
+ res << ch
+ res << read_escape
+ else
+ res << ch
+ end
+ end
+
+ when "C", "c" #, "^"
+ res << ch
+ if ch == "C" and (ch = getc) != "-"
+ ungetc
+ else
+ res << ch
+ if (ch = getc) == "\\" #"
+ res << ch
+ res << read_escape
+ else
+ res << ch
+ end
+ end
+ else
+ res << ch
+ end
+ res
+ end
+end
+
+##
+# Extracts code elements from a source file returning a TopLevel object
+# containing the constituent file elements.
+#
+# This file is based on rtags
+#
+# RubyParser understands how to document:
+# * classes
+# * modules
+# * methods
+# * constants
+# * aliases
+# * private, public, protected
+# * private_class_function, public_class_function
+# * module_function
+# * attr, attr_reader, attr_writer, attr_accessor
+# * extra accessors given on the command line
+# * metaprogrammed methods
+# * require
+# * include
+#
+# == Method Arguments
+#
+#--
+# NOTE: I don't think this works, needs tests, remove the paragraph following
+# this block when known to work
+#
+# The parser extracts the arguments from the method definition. You can
+# override this with a custom argument definition using the :args: directive:
+#
+# ##
+# # This method tries over and over until it is tired
+#
+# def go_go_go(thing_to_try, tries = 10) # :args: thing_to_try
+# puts thing_to_try
+# go_go_go thing_to_try, tries - 1
+# end
+#
+# If you have a more-complex set of overrides you can use the :call-seq:
+# directive:
+#++
+#
+# The parser extracts the arguments from the method definition. You can
+# override this with a custom argument definition using the :call-seq:
+# directive:
+#
+# ##
+# # This method can be called with a range or an offset and length
+# #
+# # :call-seq:
+# # my_method(Range)
+# # my_method(offset, length)
+#
+# def my_method(*args)
+# end
+#
+# The parser extracts +yield+ expressions from method bodies to gather the
+# yielded argument names. If your method manually calls a block instead of
+# yielding or you want to override the discovered argument names use
+# the :yields: directive:
+#
+# ##
+# # My method is awesome
+#
+# def my_method(&block) # :yields: happy, times
+# block.call 1, 2
+# end
+#
+# == Metaprogrammed Methods
+#
+# To pick up a metaprogrammed method, the parser looks for a comment starting
+# with '##' before an identifier:
+#
+# ##
+# # This is a meta-programmed method!
+#
+# add_my_method :meta_method, :arg1, :arg2
+#
+# The parser looks at the token after the identifier to determine the name, in
+# this example, :meta_method. If a name cannot be found, a warning is printed
+# and 'unknown is used.
+#
+# You can force the name of a method using the :method: directive:
+#
+# ##
+# # :method: woo_hoo!
+#
+# By default, meta-methods are instance methods. To indicate that a method is
+# a singleton method instead use the :singleton-method: directive:
+#
+# ##
+# # :singleton-method:
+#
+# You can also use the :singleton-method: directive with a name:
+#
+# ##
+# # :singleton-method: woo_hoo!
+#
+# Additionally you can mark a method as an attribute by
+# using :attr:, :attr_reader:, :attr_writer: or :attr_accessor:. Just like
+# for :method:, the name is optional.
+#
+# ##
+# # :attr_reader: my_attr_name
+#
+# == Hidden methods and attributes
+#
+# You can provide documentation for methods that don't appear using
+# the :method:, :singleton-method: and :attr: directives:
+#
+# ##
+# # :attr_writer: ghost_writer
+# # There is an attribute here, but you can't see it!
+#
+# ##
+# # :method: ghost_method
+# # There is a method here, but you can't see it!
+#
+# ##
+# # this is a comment for a regular method
+#
+# def regular_method() end
+#
+# Note that by default, the :method: directive will be ignored if there is a
+# standard rdocable item following it.
+
+class RDoc::Parser::Ruby < RDoc::Parser
+
+ parse_files_matching(/\.rbw?$/)
+
+ include RDoc::RubyToken
+ include RDoc::TokenStream
+
+ NORMAL = "::"
+ SINGLE = "<<"
+
+ def initialize(top_level, file_name, content, options, stats)
+ super
+
+ @size = 0
+ @token_listeners = nil
+ @scanner = RDoc::RubyLex.new content, @options
+ @scanner.exception_on_syntax_error = false
+
+ reset
+ end
+
+ def add_token_listener(obj)
+ @token_listeners ||= []
+ @token_listeners << obj
+ end
+
+ ##
+ # Look for the first comment in a file that isn't a shebang line.
+
+ def collect_first_comment
+ skip_tkspace
+ res = ''
+ first_line = true
+
+ tk = get_tk
+
+ while TkCOMMENT === tk
+ if first_line and tk.text =~ /\A#!/ then
+ skip_tkspace
+ tk = get_tk
+ elsif first_line and tk.text =~ /\A#\s*-\*-/ then
+ first_line = false
+ skip_tkspace
+ tk = get_tk
+ else
+ first_line = false
+ res << tk.text << "\n"
+ tk = get_tk
+
+ if TkNL === tk then
+ skip_tkspace false
+ tk = get_tk
+ end
+ end
+ end
+
+ unget_tk tk
+
+ res
+ end
+
+ def error(msg)
+ msg = make_message msg
+ $stderr.puts msg
+ exit(1)
+ end
+
+ ##
+ # Look for a 'call-seq' in the comment, and override the normal parameter
+ # stuff
+
+ def extract_call_seq(comment, meth)
+ if comment.sub!(/:?call-seq:(.*?)^\s*\#?\s*$/m, '') then
+ seq = $1
+ seq.gsub!(/^\s*\#\s*/, '')
+ meth.call_seq = seq
+ end
+
+ meth
+ end
+
+ def get_bool
+ skip_tkspace
+ tk = get_tk
+ case tk
+ when TkTRUE
+ true
+ when TkFALSE, TkNIL
+ false
+ else
+ unget_tk tk
+ true
+ end
+ end
+
+ ##
+ # Look for the name of a class of module (optionally with a leading :: or
+ # with :: separated named) and return the ultimate name and container
+
+ def get_class_or_module(container)
+ skip_tkspace
+ name_t = get_tk
+
+ # class ::A -> A is in the top level
+ if TkCOLON2 === name_t then
+ name_t = get_tk
+ container = @top_level
+ end
+
+ skip_tkspace(false)
+
+ while TkCOLON2 === peek_tk do
+ prev_container = container
+ container = container.find_module_named(name_t.name)
+ if !container
+# warn("Couldn't find module #{name_t.name}")
+ container = prev_container.add_module RDoc::NormalModule, name_t.name
+ end
+ get_tk
+ name_t = get_tk
+ end
+ skip_tkspace(false)
+ return [container, name_t]
+ end
+
+ ##
+ # Return a superclass, which can be either a constant of an expression
+
+ def get_class_specification
+ tk = get_tk
+ return "self" if TkSELF === tk
+
+ res = ""
+ while TkCOLON2 === tk or TkCOLON3 === tk or TkCONSTANT === tk do
+ res += tk.text
+ tk = get_tk
+ end
+
+ unget_tk(tk)
+ skip_tkspace(false)
+
+ get_tkread # empty out read buffer
+
+ tk = get_tk
+
+ case tk
+ when TkNL, TkCOMMENT, TkSEMICOLON then
+ unget_tk(tk)
+ return res
+ end
+
+ res += parse_call_parameters(tk)
+ res
+ end
+
+ ##
+ # Parse a constant, which might be qualified by one or more class or module
+ # names
+
+ def get_constant
+ res = ""
+ skip_tkspace(false)
+ tk = get_tk
+
+ while TkCOLON2 === tk or TkCOLON3 === tk or TkCONSTANT === tk do
+ res += tk.text
+ tk = get_tk
+ end
+
+# if res.empty?
+# warn("Unexpected token #{tk} in constant")
+# end
+ unget_tk(tk)
+ res
+ end
+
+ ##
+ # Get a constant that may be surrounded by parens
+
+ def get_constant_with_optional_parens
+ skip_tkspace(false)
+ nest = 0
+ while TkLPAREN === (tk = peek_tk) or TkfLPAREN === tk do
+ get_tk
+ skip_tkspace(true)
+ nest += 1
+ end
+
+ name = get_constant
+
+ while nest > 0
+ skip_tkspace(true)
+ tk = get_tk
+ nest -= 1 if TkRPAREN === tk
+ end
+ name
+ end
+
+ def get_symbol_or_name
+ tk = get_tk
+ case tk
+ when TkSYMBOL
+ tk.text.sub(/^:/, '')
+ when TkId, TkOp
+ tk.name
+ when TkSTRING
+ tk.text
+ else
+ raise "Name or symbol expected (got #{tk})"
+ end
+ end
+
+ def get_tk
+ tk = nil
+ if @tokens.empty?
+ tk = @scanner.token
+ @read.push @scanner.get_read
+ puts "get_tk1 => #{tk.inspect}" if $TOKEN_DEBUG
+ else
+ @read.push @unget_read.shift
+ tk = @tokens.shift
+ puts "get_tk2 => #{tk.inspect}" if $TOKEN_DEBUG
+ end
+
+ if TkSYMBEG === tk then
+ set_token_position(tk.line_no, tk.char_no)
+ tk1 = get_tk
+ if TkId === tk1 or TkOp === tk1 or TkSTRING === tk1 or TkDSTRING === tk1 then
+ if tk1.respond_to?(:name)
+ tk = Token(TkSYMBOL).set_text(":" + tk1.name)
+ else
+ tk = Token(TkSYMBOL).set_text(":" + tk1.text)
+ end
+ # remove the identifier we just read (we're about to
+ # replace it with a symbol)
+ @token_listeners.each do |obj|
+ obj.pop_token
+ end if @token_listeners
+ else
+ warn("':' not followed by identifier or operator")
+ tk = tk1
+ end
+ end
+
+ # inform any listeners of our shiny new token
+ @token_listeners.each do |obj|
+ obj.add_token(tk)
+ end if @token_listeners
+
+ tk
+ end
+
+ def get_tkread
+ read = @read.join("")
+ @read = []
+ read
+ end
+
+ ##
+ # Look for directives in a normal comment block:
+ #
+ # #-- - don't display comment from this point forward
+ #
+ # This routine modifies it's parameter
+
+ def look_for_directives_in(context, comment)
+ preprocess = RDoc::Markup::PreProcess.new(@file_name,
+ @options.rdoc_include)
+
+ preprocess.handle(comment) do |directive, param|
+ case directive
+ when 'enddoc' then
+ throw :enddoc
+ when 'main' then
+ @options.main_page = param
+ ''
+ when 'method', 'singleton-method' then
+ false # ignore
+ when 'section' then
+ context.set_current_section(param, comment)
+ comment.replace ''
+ break
+ when 'startdoc' then
+ context.start_doc
+ context.force_documentation = true
+ ''
+ when 'stopdoc' then
+ context.stop_doc
+ ''
+ when 'title' then
+ @options.title = param
+ ''
+ else
+ warn "Unrecognized directive '#{directive}'"
+ false
+ end
+ end
+
+ remove_private_comments(comment)
+ end
+
+ def make_message(msg)
+ prefix = "\n" + @file_name + ":"
+ if @scanner
+ prefix << "#{@scanner.line_no}:#{@scanner.char_no}: "
+ end
+ return prefix + msg
+ end
+
+ ##
+ # Creates an RDoc::Attr for the name following +tk+, setting the comment to
+ # +comment+.
+
+ def parse_attr(context, single, tk, comment)
+ args = parse_symbol_arg 1
+ if args.size > 0
+ name = args[0]
+ rw = "R"
+ skip_tkspace(false)
+ tk = get_tk
+ if TkCOMMA === tk then
+ rw = "RW" if get_bool
+ else
+ unget_tk tk
+ end
+ att = RDoc::Attr.new get_tkread, name, rw, comment
+ read_documentation_modifiers att, RDoc::ATTR_MODIFIERS
+ if att.document_self
+ context.add_attribute(att)
+ end
+ else
+ warn("'attr' ignored - looks like a variable")
+ end
+ end
+
+ ##
+ # Creates an RDoc::Attr for each attribute listed after +tk+, setting the
+ # comment for each to +comment+.
+
+ def parse_attr_accessor(context, single, tk, comment)
+ args = parse_symbol_arg
+ read = get_tkread
+ rw = "?"
+
+ # TODO If nodoc is given, don't document any of them
+
+ tmp = RDoc::CodeObject.new
+ read_documentation_modifiers tmp, RDoc::ATTR_MODIFIERS
+ return unless tmp.document_self
+
+ case tk.name
+ when "attr_reader" then rw = "R"
+ when "attr_writer" then rw = "W"
+ when "attr_accessor" then rw = "RW"
+ else
+ rw = '?'
+ end
+
+ for name in args
+ att = RDoc::Attr.new get_tkread, name, rw, comment
+ context.add_attribute att
+ end
+ end
+
+ def parse_alias(context, single, tk, comment)
+ skip_tkspace
+ if TkLPAREN === peek_tk then
+ get_tk
+ skip_tkspace
+ end
+ new_name = get_symbol_or_name
+ @scanner.instance_eval{@lex_state = EXPR_FNAME}
+ skip_tkspace
+ if TkCOMMA === peek_tk then
+ get_tk
+ skip_tkspace
+ end
+ old_name = get_symbol_or_name
+
+ al = RDoc::Alias.new get_tkread, old_name, new_name, comment
+ read_documentation_modifiers al, RDoc::ATTR_MODIFIERS
+ if al.document_self
+ context.add_alias(al)
+ end
+ end
+
+ def parse_call_parameters(tk)
+ end_token = case tk
+ when TkLPAREN, TkfLPAREN
+ TkRPAREN
+ when TkRPAREN
+ return ""
+ else
+ TkNL
+ end
+ nest = 0
+
+ loop do
+ case tk
+ when TkSEMICOLON
+ break
+ when TkLPAREN, TkfLPAREN
+ nest += 1
+ when end_token
+ if end_token == TkRPAREN
+ nest -= 1
+ break if @scanner.lex_state == EXPR_END and nest <= 0
+ else
+ break unless @scanner.continue
+ end
+ when TkCOMMENT
+ unget_tk(tk)
+ break
+ end
+ tk = get_tk
+ end
+ res = get_tkread.tr("\n", " ").strip
+ res = "" if res == ";"
+ res
+ end
+
+ def parse_class(container, single, tk, comment)
+ container, name_t = get_class_or_module container
+
+ case name_t
+ when TkCONSTANT
+ name = name_t.name
+ superclass = "Object"
+
+ if TkLT === peek_tk then
+ get_tk
+ skip_tkspace(true)
+ superclass = get_class_specification
+ superclass = "<unknown>" if superclass.empty?
+ end
+
+ cls_type = single == SINGLE ? RDoc::SingleClass : RDoc::NormalClass
+ cls = container.add_class cls_type, name, superclass
+
+ @stats.add_class cls
+
+ read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS
+ cls.record_location @top_level
+
+ parse_statements cls
+ cls.comment = comment
+
+ when TkLSHFT
+ case name = get_class_specification
+ when "self", container.name
+ parse_statements(container, SINGLE)
+ else
+ other = RDoc::TopLevel.find_class_named(name)
+ unless other
+# other = @top_level.add_class(NormalClass, name, nil)
+# other.record_location(@top_level)
+# other.comment = comment
+ other = RDoc::NormalClass.new "Dummy", nil
+ end
+
+ @stats.add_class other
+
+ read_documentation_modifiers other, RDoc::CLASS_MODIFIERS
+ parse_statements(other, SINGLE)
+ end
+
+ else
+ warn("Expected class name or '<<'. Got #{name_t.class}: #{name_t.text.inspect}")
+ end
+ end
+
+ def parse_constant(container, single, tk, comment)
+ name = tk.name
+ skip_tkspace(false)
+ eq_tk = get_tk
+
+ unless TkASSIGN === eq_tk then
+ unget_tk(eq_tk)
+ return
+ end
+
+ nest = 0
+ get_tkread
+
+ tk = get_tk
+ if TkGT === tk then
+ unget_tk(tk)
+ unget_tk(eq_tk)
+ return
+ end
+
+ loop do
+ case tk
+ when TkSEMICOLON then
+ break
+ when TkLPAREN, TkfLPAREN, TkLBRACE, TkLBRACK, TkDO, TkIF, TkUNLESS,
+ TkCASE then
+ nest += 1
+ when TkRPAREN, TkRBRACE, TkRBRACK, TkEND then
+ nest -= 1
+ when TkCOMMENT then
+ if nest <= 0 && @scanner.lex_state == EXPR_END
+ unget_tk tk
+ break
+ end
+ when TkNL then
+ if nest <= 0 &&
+ (@scanner.lex_state == EXPR_END || !@scanner.continue) then
+ unget_tk tk
+ break
+ end
+ end
+ tk = get_tk
+ end
+
+ res = get_tkread.tr("\n", " ").strip
+ res = "" if res == ";"
+
+ con = RDoc::Constant.new name, res, comment
+ read_documentation_modifiers con, RDoc::CONSTANT_MODIFIERS
+
+ container.add_constant con if con.document_self
+ end
+
+ ##
+ # Generates an RDoc::Method or RDoc::Attr from +comment+ by looking for
+ # :method: or :attr: directives in +comment+.
+
+ def parse_comment(container, tk, comment)
+ line_no = tk.line_no
+ column = tk.char_no
+
+ singleton = !!comment.sub!(/(^# +:?)(singleton-)(method:)/, '\1\3')
+
+ # REFACTOR
+ if comment.sub!(/^# +:?method: *(\S*).*?\n/i, '') then
+ name = $1 unless $1.empty?
+
+ meth = RDoc::GhostMethod.new get_tkread, name
+ meth.singleton = singleton
+
+ @stats.add_method meth
+
+ meth.start_collecting_tokens
+ indent = TkSPACE.new 1, 1
+ indent.set_text " " * column
+
+ position_comment = TkCOMMENT.new(line_no, 1, "# File #{@top_level.absolute_name}, line #{line_no}")
+ meth.add_tokens [position_comment, NEWLINE_TOKEN, indent]
+
+ meth.params = ''
+
+ extract_call_seq comment, meth
+
+ container.add_method meth if meth.document_self
+
+ meth.comment = comment
+ elsif comment.sub!(/# +:?(attr(_reader|_writer|_accessor)?:) *(\S*).*?\n/i, '') then
+ rw = case $1
+ when 'attr_reader' then 'R'
+ when 'attr_writer' then 'W'
+ else 'RW'
+ end
+
+ name = $3 unless $3.empty?
+
+ att = RDoc::Attr.new get_tkread, name, rw, comment
+ container.add_attribute att
+ end
+ end
+
+ def parse_include(context, comment)
+ loop do
+ skip_tkspace_comment
+
+ name = get_constant_with_optional_parens
+ context.add_include RDoc::Include.new(name, comment) unless name.empty?
+
+ return unless TkCOMMA === peek_tk
+ get_tk
+ end
+ end
+
+ def parse_meta_attr(context, single, tk, comment)
+ args = parse_symbol_arg
+ read = get_tkread
+ rw = "?"
+
+ # If nodoc is given, don't document any of them
+
+ tmp = RDoc::CodeObject.new
+ read_documentation_modifiers tmp, RDoc::ATTR_MODIFIERS
+ return unless tmp.document_self
+
+ if comment.sub!(/^# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i, '') then
+ rw = case $1
+ when 'attr_reader' then 'R'
+ when 'attr_writer' then 'W'
+ else 'RW'
+ end
+ name = $3 unless $3.empty?
+ end
+
+ for name in args
+ att = RDoc::Attr.new get_tkread, name, rw, comment
+ context.add_attribute att
+ end
+ end
+
+ ##
+ # Parses a meta-programmed method
+
+ def parse_meta_method(container, single, tk, comment)
+ line_no = tk.line_no
+ column = tk.char_no
+
+ start_collecting_tokens
+ add_token tk
+ add_token_listener self
+
+ skip_tkspace false
+
+ singleton = !!comment.sub!(/(^# +:?)(singleton-)(method:)/, '\1\3')
+
+ if comment.sub!(/^# +:?method: *(\S*).*?\n/i, '') then
+ name = $1 unless $1.empty?
+ end
+
+ if name.nil? then
+ name_t = get_tk
+ case name_t
+ when TkSYMBOL then
+ name = name_t.text[1..-1]
+ when TkSTRING then
+ name = name_t.text[1..-2]
+ when TkASSIGN then # ignore
+ remove_token_listener self
+ return
+ else
+ warn "unknown name token #{name_t.inspect} for meta-method '#{tk.name}'"
+ name = 'unknown'
+ end
+ end
+
+ meth = RDoc::MetaMethod.new get_tkread, name
+ meth.singleton = singleton
+
+ @stats.add_method meth
+
+ remove_token_listener self
+
+ meth.start_collecting_tokens
+ indent = TkSPACE.new 1, 1
+ indent.set_text " " * column
+
+ position_comment = TkCOMMENT.new(line_no, 1, "# File #{@top_level.absolute_name}, line #{line_no}")
+ meth.add_tokens [position_comment, NEWLINE_TOKEN, indent]
+ meth.add_tokens @token_stream
+
+ add_token_listener meth
+
+ meth.params = ''
+
+ extract_call_seq comment, meth
+
+ container.add_method meth if meth.document_self
+
+ last_tk = tk
+
+ while tk = get_tk do
+ case tk
+ when TkSEMICOLON then
+ break
+ when TkNL then
+ break unless last_tk and TkCOMMA === last_tk
+ when TkSPACE then
+ # expression continues
+ else
+ last_tk = tk
+ end
+ end
+
+ remove_token_listener meth
+
+ meth.comment = comment
+ end
+
+ ##
+ # Parses a method
+
+ def parse_method(container, single, tk, comment)
+ line_no = tk.line_no
+ column = tk.char_no
+
+ start_collecting_tokens
+ add_token(tk)
+ add_token_listener(self)
+
+ @scanner.instance_eval do @lex_state = EXPR_FNAME end
+
+ skip_tkspace(false)
+ name_t = get_tk
+ back_tk = skip_tkspace
+ meth = nil
+ added_container = false
+
+ dot = get_tk
+ if TkDOT === dot or TkCOLON2 === dot then
+ @scanner.instance_eval do @lex_state = EXPR_FNAME end
+ skip_tkspace
+ name_t2 = get_tk
+
+ case name_t
+ when TkSELF then
+ name = name_t2.name
+ when TkCONSTANT then
+ name = name_t2.name
+ prev_container = container
+ container = container.find_module_named(name_t.name)
+ unless container then
+ added_container = true
+ obj = name_t.name.split("::").inject(Object) do |state, item|
+ state.const_get(item)
+ end rescue nil
+
+ type = obj.class == Class ? RDoc::NormalClass : RDoc::NormalModule
+
+ unless [Class, Module].include?(obj.class) then
+ warn("Couldn't find #{name_t.name}. Assuming it's a module")
+ end
+
+ if type == RDoc::NormalClass then
+ container = prev_container.add_class(type, name_t.name, obj.superclass.name)
+ else
+ container = prev_container.add_module(type, name_t.name)
+ end
+
+ container.record_location @top_level
+ end
+ else
+ warn "unexpected method name token #{name_t2.inspect}"
+ # break
+ skip_method(container)
+ return
+ end
+
+ meth = RDoc::AnyMethod.new(get_tkread, name)
+ meth.singleton = true
+ else
+ unget_tk dot
+ back_tk.reverse_each do |token|
+ unget_tk token
+ end
+
+ unless name_t.respond_to? :name then
+ warn "unexpected method name token #{name_t.inspect}"
+ skip_method container
+ return
+ end
+
+ name = name_t.name
+
+ meth = RDoc::AnyMethod.new get_tkread, name
+ meth.singleton = (single == SINGLE)
+ end
+
+ @stats.add_method meth
+
+ remove_token_listener self
+
+ meth.start_collecting_tokens
+ indent = TkSPACE.new 1, 1
+ indent.set_text " " * column
+
+ token = TkCOMMENT.new(line_no, 1, "# File #{@top_level.absolute_name}, line #{line_no}")
+ meth.add_tokens [token, NEWLINE_TOKEN, indent]
+ meth.add_tokens @token_stream
+
+ add_token_listener meth
+
+ @scanner.instance_eval do @continue = false end
+ parse_method_parameters meth
+
+ if meth.document_self then
+ container.add_method meth
+ elsif added_container then
+ container.document_self = false
+ end
+
+ # Having now read the method parameters and documentation modifiers, we
+ # now know whether we have to rename #initialize to ::new
+
+ if name == "initialize" && !meth.singleton then
+ if meth.dont_rename_initialize then
+ meth.visibility = :protected
+ else
+ meth.singleton = true
+ meth.name = "new"
+ meth.visibility = :public
+ end
+ end
+
+ parse_statements(container, single, meth)
+
+ remove_token_listener(meth)
+
+ extract_call_seq comment, meth
+
+ meth.comment = comment
+ end
+
+ def parse_method_or_yield_parameters(method = nil,
+ modifiers = RDoc::METHOD_MODIFIERS)
+ skip_tkspace(false)
+ tk = get_tk
+
+ # Little hack going on here. In the statement
+ # f = 2*(1+yield)
+ # We see the RPAREN as the next token, so we need
+ # to exit early. This still won't catch all cases
+ # (such as "a = yield + 1"
+ end_token = case tk
+ when TkLPAREN, TkfLPAREN
+ TkRPAREN
+ when TkRPAREN
+ return ""
+ else
+ TkNL
+ end
+ nest = 0
+
+ loop do
+ case tk
+ when TkSEMICOLON then
+ break
+ when TkLBRACE then
+ nest += 1
+ when TkRBRACE then
+ # we might have a.each {|i| yield i }
+ unget_tk(tk) if nest.zero?
+ nest -= 1
+ break if nest <= 0
+ when TkLPAREN, TkfLPAREN then
+ nest += 1
+ when end_token then
+ if end_token == TkRPAREN
+ nest -= 1
+ break if @scanner.lex_state == EXPR_END and nest <= 0
+ else
+ break unless @scanner.continue
+ end
+ when method && method.block_params.nil? && TkCOMMENT then
+ unget_tk tk
+ read_documentation_modifiers method, modifiers
+ @read.pop
+ when TkCOMMENT then
+ @read.pop
+ end
+ tk = get_tk
+ end
+
+ res = get_tkread.gsub(/\s+/, ' ').strip
+ res = '' if res == ';'
+ res
+ end
+
+ ##
+ # Capture the method's parameters. Along the way, look for a comment
+ # containing:
+ #
+ # # yields: ....
+ #
+ # and add this as the block_params for the method
+
+ def parse_method_parameters(method)
+ res = parse_method_or_yield_parameters method
+
+ res = "(#{res})" unless res =~ /\A\(/
+ method.params = res unless method.params
+
+ if method.block_params.nil? then
+ skip_tkspace(false)
+ read_documentation_modifiers method, RDoc::METHOD_MODIFIERS
+ end
+ end
+
+ def parse_module(container, single, tk, comment)
+ container, name_t = get_class_or_module(container)
+
+ name = name_t.name
+
+ mod = container.add_module RDoc::NormalModule, name
+ mod.record_location @top_level
+
+ @stats.add_module mod
+
+ read_documentation_modifiers mod, RDoc::CLASS_MODIFIERS
+ parse_statements(mod)
+ mod.comment = comment
+ end
+
+ def parse_require(context, comment)
+ skip_tkspace_comment
+ tk = get_tk
+ if TkLPAREN === tk then
+ skip_tkspace_comment
+ tk = get_tk
+ end
+
+ name = nil
+ case tk
+ when TkSTRING
+ name = tk.text
+ # when TkCONSTANT, TkIDENTIFIER, TkIVAR, TkGVAR
+ # name = tk.name
+ when TkDSTRING
+ warn "Skipping require of dynamic string: #{tk.text}"
+ # else
+ # warn "'require' used as variable"
+ end
+ if name
+ context.add_require RDoc::Require.new(name, comment)
+ else
+ unget_tk(tk)
+ end
+ end
+
+ def parse_statements(container, single = NORMAL, current_method = nil,
+ comment = '')
+ nest = 1
+ save_visibility = container.visibility
+
+ non_comment_seen = true
+
+ while tk = get_tk do
+ keep_comment = false
+
+ non_comment_seen = true unless TkCOMMENT === tk
+
+ case tk
+ when TkNL then
+ skip_tkspace true # Skip blanks and newlines
+ tk = get_tk
+
+ if TkCOMMENT === tk then
+ if non_comment_seen then
+ # Look for RDoc in a comment about to be thrown away
+ parse_comment container, tk, comment unless comment.empty?
+
+ comment = ''
+ non_comment_seen = false
+ end
+
+ while TkCOMMENT === tk do
+ comment << tk.text << "\n"
+ tk = get_tk # this is the newline
+ skip_tkspace(false) # leading spaces
+ tk = get_tk
+ end
+
+ unless comment.empty? then
+ look_for_directives_in container, comment
+
+ if container.done_documenting then
+ container.ongoing_visibility = save_visibility
+ end
+ end
+
+ keep_comment = true
+ else
+ non_comment_seen = true
+ end
+
+ unget_tk tk
+ keep_comment = true
+
+ when TkCLASS then
+ if container.document_children then
+ parse_class container, single, tk, comment
+ else
+ nest += 1
+ end
+
+ when TkMODULE then
+ if container.document_children then
+ parse_module container, single, tk, comment
+ else
+ nest += 1
+ end
+
+ when TkDEF then
+ if container.document_self then
+ parse_method container, single, tk, comment
+ else
+ nest += 1
+ end
+
+ when TkCONSTANT then
+ if container.document_self then
+ parse_constant container, single, tk, comment
+ end
+
+ when TkALIAS then
+ if container.document_self then
+ parse_alias container, single, tk, comment
+ end
+
+ when TkYIELD then
+ if current_method.nil? then
+ warn "Warning: yield outside of method" if container.document_self
+ else
+ parse_yield container, single, tk, current_method
+ end
+
+ # Until and While can have a 'do', which shouldn't increase the nesting.
+ # We can't solve the general case, but we can handle most occurrences by
+ # ignoring a do at the end of a line.
+
+ when TkUNTIL, TkWHILE then
+ nest += 1
+ skip_optional_do_after_expression
+
+ # 'for' is trickier
+ when TkFOR then
+ nest += 1
+ skip_for_variable
+ skip_optional_do_after_expression
+
+ when TkCASE, TkDO, TkIF, TkUNLESS, TkBEGIN then
+ nest += 1
+
+ when TkIDENTIFIER then
+ if nest == 1 and current_method.nil? then
+ case tk.name
+ when 'private', 'protected', 'public', 'private_class_method',
+ 'public_class_method', 'module_function' then
+ parse_visibility container, single, tk
+ keep_comment = true
+ when 'attr' then
+ parse_attr container, single, tk, comment
+ when /^attr_(reader|writer|accessor)$/ then
+ parse_attr_accessor container, single, tk, comment
+ when 'alias_method' then
+ if container.document_self then
+ parse_alias container, single, tk, comment
+ end
+ else
+ if container.document_self and comment =~ /\A#\#$/ then
+ parse_meta_method container, single, tk, comment
+ end
+ end
+ end
+
+ case tk.name
+ when "require" then
+ parse_require container, comment
+ when "include" then
+ parse_include container, comment
+ end
+
+ when TkEND then
+ nest -= 1
+ if nest == 0 then
+ read_documentation_modifiers container, RDoc::CLASS_MODIFIERS
+ container.ongoing_visibility = save_visibility
+ return
+ end
+
+ end
+
+ comment = '' unless keep_comment
+
+ begin
+ get_tkread
+ skip_tkspace(false)
+ end while peek_tk == TkNL
+ end
+ end
+
+ def parse_symbol_arg(no = nil)
+ args = []
+ skip_tkspace_comment
+ case tk = get_tk
+ when TkLPAREN
+ loop do
+ skip_tkspace_comment
+ if tk1 = parse_symbol_in_arg
+ args.push tk1
+ break if no and args.size >= no
+ end
+
+ skip_tkspace_comment
+ case tk2 = get_tk
+ when TkRPAREN
+ break
+ when TkCOMMA
+ else
+ warn("unexpected token: '#{tk2.inspect}'") if $DEBUG_RDOC
+ break
+ end
+ end
+ else
+ unget_tk tk
+ if tk = parse_symbol_in_arg
+ args.push tk
+ return args if no and args.size >= no
+ end
+
+ loop do
+ skip_tkspace(false)
+
+ tk1 = get_tk
+ unless TkCOMMA === tk1 then
+ unget_tk tk1
+ break
+ end
+
+ skip_tkspace_comment
+ if tk = parse_symbol_in_arg
+ args.push tk
+ break if no and args.size >= no
+ end
+ end
+ end
+ args
+ end
+
+ def parse_symbol_in_arg
+ case tk = get_tk
+ when TkSYMBOL
+ tk.text.sub(/^:/, '')
+ when TkSTRING
+ eval @read[-1]
+ else
+ warn("Expected symbol or string, got #{tk.inspect}") if $DEBUG_RDOC
+ nil
+ end
+ end
+
+ def parse_top_level_statements(container)
+ comment = collect_first_comment
+ look_for_directives_in(container, comment)
+ container.comment = comment unless comment.empty?
+ parse_statements container, NORMAL, nil, comment
+ end
+
+ def parse_visibility(container, single, tk)
+ singleton = (single == SINGLE)
+
+ vis_type = tk.name
+
+ vis = case vis_type
+ when 'private' then :private
+ when 'protected' then :protected
+ when 'public' then :public
+ when 'private_class_method' then
+ singleton = true
+ :private
+ when 'public_class_method' then
+ singleton = true
+ :public
+ when 'module_function' then
+ singleton = true
+ :public
+ else
+ raise "Invalid visibility: #{tk.name}"
+ end
+
+ skip_tkspace_comment false
+
+ case peek_tk
+ # Ryan Davis suggested the extension to ignore modifiers, because he
+ # often writes
+ #
+ # protected unless $TESTING
+ #
+ when TkNL, TkUNLESS_MOD, TkIF_MOD, TkSEMICOLON then
+ container.ongoing_visibility = vis
+ else
+ if vis_type == 'module_function' then
+ args = parse_symbol_arg
+ container.set_visibility_for args, :private, false
+
+ module_functions = []
+
+ container.methods_matching args do |m|
+ s_m = m.dup
+ s_m.singleton = true if RDoc::AnyMethod === s_m
+ s_m.visibility = :public
+ module_functions << s_m
+ end
+
+ module_functions.each do |s_m|
+ case s_m
+ when RDoc::AnyMethod then
+ container.add_method s_m
+ when RDoc::Attr then
+ container.add_attribute s_m
+ end
+ end
+ else
+ args = parse_symbol_arg
+ container.set_visibility_for args, vis, singleton
+ end
+ end
+ end
+
+ def parse_yield_parameters
+ parse_method_or_yield_parameters
+ end
+
+ def parse_yield(context, single, tk, method)
+ if method.block_params.nil?
+ get_tkread
+ @scanner.instance_eval{@continue = false}
+ method.block_params = parse_yield_parameters
+ end
+ end
+
+ def peek_read
+ @read.join('')
+ end
+
+ ##
+ # Peek at the next token, but don't remove it from the stream
+
+ def peek_tk
+ unget_tk(tk = get_tk)
+ tk
+ end
+
+ ##
+ # Directives are modifier comments that can appear after class, module, or
+ # method names. For example:
+ #
+ # def fred # :yields: a, b
+ #
+ # or:
+ #
+ # class MyClass # :nodoc:
+ #
+ # We return the directive name and any parameters as a two element array
+
+ def read_directive(allowed)
+ tk = get_tk
+ result = nil
+
+ if TkCOMMENT === tk then
+ if tk.text =~ /\s*:?(\w+):\s*(.*)/ then
+ directive = $1.downcase
+ if allowed.include? directive then
+ result = [directive, $2]
+ end
+ end
+ else
+ unget_tk tk
+ end
+
+ result
+ end
+
+ def read_documentation_modifiers(context, allow)
+ dir = read_directive(allow)
+
+ case dir[0]
+ when "notnew", "not_new", "not-new" then
+ context.dont_rename_initialize = true
+
+ when "nodoc" then
+ context.document_self = false
+ if dir[1].downcase == "all"
+ context.document_children = false
+ end
+
+ when "doc" then
+ context.document_self = true
+ context.force_documentation = true
+
+ when "yield", "yields" then
+ unless context.params.nil?
+ context.params.sub!(/(,|)\s*&\w+/,'') # remove parameter &proc
+ end
+
+ context.block_params = dir[1]
+
+ when "arg", "args" then
+ context.params = dir[1]
+ end if dir
+ end
+
+ def remove_private_comments(comment)
+ comment.gsub!(/^#--\n.*?^#\+\+/m, '')
+ comment.sub!(/^#--\n.*/m, '')
+ end
+
+ def remove_token_listener(obj)
+ @token_listeners.delete(obj)
+ end
+
+ def reset
+ @tokens = []
+ @unget_read = []
+ @read = []
+ end
+
+ def scan
+ reset
+
+ catch(:eof) do
+ catch(:enddoc) do
+ begin
+ parse_top_level_statements(@top_level)
+ rescue Exception => e
+ $stderr.puts <<-EOF
+
+
+RDoc failure in #{@file_name} at or around line #{@scanner.line_no} column
+#{@scanner.char_no}
+
+Before reporting this, could you check that the file you're documenting
+compiles cleanly--RDoc is not a full Ruby parser, and gets confused easily if
+fed invalid programs.
+
+The internal error was:
+
+ EOF
+
+ e.set_backtrace(e.backtrace[0,4])
+ raise
+ end
+ end
+ end
+
+ @top_level
+ end
+
+ ##
+ # while, until, and for have an optional do
+
+ def skip_optional_do_after_expression
+ skip_tkspace(false)
+ tk = get_tk
+ case tk
+ when TkLPAREN, TkfLPAREN
+ end_token = TkRPAREN
+ else
+ end_token = TkNL
+ end
+
+ nest = 0
+ @scanner.instance_eval{@continue = false}
+
+ loop do
+ case tk
+ when TkSEMICOLON
+ break
+ when TkLPAREN, TkfLPAREN
+ nest += 1
+ when TkDO
+ break if nest.zero?
+ when end_token
+ if end_token == TkRPAREN
+ nest -= 1
+ break if @scanner.lex_state == EXPR_END and nest.zero?
+ else
+ break unless @scanner.continue
+ end
+ end
+ tk = get_tk
+ end
+ skip_tkspace(false)
+
+ get_tk if TkDO === peek_tk
+ end
+
+ ##
+ # skip the var [in] part of a 'for' statement
+
+ def skip_for_variable
+ skip_tkspace(false)
+ tk = get_tk
+ skip_tkspace(false)
+ tk = get_tk
+ unget_tk(tk) unless TkIN === tk
+ end
+
+ def skip_method(container)
+ meth = RDoc::AnyMethod.new "", "anon"
+ parse_method_parameters(meth)
+ parse_statements(container, false, meth)
+ end
+
+ ##
+ # Skip spaces
+
+ def skip_tkspace(skip_nl = true)
+ tokens = []
+
+ while TkSPACE === (tk = get_tk) or (skip_nl and TkNL === tk) do
+ tokens.push tk
+ end
+
+ unget_tk(tk)
+ tokens
+ end
+
+ ##
+ # Skip spaces until a comment is found
+
+ def skip_tkspace_comment(skip_nl = true)
+ loop do
+ skip_tkspace(skip_nl)
+ return unless TkCOMMENT === peek_tk
+ get_tk
+ end
+ end
+
+ def unget_tk(tk)
+ @tokens.unshift tk
+ @unget_read.unshift @read.pop
+
+ # Remove this token from any listeners
+ @token_listeners.each do |obj|
+ obj.pop_token
+ end if @token_listeners
+ end
+
+ def warn(msg)
+ return if @options.quiet
+ msg = make_message msg
+ $stderr.puts msg
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/simple.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/simple.rb
new file mode 100644
index 000000000..e34ce70e5
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/parser/simple.rb
@@ -0,0 +1,39 @@
+require 'rdoc/parser'
+
+##
+# Parse a non-source file. We basically take the whole thing as one big
+# comment. If the first character in the file is '#', we strip leading pound
+# signs.
+
+class RDoc::Parser::Simple < RDoc::Parser
+
+ parse_files_matching(//)
+
+ ##
+ # Prepare to parse a plain file
+
+ def initialize(top_level, file_name, content, options, stats)
+ super
+
+ preprocess = RDoc::Markup::PreProcess.new @file_name, @options.rdoc_include
+
+ preprocess.handle @content do |directive, param|
+ warn "Unrecognized directive '#{directive}' in #{@file_name}"
+ end
+ end
+
+ ##
+ # Extract the file contents and attach them to the TopLevel as a comment
+
+ def scan
+ @top_level.comment = remove_private_comments(@content)
+ @top_level.parser = self.class
+ @top_level
+ end
+
+ def remove_private_comments(comment)
+ comment.gsub(/^--\n.*?^\+\+/m, '').sub(/^--\n.*/m, '')
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/rdoc.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/rdoc.rb
new file mode 100644
index 000000000..b854988ac
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/rdoc.rb
@@ -0,0 +1,375 @@
+require 'rdoc'
+
+require 'rdoc/parser'
+
+# Simple must come first
+require 'rdoc/parser/simple'
+require 'rdoc/parser/ruby'
+require 'rdoc/parser/c'
+require 'rdoc/parser/perl'
+
+require 'rdoc/stats'
+require 'rdoc/options'
+
+require 'rdoc/diagram'
+
+require 'find'
+require 'fileutils'
+require 'time'
+require 'thread'
+
+##
+# Encapsulate the production of rdoc documentation. Basically you can use this
+# as you would invoke rdoc from the command line:
+#
+# rdoc = RDoc::RDoc.new
+# rdoc.document(args)
+#
+# Where +args+ is an array of strings, each corresponding to an argument you'd
+# give rdoc on the command line. See rdoc/rdoc.rb for details.
+
+class RDoc::RDoc
+
+ ##
+ # Generator instance used for creating output
+
+ attr_accessor :generator
+
+ ##
+ # RDoc options
+
+ attr_reader :options
+
+ ##
+ # Accessor for statistics. Available after each call to parse_files
+
+ attr_reader :stats
+
+ ##
+ # This is the list of supported output generators
+
+ GENERATORS = {}
+
+ ##
+ # Add +klass+ that can generate output after parsing
+
+ def self.add_generator(klass)
+ name = klass.name.sub(/^RDoc::Generator::/, '').downcase
+ GENERATORS[name] = klass
+ end
+
+ ##
+ # Active RDoc::RDoc instance
+
+ def self.current
+ @current
+ end
+
+ ##
+ # Sets the active RDoc::RDoc instance
+
+ def self.current=(rdoc)
+ @current = rdoc
+ end
+
+ def initialize
+ @generator = nil
+ @options = nil
+ @stats = nil
+ end
+
+ ##
+ # Report an error message and exit
+
+ def error(msg)
+ raise RDoc::Error, msg
+ end
+
+ ##
+ # Turns RDoc from stdin into HTML
+
+ def handle_pipe
+ @html = RDoc::Markup::ToHtml.new
+
+ out = @html.convert $stdin.read
+
+ $stdout.write out
+ end
+
+ ##
+ # Create an output dir if it doesn't exist. If it does exist, but doesn't
+ # contain the flag file <tt>created.rid</tt> then we refuse to use it, as
+ # we may clobber some manually generated documentation
+
+ def setup_output_dir(op_dir, force)
+ flag_file = output_flag_file op_dir
+
+ if File.exist? op_dir then
+ unless File.directory? op_dir then
+ error "'#{op_dir}' exists, and is not a directory"
+ end
+ begin
+ created = File.read(flag_file)
+ rescue SystemCallError
+ error "\nDirectory #{op_dir} already exists, but it looks like it\n" +
+ "isn't an RDoc directory. Because RDoc doesn't want to risk\n" +
+ "destroying any of your existing files, you'll need to\n" +
+ "specify a different output directory name (using the\n" +
+ "--op <dir> option).\n\n"
+ else
+ last = (Time.parse(created) unless force rescue nil)
+ end
+ else
+ FileUtils.mkdir_p(op_dir)
+ end
+ last
+ end
+
+ ##
+ # Update the flag file in an output directory.
+
+ def update_output_dir(op_dir, time)
+ File.open(output_flag_file(op_dir), "w") { |f| f.puts time.rfc2822 }
+ end
+
+ ##
+ # Return the path name of the flag file in an output directory.
+
+ def output_flag_file(op_dir)
+ File.join op_dir, "created.rid"
+ end
+
+ ##
+ # The .document file contains a list of file and directory name patterns,
+ # representing candidates for documentation. It may also contain comments
+ # (starting with '#')
+
+ def parse_dot_doc_file(in_dir, filename, options)
+ # read and strip comments
+ patterns = File.read(filename).gsub(/#.*/, '')
+
+ result = []
+
+ patterns.split.each do |patt|
+ candidates = Dir.glob(File.join(in_dir, patt))
+ result.concat(normalized_file_list(options, candidates))
+ end
+
+ result
+ end
+
+ ##
+ # Given a list of files and directories, create a list of all the Ruby
+ # files they contain.
+ #
+ # If +force_doc+ is true we always add the given files, if false, only
+ # add files that we guarantee we can parse. It is true when looking at
+ # files given on the command line, false when recursing through
+ # subdirectories.
+ #
+ # The effect of this is that if you want a file with a non-standard
+ # extension parsed, you must name it explicitly.
+
+ def normalized_file_list(options, relative_files, force_doc = false,
+ exclude_pattern = nil)
+ file_list = []
+
+ relative_files.each do |rel_file_name|
+ next if exclude_pattern && exclude_pattern =~ rel_file_name
+ stat = File.stat rel_file_name rescue next
+
+ case type = stat.ftype
+ when "file"
+ next if @last_created and stat.mtime < @last_created
+
+ if force_doc or RDoc::Parser.can_parse(rel_file_name) then
+ file_list << rel_file_name.sub(/^\.\//, '')
+ end
+ when "directory"
+ next if rel_file_name == "CVS" || rel_file_name == ".svn"
+ dot_doc = File.join(rel_file_name, RDoc::DOT_DOC_FILENAME)
+ if File.file?(dot_doc)
+ file_list.concat(parse_dot_doc_file(rel_file_name, dot_doc, options))
+ else
+ file_list.concat(list_files_in_directory(rel_file_name, options))
+ end
+ else
+ raise RDoc::Error, "I can't deal with a #{type} #{rel_file_name}"
+ end
+ end
+
+ file_list
+ end
+
+ ##
+ # Return a list of the files to be processed in a directory. We know that
+ # this directory doesn't have a .document file, so we're looking for real
+ # files. However we may well contain subdirectories which must be tested
+ # for .document files.
+
+ def list_files_in_directory(dir, options)
+ files = Dir.glob File.join(dir, "*")
+
+ normalized_file_list options, files, false, options.exclude
+ end
+
+ ##
+ # Parse each file on the command line, recursively entering directories.
+
+ def parse_files(options)
+ files = options.files
+ files = ["."] if files.empty?
+
+ file_list = normalized_file_list(options, files, true, options.exclude)
+
+ return [] if file_list.empty?
+
+ jobs = SizedQueue.new(@options.threads * 3)
+ workers = []
+ file_info = []
+ file_info_lock = Mutex.new
+
+ Thread.abort_on_exception = true
+ @stats = RDoc::Stats.new(file_list.size, options.verbosity)
+ @stats.begin_adding @options.threads
+
+ # Create worker threads.
+ @options.threads.times do
+ thread = Thread.new do
+ while (filename = jobs.pop)
+ @stats.add_file(filename)
+ content = read_file_contents(filename)
+ top_level = RDoc::TopLevel.new filename
+
+ parser = RDoc::Parser.for(top_level, filename, content, options,
+ @stats)
+ result = parser.scan
+
+ file_info_lock.synchronize do
+ file_info << result
+ end
+ end
+ end
+ workers << thread
+ end
+
+ # Feed filenames to the parser worker threads...
+ file_list.each do |filename|
+ jobs << filename
+ end
+ workers.size.times do
+ jobs << nil
+ end
+
+ # ...and wait until they're done.
+ workers.each do |thread|
+ thread.join
+ end
+
+ @stats.done_adding
+
+ file_info
+ end
+
+ ##
+ # Format up one or more files according to the given arguments.
+ #
+ # For simplicity, _argv_ is an array of strings, equivalent to the strings
+ # that would be passed on the command line. (This isn't a coincidence, as
+ # we _do_ pass in ARGV when running interactively). For a list of options,
+ # see rdoc/rdoc.rb. By default, output will be stored in a directory
+ # called +doc+ below the current directory, so make sure you're somewhere
+ # writable before invoking.
+ #
+ # Throws: RDoc::Error on error
+
+ def document(argv)
+ RDoc::TopLevel.reset
+
+ @options = RDoc::Options.new
+ @options.parse argv
+
+ if @options.pipe then
+ handle_pipe
+ exit
+ end
+
+ @last_created = setup_output_dir @options.op_dir, @options.force_update
+
+ start_time = Time.now
+
+ file_info = parse_files @options
+
+ @options.title = "RDoc Documentation"
+
+ if file_info.empty?
+ $stderr.puts "\nNo newer files." unless @options.quiet
+ else
+ gen_klass = @options.generator
+
+ unless @options.quiet then
+ $stderr.puts "\nGenerating #{gen_klass.name.sub(/^.*::/, '')}..."
+ end
+
+ @generator = gen_klass.for @options
+
+ pwd = Dir.pwd
+
+ Dir.chdir @options.op_dir
+
+ begin
+ self.class.current = self
+
+ RDoc::Diagram.new(file_info, @options).draw if @options.diagram
+ @generator.generate file_info
+ update_output_dir ".", start_time
+ ensure
+ self.class.current = nil
+ Dir.chdir pwd
+ end
+ end
+
+ unless @options.quiet or not @stats then
+ puts
+ @stats.print
+ end
+ end
+
+ private
+
+ def read_file_contents(filename)
+ content = if RUBY_VERSION >= '1.9' then
+ File.open(filename, "r:ascii-8bit") { |f| f.read }
+ else
+ File.read filename
+ end
+
+ if defined? Encoding then
+ if /coding:\s*(\S+)/ =~ content[/\A(?:.*\n){0,2}/]
+ if enc = ::Encoding.find($1)
+ content.force_encoding(enc)
+ end
+ end
+ end
+
+ content
+ end
+
+end
+
+if Gem.respond_to? :find_files then
+ rdoc_extensions = Gem.find_files 'rdoc/discover'
+
+ rdoc_extensions.each do |extension|
+ begin
+ load extension
+ rescue => e
+ warn "error loading #{extension.inspect}: #{e.message} (#{e.class})"
+ end
+ end
+end
+
+# require built-in generators after discovery in case they've been replaced
+require 'rdoc/generator/darkfish'
+require 'rdoc/generator/ri'
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/require.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/require.rb
new file mode 100644
index 000000000..407b55af3
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/require.rb
@@ -0,0 +1,32 @@
+require 'rdoc/code_object'
+
+##
+# A file loaded by \#require
+
+class RDoc::Require < RDoc::CodeObject
+
+ ##
+ # Name of the required file
+
+ attr_accessor :name
+
+ ##
+ # Creates a new Require that loads +name+ with +comment+
+
+ def initialize(name, comment)
+ super()
+ @name = name.gsub(/'|"/, "") #'
+ self.comment = comment
+ end
+
+ def inspect # :nodoc:
+ "#<%s:0x%x require '%s' in %s>" % [
+ self.class,
+ object_id,
+ @name,
+ parent_file_name,
+ ]
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ri.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri.rb
new file mode 100644
index 000000000..a3a858e67
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri.rb
@@ -0,0 +1,8 @@
+require 'rdoc'
+
+module RDoc::RI
+
+ class Error < RDoc::Error; end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/cache.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/cache.rb
new file mode 100644
index 000000000..15935abb1
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/cache.rb
@@ -0,0 +1,187 @@
+require 'rdoc/ri'
+
+class RDoc::RI::ClassEntry
+
+ attr_reader :name
+ attr_reader :path_names
+
+ def initialize(path_name, name, in_class)
+ @path_names = [ path_name ]
+ @name = name
+ @in_class = in_class
+ @class_methods = []
+ @instance_methods = []
+ @inferior_classes = []
+ end
+
+ # We found this class in more than one place, so add
+ # in the name from there.
+ def add_path(path)
+ @path_names << path
+ end
+
+ ##
+ # read in our methods and any classes and modules in our namespace. Methods
+ # are stored in files called name-c|i.yaml, where the 'name' portion is the
+ # external form of the method name and the c|i is a class|instance flag
+
+ def load_from(dir)
+ return unless File.exist? dir
+
+ Dir.foreach(dir) do |name|
+ next if name =~ /^\./
+
+ # convert from external to internal form, and
+ # extract the instance/class flag
+
+ if name =~ /^(.*?)-(c|i).yaml$/
+ external_name = $1
+ is_class_method = $2 == "c"
+ internal_name = RDoc::RI::Writer.external_to_internal(external_name)
+ list = is_class_method ? @class_methods : @instance_methods
+ path = File.join(dir, name)
+ list << RDoc::RI::MethodEntry.new(path, internal_name, is_class_method, self)
+ else
+ full_name = File.join(dir, name)
+ if File.directory?(full_name)
+ inf_class = @inferior_classes.find {|c| c.name == name }
+ if inf_class
+ inf_class.add_path(full_name)
+ else
+ inf_class = RDoc::RI::ClassEntry.new(full_name, name, self)
+ @inferior_classes << inf_class
+ end
+ inf_class.load_from(full_name)
+ end
+ end
+ end
+ end
+
+ # Return a list of any classes or modules that we contain
+ # that match a given string
+
+ def contained_modules_matching(name)
+ @inferior_classes.find_all {|c| c.name[name]}
+ end
+
+ def classes_and_modules
+ @inferior_classes
+ end
+
+ # Return an exact match to a particular name
+ def contained_class_named(name)
+ @inferior_classes.find {|c| c.name == name}
+ end
+
+ # return the list of local methods matching name
+ # We're split into two because we need distinct behavior
+ # when called from the _toplevel_
+ def methods_matching(name, is_class_method)
+ local_methods_matching(name, is_class_method)
+ end
+
+ # Find methods matching 'name' in ourselves and in
+ # any classes we contain
+ def recursively_find_methods_matching(name, is_class_method)
+ res = local_methods_matching(name, is_class_method)
+ @inferior_classes.each do |c|
+ res.concat(c.recursively_find_methods_matching(name, is_class_method))
+ end
+ res
+ end
+
+
+ # Return our full name
+ def full_name
+ res = @in_class.full_name
+ res << "::" unless res.empty?
+ res << @name
+ end
+
+ # Return a list of all out method names
+ def all_method_names
+ res = @class_methods.map {|m| m.full_name }
+ @instance_methods.each {|m| res << m.full_name}
+ res
+ end
+
+ private
+
+ # Return a list of all our methods matching a given string.
+ # Is +is_class_methods+ if 'nil', we don't care if the method
+ # is a class method or not, otherwise we only return
+ # those methods that match
+ def local_methods_matching(name, is_class_method)
+
+ list = case is_class_method
+ when nil then @class_methods + @instance_methods
+ when true then @class_methods
+ when false then @instance_methods
+ else fail "Unknown is_class_method: #{is_class_method.inspect}"
+ end
+
+ list.find_all {|m| m.name; m.name[name]}
+ end
+end
+
+##
+# A TopLevelEntry is like a class entry, but when asked to search for methods
+# searches all classes, not just itself
+
+class RDoc::RI::TopLevelEntry < RDoc::RI::ClassEntry
+ def methods_matching(name, is_class_method)
+ res = recursively_find_methods_matching(name, is_class_method)
+ end
+
+ def full_name
+ ""
+ end
+
+ def module_named(name)
+
+ end
+
+end
+
+class RDoc::RI::MethodEntry
+ attr_reader :name
+ attr_reader :path_name
+
+ def initialize(path_name, name, is_class_method, in_class)
+ @path_name = path_name
+ @name = name
+ @is_class_method = is_class_method
+ @in_class = in_class
+ end
+
+ def full_name
+ res = @in_class.full_name
+ unless res.empty?
+ if @is_class_method
+ res << "::"
+ else
+ res << "#"
+ end
+ end
+ res << @name
+ end
+end
+
+##
+# We represent everything known about all 'ri' files accessible to this program
+
+class RDoc::RI::Cache
+
+ attr_reader :toplevel
+
+ def initialize(dirs)
+ # At the top level we have a dummy module holding the
+ # overall namespace
+ @toplevel = RDoc::RI::TopLevelEntry.new('', '::', nil)
+
+ dirs.each do |dir|
+ @toplevel.load_from(dir)
+ end
+ end
+
+end
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/descriptions.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/descriptions.rb
new file mode 100644
index 000000000..99a7cb11f
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/descriptions.rb
@@ -0,0 +1,156 @@
+require 'yaml'
+require 'rdoc/markup/fragments'
+require 'rdoc/ri'
+
+##
+# Descriptions are created by RDoc (in ri_generator) and written out in
+# serialized form into the documentation tree. ri then reads these to generate
+# the documentation
+
+class RDoc::RI::NamedThing
+ attr_reader :name
+ def initialize(name)
+ @name = name
+ end
+
+ def <=>(other)
+ @name <=> other.name
+ end
+
+ def hash
+ @name.hash
+ end
+
+ def eql?(other)
+ @name.eql?(other)
+ end
+end
+
+class RDoc::RI::AliasName < RDoc::RI::NamedThing; end
+
+class RDoc::RI::Attribute < RDoc::RI::NamedThing
+ attr_reader :rw, :comment
+
+ def initialize(name, rw, comment)
+ super(name)
+ @rw = rw
+ @comment = comment
+ end
+end
+
+class RDoc::RI::Constant < RDoc::RI::NamedThing
+ attr_reader :value, :comment
+
+ def initialize(name, value, comment)
+ super(name)
+ @value = value
+ @comment = comment
+ end
+end
+
+class RDoc::RI::IncludedModule < RDoc::RI::NamedThing; end
+
+class RDoc::RI::MethodSummary < RDoc::RI::NamedThing
+ def initialize(name="")
+ super
+ end
+end
+
+class RDoc::RI::Description
+ attr_accessor :name
+ attr_accessor :full_name
+ attr_accessor :comment
+
+ def serialize
+ self.to_yaml
+ end
+
+ def self.deserialize(from)
+ YAML.load(from)
+ end
+
+ def <=>(other)
+ @name <=> other.name
+ end
+end
+
+class RDoc::RI::ModuleDescription < RDoc::RI::Description
+
+ attr_accessor :class_methods
+ attr_accessor :class_method_extensions
+ attr_accessor :instance_methods
+ attr_accessor :instance_method_extensions
+ attr_accessor :attributes
+ attr_accessor :constants
+ attr_accessor :includes
+
+ # merge in another class description into this one
+ def merge_in(old)
+ merge(@class_methods, old.class_methods)
+ merge(@instance_methods, old.instance_methods)
+ merge(@attributes, old.attributes)
+ merge(@constants, old.constants)
+ merge(@includes, old.includes)
+ if @comment.nil? || @comment.empty?
+ @comment = old.comment
+ else
+ unless old.comment.nil? or old.comment.empty? then
+ if @comment.nil? or @comment.empty? then
+ @comment = old.comment
+ else
+ @comment << RDoc::Markup::Flow::RULE.new
+ @comment.concat old.comment
+ end
+ end
+ end
+ end
+
+ def display_name
+ "Module"
+ end
+
+ # the 'ClassDescription' subclass overrides this
+ # to format up the name of a parent
+ def superclass_string
+ nil
+ end
+
+ private
+
+ def merge(into, from)
+ names = {}
+ into.each {|i| names[i.name] = i }
+ from.each {|i| names[i.name] = i }
+ into.replace(names.keys.sort.map {|n| names[n]})
+ end
+end
+
+class RDoc::RI::ClassDescription < RDoc::RI::ModuleDescription
+ attr_accessor :superclass
+
+ def display_name
+ "Class"
+ end
+
+ def superclass_string
+ if @superclass && @superclass != "Object"
+ @superclass
+ else
+ nil
+ end
+ end
+end
+
+class RDoc::RI::MethodDescription < RDoc::RI::Description
+
+ attr_accessor :is_class_method
+ attr_accessor :visibility
+ attr_accessor :block_params
+ attr_accessor :is_singleton
+ attr_accessor :aliases
+ attr_accessor :is_alias_for
+ attr_accessor :params
+ attr_accessor :source_path
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/display.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/display.rb
new file mode 100644
index 000000000..173995943
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/display.rb
@@ -0,0 +1,340 @@
+require 'rdoc/ri'
+
+##
+# This is a kind of 'flag' module. If you want to write your own 'ri' display
+# module (perhaps because you're writing an IDE), you write a class which
+# implements the various 'display' methods in RDoc::RI::DefaultDisplay, and
+# include the RDoc::RI::Display module in that class.
+#
+# To access your class from the command line, you can do
+#
+# ruby -r <your source file> ../ri ....
+
+module RDoc::RI::Display
+
+ @@display_class = nil
+
+ def self.append_features(display_class)
+ @@display_class = display_class
+ end
+
+ def self.new(*args)
+ @@display_class.new(*args)
+ end
+
+end
+
+##
+# A paging display module. Uses the RDoc::RI::Formatter class to do the actual
+# presentation.
+
+class RDoc::RI::DefaultDisplay
+
+ include RDoc::RI::Display
+
+ attr_reader :formatter
+
+ def initialize(formatter, width, use_stdout, output = $stdout)
+ @use_stdout = use_stdout
+ @formatter = formatter.new output, width, " "
+ end
+
+ ##
+ # Display information about +klass+. Fetches additional information from
+ # +ri_reader+ as necessary.
+
+ def display_class_info(klass)
+ page do
+ superclass = klass.superclass
+
+ if superclass
+ superclass = " < " + superclass
+ else
+ superclass = ""
+ end
+
+ @formatter.draw_line(klass.display_name + ": " +
+ klass.full_name + superclass)
+
+ display_flow(klass.comment)
+ @formatter.draw_line
+
+ unless klass.includes.empty?
+ @formatter.blankline
+ @formatter.display_heading("Includes:", 2, "")
+ incs = []
+
+ klass.includes.each do |inc|
+ incs << inc.name
+ end
+
+ @formatter.wrap(incs.sort.join(', '))
+ end
+
+ unless klass.constants.empty?
+ @formatter.blankline
+ @formatter.display_heading("Constants:", 2, "")
+
+ constants = klass.constants.sort_by { |constant| constant.name }
+
+ constants.each do |constant|
+ @formatter.wrap "#{constant.name} = #{constant.value}"
+ if constant.comment then
+ @formatter.indent do
+ @formatter.display_flow constant.comment
+ end
+ else
+ @formatter.break_to_newline
+ end
+ end
+ end
+
+ unless klass.attributes.empty? then
+ @formatter.blankline
+ @formatter.display_heading 'Attributes:', 2, ''
+
+ attributes = klass.attributes.sort_by { |attribute| attribute.name }
+
+ attributes.each do |attribute|
+ if attribute.comment then
+ @formatter.wrap "#{attribute.name} (#{attribute.rw}):"
+ @formatter.indent do
+ @formatter.display_flow attribute.comment
+ end
+ else
+ @formatter.wrap "#{attribute.name} (#{attribute.rw})"
+ @formatter.break_to_newline
+ end
+ end
+ end
+
+ return display_class_method_list(klass)
+ end
+ end
+
+ ##
+ # Given a Hash mapping a class' methods to method types (returned by
+ # display_class_method_list), this method allows the user to choose one of
+ # the methods.
+
+ def get_class_method_choice(method_map)
+ end
+
+ ##
+ # Display methods on +klass+. Returns a hash mapping method name to method
+ # contents
+
+ def display_class_method_list(klass)
+ method_map = {}
+
+ class_data = [
+ :class_methods,
+ :class_method_extensions,
+ :instance_methods,
+ :instance_method_extensions,
+ ]
+
+ class_data.each do |data_type|
+ data = klass.send data_type
+
+ unless data.nil? or data.empty? then
+ @formatter.blankline
+
+ heading = data_type.to_s.split('_').join(' ').capitalize << ':'
+ @formatter.display_heading heading, 2, ''
+
+ method_names = []
+ data.each do |item|
+ method_names << item.name
+
+ if(data_type == :class_methods ||
+ data_type == :class_method_extensions) then
+ method_map["::#{item.name}"] = :class
+ method_map[item.name] = :class
+ else
+ #
+ # Since we iterate over instance methods after class methods,
+ # an instance method always will overwrite the unqualified
+ # class method entry for a class method of the same name.
+ #
+ method_map["##{item.name}"] = :instance
+ method_map[item.name] = :instance
+ end
+ end
+ method_names.sort!
+
+ @formatter.wrap method_names.join(', ')
+ end
+ end
+
+ method_map
+ end
+ private :display_class_method_list
+
+ ##
+ # Display an Array of RDoc::Markup::Flow objects, +flow+.
+
+ def display_flow(flow)
+ if flow and not flow.empty? then
+ @formatter.display_flow flow
+ else
+ @formatter.wrap '[no description]'
+ end
+ end
+
+ ##
+ # Display information about +method+.
+
+ def display_method_info(method)
+ page do
+ @formatter.draw_line(method.full_name)
+ display_params(method)
+
+ @formatter.draw_line
+ display_flow(method.comment)
+
+ if method.aliases and not method.aliases.empty? then
+ @formatter.blankline
+ aka = "(also known as #{method.aliases.map { |a| a.name }.join(', ')})"
+ @formatter.wrap aka
+ end
+ end
+ end
+
+ ##
+ # Display the list of +methods+.
+
+ def display_method_list(methods)
+ page do
+ @formatter.wrap "More than one method matched your request. You can refine your search by asking for information on one of:"
+ @formatter.blankline
+
+ methods.each do |method|
+ @formatter.raw_print_line "#{method.full_name} [#{method.source_path}]\n"
+ end
+ end
+ end
+
+ ##
+ # Display a list of +methods+ and allow the user to select one of them.
+
+ def display_method_list_choice(methods)
+ page do
+ @formatter.wrap "More than one method matched your request. Please choose one of the possible matches."
+ @formatter.blankline
+
+ methods.each_with_index do |method, index|
+ @formatter.raw_print_line "%3d %s [%s]\n" % [index + 1, method.full_name, method.source_path]
+ end
+
+ @formatter.raw_print_line ">> "
+
+ choice = $stdin.gets.strip!
+
+ if(choice == '')
+ return
+ end
+
+ choice = choice.to_i
+
+ if ((choice == 0) || (choice > methods.size)) then
+ @formatter.raw_print_line "Invalid choice!\n"
+ else
+ method = methods[choice - 1]
+ display_method_info(method)
+ end
+ end
+ end
+
+ ##
+ # Display the params for +method+.
+
+ def display_params(method)
+ params = method.params
+
+ if params[0,1] == "(" then
+ if method.is_singleton
+ params = method.full_name + params
+ else
+ params = method.name + params
+ end
+ end
+
+ params.split(/\n/).each do |param|
+ @formatter.wrap param
+ @formatter.break_to_newline
+ end
+
+ @formatter.blankline
+ @formatter.wrap("From #{method.source_path}")
+ end
+
+ ##
+ # List the classes in +classes+.
+
+ def list_known_classes(classes)
+ if classes.empty? then
+ warn_no_database
+ else
+ page do
+ @formatter.draw_line "Known classes and modules"
+ @formatter.blankline
+
+ classes.sort.each do |klass|
+ @formatter.wrap klass
+ end
+ end
+ end
+ end
+
+ ##
+ # Paginates output through a pager program.
+
+ def page
+ if pager = setup_pager then
+ begin
+ orig_output = @formatter.output
+ @formatter.output = pager
+ yield
+ ensure
+ @formatter.output = orig_output
+ pager.close
+ end
+ else
+ yield
+ end
+ rescue Errno::EPIPE
+ end
+
+ ##
+ # Sets up a pager program to pass output through.
+
+ def setup_pager
+ unless @use_stdout then
+ for pager in [ ENV['PAGER'], "less", "more", 'pager' ].compact.uniq
+ return IO.popen(pager, "w") rescue nil
+ end
+ @use_stdout = true
+ nil
+ end
+ end
+
+ ##
+ # Displays a message that describes how to build RI data.
+
+ def warn_no_database
+ output = @formatter.output
+
+ output.puts "No ri data found"
+ output.puts
+ output.puts "If you've installed Ruby yourself, you need to generate documentation using:"
+ output.puts
+ output.puts " make install-doc"
+ output.puts
+ output.puts "from the same place you ran `make` to build ruby."
+ output.puts
+ output.puts "If you installed Ruby from a packaging system, then you may need to"
+ output.puts "install an additional package, or ask the packager to enable ri generation."
+ end
+
+end
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/driver.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/driver.rb
new file mode 100644
index 000000000..310ff8487
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/driver.rb
@@ -0,0 +1,828 @@
+require 'abbrev'
+require 'optparse'
+require 'yaml'
+
+begin
+ require 'readline'
+rescue LoadError
+end
+
+require 'rdoc/ri'
+require 'rdoc/ri/paths'
+require 'rdoc/ri/formatter'
+require 'rdoc/ri/display'
+require 'fileutils'
+require 'rdoc/markup'
+require 'rdoc/markup/to_flow'
+
+class RDoc::RI::Driver
+
+ ##
+ # This class offers both Hash and OpenStruct functionality. We convert from
+ # the Core Hash to this before calling any of the display methods, in order
+ # to give the display methods a cleaner API for accessing the data.
+
+ class OpenStructHash < Hash
+
+ ##
+ # This method converts from a Hash to an OpenStructHash.
+
+ def self.convert(object)
+ case object
+ when Hash then
+ new_hash = new # Convert Hash -> OpenStructHash
+
+ object.each do |key, value|
+ new_hash[key] = convert value
+ end
+
+ new_hash
+ when Array then
+ object.map do |element|
+ convert element
+ end
+ else
+ object
+ end
+ end
+
+ def merge_enums(other)
+ other.each do |k, v|
+ if self[k] then
+ case v
+ when Array then
+ # HACK dunno
+ if String === self[k] and self[k].empty? then
+ self[k] = v
+ else
+ self[k] += v
+ end
+ when Hash then
+ self[k].update v
+ else
+ # do nothing
+ end
+ else
+ self[k] = v
+ end
+ end
+ end
+
+ def method_missing method, *args
+ self[method.to_s]
+ end
+ end
+
+ class Error < RDoc::RI::Error; end
+
+ class NotFoundError < Error
+ def message
+ "Nothing known about #{super}"
+ end
+ end
+
+ attr_accessor :homepath # :nodoc:
+
+ ##
+ # Default options for ri
+
+ def self.default_options
+ options = {}
+ options[:use_stdout] = !$stdout.tty?
+ options[:width] = 72
+ options[:formatter] = RDoc::RI::Formatter.for 'plain'
+ options[:interactive] = false
+ options[:use_cache] = true
+
+ # By default all standard paths are used.
+ options[:use_system] = true
+ options[:use_site] = true
+ options[:use_home] = true
+ options[:use_gems] = true
+ options[:extra_doc_dirs] = []
+
+ return options
+ end
+
+ ##
+ # Parses +argv+ and returns a Hash of options
+
+ def self.process_args(argv)
+ options = default_options
+
+ opts = OptionParser.new do |opt|
+ opt.program_name = File.basename $0
+ opt.version = RDoc::VERSION
+ opt.release = nil
+ opt.summary_indent = ' ' * 4
+
+ directories = [
+ RDoc::RI::Paths::SYSDIR,
+ RDoc::RI::Paths::SITEDIR,
+ RDoc::RI::Paths::HOMEDIR
+ ]
+
+ if RDoc::RI::Paths::GEMDIRS then
+ Gem.path.each do |dir|
+ directories << "#{dir}/doc/*/ri"
+ end
+ end
+
+ opt.banner = <<-EOT
+Usage: #{opt.program_name} [options] [names...]
+
+Where name can be:
+
+ Class | Class::method | Class#method | Class.method | method
+
+All class names may be abbreviated to their minimum unambiguous form. If a name
+is ambiguous, all valid options will be listed.
+
+The form '.' method matches either class or instance methods, while #method
+matches only instance and ::method matches only class methods.
+
+For example:
+
+ #{opt.program_name} Fil
+ #{opt.program_name} File
+ #{opt.program_name} File.new
+ #{opt.program_name} zip
+
+Note that shell quoting may be required for method names containing
+punctuation:
+
+ #{opt.program_name} 'Array.[]'
+ #{opt.program_name} compact\\!
+
+By default ri searches for documentation in the following directories:
+
+ #{directories.join "\n "}
+
+Specifying the --system, --site, --home, --gems or --doc-dir options will
+limit ri to searching only the specified directories.
+
+Options may also be set in the 'RI' environment variable.
+ EOT
+
+ opt.separator nil
+ opt.separator "Options:"
+ opt.separator nil
+
+ opt.on("--fmt=FORMAT", "--format=FORMAT", "-f",
+ RDoc::RI::Formatter::FORMATTERS.keys,
+ "Format to use when displaying output:",
+ " #{RDoc::RI::Formatter.list}",
+ "Use 'bs' (backspace) with most pager",
+ "programs. To use ANSI, either disable the",
+ "pager or tell the pager to allow control",
+ "characters.") do |value|
+ options[:formatter] = RDoc::RI::Formatter.for value
+ end
+
+ opt.separator nil
+
+ opt.on("--doc-dir=DIRNAME", "-d", Array,
+ "List of directories from which to source",
+ "documentation in addition to the standard",
+ "directories. May be repeated.") do |value|
+ value.each do |dir|
+ unless File.directory? dir then
+ raise OptionParser::InvalidArgument, "#{dir} is not a directory"
+ end
+
+ options[:extra_doc_dirs] << File.expand_path(dir)
+ end
+ end
+
+ opt.separator nil
+
+ opt.on("--[no-]use-cache",
+ "Whether or not to use ri's cache.",
+ "True by default.") do |value|
+ options[:use_cache] = value
+ end
+
+ opt.separator nil
+
+ opt.on("--no-standard-docs",
+ "Do not include documentation from",
+ "the Ruby standard library, site_lib,",
+ "installed gems, or ~/.rdoc.",
+ "Equivalent to specifying",
+ "the options --no-system, --no-site, --no-gems,",
+ "and --no-home") do
+ options[:use_system] = false
+ options[:use_site] = false
+ options[:use_gems] = false
+ options[:use_home] = false
+ end
+
+ opt.separator nil
+
+ opt.on("--[no-]system",
+ "Include documentation from Ruby's standard",
+ "library. Defaults to true.") do |value|
+ options[:use_system] = value
+ end
+
+ opt.separator nil
+
+ opt.on("--[no-]site",
+ "Include documentation from libraries",
+ "installed in site_lib.",
+ "Defaults to true.") do |value|
+ options[:use_site] = value
+ end
+
+ opt.separator nil
+
+ opt.on("--[no-]gems",
+ "Include documentation from RubyGems.",
+ "Defaults to true.") do |value|
+ options[:use_gems] = value
+ end
+
+ opt.separator nil
+
+ opt.on("--[no-]home",
+ "Include documentation stored in ~/.rdoc.",
+ "Defaults to true.") do |value|
+ options[:use_home] = value
+ end
+
+ opt.separator nil
+
+ opt.on("--list-doc-dirs",
+ "List the directories from which ri will",
+ "source documentation on stdout and exit.") do
+ options[:list_doc_dirs] = true
+ end
+
+ opt.separator nil
+
+ opt.on("--no-pager", "-T",
+ "Send output directly to stdout,",
+ "rather than to a pager.") do
+ options[:use_stdout] = true
+ end
+
+ opt.on("--interactive", "-i",
+ "This makes ri go into interactive mode.",
+ "When ri is in interactive mode it will",
+ "allow the user to disambiguate lists of",
+ "methods in case multiple methods match",
+ "against a method search string. It also",
+ "will allow the user to enter in a method",
+ "name (with auto-completion, if readline",
+ "is supported) when viewing a class.") do
+ options[:interactive] = true
+ end
+
+ opt.separator nil
+
+ opt.on("--width=WIDTH", "-w", OptionParser::DecimalInteger,
+ "Set the width of the output.") do |value|
+ options[:width] = value
+ end
+ end
+
+ argv = ENV['RI'].to_s.split.concat argv
+
+ opts.parse! argv
+
+ options[:names] = argv
+
+ options[:formatter] ||= RDoc::RI::Formatter.for('plain')
+ options[:use_stdout] ||= !$stdout.tty?
+ options[:use_stdout] ||= options[:interactive]
+ options[:width] ||= 72
+
+ options
+
+ rescue OptionParser::InvalidArgument, OptionParser::InvalidOption => e
+ puts opts
+ puts
+ puts e
+ exit 1
+ end
+
+ ##
+ # Runs the ri command line executable using +argv+
+
+ def self.run(argv = ARGV)
+ options = process_args argv
+ ri = new options
+ ri.run
+ end
+
+ def initialize(initial_options={})
+ options = self.class.default_options.update(initial_options)
+
+ @names = options[:names]
+ @class_cache_name = 'classes'
+
+ @doc_dirs = RDoc::RI::Paths.path(options[:use_system],
+ options[:use_site],
+ options[:use_home],
+ options[:use_gems],
+ options[:extra_doc_dirs])
+
+ @homepath = RDoc::RI::Paths.raw_path(false, false, true, false).first
+ @homepath = @homepath.sub(/\.rdoc/, '.ri')
+ @sys_dir = RDoc::RI::Paths.raw_path(true, false, false, false).first
+ @list_doc_dirs = options[:list_doc_dirs]
+
+ FileUtils.mkdir_p cache_file_path unless File.directory? cache_file_path
+ @cache_doc_dirs_path = File.join cache_file_path, ".doc_dirs"
+
+ @use_cache = options[:use_cache]
+ @class_cache = nil
+
+ @interactive = options[:interactive]
+ @display = RDoc::RI::DefaultDisplay.new(options[:formatter],
+ options[:width],
+ options[:use_stdout])
+ end
+
+ ##
+ # Cache of classes ri knows about
+
+ def class_cache
+ return @class_cache if @class_cache
+
+ # Get the documentation directories used to make the cache in order to see
+ # whether the cache is valid for the current ri instantiation.
+ if(File.readable?(@cache_doc_dirs_path))
+ cache_doc_dirs = IO.read(@cache_doc_dirs_path).split("\n")
+ else
+ cache_doc_dirs = []
+ end
+
+ newest = map_dirs('created.rid') do |f|
+ File.mtime f if test ?f, f
+ end.max
+
+ # An up to date cache file must have been created more recently than
+ # the last modification of any of the documentation directories. It also
+ # must have been created with the same documentation directories
+ # as those from which ri currently is sourcing documentation.
+ up_to_date = (File.exist?(class_cache_file_path) and
+ newest and newest < File.mtime(class_cache_file_path) and
+ (cache_doc_dirs == @doc_dirs))
+
+ if up_to_date and @use_cache then
+ open class_cache_file_path, 'rb' do |fp|
+ begin
+ @class_cache = Marshal.load fp.read
+ rescue
+ #
+ # This shouldn't be necessary, since the up_to_date logic above
+ # should force the cache to be recreated when a new version of
+ # rdoc is installed. This seems like a worthwhile enhancement
+ # to ri's robustness, however.
+ #
+ $stderr.puts "Error reading the class cache; recreating the class cache!"
+ @class_cache = create_class_cache
+ end
+ end
+ else
+ @class_cache = create_class_cache
+ end
+
+ @class_cache
+ end
+
+ ##
+ # Creates the class cache if it is empty
+
+ def create_class_cache
+ class_cache = OpenStructHash.new
+
+ if(@use_cache)
+ # Dump the documentation directories to a file in the cache, so that
+ # we only will use the cache for future instantiations with identical
+ # documentation directories.
+ File.open @cache_doc_dirs_path, "wb" do |fp|
+ fp << @doc_dirs.join("\n")
+ end
+ end
+
+ classes = map_dirs('**/cdesc*.yaml') { |f| Dir[f] }
+ warn "Updating ri class cache with #{classes.size} classes..."
+ populate_class_cache class_cache, classes
+
+ write_cache class_cache, class_cache_file_path
+
+ class_cache
+ end
+
+ ##
+ # Populates +class_cache+ with +classes+, adding +extension+ data for found
+ # methods when asked
+
+ def populate_class_cache(class_cache, classes, extension = false)
+ classes.each do |cdesc|
+ desc = read_yaml cdesc
+ klassname = desc["full_name"]
+
+ unless class_cache.has_key? klassname then
+ desc["display_name"] = "Class"
+ desc["sources"] = [cdesc]
+ desc["instance_method_extensions"] = []
+ desc["class_method_extensions"] = []
+ class_cache[klassname] = desc
+ else
+ klass = class_cache[klassname]
+
+ if extension then
+ desc["instance_method_extensions"] = desc.delete "instance_methods"
+ desc["class_method_extensions"] = desc.delete "class_methods"
+ end
+
+ klass.merge_enums desc
+ klass["sources"] << cdesc
+ end
+ end
+ end
+
+ ##
+ # Path to the class_cache
+
+ def class_cache_file_path
+ File.join cache_file_path, @class_cache_name
+ end
+
+ ##
+ # Path to the cache file for +klassname+
+
+ def cache_file_for(klassname)
+ File.join cache_file_path, klassname.gsub(/:+/, "-")
+ end
+
+ ##
+ # Directory where cache files live
+
+ def cache_file_path
+ File.join @homepath, 'cache'
+ end
+
+ ##
+ # Displays the module, class or method +name+. For methods, locates the
+ # method in the ancestors list if it isn't in the named module.
+
+ def display_name(name)
+ if class_cache.key? name then
+ method_map = display_class name
+ elsif name =~ /::|\#|\./ then
+ method = nil
+ klass, = parse_name name
+
+ klass = expand_klass klass unless class_cache.key? klass
+
+ orig_klass = klass
+ orig_name = name
+
+ loop do
+ method = lookup_method name, klass
+
+ break if method
+
+ ancestor = lookup_ancestor klass, orig_klass
+
+ break unless ancestor
+
+ name = name.sub klass, ancestor
+ klass = ancestor
+ end
+
+ raise NotFoundError, orig_name unless method
+
+ display_method method
+ else
+ methods = select_methods(/#{name}/)
+
+ if methods.size == 0
+ raise NotFoundError, name
+ elsif methods.size == 1
+ display_method methods[0]
+ else
+ @display.display_method_list methods
+ end
+ end
+ end
+
+ ##
+ # Displays info for class or module +name+
+
+ def display_class(name)
+ klass = class_cache[name]
+ @display.display_class_info klass
+ end
+
+ ##
+ # Displays info for method +method+
+
+ def display_method(method)
+ @display.display_method_info method
+ end
+
+ ##
+ # Runs ri interactively using Readline if it is available.
+
+ def interactive
+ formatter = @display.formatter
+
+ if defined? Readline then
+ # prepare abbreviations for tab completion
+ klasses = class_cache.keys
+
+ Readline.completion_proc = proc do |name|
+ case name
+ when /(#|\.|::)([^A-Z]|$)/ then
+ methods = []
+ method_type = $1 == '.' ? '#|::' : $1
+
+ klass, method = if $2.empty? then
+ [$`, '']
+ else
+ parse_name name
+ end
+
+ cache = load_cache_for klass
+
+ methods += cache.keys.select do |method_name|
+ method_name =~ /^#{klass}#{method_type}#{method}/
+ end
+
+ # TODO ancestor lookup
+
+ if method_type == '::' and method.empty? then
+ methods += klasses.grep(/^#{klass}::/)
+ end
+
+ methods
+ when /^[A-Z]\w*/ then
+ klasses.grep(/^#{name}/)
+ else
+ []
+ end
+ end
+ end
+
+ formatter.raw_print_line "\nEnter the method name you want to look up.\n"
+
+ if defined? Readline then
+ formatter.raw_print_line "You can use tab to autocomplete.\n"
+ end
+
+ formatter.raw_print_line "Enter a blank line to exit.\n\n"
+
+ loop do
+ name = if defined? Readline then
+ Readline.readline ">> "
+ else
+ formatter.raw_print_line ">> "
+ $stdin.gets
+ end
+
+ return if name.nil? or name.empty?
+
+ name = name.strip
+
+ begin
+ display_name name
+ rescue NotFoundError => e
+ formatter.raw_print_line "#{e.message}\n"
+ end
+ end
+
+ rescue Interrupt
+ exit
+ end
+
+ ##
+ # Expands abbreviated klass +klass+ into a fully-qualified klass. "Zl::Da"
+ # will be expanded to Zlib::DataError.
+
+ def expand_klass(klass)
+ klass.split('::').inject '' do |expanded, klass_part|
+ expanded << '::' unless expanded.empty?
+ short = expanded << klass_part
+
+ subset = class_cache.keys.select do |klass_name|
+ klass =~ /^#{expanded}[^:]*$/
+ end
+
+ abbrevs = Abbrev.abbrev subset
+
+ expanded = abbrevs[short]
+
+ raise NotFoundError, short unless expanded
+
+ expanded.dup
+ end
+ end
+
+ ##
+ # Loads the cache for +klassname+
+
+ def load_cache_for(klassname)
+ path = cache_file_for klassname
+
+ cache = nil
+
+ if File.exist? path and
+ File.mtime(path) >= File.mtime(class_cache_file_path) and
+ @use_cache then
+ open path, 'rb' do |fp|
+ begin
+ cache = Marshal.load fp.read
+ rescue
+ #
+ # The cache somehow is bad. Recreate the cache.
+ #
+ $stderr.puts "Error reading the cache for #{klassname}; recreating the cache!"
+ cache = create_cache_for klassname, path
+ end
+ end
+ else
+ cache = create_cache_for klassname, path
+ end
+
+ cache
+ end
+
+ ##
+ # Writes a cache file for +klassname+ to +path+
+
+ def create_cache_for(klassname, path)
+ klass = class_cache[klassname]
+ return nil unless klass
+
+ method_files = klass["sources"]
+ cache = OpenStructHash.new
+
+ method_files.each do |f|
+ system_file = f.index(@sys_dir) == 0
+ Dir[File.join(File.dirname(f), "*")].each do |yaml|
+ next unless yaml =~ /yaml$/
+ next if yaml =~ /cdesc-[^\/]+yaml$/
+
+ method = read_yaml yaml
+
+ if system_file then
+ method["source_path"] = "Ruby #{RDoc::RI::Paths::VERSION}"
+ else
+ gem = Gem.path.any? do |gem_path|
+ pattern = File.join Regexp.escape(gem_path), 'doc', '(.*?)', ''
+
+ f =~ /^#{pattern}/
+ end
+
+ method["source_path"] = if gem then
+ "gem #{$1}"
+ else
+ f
+ end
+ end
+
+ name = method["full_name"]
+ cache[name] = method
+ end
+ end
+
+ write_cache cache, path
+ end
+
+ ##
+ # Finds the next ancestor of +orig_klass+ after +klass+.
+
+ def lookup_ancestor(klass, orig_klass)
+ # This is a bit hacky, but ri will go into an infinite loop otherwise,
+ # since Object has an Object ancestor for some reason. Depending on the
+ # documentation state, I've seen Kernel as an ancestor of Object and not
+ # as an ancestor of Object.
+ if orig_klass == "Object" && (klass == "Kernel" || klass == "Object") then
+ return nil
+ end
+
+ cache = class_cache[orig_klass]
+
+ return nil unless cache
+
+ ancestors = [orig_klass]
+ ancestors.push(*cache.includes.map { |inc| inc['name'] })
+ ancestors << cache.superclass
+
+ ancestor_index = ancestors.index klass
+
+ if ancestor_index
+ ancestor = ancestors[ancestors.index(klass) + 1]
+ return ancestor if ancestor
+ end
+
+ lookup_ancestor klass, cache.superclass
+ end
+
+ ##
+ # Finds the method
+
+ def lookup_method(name, klass)
+ cache = load_cache_for klass
+ return nil unless cache
+
+ method = cache[name.gsub('.', '#')]
+ method = cache[name.gsub('.', '::')] unless method
+ method
+ end
+
+ def map_dirs(file_name)
+ @doc_dirs.map { |dir| yield File.join(dir, file_name) }.flatten.compact
+ end
+
+ ##
+ # Extract the class and method name parts from +name+ like Foo::Bar#baz
+
+ def parse_name(name)
+ parts = name.split(/(::|\#|\.)/)
+
+ if parts[-2] != '::' or parts.last !~ /^[A-Z]/ then
+ meth = parts.pop
+ parts.pop
+ end
+
+ klass = parts.join
+
+ [klass, meth]
+ end
+
+ ##
+ # Reads ri YAML data from +path+, converting RDoc 1.x classes to RDoc 2.x
+ # classes
+
+ def read_yaml(path)
+ data = File.read path
+
+ # Necessary to be backward-compatible with documentation generated
+ # by earliar RDoc versions.
+ data = data.gsub(/ \!ruby\/(object|struct):(RDoc::RI|RI).*/, '')
+ data = data.gsub(/ \!ruby\/(object|struct):SM::(\S+)/,
+ ' !ruby/\1:RDoc::Markup::\2')
+
+ OpenStructHash.convert YAML.load(data)
+ end
+
+ ##
+ # Looks up and displays ri data according to the options given.
+
+ def run
+ if @list_doc_dirs then
+ puts @doc_dirs
+ elsif @interactive then
+ interactive
+ elsif @names.empty? then
+ @display.list_known_classes class_cache.keys.sort
+ else
+ @names.each do |name|
+ display_name name
+ end
+ end
+ rescue NotFoundError => e
+ abort e.message
+ end
+
+ ##
+ # Selects methods matching +pattern+ from all modules
+
+ def select_methods(pattern)
+ methods = []
+ class_cache.keys.sort.each do |klass|
+ class_cache[klass]["instance_methods"].map{|h|h["name"]}.grep(pattern) do |name|
+ method = load_cache_for(klass)[klass+'#'+name]
+ methods << method if method
+ end
+ class_cache[klass]["class_methods"].map{|h|h["name"]}.grep(pattern) do |name|
+ method = load_cache_for(klass)[klass+'::'+name]
+ methods << method if method
+ end
+ end
+ methods
+ end
+
+ ##
+ # Writes +cache+ to +path+
+
+ def write_cache(cache, path)
+ if @use_cache then
+ File.open path, "wb" do |cache_file|
+ Marshal.dump cache, cache_file
+ end
+ end
+
+ cache
+ rescue Errno::EISDIR # HACK toplevel, replace with main
+ cache
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/formatter.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/formatter.rb
new file mode 100644
index 000000000..b2c9d07b3
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/formatter.rb
@@ -0,0 +1,654 @@
+require 'rdoc/ri'
+require 'rdoc/markup'
+
+class RDoc::RI::Formatter
+
+ attr_writer :indent
+ attr_accessor :output
+
+ FORMATTERS = { }
+
+ def self.for(name)
+ FORMATTERS[name.downcase]
+ end
+
+ def self.list
+ FORMATTERS.keys.sort.join ", "
+ end
+
+ def initialize(output, width, indent)
+ @output = output
+ @width = width
+ @indent = indent
+ @original_indent = indent.dup
+ end
+
+ def draw_line(label=nil)
+ len = @width
+ len -= (label.size + 1) if label
+
+ if len > 0 then
+ @output.print '-' * len
+ if label
+ @output.print ' '
+ bold_print label
+ end
+
+ @output.puts
+ else
+ @output.print '-' * @width
+ @output.puts
+
+ @output.puts label
+ end
+ end
+
+ def indent
+ return @indent unless block_given?
+
+ begin
+ indent = @indent.dup
+ @indent += @original_indent
+ yield
+ ensure
+ @indent = indent
+ end
+ end
+
+ def wrap(txt, prefix=@indent, linelen=@width)
+ return unless txt && !txt.empty?
+
+ work = conv_markup(txt)
+ textLen = linelen - prefix.length
+ patt = Regexp.new("^(.{0,#{textLen}})[ \n]")
+ next_prefix = prefix.tr("^ ", " ")
+
+ res = []
+
+ while work.length > textLen
+ if work =~ patt
+ res << $1
+ work.slice!(0, $&.length)
+ else
+ res << work.slice!(0, textLen)
+ end
+ end
+ res << work if work.length.nonzero?
+ @output.puts(prefix + res.join("\n" + next_prefix))
+ end
+
+ def blankline
+ @output.puts
+ end
+
+ ##
+ # Called when we want to ensure a new 'wrap' starts on a newline. Only
+ # needed for HtmlFormatter, because the rest do their own line breaking.
+
+ def break_to_newline
+ end
+
+ def bold_print(txt)
+ @output.print txt
+ end
+
+ def raw_print_line(txt)
+ @output.print txt
+ end
+
+ ##
+ # Convert HTML entities back to ASCII
+
+ def conv_html(txt)
+ txt = txt.gsub(/&gt;/, '>')
+ txt.gsub!(/&lt;/, '<')
+ txt.gsub!(/&quot;/, '"')
+ txt.gsub!(/&amp;/, '&')
+ txt
+ end
+
+ ##
+ # Convert markup into display form
+
+ def conv_markup(txt)
+ txt = txt.gsub(%r{<tt>(.*?)</tt>}, '+\1+')
+ txt.gsub!(%r{<code>(.*?)</code>}, '+\1+')
+ txt.gsub!(%r{<b>(.*?)</b>}, '*\1*')
+ txt.gsub!(%r{<em>(.*?)</em>}, '_\1_')
+ txt
+ end
+
+ def display_list(list)
+ case list.type
+ when :BULLET
+ prefixer = proc { |ignored| @indent + "* " }
+
+ when :NUMBER, :UPPERALPHA, :LOWERALPHA then
+ start = case list.type
+ when :NUMBER then 1
+ when :UPPERALPHA then 'A'
+ when :LOWERALPHA then 'a'
+ end
+
+ prefixer = proc do |ignored|
+ res = @indent + "#{start}.".ljust(4)
+ start = start.succ
+ res
+ end
+
+ when :LABELED, :NOTE then
+ longest = 0
+
+ list.contents.each do |item|
+ if RDoc::Markup::Flow::LI === item and item.label.length > longest then
+ longest = item.label.length
+ end
+ end
+
+ longest += 1
+
+ prefixer = proc { |li| @indent + li.label.ljust(longest) }
+
+ else
+ raise ArgumentError, "unknown list type #{list.type}"
+ end
+
+ list.contents.each do |item|
+ if RDoc::Markup::Flow::LI === item then
+ prefix = prefixer.call item
+ display_flow_item item, prefix
+ else
+ display_flow_item item
+ end
+ end
+ end
+
+ def display_flow_item(item, prefix = @indent)
+ case item
+ when RDoc::Markup::Flow::P, RDoc::Markup::Flow::LI
+ wrap(conv_html(item.body), prefix)
+ blankline
+
+ when RDoc::Markup::Flow::LIST
+ display_list(item)
+
+ when RDoc::Markup::Flow::VERB
+ display_verbatim_flow_item(item, @indent)
+
+ when RDoc::Markup::Flow::H
+ display_heading(conv_html(item.text), item.level, @indent)
+
+ when RDoc::Markup::Flow::RULE
+ draw_line
+
+ else
+ raise RDoc::Error, "Unknown flow element: #{item.class}"
+ end
+ end
+
+ def display_verbatim_flow_item(item, prefix=@indent)
+ item.body.split(/\n/).each do |line|
+ @output.print @indent, conv_html(line), "\n"
+ end
+ blankline
+ end
+
+ def display_heading(text, level, indent)
+ text = strip_attributes text
+
+ case level
+ when 1 then
+ ul = "=" * text.length
+ @output.puts
+ @output.puts text.upcase
+ @output.puts ul
+
+ when 2 then
+ ul = "-" * text.length
+ @output.puts
+ @output.puts text
+ @output.puts ul
+ else
+ @output.print indent, text, "\n"
+ end
+
+ @output.puts
+ end
+
+ def display_flow(flow)
+ flow.each do |f|
+ display_flow_item(f)
+ end
+ end
+
+ def strip_attributes(text)
+ text.gsub(/(<\/?(?:b|code|em|i|tt)>)/, '')
+ end
+
+end
+
+##
+# Handle text with attributes. We're a base class: there are different
+# presentation classes (one, for example, uses overstrikes to handle bold and
+# underlining, while another using ANSI escape sequences.
+
+class RDoc::RI::AttributeFormatter < RDoc::RI::Formatter
+
+ BOLD = 1
+ ITALIC = 2
+ CODE = 4
+
+ ATTR_MAP = {
+ "b" => BOLD,
+ "code" => CODE,
+ "em" => ITALIC,
+ "i" => ITALIC,
+ "tt" => CODE
+ }
+
+ AttrChar = Struct.new :char, :attr
+
+ class AttributeString
+ attr_reader :txt
+
+ def initialize
+ @txt = []
+ @optr = 0
+ end
+
+ def <<(char)
+ @txt << char
+ end
+
+ def empty?
+ @optr >= @txt.length
+ end
+
+ # accept non space, then all following spaces
+ def next_word
+ start = @optr
+ len = @txt.length
+
+ while @optr < len && @txt[@optr].char != " "
+ @optr += 1
+ end
+
+ while @optr < len && @txt[@optr].char == " "
+ @optr += 1
+ end
+
+ @txt[start...@optr]
+ end
+ end
+
+ ##
+ # Overrides base class. Looks for <tt>...</tt> etc sequences and generates
+ # an array of AttrChars. This array is then used as the basis for the
+ # split.
+
+ def wrap(txt, prefix=@indent, linelen=@width)
+ return unless txt && !txt.empty?
+
+ txt = add_attributes_to(txt)
+ next_prefix = prefix.tr("^ ", " ")
+ linelen -= prefix.size
+
+ line = []
+
+ until txt.empty?
+ word = txt.next_word
+ if word.size + line.size > linelen
+ write_attribute_text(prefix, line)
+ prefix = next_prefix
+ line = []
+ end
+ line.concat(word)
+ end
+
+ write_attribute_text(prefix, line) if line.length > 0
+ end
+
+ protected
+
+ def write_attribute_text(prefix, line)
+ @output.print prefix
+ line.each do |achar|
+ @output.print achar.char
+ end
+ @output.puts
+ end
+
+ def bold_print(txt)
+ @output.print txt
+ end
+
+ private
+
+ def add_attributes_to(txt)
+ tokens = txt.split(%r{(</?(?:b|code|em|i|tt)>)})
+ text = AttributeString.new
+ attributes = 0
+ tokens.each do |tok|
+ case tok
+ when %r{^</(\w+)>$} then attributes &= ~(ATTR_MAP[$1]||0)
+ when %r{^<(\w+)>$} then attributes |= (ATTR_MAP[$1]||0)
+ else
+ tok.split(//).each {|ch| text << AttrChar.new(ch, attributes)}
+ end
+ end
+ text
+ end
+
+end
+
+##
+# This formatter generates overstrike-style formatting, which works with
+# pagers such as man and less.
+
+class RDoc::RI::OverstrikeFormatter < RDoc::RI::AttributeFormatter
+
+ BS = "\C-h"
+
+ def write_attribute_text(prefix, line)
+ @output.print prefix
+
+ line.each do |achar|
+ attr = achar.attr
+ @output.print "_", BS if (attr & (ITALIC + CODE)) != 0
+ @output.print achar.char, BS if (attr & BOLD) != 0
+ @output.print achar.char
+ end
+
+ @output.puts
+ end
+
+ ##
+ # Draw a string in bold
+
+ def bold_print(text)
+ text.split(//).each do |ch|
+ @output.print ch, BS, ch
+ end
+ end
+
+end
+
+##
+# This formatter uses ANSI escape sequences to colorize stuff works with
+# pagers such as man and less.
+
+class RDoc::RI::AnsiFormatter < RDoc::RI::AttributeFormatter
+
+ def initialize(*args)
+ super
+ @output.print "\033[0m"
+ end
+
+ def write_attribute_text(prefix, line)
+ @output.print prefix
+ curr_attr = 0
+ line.each do |achar|
+ attr = achar.attr
+ if achar.attr != curr_attr
+ update_attributes(achar.attr)
+ curr_attr = achar.attr
+ end
+ @output.print achar.char
+ end
+ update_attributes(0) unless curr_attr.zero?
+ @output.puts
+ end
+
+ def bold_print(txt)
+ @output.print "\033[1m#{txt}\033[m"
+ end
+
+ HEADINGS = {
+ 1 => ["\033[1;32m", "\033[m"],
+ 2 => ["\033[4;32m", "\033[m"],
+ 3 => ["\033[32m", "\033[m"],
+ }
+
+ def display_heading(text, level, indent)
+ level = 3 if level > 3
+ heading = HEADINGS[level]
+ @output.print indent
+ @output.print heading[0]
+ @output.print strip_attributes(text)
+ @output.puts heading[1]
+ end
+
+ private
+
+ ATTR_MAP = {
+ BOLD => "1",
+ ITALIC => "33",
+ CODE => "36"
+ }
+
+ def update_attributes(attr)
+ str = "\033["
+ for quality in [ BOLD, ITALIC, CODE]
+ unless (attr & quality).zero?
+ str << ATTR_MAP[quality]
+ end
+ end
+ @output.print str, "m"
+ end
+
+end
+
+##
+# This formatter uses HTML.
+
+class RDoc::RI::HtmlFormatter < RDoc::RI::AttributeFormatter
+
+ ##
+ # We depend on HTML4-conforming user agents to ignore an empty p element
+
+ def blankline
+ @output.puts '<p />'
+ end
+
+ ##
+ # Emboldens +text+
+
+ def bold_print(text)
+ tag("b") { text }
+ end
+
+ ##
+ # Outputs a forced line break element
+
+ def break_to_newline
+ @output.puts '<br />'
+ end
+
+ ##
+ # Outputs heading elements for +text+ with +level+ up to 4. Ignores
+ # +indent+.
+
+ def display_heading(text, level, indent)
+ level = 4 if level > 4
+ tag("h#{level}") { text }
+ @output.puts
+ end
+
+ ##
+ # Outputs +list+ which is displayed as follows:
+ #
+ # BULLET:: unordered list
+ # NUMBER:: ordered list
+ # LABELED:: definition list
+ # NOTE:: table
+
+ def display_list(list)
+ case list.type
+ when :BULLET then
+ list_type = "ul"
+ prefixer = proc { |ignored| '<li>' }
+ suffix = '</li>'
+
+ when :NUMBER, :UPPERALPHA, :LOWERALPHA then
+ list_type = "ol"
+ prefixer = proc { |ignored| '<li>' }
+ suffix = '</li>'
+
+ when :LABELED then
+ list_type = "dl"
+ prefixer = proc do |li|
+ "<dt><b>#{escape li.label}</b></dt><dd>"
+ end
+ suffix = '</dd>'
+
+ when :NOTE then
+ list_type = "table"
+ prefixer = proc do |li|
+ %{<tr valign="top"><td>#{li.label.gsub(/ /, '&nbsp;')}</td><td>}
+ end
+ suffix = '</td></tr>'
+ else
+ fail "unknown list type"
+ end
+
+ @output.print "<#{list_type}>"
+
+ list.contents.each do |item|
+ if item.kind_of? RDoc::Markup::Flow::LI
+ prefix = prefixer.call item
+ @output.print prefix
+ display_flow_item item, prefix
+ @output.print suffix
+ else
+ display_flow_item item
+ end
+ end
+
+ @output.print "</#{list_type}>"
+ end
+
+ ##
+ # Outputs a preformatted section for +item+. +prefix+ is ignored.
+
+ def display_verbatim_flow_item(item, prefix=@indent)
+ @output.print '<pre>'
+
+ item.body.split(/\n/).each do |line|
+ @output.puts escape(line)
+ end
+
+ @output.puts '</pre>'
+ end
+
+ ##
+ # Outputs a horizontal rule element, optionally labeled above with +label+ in
+ # bold.
+
+ def draw_line(label = nil)
+ bold_print label if label
+
+ @output.puts "<hr />"
+ end
+
+ def write_attribute_text(prefix, line)
+ curr_attr = 0
+
+ line.each do |achar|
+ attr = achar.attr
+ if achar.attr != curr_attr then
+ update_attributes curr_attr, achar.attr
+ curr_attr = achar.attr
+ end
+ @output.print escape(achar.char)
+ end
+
+ update_attributes curr_attr, 0 unless curr_attr.zero?
+ end
+
+ private
+
+ ATTR_MAP = {
+ BOLD => "b>",
+ ITALIC => "i>",
+ CODE => "tt>"
+ }
+
+ def update_attributes(current, wanted)
+ str = ""
+ # first turn off unwanted ones
+ off = current & ~wanted
+ for quality in [ BOLD, ITALIC, CODE]
+ if (off & quality) > 0
+ str << "</" + ATTR_MAP[quality]
+ end
+ end
+
+ # now turn on wanted
+ for quality in [ BOLD, ITALIC, CODE]
+ unless (wanted & quality).zero?
+ str << "<" << ATTR_MAP[quality]
+ end
+ end
+ @output.print str
+ end
+
+ def tag(code)
+ @output.print("<#{code}>")
+ @output.print(yield)
+ @output.print("</#{code}>")
+ end
+
+ def escape(str)
+ str = str.gsub(/&/n, '&amp;')
+ str.gsub!(/\"/n, '&quot;')
+ str.gsub!(/>/n, '&gt;')
+ str.gsub!(/</n, '&lt;')
+ str
+ end
+
+end
+
+##
+# This formatter reduces extra lines for a simpler output. It improves way
+# output looks for tools like IRC bots.
+
+class RDoc::RI::SimpleFormatter < RDoc::RI::Formatter
+
+ ##
+ # No extra blank lines
+
+ def blankline
+ end
+
+ ##
+ # Display labels only, no lines
+
+ def draw_line(label=nil)
+ unless label.nil? then
+ bold_print(label)
+ @output.puts
+ end
+ end
+
+ ##
+ # Place heading level indicators inline with heading.
+
+ def display_heading(text, level, indent)
+ text = strip_attributes(text)
+ case level
+ when 1
+ @output.puts "= " + text.upcase
+ when 2
+ @output.puts "-- " + text
+ else
+ @output.print indent, text, "\n"
+ end
+ end
+
+end
+
+RDoc::RI::Formatter::FORMATTERS['plain'] = RDoc::RI::Formatter
+RDoc::RI::Formatter::FORMATTERS['simple'] = RDoc::RI::SimpleFormatter
+RDoc::RI::Formatter::FORMATTERS['bs'] = RDoc::RI::OverstrikeFormatter
+RDoc::RI::Formatter::FORMATTERS['ansi'] = RDoc::RI::AnsiFormatter
+RDoc::RI::Formatter::FORMATTERS['html'] = RDoc::RI::HtmlFormatter
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/paths.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/paths.rb
new file mode 100644
index 000000000..2f72b9dfd
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/paths.rb
@@ -0,0 +1,93 @@
+require 'rdoc/ri'
+
+##
+# Encapsulate all the strangeness to do with finding out where to find RDoc
+# files
+#
+# We basically deal with three directories:
+#
+# 1. The 'system' documentation directory, which holds the documentation
+# distributed with Ruby, and which is managed by the Ruby install process
+# 2. The 'site' directory, which contains site-wide documentation added
+# locally.
+# 3. The 'user' documentation directory, stored under the user's own home
+# directory.
+#
+# There's contention about all this, but for now:
+#
+# system:: $datadir/ri/<ver>/system/...
+# site:: $datadir/ri/<ver>/site/...
+# user:: ~/.rdoc
+
+module RDoc::RI::Paths
+
+ #:stopdoc:
+ require 'rbconfig'
+
+ DOC_DIR = "doc/rdoc"
+
+ VERSION = RbConfig::CONFIG['ruby_version']
+
+ base = File.join(RbConfig::CONFIG['datadir'], "ri", VERSION)
+ SYSDIR = File.join(base, "system")
+ SITEDIR = File.join(base, "site")
+ homedir = ENV['HOME'] || ENV['USERPROFILE'] || ENV['HOMEPATH']
+
+ if homedir then
+ HOMEDIR = File.join(homedir, ".rdoc")
+ else
+ HOMEDIR = nil
+ end
+
+ begin
+ require 'rubygems' unless defined?(Gem) and defined?(Gem::Enable) and
+ Gem::Enable
+
+ # HACK dup'd from Gem.latest_partials and friends
+ all_paths = []
+
+ all_paths = Gem.path.map do |dir|
+ Dir[File.join(dir, 'doc', '*', 'ri')]
+ end.flatten
+
+ ri_paths = {}
+
+ all_paths.each do |dir|
+ base = File.basename File.dirname(dir)
+ if base =~ /(.*)-((\d+\.)*\d+)/ then
+ name, version = $1, $2
+ ver = Gem::Version.new version
+ if ri_paths[name].nil? or ver > ri_paths[name][0] then
+ ri_paths[name] = [ver, dir]
+ end
+ end
+ end
+
+ GEMDIRS = ri_paths.map { |k,v| v.last }.sort
+ rescue LoadError
+ GEMDIRS = []
+ end
+
+ # Returns the selected documentation directories as an Array, or PATH if no
+ # overriding directories were given.
+
+ def self.path(use_system, use_site, use_home, use_gems, *extra_dirs)
+ path = raw_path(use_system, use_site, use_home, use_gems, *extra_dirs)
+ return path.select { |directory| File.directory? directory }
+ end
+
+ # Returns the selected documentation directories including nonexistent
+ # directories. Used to print out what paths were searched if no ri was
+ # found.
+
+ def self.raw_path(use_system, use_site, use_home, use_gems, *extra_dirs)
+ path = []
+ path << extra_dirs unless extra_dirs.empty?
+ path << SYSDIR if use_system
+ path << SITEDIR if use_site
+ path << HOMEDIR if use_home
+ path << GEMDIRS if use_gems
+
+ return path.flatten.compact
+ end
+end
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/reader.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/reader.rb
new file mode 100644
index 000000000..de3c8d9af
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/reader.rb
@@ -0,0 +1,106 @@
+require 'rdoc/ri'
+require 'rdoc/ri/descriptions'
+require 'rdoc/ri/writer'
+require 'rdoc/markup/to_flow'
+
+class RDoc::RI::Reader
+
+ def initialize(ri_cache)
+ @cache = ri_cache
+ end
+
+ def top_level_namespace
+ [ @cache.toplevel ]
+ end
+
+ def lookup_namespace_in(target, namespaces)
+ result = []
+ for n in namespaces
+ result.concat(n.contained_modules_matching(target))
+ end
+ result
+ end
+
+ def find_class_by_name(full_name)
+ names = full_name.split(/::/)
+ ns = @cache.toplevel
+ for name in names
+ ns = ns.contained_class_named(name)
+ return nil if ns.nil?
+ end
+ get_class(ns)
+ end
+
+ def find_methods(name, is_class_method, namespaces)
+ result = []
+ namespaces.each do |ns|
+ result.concat ns.methods_matching(name, is_class_method)
+ end
+ result
+ end
+
+ ##
+ # Return the MethodDescription for a given MethodEntry by deserializing the
+ # YAML
+
+ def get_method(method_entry)
+ path = method_entry.path_name
+ File.open(path) { |f| RDoc::RI::Description.deserialize(f) }
+ end
+
+ ##
+ # Return a class description
+
+ def get_class(class_entry)
+ result = nil
+ for path in class_entry.path_names
+ path = RDoc::RI::Writer.class_desc_path(path, class_entry)
+ desc = File.open(path) {|f| RDoc::RI::Description.deserialize(f) }
+ if result
+ result.merge_in(desc)
+ else
+ result = desc
+ end
+ end
+ result
+ end
+
+ ##
+ # Return the names of all classes and modules
+
+ def full_class_names
+ res = []
+ find_classes_in(res, @cache.toplevel)
+ end
+
+ ##
+ # Return a list of all classes, modules, and methods
+
+ def all_names
+ res = []
+ find_names_in(res, @cache.toplevel)
+ end
+
+ private
+
+ def find_classes_in(res, klass)
+ classes = klass.classes_and_modules
+ for c in classes
+ res << c.full_name
+ find_classes_in(res, c)
+ end
+ res
+ end
+
+ def find_names_in(res, klass)
+ classes = klass.classes_and_modules
+ for c in classes
+ res << c.full_name
+ res.concat c.all_method_names
+ find_names_in(res, c)
+ end
+ res
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/util.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/util.rb
new file mode 100644
index 000000000..4e91eb978
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/util.rb
@@ -0,0 +1,79 @@
+require 'rdoc/ri'
+
+##
+# Break argument into its constituent class or module names, an
+# optional method type, and a method name
+
+class RDoc::RI::NameDescriptor
+
+ attr_reader :class_names
+ attr_reader :method_name
+
+ ##
+ # true and false have the obvious meaning. nil means we don't care
+
+ attr_reader :is_class_method
+
+ ##
+ # +arg+ may be
+ #
+ # 1. A class or module name (optionally qualified with other class or module
+ # names (Kernel, File::Stat etc)
+ # 2. A method name
+ # 3. A method name qualified by a optionally fully qualified class or module
+ # name
+ #
+ # We're fairly casual about delimiters: folks can say Kernel::puts,
+ # Kernel.puts, or Kernel\#puts for example. There's one exception: if you
+ # say IO::read, we look for a class method, but if you say IO.read, we look
+ # for an instance method
+
+ def initialize(arg)
+ @class_names = []
+ separator = nil
+
+ tokens = arg.split(/(\.|::|#)/)
+
+ # Skip leading '::', '#' or '.', but remember it might
+ # be a method name qualifier
+ separator = tokens.shift if tokens[0] =~ /^(\.|::|#)/
+
+ # Skip leading '::', but remember we potentially have an inst
+
+ # leading stuff must be class names
+
+ while tokens[0] =~ /^[A-Z]/
+ @class_names << tokens.shift
+ unless tokens.empty?
+ separator = tokens.shift
+ break unless separator == "::"
+ end
+ end
+
+ # Now must have a single token, the method name, or an empty array
+ unless tokens.empty?
+ @method_name = tokens.shift
+ # We may now have a trailing !, ?, or = to roll into
+ # the method name
+ if !tokens.empty? && tokens[0] =~ /^[!?=]$/
+ @method_name << tokens.shift
+ end
+
+ if @method_name =~ /::|\.|#/ or !tokens.empty?
+ raise RDoc::RI::Error.new("Bad argument: #{arg}")
+ end
+ if separator && separator != '.'
+ @is_class_method = separator == "::"
+ end
+ end
+ end
+
+ # Return the full class name (with '::' between the components) or "" if
+ # there's no class name
+
+ def full_class_name
+ @class_names.join("::")
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/writer.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/writer.rb
new file mode 100644
index 000000000..92aaa1c2d
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/ri/writer.rb
@@ -0,0 +1,68 @@
+require 'fileutils'
+require 'rdoc/ri'
+
+class RDoc::RI::Writer
+
+ def self.class_desc_path(dir, class_desc)
+ File.join(dir, "cdesc-" + class_desc.name + ".yaml")
+ end
+
+ ##
+ # Convert a name from internal form (containing punctuation) to an external
+ # form (where punctuation is replaced by %xx)
+
+ def self.internal_to_external(name)
+ if ''.respond_to? :ord then
+ name.gsub(/\W/) { "%%%02x" % $&[0].ord }
+ else
+ name.gsub(/\W/) { "%%%02x" % $&[0] }
+ end
+ end
+
+ ##
+ # And the reverse operation
+
+ def self.external_to_internal(name)
+ name.gsub(/%([0-9a-f]{2,2})/) { $1.to_i(16).chr }
+ end
+
+ def initialize(base_dir)
+ @base_dir = base_dir
+ end
+
+ def remove_class(class_desc)
+ FileUtils.rm_rf(path_to_dir(class_desc.full_name))
+ end
+
+ def add_class(class_desc)
+ dir = path_to_dir(class_desc.full_name)
+ FileUtils.mkdir_p(dir)
+ class_file_name = self.class.class_desc_path(dir, class_desc)
+ File.open(class_file_name, "w") do |f|
+ f.write(class_desc.serialize)
+ end
+ end
+
+ def add_method(class_desc, method_desc)
+ dir = path_to_dir(class_desc.full_name)
+ file_name = self.class.internal_to_external(method_desc.name)
+ meth_file_name = File.join(dir, file_name)
+ if method_desc.is_singleton
+ meth_file_name += "-c.yaml"
+ else
+ meth_file_name += "-i.yaml"
+ end
+
+ File.open(meth_file_name, "w") do |f|
+ f.write(method_desc.serialize)
+ end
+ end
+
+ private
+
+ def path_to_dir(class_name)
+ File.join(@base_dir, *class_name.split('::'))
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/single_class.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/single_class.rb
new file mode 100644
index 000000000..de96a6a36
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/single_class.rb
@@ -0,0 +1,8 @@
+require 'rdoc/class_module'
+
+##
+# A singleton class
+
+class RDoc::SingleClass < RDoc::ClassModule
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/stats.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/stats.rb
new file mode 100644
index 000000000..ff5255f9c
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/stats.rb
@@ -0,0 +1,178 @@
+require 'rdoc'
+require 'thread'
+
+##
+# Simple stats collector
+
+class RDoc::Stats
+
+ attr_reader :num_classes
+ attr_reader :num_files
+ attr_reader :num_methods
+ attr_reader :num_modules
+ attr_reader :total_files
+
+ def initialize(total_files, verbosity = 1)
+ @lock = Mutex.new
+
+ @num_classes = 0
+ @num_files = 0
+ @num_methods = 0
+ @num_modules = 0
+ @total_files = total_files
+
+ @start = Time.now
+
+ @display = case verbosity
+ when 0 then Quiet.new
+ when 1 then Normal.new(total_files)
+ else Verbose.new
+ end
+ end
+
+ def begin_adding(number_of_workers)
+ @display.begin_adding(number_of_workers)
+ end
+
+ def add_alias(as)
+ @lock.synchronize do
+ @display.print_alias as
+ @num_methods += 1
+ end
+ end
+
+ def add_class(klass)
+ @lock.synchronize do
+ @display.print_class klass
+ @num_classes += 1
+ end
+ end
+
+ def add_file(file)
+ @lock.synchronize do
+ @display.print_file @num_files, file
+ @num_files += 1
+ end
+ end
+
+ def add_method(method)
+ @lock.synchronize do
+ @display.print_method method
+ @num_methods += 1
+ end
+ end
+
+ def add_module(mod)
+ @lock.synchronize do
+ @display.print_module mod
+ @num_modules += 1
+ end
+ end
+
+ def done_adding
+ @lock.synchronize do
+ @display.done_adding
+ end
+ end
+
+ def print
+ puts "Files: #@num_files"
+ puts "Classes: #@num_classes"
+ puts "Modules: #@num_modules"
+ puts "Methods: #@num_methods"
+ puts "Elapsed: " + sprintf("%0.1fs", Time.now - @start)
+ end
+
+ class Quiet
+ def begin_adding(*) end
+ def print_alias(*) end
+ def print_class(*) end
+ def print_file(*) end
+ def print_method(*) end
+ def print_module(*) end
+ def done_adding(*) end
+ end
+
+ class Normal
+ def initialize(total_files)
+ @total_files = total_files
+ end
+
+ def begin_adding(number_of_workers)
+ puts "Parsing sources with #{number_of_workers} thread(s)..."
+ end
+
+ def print_file(files_so_far, filename)
+ progress_bar = sprintf("%3d%% [%2d/%2d] ",
+ 100 * (files_so_far + 1) / @total_files,
+ files_so_far + 1,
+ @total_files)
+
+ if $stdout.tty?
+ # Print a progress bar, but make sure it fits on a single line. Filename
+ # will be truncated if necessary.
+ terminal_width = (ENV['COLUMNS'] || 80).to_i
+ max_filename_size = terminal_width - progress_bar.size
+ if filename.size > max_filename_size
+ # Turn "some_long_filename.rb" to "...ong_filename.rb"
+ filename = filename[(filename.size - max_filename_size) .. -1]
+ filename[0..2] = "..."
+ end
+
+ # Pad the line with whitespaces so that leftover output from the
+ # previous line doesn't show up.
+ line = "#{progress_bar}#{filename}"
+ padding = terminal_width - line.size
+ if padding > 0
+ line << (" " * padding)
+ end
+
+ $stdout.print("#{line}\r")
+ $stdout.flush
+ else
+ puts "#{progress_bar} #{filename}"
+ end
+ end
+
+ def done_adding
+ puts "\n"
+ end
+
+ def print_alias(*) end
+ def print_class(*) end
+ def print_method(*) end
+ def print_module(*) end
+ end
+
+ class Verbose
+ def begin_adding(number_of_workers)
+ puts "Parsing sources with #{number_of_workers} thread(s)..."
+ end
+
+ def print_alias(as)
+ puts "\t\talias #{as.new_name} #{as.old_name}"
+ end
+
+ def print_class(klass)
+ puts "\tclass #{klass.full_name}"
+ end
+
+ def print_file(files_so_far, file)
+ puts file
+ end
+
+ def print_method(method)
+ puts "\t\t#{method.singleton ? '::' : '#'}#{method.name}"
+ end
+
+ def print_module(mod)
+ puts "\tmodule #{mod.full_name}"
+ end
+
+ def done_adding
+ end
+ end
+
+end
+
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/task.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/task.rb
new file mode 100644
index 000000000..67657be77
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/task.rb
@@ -0,0 +1,276 @@
+# Copyright (c) 2003, 2004 Jim Weirich, 2009 Eric Hodel
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+require 'rubygems'
+begin
+ gem 'rdoc'
+rescue Gem::LoadError
+end
+
+begin
+ gem 'rake'
+rescue Gem::LoadError
+end
+
+require 'rdoc'
+require 'rake'
+require 'rake/tasklib'
+
+##
+# Create a documentation task that will generate the RDoc files for a project.
+#
+# The RDoc::Task will create the following targets:
+#
+# [<b><em>rdoc</em></b>]
+# Main task for this RDoc task.
+#
+# [<b>:clobber_<em>rdoc</em></b>]
+# Delete all the rdoc files. This target is automatically added to the main
+# clobber target.
+#
+# [<b>:re<em>rdoc</em></b>]
+# Rebuild the rdoc files from scratch, even if they are not out of date.
+#
+# Simple Example:
+#
+# RDoc::Task.new do |rd|
+# rd.main = "README.rdoc"
+# rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
+# end
+#
+# The +rd+ object passed to the block is an RDoc::Task object. See the
+# attributes list for the RDoc::Task class for available customization options.
+#
+# == Specifying different task names
+#
+# You may wish to give the task a different name, such as if you are
+# generating two sets of documentation. For instance, if you want to have a
+# development set of documentation including private methods:
+#
+# RDoc::Task.new :rdoc_dev do |rd|
+# rd.main = "README.doc"
+# rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
+# rd.options << "--all"
+# end
+#
+# The tasks would then be named :<em>rdoc_dev</em>,
+# :clobber_<em>rdoc_dev</em>, and :re<em>rdoc_dev</em>.
+#
+# If you wish to have completely different task names, then pass a Hash as
+# first argument. With the <tt>:rdoc</tt>, <tt>:clobber_rdoc</tt> and
+# <tt>:rerdoc</tt> options, you can customize the task names to your liking.
+#
+# For example:
+#
+# RDoc::Task.new(:rdoc => "rdoc", :clobber_rdoc => "rdoc:clean",
+# :rerdoc => "rdoc:force")
+#
+# This will create the tasks <tt>:rdoc</tt>, <tt>:rdoc_clean</tt> and
+# <tt>:rdoc:force</tt>.
+
+class RDoc::Task < Rake::TaskLib
+
+ ##
+ # Name of the main, top level task. (default is :rdoc)
+
+ attr_accessor :name
+
+ ##
+ # Name of directory to receive the html output files. (default is "html")
+
+ attr_accessor :rdoc_dir
+
+ ##
+ # Title of RDoc documentation. (defaults to rdoc's default)
+
+ attr_accessor :title
+
+ ##
+ # Name of file to be used as the main, top level file of the RDoc. (default
+ # is none)
+
+ attr_accessor :main
+
+ ##
+ # Name of template to be used by rdoc. (defaults to rdoc's default)
+
+ attr_accessor :template
+
+ ##
+ # List of files to be included in the rdoc generation. (default is [])
+
+ attr_accessor :rdoc_files
+
+ ##
+ # Additional list of options to be passed rdoc. (default is [])
+
+ attr_accessor :options
+
+ ##
+ # Whether to run the rdoc process as an external shell (default is false)
+
+ attr_accessor :external
+
+ ##
+ # Create an RDoc task with the given name. See the RDoc::Task class overview
+ # for documentation.
+
+ def initialize(name = :rdoc) # :yield: self
+ if name.is_a? Hash then
+ invalid_options = name.keys.map { |k| k.to_sym } -
+ [:rdoc, :clobber_rdoc, :rerdoc]
+
+ unless invalid_options.empty? then
+ raise ArgumentError, "invalid options: #{invalid_options.join(", ")}"
+ end
+ end
+
+ @name = name
+ @rdoc_files = Rake::FileList.new
+ @rdoc_dir = 'html'
+ @main = nil
+ @title = nil
+ @template = nil
+ @external = false
+ @options = []
+ yield self if block_given?
+ define
+ end
+
+ ##
+ # Create the tasks defined by this task lib.
+
+ def define
+ if rdoc_task_name != "rdoc" then
+ desc "Build the RDoc HTML Files"
+ else
+ desc "Build the #{rdoc_task_name} HTML Files"
+ end
+ task rdoc_task_name
+
+ desc "Force a rebuild of the RDoc files"
+ task rerdoc_task_name => [clobber_task_name, rdoc_task_name]
+
+ desc "Remove RDoc products"
+ task clobber_task_name do
+ rm_r rdoc_dir rescue nil
+ end
+
+ task :clobber => [clobber_task_name]
+
+ directory @rdoc_dir
+ task rdoc_task_name => [rdoc_target]
+ file rdoc_target => @rdoc_files + [Rake.application.rakefile] do
+ rm_r @rdoc_dir rescue nil
+ @before_running_rdoc.call if @before_running_rdoc
+ args = option_list + @rdoc_files
+
+ if @external then
+ argstring = args.join(' ')
+ sh %{ruby -Ivendor vendor/rd #{argstring}}
+ else
+ if Rake.application.options.trace then
+ $stderr.puts "rdoc #{args.join ' '}"
+ end
+ require 'rdoc/rdoc'
+ RDoc::RDoc.new.document(args)
+ end
+ end
+
+ self
+ end
+
+ def option_list
+ result = @options.dup
+ result << "-o" << @rdoc_dir
+ result << "--main" << quote(main) if main
+ result << "--title" << quote(title) if title
+ result << "-T" << quote(template) if template
+ result
+ end
+
+ def quote(str)
+ if @external
+ "'#{str}'"
+ else
+ str
+ end
+ end
+
+ def option_string
+ option_list.join(' ')
+ end
+
+ ##
+ # The block passed to this method will be called just before running the
+ # RDoc generator. It is allowed to modify RDoc::Task attributes inside the
+ # block.
+
+ def before_running_rdoc(&block)
+ @before_running_rdoc = block
+ end
+
+ private
+
+ def rdoc_target
+ "#{rdoc_dir}/index.html"
+ end
+
+ def rdoc_task_name
+ case name
+ when Hash
+ (name[:rdoc] || "rdoc").to_s
+ else
+ name.to_s
+ end
+ end
+
+ def clobber_task_name
+ case name
+ when Hash
+ (name[:clobber_rdoc] || "clobber_rdoc").to_s
+ else
+ "clobber_#{name}"
+ end
+ end
+
+ def rerdoc_task_name
+ case name
+ when Hash
+ (name[:rerdoc] || "rerdoc").to_s
+ else
+ "re#{name}"
+ end
+ end
+
+end
+
+# :stopdoc:
+module Rake
+
+ ##
+ # For backwards compatibility
+
+ RDocTask = RDoc::Task
+
+end
+# :startdoc:
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/tokenstream.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/tokenstream.rb
new file mode 100644
index 000000000..0a1eb9130
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/tokenstream.rb
@@ -0,0 +1,33 @@
+module RDoc; end
+
+##
+# A TokenStream is a list of tokens, gathered during the parse of some entity
+# (say a method). Entities populate these streams by being registered with the
+# lexer. Any class can collect tokens by including TokenStream. From the
+# outside, you use such an object by calling the start_collecting_tokens
+# method, followed by calls to add_token and pop_token.
+
+module RDoc::TokenStream
+
+ def token_stream
+ @token_stream
+ end
+
+ def start_collecting_tokens
+ @token_stream = []
+ end
+
+ def add_token(tk)
+ @token_stream << tk
+ end
+
+ def add_tokens(tks)
+ tks.each {|tk| add_token(tk)}
+ end
+
+ def pop_token
+ @token_stream.pop
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/lib/rdoc/top_level.rb b/vendor/gems/rdoc-2.4.3/lib/rdoc/top_level.rb
new file mode 100644
index 000000000..5db404cc2
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/lib/rdoc/top_level.rb
@@ -0,0 +1,242 @@
+require 'thread'
+require 'rdoc/context'
+
+##
+# A TopLevel context is a representation of the contents of a single file
+
+class RDoc::TopLevel < RDoc::Context
+
+ ##
+ # This TopLevel's File::Stat struct
+
+ attr_accessor :file_stat
+
+ ##
+ # Relative name of this file
+
+ attr_accessor :relative_name
+
+ ##
+ # Absolute name of this file
+
+ attr_accessor :absolute_name
+
+ attr_accessor :diagram
+
+ ##
+ # The parser that processed this file
+
+ attr_accessor :parser
+
+ ##
+ # Returns all classes and modules discovered by RDoc
+
+ def self.all_classes_and_modules
+ classes_hash.values + modules_hash.values
+ end
+
+ ##
+ # Returns all classes discovered by RDoc
+
+ def self.classes
+ classes_hash.values
+ end
+
+ ##
+ # Hash of all classes known to RDoc
+
+ def self.classes_hash
+ @all_classes
+ end
+
+ ##
+ # All TopLevels known to RDoc
+
+ def self.files
+ @all_files.values
+ end
+
+ ##
+ # Hash of all files known to RDoc
+
+ def self.files_hash
+ @all_files
+ end
+
+ ##
+ # Finds the class with +name+ in all discovered classes
+
+ def self.find_class_named(name)
+ @lock.synchronize do
+ classes_hash.values.find do |c|
+ c.find_class_named name
+ end
+ end
+ end
+
+ ##
+ # Finds the file with +name+ in all discovered files
+
+ def self.find_file_named(name)
+ @lock.synchronize do
+ @all_files[name]
+ end
+ end
+
+ ##
+ # Finds the module with +name+ in all discovered modules
+
+ def self.find_module_named(name)
+ @lock.synchronize do
+ modules_hash.values.find do |c|
+ c.find_module_named name
+ end
+ end
+ end
+
+ @lock = Mutex.new
+
+ ##
+ # Lock for global class, module and file stores
+
+ def self.lock
+ @lock
+ end
+
+ ##
+ # Returns all modules discovered by RDoc
+
+ def self.modules
+ modules_hash.values
+ end
+
+ ##
+ # Hash of all modules known to RDoc
+
+ def self.modules_hash
+ @all_modules
+ end
+
+ ##
+ # Empties RDoc of stored class, module and file information
+
+ def self.reset
+ @lock.synchronize do
+ @all_classes = {}
+ @all_modules = {}
+ @all_files = {}
+ end
+ end
+
+ reset
+
+ ##
+ # Creates a new TopLevel for +file_name+
+
+ def initialize(file_name)
+ super()
+ @name = nil
+ @relative_name = file_name
+ @absolute_name = file_name
+ @file_stat = File.stat(file_name) rescue nil # HACK for testing
+ @diagram = nil
+ @parser = nil
+
+ RDoc::TopLevel.lock.synchronize do
+ RDoc::TopLevel.files_hash[file_name] = self
+ end
+ end
+
+ ##
+ # Adds +method+ to Object instead of RDoc::TopLevel
+
+ def add_method(method)
+ object = self.class.find_class_named 'Object'
+ object = add_class RDoc::NormalClass, 'Object' unless object
+
+ object.add_method method
+ end
+
+ ##
+ # Base name of this file
+
+ def base_name
+ File.basename @absolute_name
+ end
+
+ ##
+ # Find class or module named +symbol+ in all discovered classes and
+ # modules
+
+ def find_class_or_module_named(symbol)
+ RDoc::TopLevel.classes_hash.each_value do |c|
+ return c if c.full_name == symbol
+ end
+
+ RDoc::TopLevel.modules_hash.each_value do |m|
+ return m if m.full_name == symbol
+ end
+
+ nil
+ end
+
+ ##
+ # Finds a class or module named +symbol+
+
+ def find_local_symbol(symbol)
+ find_class_or_module_named(symbol) || super
+ end
+
+ ##
+ # Finds a module or class with +name+
+
+ def find_module_named(name)
+ find_class_or_module_named(name) || find_enclosing_module_named(name)
+ end
+
+ ##
+ # The name of this file
+
+ def full_name
+ @relative_name
+ end
+
+ ##
+ # URL for this with a +prefix+
+
+ def http_url(prefix)
+ path = [prefix, @relative_name.tr('.', '_')]
+
+ File.join(*path.compact) + '.html'
+ end
+
+ def inspect # :nodoc:
+ "#<%s:0x%x %p modules: %p classes: %p>" % [
+ self.class, object_id,
+ base_name,
+ @modules.map { |n,m| m },
+ @classes.map { |n,c| c }
+ ]
+ end
+
+ ##
+ # Date this file was last modified, if known
+
+ def last_modified
+ @file_stat ? file_stat.mtime.to_s : 'Unknown'
+ end
+
+ ##
+ # Base name of this file
+
+ alias name base_name
+
+ ##
+ # Path to this file
+
+ def path
+ http_url RDoc::RDoc.current.generator.file_dir
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/binary.dat b/vendor/gems/rdoc-2.4.3/test/binary.dat
new file mode 100644
index 000000000..371950efe
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/binary.dat
Binary files differ
diff --git a/vendor/gems/rdoc-2.4.3/test/test.ja.rdoc b/vendor/gems/rdoc-2.4.3/test/test.ja.rdoc
new file mode 100644
index 000000000..96e1db93d
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test.ja.rdoc
@@ -0,0 +1,8 @@
+こんにちは!
+
+初めまして。アーロンと申します。
+
+どんな食べ物が好きですか?私はフランスの料理が大好きです。
+日本の料理も大好きです。
+
+食べ物を食べるのが大好きだけど、お皿を洗うのが大嫌いです。
diff --git a/vendor/gems/rdoc-2.4.3/test/test.ja.txt b/vendor/gems/rdoc-2.4.3/test/test.ja.txt
new file mode 100644
index 000000000..96e1db93d
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test.ja.txt
@@ -0,0 +1,8 @@
+こんにちは!
+
+初めまして。アーロンと申します。
+
+どんな食べ物が好きですか?私はフランスの料理が大好きです。
+日本の料理も大好きです。
+
+食べ物を食べるのが大好きだけど、お皿を洗うのが大嫌いです。
diff --git a/vendor/gems/rdoc-2.4.3/test/test_attribute_manager.rb b/vendor/gems/rdoc-2.4.3/test/test_attribute_manager.rb
new file mode 100644
index 000000000..ee45c0596
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_attribute_manager.rb
@@ -0,0 +1,76 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/markup/attribute_manager'
+
+class TestAttributeManager < MiniTest::Unit::TestCase
+
+ def setup
+ @am = RDoc::Markup::AttributeManager.new
+ @klass = RDoc::Markup::AttributeManager
+ end
+
+ def teardown
+ silently do
+ @klass.const_set(:MATCHING_WORD_PAIRS, {})
+ @klass.const_set(:WORD_PAIR_MAP, {})
+ @klass.const_set(:HTML_TAGS, {})
+ end
+ end
+
+ def test_initial_word_pairs
+ word_pairs = @klass::MATCHING_WORD_PAIRS
+ assert word_pairs.is_a?(Hash)
+ assert_equal(3, word_pairs.size)
+ end
+
+ def test_initial_html
+ html_tags = @klass::HTML_TAGS
+ assert html_tags.is_a?(Hash)
+ assert_equal(5, html_tags.size)
+ end
+
+ def test_add_matching_word_pair
+ @am.add_word_pair("x","x", :TEST)
+ word_pairs = @klass::MATCHING_WORD_PAIRS
+ assert_equal(4,word_pairs.size)
+ assert(word_pairs.has_key?("x"))
+ end
+
+ def test_add_invalid_word_pair
+ assert_raises ArgumentError do
+ @am.add_word_pair("<", "<", :TEST)
+ end
+ end
+
+ def test_add_word_pair_map
+ @am.add_word_pair("x", "y", :TEST)
+ word_pair_map = @klass::WORD_PAIR_MAP
+ assert_equal(1,word_pair_map.size)
+ assert_equal(word_pair_map. keys.first.source, "(x)(\\S+)(y)")
+ end
+
+ def test_add_html_tag
+ @am.add_html("Test", :TEST)
+ tags = @klass::HTML_TAGS
+ assert_equal(6, tags.size)
+ assert(tags.has_key?("test"))
+ end
+
+ def test_add_special
+ @am.add_special("WikiWord", :WIKIWORD)
+ specials = @klass::SPECIAL
+ assert_equal(1,specials.size)
+ assert(specials.has_key?("WikiWord"))
+ end
+
+ def silently(&block)
+ warn_level = $VERBOSE
+ $VERBOSE = nil
+ result = block.call
+ $VERBOSE = warn_level
+ result
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_any_method.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_any_method.rb
new file mode 100644
index 000000000..a4e30c42b
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_any_method.rb
@@ -0,0 +1,10 @@
+require 'test/xref_test_case'
+
+class RDocAnyMethodTest < XrefTestCase
+
+ def test_full_name
+ assert_equal 'C1::m', @c1.method_list.first.full_name
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_code_object.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_code_object.rb
new file mode 100644
index 000000000..282ca1ecc
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_code_object.rb
@@ -0,0 +1,80 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'test/xref_test_case'
+require 'rdoc/code_object'
+
+class TestRDocCodeObject < XrefTestCase
+
+ def setup
+ super
+
+ @co = RDoc::CodeObject.new
+ end
+
+ def test_initialize
+ assert @co.document_self, 'document_self'
+ assert @co.document_children, 'document_children'
+ refute @co.force_documentation, 'force_documentation'
+ refute @co.done_documenting, 'done_documenting'
+ assert_equal nil, @co.comment, 'comment is nil'
+ end
+
+ def test_comment_equals
+ @co.comment = ''
+
+ assert_equal nil, @co.comment
+
+ @co.comment = 'I am a comment'
+
+ assert_equal 'I am a comment', @co.comment
+ end
+
+ def test_document_children_equals
+ @co.document_children = false
+ refute @co.document_children
+
+ @c2.document_children = false
+ assert_empty @c2.classes
+ end
+
+ def test_document_self_equals
+ @co.document_self = false
+ refute @co.document_self
+
+ @c1.document_self = false
+ assert_empty @c1.method_list
+ end
+
+ def test_parent_file_name
+ assert_equal '(unknown)', @co.parent_file_name
+ assert_equal 'xref_data.rb', @c1.parent_file_name
+ end
+
+ def test_parent_name
+ assert_equal '(unknown)', @co.parent_name
+ assert_equal 'xref_data.rb', @c1.parent_name
+ assert_equal 'C2', @c2_c3.parent_name
+ end
+
+ def test_start_doc
+ @co.document_self = false
+ @co.document_children = false
+
+ @co.start_doc
+
+ assert @co.document_self
+ assert @co.document_children
+ end
+
+ def test_stop_doc
+ @co.document_self = true
+ @co.document_children = true
+
+ @co.stop_doc
+
+ refute @co.document_self
+ refute @co.document_children
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_constant.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_constant.rb
new file mode 100644
index 000000000..9ec697224
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_constant.rb
@@ -0,0 +1,15 @@
+require 'test/xref_test_case'
+
+class TestRDocConstant < XrefTestCase
+
+ def setup
+ super
+
+ @const = @c1.constants.first
+ end
+
+ def test_path
+ assert_equal 'C1.html#CONST', @const.path
+ end
+
+end
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_context.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_context.rb
new file mode 100644
index 000000000..6360c5837
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_context.rb
@@ -0,0 +1,250 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'test/xref_test_case'
+
+class TestRDocContext < XrefTestCase
+
+ def setup
+ super
+
+ @context = RDoc::Context.new
+ end
+
+ def test_initialize
+ assert_empty @context.in_files
+ assert_equal 'unknown', @context.name
+ assert_equal '', @context.comment
+ assert_equal nil, @context.parent
+ assert_equal :public, @context.visibility
+ assert_equal 1, @context.sections.length
+
+ assert_empty @context.classes_hash
+ assert_empty @context.modules_hash
+
+ assert_empty @context.method_list
+ assert_empty @context.attributes
+ assert_empty @context.aliases
+ assert_empty @context.requires
+ assert_empty @context.includes
+ assert_empty @context.constants
+ end
+
+ def test_add_alias
+ as = RDoc::Alias.new nil, 'old_name', 'new_name', 'comment'
+
+ @context.add_alias as
+
+ assert_equal [as], @context.aliases
+ assert_equal [as], @context.unmatched_alias_lists['old_name']
+ end
+
+ def test_add_alias_method
+ meth = RDoc::AnyMethod.new nil, 'old_name'
+ as = RDoc::Alias.new nil, 'old_name', 'new_name', 'comment'
+ as.parent = @context
+
+ @context.add_method meth
+ @context.add_alias as
+
+ assert_empty @context.aliases
+ assert_empty @context.unmatched_alias_lists
+ assert_equal %w[old_name new_name], @context.method_list.map { |m| m.name }
+ end
+
+ def test_add_class
+ @c1.add_class RDoc::NormalClass, 'Klass', 'Object'
+
+ assert_includes @c1.classes.map { |k| k.full_name }, 'C1::Klass'
+ assert_includes RDoc::TopLevel.classes.map { |k| k.full_name }, 'C1::Klass'
+ end
+
+ def test_add_class_upgrade
+ @c1.add_module RDoc::NormalModule, 'Klass'
+ @c1.add_class RDoc::NormalClass, 'Klass', nil
+
+ assert_includes @c1.classes.map { |k| k.full_name }, 'C1::Klass',
+ 'c1 classes'
+ refute_includes @c1.modules.map { |k| k.full_name }, 'C1::Klass',
+ 'c1 modules'
+
+ assert_includes RDoc::TopLevel.classes.map { |k| k.full_name }, 'C1::Klass',
+ 'TopLevel classes'
+ refute_includes RDoc::TopLevel.modules.map { |k| k.full_name }, 'C1::Klass',
+ 'TopLevel modules'
+ end
+
+ def test_add_constant
+ const = RDoc::Constant.new 'NAME', 'value', 'comment'
+ @context.add_constant const
+
+ assert_equal [const], @context.constants
+ end
+
+ def test_add_include
+ incl = RDoc::Include.new 'Name', 'comment'
+ @context.add_include incl
+
+ assert_equal [incl], @context.includes
+ end
+
+ def test_add_method
+ meth = RDoc::AnyMethod.new nil, 'old_name'
+ meth.visibility = nil
+
+ @context.add_method meth
+
+ assert_equal [meth], @context.method_list
+ assert_equal :public, meth.visibility
+ end
+
+ def test_add_method_alias
+ as = RDoc::Alias.new nil, 'old_name', 'new_name', 'comment'
+ meth = RDoc::AnyMethod.new nil, 'old_name'
+
+ @context.add_alias as
+ refute_empty @context.aliases
+
+ @context.add_method meth
+
+ assert_empty @context.aliases
+ assert_empty @context.unmatched_alias_lists
+ assert_equal %w[old_name new_name], @context.method_list.map { |m| m.name }
+ end
+
+ def test_add_module
+ @c1.add_module RDoc::NormalModule, 'Mod'
+
+ assert_includes @c1.modules.map { |m| m.full_name }, 'C1::Mod'
+ end
+
+ def test_add_module_class
+ k = @c1.add_class RDoc::NormalClass, 'Klass', nil
+ m = @c1.add_module RDoc::NormalModule, 'Klass'
+
+ assert_equal k, m, 'returns class'
+ assert_empty @c1.modules
+ end
+
+ def test_add_require
+ req = RDoc::Require.new 'require', 'comment'
+ @c1.add_require req
+
+ assert_empty @c1.requires
+ assert_includes @c1.top_level.requires, req
+ end
+
+ def test_add_to
+ incl = RDoc::Include.new 'Name', 'comment'
+ arr = []
+ @context.add_to arr, incl
+
+ assert_includes arr, incl
+ assert_equal @context, incl.parent
+ assert_equal @context.current_section, incl.section
+ end
+
+ def test_add_to_no_document_self
+ incl = RDoc::Include.new 'Name', 'comment'
+ arr = []
+ @context.document_self = false
+ @context.add_to arr, incl
+
+ refute_includes arr, incl
+ end
+
+ def test_add_to_done_documenting
+ incl = RDoc::Include.new 'Name', 'comment'
+ arr = []
+ @context.done_documenting = true
+ @context.add_to arr, incl
+
+ refute_includes arr, incl
+ end
+
+ def test_classes
+ assert_equal %w[C2::C3], @c2.classes.map { |k| k.full_name }
+ assert_equal %w[C3::H1 C3::H2], @c3.classes.map { |k| k.full_name }
+ end
+
+ def test_defined_in_eh
+ assert @c1.defined_in?(@c1.top_level)
+
+ refute @c1.defined_in?(RDoc::TopLevel.new('name.rb'))
+ end
+
+ def test_equals2
+ assert_equal @c3, @c3
+ refute_equal @c2, @c3
+ refute_equal @c2_c3, @c3
+ end
+
+ def test_find_attribute_named
+ assert_equal nil, @c1.find_attribute_named('none')
+ assert_equal 'R', @c1.find_attribute_named('attr').rw
+ assert_equal 'R', @c1.find_attribute_named('attr_reader').rw
+ assert_equal 'W', @c1.find_attribute_named('attr_writer').rw
+ assert_equal 'RW', @c1.find_attribute_named('attr_accessor').rw
+ end
+
+ def test_find_constant_named
+ assert_equal nil, @c1.find_constant_named('NONE')
+ assert_equal ':const', @c1.find_constant_named('CONST').value
+ end
+
+ def test_find_enclosing_module_named
+ assert_equal nil, @c2_c3.find_enclosing_module_named('NONE')
+ assert_equal @c1, @c2_c3.find_enclosing_module_named('C1')
+ assert_equal @c2, @c2_c3.find_enclosing_module_named('C2')
+ end
+
+ def test_find_file_named
+ assert_equal nil, @c1.find_file_named('nonexistent.rb')
+ assert_equal @xref_data, @c1.find_file_named(@file_name)
+ end
+
+ def test_find_instance_method_named
+ assert_equal nil, @c1.find_instance_method_named('none')
+
+ m = @c1.find_instance_method_named('m')
+ assert_instance_of RDoc::AnyMethod, m
+ assert_equal false, m.singleton
+ end
+
+ def test_find_local_symbol
+ assert_equal true, @c1.find_local_symbol('m').singleton
+ assert_equal ':const', @c1.find_local_symbol('CONST').value
+ assert_equal 'R', @c1.find_local_symbol('attr').rw
+ assert_equal @xref_data, @c1.find_local_symbol(@file_name)
+ assert_equal @c2_c3, @c2.find_local_symbol('C3')
+ end
+
+ def test_find_method_named
+ assert_equal true, @c1.find_method_named('m').singleton
+ end
+
+ def test_find_module_named
+ assert_equal @c2_c3, @c2.find_module_named('C3')
+ assert_equal @c2, @c2.find_module_named('C2')
+ assert_equal @c1, @c2.find_module_named('C1')
+
+ assert_equal 'C2::C3', @c2.find_module_named('C3').full_name
+ end
+
+ def test_find_symbol
+ c3 = @xref_data.find_module_named('C3')
+ assert_equal c3, @xref_data.find_symbol('C3')
+ assert_equal c3, @c2.find_symbol('::C3')
+ assert_equal @c2_c3, @c2.find_symbol('C3')
+ end
+
+ def test_spaceship
+ assert_equal(-1, @c2.<=>(@c3))
+ assert_equal 0, @c2.<=>(@c2)
+ assert_equal 1, @c3.<=>(@c2)
+
+ assert_equal 1, @c2_c3.<=>(@c2)
+ assert_equal(-1, @c2_c3.<=>(@c3))
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_include.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_include.rb
new file mode 100644
index 000000000..6e305dd13
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_include.rb
@@ -0,0 +1,17 @@
+require 'test/xref_test_case'
+
+class TestRDocInclude < XrefTestCase
+
+ def setup
+ super
+
+ @inc = RDoc::Include.new 'M1', 'comment'
+ end
+
+ def test_module
+ assert_equal @m1, @inc.module
+ assert_equal 'Unknown', RDoc::Include.new('Unknown', 'comment').module
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup.rb
new file mode 100644
index 000000000..ce962a2c5
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup.rb
@@ -0,0 +1,626 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/markup'
+require 'rdoc/markup/to_test'
+
+class TestRDocMarkup < MiniTest::Unit::TestCase
+
+ def basic_conv(str)
+ sm = RDoc::Markup.new
+ mock = RDoc::Markup::ToTest.new
+ sm.convert(str, mock)
+ sm.content
+ end
+
+ def line_groups(str, expected)
+ m = RDoc::Markup.new
+ mock = RDoc::Markup::ToTest.new
+
+ block = m.convert(str, mock)
+
+ unless block == expected then
+ rows = (0...([expected.size, block.size].max)).collect{|i|
+ [expected[i]||"nil", block[i]||"nil"]
+ }
+ printf "\n\n%35s %35s\n", "Expected", "Got"
+ rows.each { |e,g| printf "%35s %35s\n", e.dump, g.dump }
+ end
+
+ assert_equal(expected, block)
+ end
+
+ def line_types(str, expected)
+ m = RDoc::Markup.new
+ mock = RDoc::Markup::ToTest.new
+ m.convert(str, mock)
+ assert_equal(expected, m.get_line_types.map{|type| type.to_s[0,1]}.join(''))
+ end
+
+ def test_groups
+ str = "now is the time"
+ line_groups(str, ["L0: Paragraph\nnow is the time"] )
+
+ str = "now is the time\nfor all good men"
+ line_groups(str, ["L0: Paragraph\nnow is the time for all good men"] )
+
+ str = %{\
+ now is the time
+ code _line_ here
+ for all good men}
+
+ line_groups(str,
+ [ "L0: Paragraph\nnow is the time",
+ "L0: Verbatim\n code _line_ here\n",
+ "L0: Paragraph\nfor all good men"
+ ] )
+
+ str = "now is the time\n code\n more code\nfor all good men"
+ line_groups(str,
+ [ "L0: Paragraph\nnow is the time",
+ "L0: Verbatim\n code\n more code\n",
+ "L0: Paragraph\nfor all good men"
+ ] )
+
+ str = %{\
+ now is
+ * l1
+ * l2
+ the time}
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L1: ListStart\n",
+ "L1: BULLET ListItem\nl1",
+ "L1: BULLET ListItem\nl2",
+ "L1: ListEnd\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+ str = %{\
+ now is
+ * l1
+ l1+
+ * l2
+ the time}
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L1: ListStart\n",
+ "L1: BULLET ListItem\nl1 l1+",
+ "L1: BULLET ListItem\nl2",
+ "L1: ListEnd\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+ str = %{\
+ now is
+ * l1
+ * l1.1
+ * l2
+ the time}
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L1: ListStart\n",
+ "L1: BULLET ListItem\nl1",
+ "L2: ListStart\n",
+ "L2: BULLET ListItem\nl1.1",
+ "L2: ListEnd\n",
+ "L1: BULLET ListItem\nl2",
+ "L1: ListEnd\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+
+ str = %{\
+ now is
+ * l1
+ * l1.1
+ text
+ code
+ code
+
+ text
+ * l2
+ the time}
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L1: ListStart\n",
+ "L1: BULLET ListItem\nl1",
+ "L2: ListStart\n",
+ "L2: BULLET ListItem\nl1.1 text",
+ "L2: Verbatim\n code\n code\n",
+ "L2: Paragraph\ntext",
+ "L2: ListEnd\n",
+ "L1: BULLET ListItem\nl2",
+ "L1: ListEnd\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+
+ str = %{\
+ now is
+ 1. l1
+ * l1.1
+ 2. l2
+ the time}
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L1: ListStart\n",
+ "L1: NUMBER ListItem\nl1",
+ "L2: ListStart\n",
+ "L2: BULLET ListItem\nl1.1",
+ "L2: ListEnd\n",
+ "L1: NUMBER ListItem\nl2",
+ "L1: ListEnd\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+ str = %{\
+ now is
+ [cat] l1
+ * l1.1
+ [dog] l2
+ the time}
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L1: ListStart\n",
+ "L1: LABELED ListItem\ncat: l1",
+ "L2: ListStart\n",
+ "L2: BULLET ListItem\nl1.1",
+ "L2: ListEnd\n",
+ "L1: LABELED ListItem\ndog: l2",
+ "L1: ListEnd\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+ str = %{\
+ now is
+ [cat] l1
+ continuation
+ [dog] l2
+ the time}
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L1: ListStart\n",
+ "L1: LABELED ListItem\ncat: l1 continuation",
+ "L1: LABELED ListItem\ndog: l2",
+ "L1: ListEnd\n",
+ "L0: Paragraph\nthe time"
+ ])
+ end
+
+ def test_headings
+ str = "= heading one"
+ line_groups(str,
+ [ "L0: Heading\nheading one"
+ ])
+
+ str = "=== heading three"
+ line_groups(str,
+ [ "L0: Heading\nheading three"
+ ])
+
+ str = "text\n === heading three"
+ line_groups(str,
+ [ "L0: Paragraph\ntext",
+ "L0: Verbatim\n === heading three\n"
+ ])
+
+ str = "text\n code\n === heading three"
+ line_groups(str,
+ [ "L0: Paragraph\ntext",
+ "L0: Verbatim\n code\n === heading three\n"
+ ])
+
+ str = "text\n code\n=== heading three"
+ line_groups(str,
+ [ "L0: Paragraph\ntext",
+ "L0: Verbatim\n code\n",
+ "L0: Heading\nheading three"
+ ])
+
+ end
+
+ def test_list_alpha
+ str = "a. alpha\nb. baker\nB. ALPHA\nA. BAKER"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: LOWERALPHA ListItem\nalpha",
+ "L1: LOWERALPHA ListItem\nbaker",
+ "L1: ListEnd\n",
+ "L1: ListStart\n",
+ "L1: UPPERALPHA ListItem\nALPHA",
+ "L1: UPPERALPHA ListItem\nBAKER",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_bullet_dash
+ str = "- one\n- two\n"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: BULLET ListItem\none",
+ "L1: BULLET ListItem\ntwo",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_bullet_star
+ str = "* one\n* two\n"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: BULLET ListItem\none",
+ "L1: BULLET ListItem\ntwo",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_labeled_bracket
+ str = "[one] item one\n[two] item two"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: LABELED ListItem\none: item one",
+ "L1: LABELED ListItem\ntwo: item two",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_labeled_bracket_continued
+ str = "[one]\n item one\n[two]\n item two"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: LABELED ListItem\none: item one",
+ "L1: LABELED ListItem\ntwo: item two",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_labeled_colon
+ str = "one:: item one\ntwo:: item two"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: NOTE ListItem\none:: item one",
+ "L1: NOTE ListItem\ntwo:: item two",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_labeled_colon_continued
+ str = "one::\n item one\ntwo::\n item two"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: NOTE ListItem\none:: item one",
+ "L1: NOTE ListItem\ntwo:: item two",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_nested_bullet_bullet
+ str = "* one\n* two\n * cat\n * dog"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: BULLET ListItem\none",
+ "L1: BULLET ListItem\ntwo",
+ "L2: ListStart\n",
+ "L2: BULLET ListItem\ncat",
+ "L2: BULLET ListItem\ndog",
+ "L2: ListEnd\n",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_nested_labeled_bullet
+ str = "[one]\n * cat\n * dog"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: LABELED ListItem\none: ",
+ "L2: ListStart\n",
+ "L2: BULLET ListItem\ncat",
+ "L2: BULLET ListItem\ndog",
+ "L2: ListEnd\n",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_nested_labeled_bullet_bullet
+ str = "[one]\n * cat\n * dog"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: LABELED ListItem\none: ",
+ "L2: ListStart\n",
+ "L2: BULLET ListItem\ncat",
+ "L3: ListStart\n",
+ "L3: BULLET ListItem\ndog",
+ "L3: ListEnd\n",
+ "L2: ListEnd\n",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_nested_number_number
+ str = "1. one\n1. two\n 1. cat\n 1. dog"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: NUMBER ListItem\none",
+ "L1: NUMBER ListItem\ntwo",
+ "L2: ListStart\n",
+ "L2: NUMBER ListItem\ncat",
+ "L2: NUMBER ListItem\ndog",
+ "L2: ListEnd\n",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_number
+ str = "1. one\n2. two\n1. three"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: NUMBER ListItem\none",
+ "L1: NUMBER ListItem\ntwo",
+ "L1: NUMBER ListItem\nthree",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_list_split
+ str = %{\
+ now is
+ * l1
+ 1. n1
+ 2. n2
+ * l2
+ the time}
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L1: ListStart\n",
+ "L1: BULLET ListItem\nl1",
+ "L1: ListEnd\n",
+ "L1: ListStart\n",
+ "L1: NUMBER ListItem\nn1",
+ "L1: NUMBER ListItem\nn2",
+ "L1: ListEnd\n",
+ "L1: ListStart\n",
+ "L1: BULLET ListItem\nl2",
+ "L1: ListEnd\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+ end
+
+ def test_list_verbatim
+ str = "* one\n verb1\n verb2\n* two\n"
+
+ line_groups(str,
+ [ "L1: ListStart\n",
+ "L1: BULLET ListItem\none",
+ "L1: Verbatim\n verb1\n verb2\n",
+ "L1: BULLET ListItem\ntwo",
+ "L1: ListEnd\n" ])
+ end
+
+ def test_paragraph
+ str = "paragraph\n\n*bold* paragraph\n"
+
+ line_groups str, [
+ "L0: Paragraph\nparagraph",
+ "L0: BlankLine\n",
+ "L0: Paragraph\n*bold* paragraph"
+ ]
+ end
+
+ def test_tabs
+ str = "hello\n dave"
+ assert_equal(str, basic_conv(str))
+ str = "hello\n\tdave"
+ assert_equal("hello\n dave", basic_conv(str))
+ str = "hello\n \tdave"
+ assert_equal("hello\n dave", basic_conv(str))
+ str = "hello\n \tdave"
+ assert_equal("hello\n dave", basic_conv(str))
+ str = "hello\n \tdave"
+ assert_equal("hello\n dave", basic_conv(str))
+ str = "hello\n \tdave"
+ assert_equal("hello\n dave", basic_conv(str))
+ str = "hello\n \tdave"
+ assert_equal("hello\n dave", basic_conv(str))
+ str = "hello\n \tdave"
+ assert_equal("hello\n dave", basic_conv(str))
+ str = "hello\n \tdave"
+ assert_equal("hello\n dave", basic_conv(str))
+ str = "hello\n \tdave"
+ assert_equal("hello\n dave", basic_conv(str))
+ str = ".\t\t."
+ assert_equal(". .", basic_conv(str))
+ end
+
+ def test_types
+ str = "now is the time"
+ line_types(str, 'P')
+
+ str = "now is the time\nfor all good men"
+ line_types(str, 'PP')
+
+ str = "now is the time\n code\nfor all good men"
+ line_types(str, 'PVP')
+
+ str = "now is the time\n code\n more code\nfor all good men"
+ line_types(str, 'PVVP')
+
+ str = "now is\n---\nthe time"
+ line_types(str, 'PRP')
+
+ str = %{\
+ now is
+ * l1
+ * l2
+ the time}
+ line_types(str, 'PLLP')
+
+ str = %{\
+ now is
+ * l1
+ l1+
+ * l2
+ the time}
+ line_types(str, 'PLPLP')
+
+ str = %{\
+ now is
+ * l1
+ * l1.1
+ * l2
+ the time}
+ line_types(str, 'PLLLP')
+
+ str = %{\
+ now is
+ * l1
+ * l1.1
+ text
+ code
+ code
+
+ text
+ * l2
+ the time}
+ line_types(str, 'PLLPVVBPLP')
+
+ str = %{\
+ now is
+ 1. l1
+ * l1.1
+ 2. l2
+ the time}
+ line_types(str, 'PLLLP')
+
+ str = %{\
+ now is
+ [cat] l1
+ * l1.1
+ [dog] l2
+ the time}
+ line_types(str, 'PLLLP')
+
+ str = %{\
+ now is
+ [cat] l1
+ continuation
+ [dog] l2
+ the time}
+ line_types(str, 'PLPLP')
+ end
+
+ def test_verbatim
+ str = "paragraph\n *bold* verbatim\n"
+
+ line_groups str, [
+ "L0: Paragraph\nparagraph",
+ "L0: Verbatim\n *bold* verbatim\n"
+ ]
+ end
+
+ def test_verbatim_merge
+ str = %{\
+ now is
+ code
+ the time}
+
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L0: Verbatim\n code\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+
+ str = %{\
+ now is
+ code
+ code1
+ the time}
+
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L0: Verbatim\n code\n code1\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+
+ str = %{\
+ now is
+ code
+
+ code1
+ the time}
+
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L0: Verbatim\n code\n\n code1\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+
+ str = %{\
+ now is
+ code
+
+ code1
+
+ the time}
+
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L0: Verbatim\n code\n\n code1\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+
+ str = %{\
+ now is
+ code
+
+ code1
+
+ code2
+ the time}
+
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L0: Verbatim\n code\n\n code1\n\n code2\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+
+ # Folds multiple blank lines
+ str = %{\
+ now is
+ code
+
+
+ code1
+
+ the time}
+
+ line_groups(str,
+ [ "L0: Paragraph\nnow is",
+ "L0: Verbatim\n code\n\n code1\n",
+ "L0: Paragraph\nthe time"
+ ])
+
+
+ end
+
+ def test_whitespace
+ assert_equal("hello", basic_conv("hello"))
+ assert_equal("hello", basic_conv(" hello "))
+ assert_equal("hello", basic_conv(" \t \t hello\t\t"))
+
+ assert_equal("1\n 2\n 3", basic_conv("1\n 2\n 3"))
+ assert_equal("1\n 2\n 3", basic_conv(" 1\n 2\n 3"))
+
+ assert_equal("1\n 2\n 3\n1\n 2", basic_conv("1\n 2\n 3\n1\n 2"))
+ assert_equal("1\n 2\n 3\n1\n 2", basic_conv(" 1\n 2\n 3\n 1\n 2"))
+
+ assert_equal("1\n 2\n\n 3", basic_conv(" 1\n 2\n\n 3"))
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_attribute_manager.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_attribute_manager.rb
new file mode 100644
index 000000000..0864523a0
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_attribute_manager.rb
@@ -0,0 +1,243 @@
+require "rubygems"
+require "minitest/unit"
+require "rdoc/markup/inline"
+require "rdoc/markup/to_html_crossref"
+
+class TestRDocMarkupAttributeManager < MiniTest::Unit::TestCase
+
+ def setup
+ @orig_special = RDoc::Markup::AttributeManager::SPECIAL
+ RDoc::Markup::AttributeManager::SPECIAL.replace Hash.new
+
+ @am = RDoc::Markup::AttributeManager.new
+
+ @bold_on = @am.changed_attribute_by_name([], [:BOLD])
+ @bold_off = @am.changed_attribute_by_name([:BOLD], [])
+
+ @tt_on = @am.changed_attribute_by_name([], [:TT])
+ @tt_off = @am.changed_attribute_by_name([:TT], [])
+
+ @em_on = @am.changed_attribute_by_name([], [:EM])
+ @em_off = @am.changed_attribute_by_name([:EM], [])
+
+ @bold_em_on = @am.changed_attribute_by_name([], [:BOLD] | [:EM])
+ @bold_em_off = @am.changed_attribute_by_name([:BOLD] | [:EM], [])
+
+ @em_then_bold = @am.changed_attribute_by_name([:EM], [:EM] | [:BOLD])
+
+ @em_to_bold = @am.changed_attribute_by_name([:EM], [:BOLD])
+
+ @am.add_word_pair("{", "}", :WOMBAT)
+ @wombat_on = @am.changed_attribute_by_name([], [:WOMBAT])
+ @wombat_off = @am.changed_attribute_by_name([:WOMBAT], [])
+ end
+
+ def teardown
+ RDoc::Markup::AttributeManager::SPECIAL.replace @orig_special
+ end
+
+ def crossref(text)
+ crossref_bitmap = RDoc::Markup::Attribute.bitmap_for(:_SPECIAL_) |
+ RDoc::Markup::Attribute.bitmap_for(:CROSSREF)
+
+ [ @am.changed_attribute_by_name([], [:CROSSREF, :_SPECIAL_]),
+ RDoc::Markup::Special.new(crossref_bitmap, text),
+ @am.changed_attribute_by_name([:CROSSREF, :_SPECIAL_], [])
+ ]
+ end
+
+ def test_adding
+ assert_equal(["cat ", @wombat_on, "and", @wombat_off, " dog" ],
+ @am.flow("cat {and} dog"))
+ #assert_equal(["cat {and} dog" ], @am.flow("cat \\{and} dog"))
+ end
+
+ def test_add_word_pair
+ @am.add_word_pair '%', '&', 'percent and'
+
+ assert RDoc::Markup::AttributeManager::WORD_PAIR_MAP.include?(/(%)(\S+)(&)/)
+ assert RDoc::Markup::AttributeManager::PROTECTABLE.include?('%')
+ assert !RDoc::Markup::AttributeManager::PROTECTABLE.include?('&')
+ end
+
+ def test_add_word_pair_angle
+ e = assert_raises ArgumentError do
+ @am.add_word_pair '<', '>', 'angles'
+ end
+
+ assert_equal "Word flags may not start with '<'", e.message
+ end
+
+ def test_add_word_pair_matching
+ @am.add_word_pair '^', '^', 'caret'
+
+ assert RDoc::Markup::AttributeManager::MATCHING_WORD_PAIRS.include?('^')
+ assert RDoc::Markup::AttributeManager::PROTECTABLE.include?('^')
+ end
+
+ def test_basic
+ assert_equal(["cat"], @am.flow("cat"))
+
+ assert_equal(["cat ", @bold_on, "and", @bold_off, " dog"],
+ @am.flow("cat *and* dog"))
+
+ assert_equal(["cat ", @bold_on, "AND", @bold_off, " dog"],
+ @am.flow("cat *AND* dog"))
+
+ assert_equal(["cat ", @em_on, "And", @em_off, " dog"],
+ @am.flow("cat _And_ dog"))
+
+ assert_equal(["cat *and dog*"], @am.flow("cat *and dog*"))
+
+ assert_equal(["*cat and* dog"], @am.flow("*cat and* dog"))
+
+ assert_equal(["cat *and ", @bold_on, "dog", @bold_off],
+ @am.flow("cat *and *dog*"))
+
+ assert_equal(["cat ", @em_on, "and", @em_off, " dog"],
+ @am.flow("cat _and_ dog"))
+
+ assert_equal(["cat_and_dog"],
+ @am.flow("cat_and_dog"))
+
+ assert_equal(["cat ", @tt_on, "and", @tt_off, " dog"],
+ @am.flow("cat +and+ dog"))
+
+ assert_equal(["cat ", @bold_on, "a_b_c", @bold_off, " dog"],
+ @am.flow("cat *a_b_c* dog"))
+
+ assert_equal(["cat __ dog"],
+ @am.flow("cat __ dog"))
+
+ assert_equal(["cat ", @em_on, "_", @em_off, " dog"],
+ @am.flow("cat ___ dog"))
+ end
+
+ def test_bold
+ assert_equal [@bold_on, 'bold', @bold_off],
+ @am.flow("*bold*")
+
+ assert_equal [@bold_on, 'Bold:', @bold_off],
+ @am.flow("*Bold:*")
+
+ assert_equal [@bold_on, '\\bold', @bold_off],
+ @am.flow("*\\bold*")
+ end
+
+ def test_bold_html_escaped
+ assert_equal ['cat <b>dog</b>'], @am.flow('cat \<b>dog</b>')
+ end
+
+ def test_combined
+ assert_equal(["cat ", @em_on, "and", @em_off, " ", @bold_on, "dog", @bold_off],
+ @am.flow("cat _and_ *dog*"))
+
+ assert_equal(["cat ", @em_on, "a__nd", @em_off, " ", @bold_on, "dog", @bold_off],
+ @am.flow("cat _a__nd_ *dog*"))
+ end
+
+ def test_convert_attrs
+ str = '+foo+'
+ attrs = RDoc::Markup::AttrSpan.new str.length
+
+ @am.convert_attrs str, attrs
+
+ assert_equal "\000foo\000", str
+
+ str = '+:foo:+'
+ attrs = RDoc::Markup::AttrSpan.new str.length
+
+ @am.convert_attrs str, attrs
+
+ assert_equal "\000:foo:\000", str
+
+ str = '+x-y+'
+ attrs = RDoc::Markup::AttrSpan.new str.length
+
+ @am.convert_attrs str, attrs
+
+ assert_equal "\000x-y\000", str
+ end
+
+ def test_html_like_em_bold
+ assert_equal ["cat ", @em_on, "and ", @em_to_bold, "dog", @bold_off],
+ @am.flow("cat <i>and </i><b>dog</b>")
+ end
+
+ def test_html_like_em_bold_SGML
+ assert_equal ["cat ", @em_on, "and ", @em_to_bold, "dog", @bold_off],
+ @am.flow("cat <i>and <b></i>dog</b>")
+ end
+
+ def test_html_like_em_bold_nested_1
+ assert_equal(["cat ", @bold_em_on, "and", @bold_em_off, " dog"],
+ @am.flow("cat <i><b>and</b></i> dog"))
+ end
+
+ def test_html_like_em_bold_nested_2
+ assert_equal ["cat ", @em_on, "and ", @em_then_bold, "dog", @bold_em_off],
+ @am.flow("cat <i>and <b>dog</b></i>")
+ end
+
+ def test_html_like_em_bold_nested_mixed_case
+ assert_equal ["cat ", @em_on, "and ", @em_then_bold, "dog", @bold_em_off],
+ @am.flow("cat <i>and <B>dog</B></I>")
+ end
+
+ def test_html_like_em_bold_mixed_case
+ assert_equal ["cat ", @em_on, "and", @em_off, " ", @bold_on, "dog", @bold_off],
+ @am.flow("cat <i>and</i> <B>dog</b>")
+ end
+
+ def test_html_like_teletype
+ assert_equal ["cat ", @tt_on, "dog", @tt_off],
+ @am.flow("cat <tt>dog</Tt>")
+ end
+
+ def test_html_like_teletype_em_bold_SGML
+ assert_equal [@tt_on, "cat", @tt_off, " ", @em_on, "and ", @em_to_bold, "dog", @bold_off],
+ @am.flow("<tt>cat</tt> <i>and <b></i>dog</b>")
+ end
+
+ def test_protect
+ assert_equal(['cat \\ dog'], @am.flow('cat \\ dog'))
+
+ assert_equal(["cat <tt>dog</Tt>"], @am.flow("cat \\<tt>dog</Tt>"))
+
+ assert_equal(["cat ", @em_on, "and", @em_off, " <B>dog</b>"],
+ @am.flow("cat <i>and</i> \\<B>dog</b>"))
+
+ assert_equal(["*word* or <b>text</b>"], @am.flow("\\*word* or \\<b>text</b>"))
+
+ assert_equal(["_cat_", @em_on, "dog", @em_off],
+ @am.flow("\\_cat_<i>dog</i>"))
+ end
+
+ def test_special
+ @am.add_special(RDoc::Markup::ToHtmlCrossref::CROSSREF_REGEXP, :CROSSREF)
+
+ #
+ # The apostrophes in "cats'" and "dogs'" suppress the flagging of these
+ # words as potential cross-references, which is necessary for the unit
+ # tests. Unfortunately, the markup engine right now does not actually
+ # check whether a cross-reference is valid before flagging it.
+ #
+ assert_equal(["cats'"], @am.flow("cats'"))
+
+ assert_equal(["cats' ", crossref("#fred"), " dogs'"].flatten,
+ @am.flow("cats' #fred dogs'"))
+
+ assert_equal([crossref("#fred"), " dogs'"].flatten,
+ @am.flow("#fred dogs'"))
+
+ assert_equal(["cats' ", crossref("#fred")].flatten, @am.flow("cats' #fred"))
+ end
+
+ def test_tt_html
+ assert_equal [@tt_on, '"\n"', @tt_off],
+ @am.flow('<tt>"\n"</tt>')
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_to_html.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_to_html.rb
new file mode 100644
index 000000000..5b8c09ccf
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_to_html.rb
@@ -0,0 +1,81 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/markup'
+require 'rdoc/markup/to_html'
+
+class TestRDocMarkupToHtml < MiniTest::Unit::TestCase
+
+ def setup
+ @m = RDoc::Markup.new
+ @am = RDoc::Markup::AttributeManager.new
+ @th = RDoc::Markup::ToHtml.new
+ end
+
+ def test_class_gen_relative_url
+ def gen(from, to)
+ RDoc::Markup::ToHtml.gen_relative_url from, to
+ end
+
+ assert_equal 'a.html', gen('a.html', 'a.html')
+ assert_equal 'b.html', gen('a.html', 'b.html')
+
+ assert_equal 'd.html', gen('a/c.html', 'a/d.html')
+ assert_equal '../a.html', gen('a/c.html', 'a.html')
+ assert_equal 'a/c.html', gen('a.html', 'a/c.html')
+ end
+
+ def test_list_verbatim
+ str = "* one\n verb1\n verb2\n* two\n"
+
+ expected = <<-EXPECTED
+<ul>
+<li>one
+
+<pre>
+ verb1
+ verb2
+</pre>
+</li>
+<li>two
+
+</li>
+</ul>
+ EXPECTED
+
+ assert_equal expected, @m.convert(str, @th)
+ end
+
+ def test_tt_formatting
+ assert_equal "<p>\n<tt>--</tt> &#8212; <tt>cats'</tt> cats&#8217;\n</p>\n",
+ util_format("<tt>--</tt> -- <tt>cats'</tt> cats'")
+
+ assert_equal "<p>\n<b>&#8212;</b>\n</p>\n", util_format("<b>--</b>")
+ end
+
+ def test_convert_string_fancy
+ #
+ # The HTML typesetting is broken in a number of ways, but I have fixed
+ # the most glaring issues for single and double quotes. Note that
+ # "strange" symbols (periods or dashes) need to be at the end of the
+ # test case strings in order to suppress cross-references.
+ #
+ assert_equal "<p>\n&#8220;cats&#8221;.\n</p>\n", util_format("\"cats\".")
+ assert_equal "<p>\n&#8216;cats&#8217;.\n</p>\n", util_format("\'cats\'.")
+ assert_equal "<p>\ncat&#8217;s-\n</p>\n", util_format("cat\'s-")
+ end
+
+ def util_fragment(text)
+ RDoc::Markup::Fragment.new 0, nil, nil, text
+ end
+
+ def util_format(text)
+ fragment = util_fragment text
+
+ @th.start_accepting
+ @th.accept_paragraph @am, fragment
+ @th.end_accepting
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_to_html_crossref.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_to_html_crossref.rb
new file mode 100644
index 000000000..9e77c4bdc
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_markup_to_html_crossref.rb
@@ -0,0 +1,161 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/rdoc'
+require 'rdoc/code_objects'
+require 'rdoc/markup/to_html_crossref'
+require 'test/xref_test_case'
+
+class TestRDocMarkupToHtmlCrossref < XrefTestCase
+
+ def setup
+ super
+
+ @xref = RDoc::Markup::ToHtmlCrossref.new 'index.html', @c1, true
+ end
+
+ def assert_ref(path, ref)
+ assert_equal "<p>\n<a href=\"#{path}\">#{ref}</a>\n</p>\n",
+ @xref.convert(ref)
+ end
+
+ def refute_ref(body, ref)
+ assert_equal "<p>\n#{body}\n</p>\n", @xref.convert(ref)
+ end
+
+ def test_handle_special_CROSSREF_C2
+ @xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C2.html', @c2, true
+
+ refute_ref '#m', '#m'
+
+ assert_ref '../C2/C3.html', 'C2::C3'
+ assert_ref '../C2/C3.html#M000002', 'C2::C3#m'
+ assert_ref '../C2/C3/H1.html', 'C3::H1'
+ assert_ref '../C4.html', 'C4'
+
+ # TODO there is a C3::H2 in the top-level namespace and RDoc should follow
+ # constant scoping rules
+ refute_ref 'C3::H2', 'C3::H2'
+ refute_ref 'H1', 'H1'
+ end
+
+ def test_handle_special_CROSSREF_C2_C3
+ @xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C2/C3.html', @c2_c3, true
+
+ assert_ref '../../C2/C3.html#M000002', '#m'
+
+ assert_ref '../../C2/C3.html', 'C3'
+ assert_ref '../../C2/C3.html#M000002', 'C3#m'
+
+ assert_ref '../../C2/C3/H1.html', 'H1'
+ assert_ref '../../C2/C3/H1.html', 'C3::H1'
+
+ assert_ref '../../C4.html', 'C4'
+
+ refute_ref 'C3::H2', 'C3::H2'
+ end
+
+ def test_handle_special_CROSSREF_C3
+ @xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C3.html', @c3, true
+
+ assert_ref '../C3.html', 'C3'
+
+ refute_ref '#m', '#m'
+ refute_ref 'C3#m', 'C3#m'
+
+ assert_ref '../C3/H1.html', 'H1'
+
+ assert_ref '../C3/H1.html', 'C3::H1'
+ assert_ref '../C3/H2.html', 'C3::H2'
+
+ assert_ref '../C4.html', 'C4'
+ end
+
+ def test_handle_special_CROSSREF_C4
+ @xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C4.html', @c4, true
+
+ # C4 ref inside a C4 containing a C4 should resolve to the contained class
+ assert_ref '../C4/C4.html', 'C4'
+ end
+
+ def test_handle_special_CROSSREF_C4_C4
+ @xref = RDoc::Markup::ToHtmlCrossref.new 'classes/C4/C4.html', @c4_c4, true
+
+ # A C4 reference inside a C4 class contained within a C4 class should
+ # resolve to the inner C4 class.
+ assert_ref '../../C4/C4.html', 'C4'
+ end
+
+ def test_handle_special_CROSSREF_class
+ assert_ref 'C1.html', 'C1'
+ refute_ref 'H1', 'H1'
+
+ assert_ref 'C2.html', 'C2'
+ assert_ref 'C2/C3.html', 'C2::C3'
+ assert_ref 'C2/C3/H1.html', 'C2::C3::H1'
+
+ assert_ref 'C3.html', '::C3'
+ assert_ref 'C3/H1.html', '::C3::H1'
+
+ assert_ref 'C4/C4.html', 'C4::C4'
+ end
+
+ def test_handle_special_CROSSREF_file
+ assert_ref 'xref_data_rb.html', 'xref_data.rb'
+ end
+
+ def test_handle_special_CROSSREF_method
+ refute_ref 'm', 'm'
+ assert_ref 'C1.html#M000000', '#m'
+
+ assert_ref 'C1.html#M000000', 'C1#m'
+ assert_ref 'C1.html#M000000', 'C1#m()'
+ assert_ref 'C1.html#M000000', 'C1#m(*)'
+
+ assert_ref 'C1.html#M000000', 'C1.m'
+ assert_ref 'C1.html#M000000', 'C1.m()'
+ assert_ref 'C1.html#M000000', 'C1.m(*)'
+
+ # HACK should this work
+ #assert_ref 'classes/C1.html#M000001', 'C1::m'
+ #assert_ref 'classes/C1.html#M000001', 'C1::m()'
+ #assert_ref 'classes/C1.html#M000001', 'C1::m(*)'
+
+ assert_ref 'C2/C3.html#M000002', 'C2::C3#m'
+
+ assert_ref 'C2/C3.html#M000002', 'C2::C3.m'
+
+ assert_ref 'C2/C3/H1.html#M000003', 'C2::C3::H1#m?'
+
+ assert_ref 'C2/C3.html#M000002', '::C2::C3#m'
+ assert_ref 'C2/C3.html#M000002', '::C2::C3#m()'
+ assert_ref 'C2/C3.html#M000002', '::C2::C3#m(*)'
+ end
+
+ def test_handle_special_CROSSREF_no_ref
+ assert_equal '', @xref.convert('')
+
+ refute_ref 'bogus', 'bogus'
+ refute_ref 'bogus', '\bogus'
+ refute_ref '\bogus', '\\\bogus'
+
+ refute_ref '#n', '\#n'
+ refute_ref '#n()', '\#n()'
+ refute_ref '#n(*)', '\#n(*)'
+
+ refute_ref 'C1', '\C1'
+ refute_ref '::C3', '\::C3'
+
+ refute_ref '::C3::H1#n', '::C3::H1#n'
+ refute_ref '::C3::H1#n(*)', '::C3::H1#n(*)'
+ refute_ref '::C3::H1#n', '\::C3::H1#n'
+ end
+
+ def test_handle_special_CROSSREF_special
+ assert_equal "<p>\n<a href=\"C2/C3.html\">C2::C3</a>;method(*)\n</p>\n",
+ @xref.convert('C2::C3;method(*)')
+ end
+
+end
+
+MiniTest::Unit.autorun
+
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_normal_module.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_normal_module.rb
new file mode 100644
index 000000000..9bd681954
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_normal_module.rb
@@ -0,0 +1,26 @@
+require 'test/xref_test_case'
+
+class TestRDocNormalModule < XrefTestCase
+
+ def setup
+ super
+
+ @mod = RDoc::NormalModule.new 'Mod'
+ end
+
+ def test_comment_equals
+ @mod.comment = '# comment 1'
+
+ assert_equal '# comment 1', @mod.comment
+
+ @mod.comment = '# comment 2'
+
+ assert_equal "# comment 1\n# ---\n# comment 2", @mod.comment
+ end
+
+ def test_module_eh
+ assert @mod.module?
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser.rb
new file mode 100644
index 000000000..ae4801c42
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser.rb
@@ -0,0 +1,29 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/parser'
+require 'rdoc/parser/ruby'
+
+class TestRDocParser < MiniTest::Unit::TestCase
+ def test_can_parse
+ assert_equal(RDoc::Parser.can_parse(__FILE__), RDoc::Parser::Ruby)
+
+ readme_file_name = File.join(File.dirname(__FILE__), "..", "README.txt")
+
+ unless File.exist? readme_file_name then # HACK for tests in trunk :/
+ readme_file_name = File.join File.dirname(__FILE__), '..', '..', 'README'
+ end
+
+ assert_equal(RDoc::Parser.can_parse(readme_file_name), RDoc::Parser::Simple)
+
+ binary_file_name = File.join(File.dirname(__FILE__), "binary.dat")
+ assert_equal(RDoc::Parser.can_parse(binary_file_name), nil)
+
+ jtest_file_name = File.join(File.dirname(__FILE__), "test.ja.txt")
+ assert_equal(RDoc::Parser::Simple, RDoc::Parser.can_parse(jtest_file_name))
+
+ jtest_rdoc_file_name = File.join(File.dirname(__FILE__), "test.ja.rdoc")
+ assert_equal(RDoc::Parser::Simple, RDoc::Parser.can_parse(jtest_rdoc_file_name))
+ end
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_c.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_c.rb
new file mode 100644
index 000000000..6d129cebe
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_c.rb
@@ -0,0 +1,401 @@
+require 'stringio'
+require 'tempfile'
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/options'
+require 'rdoc/parser/c'
+
+class RDoc::Parser::C
+ attr_accessor :classes
+
+ public :do_classes, :do_constants
+end
+
+class TestRDocParserC < MiniTest::Unit::TestCase
+
+ def setup
+ @tempfile = Tempfile.new self.class.name
+ filename = @tempfile.path
+
+ @top_level = RDoc::TopLevel.new filename
+ @fn = filename
+ @options = RDoc::Options.new
+ @stats = RDoc::Stats.new 0
+
+ RDoc::Parser::C.reset
+ RDoc::TopLevel.reset
+ end
+
+ def teardown
+ @tempfile.close
+ end
+
+ def test_do_classes_boot_class
+ content = <<-EOF
+/* Document-class: Foo
+ * this is the Foo boot class
+ */
+VALUE cFoo = boot_defclass("Foo", 0);
+ EOF
+
+ klass = util_get_class content, 'cFoo'
+ assert_equal " this is the Foo boot class\n ", klass.comment
+ end
+
+ def test_do_classes_class
+ content = <<-EOF
+/* Document-class: Foo
+ * this is the Foo class
+ */
+VALUE cFoo = rb_define_class("Foo", rb_cObject);
+ EOF
+
+ klass = util_get_class content, 'cFoo'
+ assert_equal " this is the Foo class\n ", klass.comment
+ end
+
+ def test_do_classes_class_under
+ content = <<-EOF
+/* Document-class: Kernel::Foo
+ * this is the Foo class under Kernel
+ */
+VALUE cFoo = rb_define_class_under(rb_mKernel, "Foo", rb_cObject);
+ EOF
+
+ klass = util_get_class content, 'cFoo'
+ assert_equal " this is the Foo class under Kernel\n ", klass.comment
+ end
+
+ def test_do_classes_module
+ content = <<-EOF
+/* Document-module: Foo
+ * this is the Foo module
+ */
+VALUE mFoo = rb_define_module("Foo");
+ EOF
+
+ klass = util_get_class content, 'mFoo'
+ assert_equal " this is the Foo module\n ", klass.comment
+ end
+
+ def test_do_classes_module_under
+ content = <<-EOF
+/* Document-module: Kernel::Foo
+ * this is the Foo module under Kernel
+ */
+VALUE mFoo = rb_define_module_under(rb_mKernel, "Foo");
+ EOF
+
+ klass = util_get_class content, 'mFoo'
+ assert_equal " this is the Foo module under Kernel\n ", klass.comment
+ end
+
+ def test_do_constants
+ content = <<-EOF
+#include <ruby.h>
+
+void Init_foo(){
+ VALUE cFoo = rb_define_class("Foo", rb_cObject);
+
+ /* 300: The highest possible score in bowling */
+ rb_define_const(cFoo, "PERFECT", INT2FIX(300));
+
+ /* Huzzah!: What you cheer when you roll a perfect game */
+ rb_define_const(cFoo, "CHEER", rb_str_new2("Huzzah!"));
+
+ /* TEST\:TEST: Checking to see if escaped semicolon works */
+ rb_define_const(cFoo, "TEST", rb_str_new2("TEST:TEST"));
+
+ /* \\: The file separator on MS Windows */
+ rb_define_const(cFoo, "MSEPARATOR", rb_str_new2("\\"));
+
+ /* /: The file separator on Unix */
+ rb_define_const(cFoo, "SEPARATOR", rb_str_new2("/"));
+
+ /* C:\\Program Files\\Stuff: A directory on MS Windows */
+ rb_define_const(cFoo, "STUFF", rb_str_new2("C:\\Program Files\\Stuff"));
+
+ /* Default definition */
+ rb_define_const(cFoo, "NOSEMI", INT2FIX(99));
+
+ rb_define_const(cFoo, "NOCOMMENT", rb_str_new2("No comment"));
+
+ /*
+ * Multiline comment goes here because this comment spans multiple lines.
+ * Multiline comment goes here because this comment spans multiple lines.
+ */
+ rb_define_const(cFoo, "MULTILINE", INT2FIX(1));
+
+ /*
+ * 1: Multiline comment goes here because this comment spans multiple lines.
+ * Multiline comment goes here because this comment spans multiple lines.
+ */
+ rb_define_const(cFoo, "MULTILINE_VALUE", INT2FIX(1));
+
+ /* Multiline comment goes here because this comment spans multiple lines.
+ * Multiline comment goes here because this comment spans multiple lines.
+ */
+ rb_define_const(cFoo, "MULTILINE_NOT_EMPTY", INT2FIX(1));
+
+}
+ EOF
+
+ @parser = util_parser content
+
+ @parser.do_classes
+ @parser.do_constants
+
+ klass = @parser.classes['cFoo']
+ assert klass
+
+ constants = klass.constants
+ assert !klass.constants.empty?
+
+ constants = constants.map { |c| [c.name, c.value, c.comment] }
+
+ assert_equal ['PERFECT', '300',
+ "\n The highest possible score in bowling \n "],
+ constants.shift
+ assert_equal ['CHEER', 'Huzzah!',
+ "\n What you cheer when you roll a perfect game \n "],
+ constants.shift
+ assert_equal ['TEST', 'TEST:TEST',
+ "\n Checking to see if escaped semicolon works \n "],
+ constants.shift
+ assert_equal ['MSEPARATOR', '\\',
+ "\n The file separator on MS Windows \n "],
+ constants.shift
+ assert_equal ['SEPARATOR', '/',
+ "\n The file separator on Unix \n "],
+ constants.shift
+ assert_equal ['STUFF', 'C:\\Program Files\\Stuff',
+ "\n A directory on MS Windows \n "],
+ constants.shift
+ assert_equal ['NOSEMI', 'INT2FIX(99)',
+ "\n Default definition \n "],
+ constants.shift
+ assert_equal ['NOCOMMENT', 'rb_str_new2("No comment")', nil],
+ constants.shift
+
+ comment = <<-EOF.chomp
+
+
+ Multiline comment goes here because this comment spans multiple lines.
+ Multiline comment goes here because this comment spans multiple lines.
+
+
+ EOF
+ assert_equal ['MULTILINE', 'INT2FIX(1)', comment], constants.shift
+ assert_equal ['MULTILINE_VALUE', '1', comment], constants.shift
+
+ comment = <<-EOF.chomp
+
+ Multiline comment goes here because this comment spans multiple lines.
+ Multiline comment goes here because this comment spans multiple lines.
+
+
+ EOF
+ assert_equal ['MULTILINE_NOT_EMPTY', 'INT2FIX(1)', comment], constants.shift
+
+ assert constants.empty?, constants.inspect
+ end
+
+ def test_find_class_comment_init
+ content = <<-EOF
+/*
+ * a comment for class Foo
+ */
+void
+Init_Foo(void) {
+ VALUE foo = rb_define_class("Foo", rb_cObject);
+}
+ EOF
+
+ klass = util_get_class content, 'foo'
+
+ assert_equal " \n a comment for class Foo\n \n", klass.comment
+ end
+
+ def test_find_class_comment_define_class
+ content = <<-EOF
+/*
+ * a comment for class Foo
+ */
+VALUE foo = rb_define_class("Foo", rb_cObject);
+ EOF
+
+ klass = util_get_class content, 'foo'
+
+ assert_equal " \n a comment for class Foo\n \n", klass.comment
+ end
+
+ def test_find_class_comment_define_class_Init_Foo
+ content = <<-EOF
+/*
+ * a comment for class Foo on Init
+ */
+void
+Init_Foo(void) {
+ /*
+ * a comment for class Foo on rb_define_class
+ */
+ VALUE foo = rb_define_class("Foo", rb_cObject);
+}
+ EOF
+
+ klass = util_get_class content, 'foo'
+
+ assert_equal " \n a comment for class Foo on Init\n \n", klass.comment
+ end
+
+ def test_find_class_comment_define_class_bogus_comment
+ content = <<-EOF
+/*
+ * a comment for other_function
+ */
+void
+other_function() {
+}
+
+void
+Init_Foo(void) {
+ VALUE foo = rb_define_class("Foo", rb_cObject);
+}
+ EOF
+
+ klass = util_get_class content, 'foo'
+
+ assert_equal '', klass.comment
+ end
+
+ def test_find_body
+ content = <<-EOF
+/*
+ * a comment for other_function
+ */
+VALUE
+other_function() {
+}
+
+void
+Init_Foo(void) {
+ VALUE foo = rb_define_class("Foo", rb_cObject);
+
+ rb_define_method(foo, "my_method", other_function, 0);
+}
+ EOF
+
+ klass = util_get_class content, 'foo'
+ other_function = klass.method_list.first
+
+ assert_equal 'my_method', other_function.name
+ assert_equal " \n a comment for other_function\n \n",
+ other_function.comment
+ assert_equal '()', other_function.params
+
+ code = other_function.token_stream.first.text
+
+ assert_equal "VALUE\nother_function() ", code
+ end
+
+ def test_find_body_define
+ content = <<-EOF
+/*
+ * a comment for other_function
+ */
+#define other_function rb_other_function
+
+/* */
+VALUE
+rb_other_function() {
+}
+
+void
+Init_Foo(void) {
+ VALUE foo = rb_define_class("Foo", rb_cObject);
+
+ rb_define_method(foo, "my_method", other_function, 0);
+}
+ EOF
+
+ klass = util_get_class content, 'foo'
+ other_function = klass.method_list.first
+
+ assert_equal 'my_method', other_function.name
+ assert_equal " \n a comment for other_function\n \n \n",
+ other_function.comment
+ assert_equal '()', other_function.params
+
+ code = other_function.token_stream.first.text
+
+ assert_equal "#define other_function rb_other_function", code
+ end
+
+ def test_define_method
+ content = <<-EOF
+/*Method Comment! */
+static VALUE
+rb_io_s_read(argc, argv, io)
+ int argc;
+ VALUE *argv;
+ VALUE io;
+{
+}
+
+void
+Init_IO(void) {
+ /*
+ * a comment for class Foo on rb_define_class
+ */
+ VALUE rb_cIO = rb_define_class("IO", rb_cObject);
+ rb_define_singleton_method(rb_cIO, "read", rb_io_s_read, -1);
+}
+ EOF
+
+ klass = util_get_class content, 'rb_cIO'
+ read_method = klass.method_list.first
+ assert_equal "read", read_method.name
+ assert_equal " Method Comment! \n", read_method.comment
+ end
+
+ def test_define_method_private
+ content = <<-EOF
+/*Method Comment! */
+static VALUE
+rb_io_s_read(argc, argv, io)
+ int argc;
+ VALUE *argv;
+ VALUE io;
+{
+}
+
+void
+Init_IO(void) {
+ /*
+ * a comment for class Foo on rb_define_class
+ */
+ VALUE rb_cIO = rb_define_class("IO", rb_cObject);
+ rb_define_private_method(rb_cIO, "read", rb_io_s_read, -1);
+}
+ EOF
+
+ klass = util_get_class content, 'rb_cIO'
+ read_method = klass.method_list.first
+ assert_equal 'IO#read', read_method.full_name
+ assert_equal :private, read_method.visibility
+ assert_equal " Method Comment! \n", read_method.comment
+ end
+
+ def util_get_class(content, name)
+ @parser = util_parser content
+ @parser.scan
+ @parser.classes[name]
+ end
+
+ def util_parser(content)
+ RDoc::Parser::C.new @top_level, @fn, content, @options, @stats
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_perl.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_perl.rb
new file mode 100644
index 000000000..165cadaa5
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_perl.rb
@@ -0,0 +1,74 @@
+require 'stringio'
+require 'tempfile'
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/options'
+require 'rdoc/parser/perl'
+
+class TestRdocParserPerlPOD < MiniTest::Unit::TestCase
+
+ def setup
+ @tempfile = Tempfile.new self.class.name
+ filename = @tempfile.path
+
+ @top_level = RDoc::TopLevel.new filename
+ @fn = filename
+ @options = RDoc::Options.new
+ @stats = RDoc::Stats.new 0
+ end
+
+ def teardown
+ @tempfile.close
+ end
+
+ def test_uncommented_perl
+ content = <<-EOF
+while (<>) {
+ tr/a-z/A-Z;
+ print
+}
+ EOF
+
+ comment = util_get_comment content
+ assert_equal "", comment
+ end
+
+ def test_perl_without_pod
+ content = <<-EOF
+#!/usr/local/bin/perl
+#
+#This is a pointless perl program because it does -p.
+#
+while(<>) {print;}:
+ EOF
+
+ comment = util_get_comment content
+ assert_equal "", comment
+ end
+
+ def test_simple_pod_no_structure
+ content = <<-EOF
+=begin pod
+
+This just contains plain old documentation
+
+=end
+ EOF
+ comment = util_get_comment content
+ assert_equal "\nThis just contains plain old documentation\n\n", comment
+ end
+
+ # Get the comment of the @top_level when it has processed the input.
+ def util_get_comment(content)
+ parser = util_parser content
+ parser.scan.comment
+ end
+
+ # create a new parser with the supplied content.
+ def util_parser(content)
+ RDoc::Parser::PerlPOD.new @top_level, @fn, content, @options, @stats
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_ruby.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_ruby.rb
new file mode 100644
index 000000000..5fb880cb3
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_parser_ruby.rb
@@ -0,0 +1,1040 @@
+require 'stringio'
+require 'tempfile'
+require 'rubygems'
+require 'minitest/autorun'
+
+require 'rdoc/options'
+require 'rdoc/parser/ruby'
+require 'rdoc/stats'
+
+class TestRDocParserRuby < MiniTest::Unit::TestCase
+
+ def setup
+ @tempfile = Tempfile.new self.class.name
+ @filename = @tempfile.path
+
+ # Some tests need two paths.
+ @tempfile2 = Tempfile.new self.class.name
+ @filename2 = @tempfile2.path
+
+ util_top_level
+ @options = RDoc::Options.new
+ @options.quiet = true
+ @stats = RDoc::Stats.new 0
+ end
+
+ def teardown
+ @tempfile.close
+ @tempfile2.close
+ end
+
+ def test_look_for_directives_in_attr
+ util_parser ""
+
+ comment = "# :attr: my_attr\n"
+
+ @parser.look_for_directives_in @top_level, comment
+
+ assert_equal "# :attr: my_attr\n", comment
+
+ comment = "# :attr_reader: my_method\n"
+
+ @parser.look_for_directives_in @top_level, comment
+
+ assert_equal "# :attr_reader: my_method\n", comment
+
+ comment = "# :attr_writer: my_method\n"
+
+ @parser.look_for_directives_in @top_level, comment
+
+ assert_equal "# :attr_writer: my_method\n", comment
+ end
+
+ def test_look_for_directives_in_commented
+ util_parser ""
+
+ comment = "# how to make a section:\n# # :section: new section\n"
+
+ @parser.look_for_directives_in @top_level, comment
+
+ section = @top_level.current_section
+ assert_equal nil, section.title
+ assert_equal nil, section.comment
+
+ assert_equal "# how to make a section:\n# # :section: new section\n",
+ comment
+ end
+
+ def test_look_for_directives_in_enddoc
+ util_parser ""
+
+ assert_throws :enddoc do
+ @parser.look_for_directives_in @top_level, "# :enddoc:\n"
+ end
+ end
+
+ def test_look_for_directives_in_main
+ util_parser ""
+
+ @parser.look_for_directives_in @top_level, "# :main: new main page\n"
+
+ assert_equal 'new main page', @options.main_page
+ end
+
+ def test_look_for_directives_in_method
+ util_parser ""
+
+ comment = "# :method: my_method\n"
+
+ @parser.look_for_directives_in @top_level, comment
+
+ assert_equal "# :method: my_method\n", comment
+
+ comment = "# :singleton-method: my_method\n"
+
+ @parser.look_for_directives_in @top_level, comment
+
+ assert_equal "# :singleton-method: my_method\n", comment
+ end
+
+ def test_look_for_directives_in_startdoc
+ util_parser ""
+
+ @top_level.stop_doc
+ assert !@top_level.document_self
+ assert !@top_level.document_children
+ assert !@top_level.force_documentation
+
+ @parser.look_for_directives_in @top_level, "# :startdoc:\n"
+
+ assert @top_level.document_self
+ assert @top_level.document_children
+ assert @top_level.force_documentation
+ end
+
+ def test_look_for_directives_in_stopdoc
+ util_parser ""
+
+ assert @top_level.document_self
+ assert @top_level.document_children
+
+ @parser.look_for_directives_in @top_level, "# :stopdoc:\n"
+
+ assert !@top_level.document_self
+ assert !@top_level.document_children
+ end
+
+ def test_look_for_directives_in_section
+ util_parser ""
+
+ comment = "# :section: new section\n# woo stuff\n"
+
+ @parser.look_for_directives_in @top_level, comment
+
+ section = @top_level.current_section
+ assert_equal 'new section', section.title
+ assert_equal "# woo stuff\n", section.comment
+
+ assert_equal '', comment
+ end
+
+ def test_look_for_directives_in_title
+ util_parser ""
+
+ @parser.look_for_directives_in @top_level, "# :title: new title\n"
+
+ assert_equal 'new title', @options.title
+ end
+
+ def test_look_for_directives_in_unhandled
+ util_parser ""
+
+ comment = "# :unhandled: \n# :title: hi\n"
+
+ @parser.look_for_directives_in @top_level, comment
+
+ assert_equal "# :unhandled: \n", comment
+
+ assert_equal 'hi', @options.title
+ end
+
+ def test_parse_attr
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# my attr\n"
+
+ util_parser "attr :foo, :bar"
+
+ tk = @parser.get_tk
+
+ @parser.parse_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ assert_equal 1, klass.attributes.length
+
+ foo = klass.attributes.first
+ assert_equal 'foo', foo.name
+ assert_equal "##\n# my attr\n", foo.comment
+ end
+
+ def test_parse_attr_accessor
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# my attr\n"
+
+ util_parser "attr_accessor :foo, :bar"
+
+ tk = @parser.get_tk
+
+ @parser.parse_attr_accessor klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ assert_equal 2, klass.attributes.length
+
+ foo = klass.attributes.first
+ assert_equal 'foo', foo.name
+ assert_equal 'RW', foo.rw
+ assert_equal "##\n# my attr\n", foo.comment
+
+ bar = klass.attributes.last
+ assert_equal 'bar', bar.name
+ assert_equal 'RW', bar.rw
+ assert_equal "##\n# my attr\n", bar.comment
+ end
+
+ def test_parse_attr_accessor_writer
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# my attr\n"
+
+ util_parser "attr_writer :foo, :bar"
+
+ tk = @parser.get_tk
+
+ @parser.parse_attr_accessor klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ assert_equal 2, klass.attributes.length
+
+ foo = klass.attributes.first
+ assert_equal 'foo', foo.name
+ assert_equal 'W', foo.rw
+ assert_equal "##\n# my attr\n", foo.comment
+
+ bar = klass.attributes.last
+ assert_equal 'bar', bar.name
+ assert_equal 'W', bar.rw
+ assert_equal "##\n# my attr\n", bar.comment
+ end
+
+ def test_parse_meta_attr
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# :attr: \n# my method\n"
+
+ util_parser "add_my_method :foo, :bar"
+
+ tk = @parser.get_tk
+
+ @parser.parse_meta_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.attributes.first
+ assert_equal 'foo', foo.name
+ assert_equal 'RW', foo.rw
+ assert_equal "##\n# my method\n", foo.comment
+ end
+
+ def test_parse_meta_attr_accessor
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# :attr_accessor: \n# my method\n"
+
+ util_parser "add_my_method :foo, :bar"
+
+ tk = @parser.get_tk
+
+ @parser.parse_meta_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.attributes.first
+ assert_equal 'foo', foo.name
+ assert_equal 'RW', foo.rw
+ assert_equal "##\n# my method\n", foo.comment
+ end
+
+ def test_parse_meta_attr_reader
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# :attr_reader: \n# my method\n"
+
+ util_parser "add_my_method :foo, :bar"
+
+ tk = @parser.get_tk
+
+ @parser.parse_meta_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.attributes.first
+ assert_equal 'foo', foo.name
+ assert_equal 'R', foo.rw
+ assert_equal "##\n# my method\n", foo.comment
+ end
+
+ def test_parse_meta_attr_writer
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# :attr_writer: \n# my method\n"
+
+ util_parser "add_my_method :foo, :bar"
+
+ tk = @parser.get_tk
+
+ @parser.parse_meta_attr klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.attributes.first
+ assert_equal 'foo', foo.name
+ assert_equal 'W', foo.rw
+ assert_equal "##\n# my method\n", foo.comment
+ end
+
+ def test_parse_class
+ comment = "##\n# my method\n"
+
+ util_parser 'class Foo; end'
+
+ tk = @parser.get_tk
+
+ @parser.parse_class @top_level, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = @top_level.classes.first
+ assert_equal 'Foo', foo.full_name
+ assert_equal comment, foo.comment
+ end
+
+ def test_parse_class_nested_superclass
+ foo = RDoc::NormalModule.new 'Foo'
+ foo.parent = @top_level
+
+ util_parser "class Bar < Super\nend"
+
+ tk = @parser.get_tk
+
+ @parser.parse_class foo, RDoc::Parser::Ruby::NORMAL, tk, ''
+
+ bar = foo.classes.first
+ assert_equal 'Super', bar.superclass
+ end
+
+ def test_parse_module
+ comment = "##\n# my module\n"
+
+ util_parser 'module Foo; end'
+
+ tk = @parser.get_tk
+
+ @parser.parse_module @top_level, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = @top_level.modules.first
+ assert_equal 'Foo', foo.full_name
+ assert_equal comment, foo.comment
+ end
+
+ def test_parse_class_mistaken_for_module
+ # The code below is not strictly legal Ruby (Foo must have been defined
+ # before Foo::Bar is encountered), but RDoc might encounter Foo::Bar
+ # before Foo if they live in different files.
+
+ code = <<-EOF
+class Foo::Bar
+end
+
+module Foo::Baz
+end
+
+class Foo
+end
+ EOF
+
+ util_parser code
+
+ @parser.scan
+
+ assert_equal %w[Foo::Baz], RDoc::TopLevel.modules_hash.keys
+ assert_empty @top_level.modules
+
+ foo = @top_level.classes.first
+ assert_equal 'Foo', foo.full_name
+
+ bar = foo.classes.first
+ assert_equal 'Foo::Bar', bar.full_name
+
+ baz = foo.modules.first
+ assert_equal 'Foo::Baz', baz.full_name
+ end
+
+ def test_parse_class_definition_encountered_after_class_reference
+ # The code below is not strictly legal Ruby (Foo must have been defined
+ # before Foo.bar is encountered), but RDoc might encounter Foo.bar before
+ # Foo if they live in different files.
+
+ code = <<-EOF
+def Foo.bar
+end
+
+class Foo < IO
+end
+ EOF
+
+ util_parser code
+
+ @parser.scan
+
+ assert_empty RDoc::TopLevel.modules_hash
+ # HACK why does it fail?
+ #assert_empty @top_level.modules
+
+ foo = @top_level.classes.first
+ assert_equal 'Foo', foo.full_name
+ assert_equal 'IO', foo.superclass
+
+ bar = foo.method_list.first
+ assert_equal 'bar', bar.name
+ end
+
+ def test_parse_module_relative_to_top_level_namespace
+ comment = <<-EOF
+#
+# Weirdly named module
+#
+EOF
+
+ code = comment + <<-EOF
+module ::Foo
+ class Helper
+ end
+end
+EOF
+
+ util_parser code
+ @parser.scan()
+
+ foo = @top_level.modules.first
+ assert_equal 'Foo', foo.full_name
+ assert_equal comment, foo.comment
+
+ helper = foo.classes.first
+ assert_equal 'Foo::Helper', helper.full_name
+ end
+
+ def test_parse_comment_attr
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# :attr: foo\n# my attr\n"
+
+ util_parser "\n"
+
+ tk = @parser.get_tk
+
+ @parser.parse_comment klass, tk, comment
+
+ foo = klass.attributes.first
+ assert_equal 'foo', foo.name
+ assert_equal 'RW', foo.rw
+ assert_equal comment, foo.comment
+
+ assert_equal nil, foo.viewer
+ assert_equal true, foo.document_children
+ assert_equal true, foo.document_self
+ assert_equal false, foo.done_documenting
+ assert_equal false, foo.force_documentation
+ assert_equal klass, foo.parent
+ assert_equal :public, foo.visibility
+ assert_equal "\n", foo.text
+ assert_equal klass.current_section, foo.section
+ end
+
+ def test_parse_comment_method
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# :method: foo\n# my method\n"
+
+ util_parser "\n"
+
+ tk = @parser.get_tk
+
+ @parser.parse_comment klass, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal 'foo', foo.name
+ assert_equal comment, foo.comment
+
+ assert_equal [], foo.aliases
+ assert_equal nil, foo.block_params
+ assert_equal nil, foo.call_seq
+ assert_equal nil, foo.is_alias_for
+ assert_equal nil, foo.viewer
+ assert_equal true, foo.document_children
+ assert_equal true, foo.document_self
+ assert_equal '', foo.params
+ assert_equal false, foo.done_documenting
+ assert_equal false, foo.dont_rename_initialize
+ assert_equal false, foo.force_documentation
+ assert_equal klass, foo.parent
+ assert_equal false, foo.singleton
+ assert_equal :public, foo.visibility
+ assert_equal "\n", foo.text
+ assert_equal klass.current_section, foo.section
+
+ stream = [
+ tk(:COMMENT, 1, 1, nil, "# File #{@top_level.absolute_name}, line 1"),
+ RDoc::Parser::Ruby::NEWLINE_TOKEN,
+ tk(:SPACE, 1, 1, nil, ''),
+ ]
+
+ assert_equal stream, foo.token_stream
+ end
+
+ def test_parse_meta_method
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# my method\n"
+
+ util_parser "add_my_method :foo, :bar\nadd_my_method :baz"
+
+ tk = @parser.get_tk
+
+ @parser.parse_meta_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal 'foo', foo.name
+ assert_equal comment, foo.comment
+
+ assert_equal [], foo.aliases
+ assert_equal nil, foo.block_params
+ assert_equal nil, foo.call_seq
+ assert_equal true, foo.document_children
+ assert_equal true, foo.document_self
+ assert_equal false, foo.done_documenting
+ assert_equal false, foo.dont_rename_initialize
+ assert_equal false, foo.force_documentation
+ assert_equal nil, foo.is_alias_for
+ assert_equal '', foo.params
+ assert_equal klass, foo.parent
+ assert_equal false, foo.singleton
+ assert_equal 'add_my_method :foo', foo.text
+ assert_equal nil, foo.viewer
+ assert_equal :public, foo.visibility
+ assert_equal klass.current_section, foo.section
+
+ stream = [
+ tk(:COMMENT, 1, 1, nil, "# File #{@top_level.absolute_name}, line 1"),
+ RDoc::Parser::Ruby::NEWLINE_TOKEN,
+ tk(:SPACE, 1, 1, nil, ''),
+ tk(:IDENTIFIER, 1, 0, 'add_my_method', 'add_my_method'),
+ tk(:SPACE, 1, 13, nil, ' '),
+ tk(:SYMBOL, 1, 14, nil, ':foo'),
+ tk(:COMMA, 1, 18, nil, ','),
+ tk(:SPACE, 1, 19, nil, ' '),
+ tk(:SYMBOL, 1, 20, nil, ':bar'),
+ tk(:NL, 1, 24, nil, "\n"),
+ ]
+
+ assert_equal stream, foo.token_stream
+ end
+
+ def test_parse_meta_method_name
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# :method: woo_hoo!\n# my method\n"
+
+ util_parser "add_my_method :foo, :bar\nadd_my_method :baz"
+
+ tk = @parser.get_tk
+
+ @parser.parse_meta_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal 'woo_hoo!', foo.name
+ assert_equal "##\n# my method\n", foo.comment
+ end
+
+ def test_parse_meta_method_singleton
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# :singleton-method:\n# my method\n"
+
+ util_parser "add_my_method :foo, :bar\nadd_my_method :baz"
+
+ tk = @parser.get_tk
+
+ @parser.parse_meta_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal 'foo', foo.name
+ assert_equal true, foo.singleton, 'singleton method'
+ assert_equal "##\n# my method\n", foo.comment
+ end
+
+ def test_parse_meta_method_singleton_name
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# :singleton-method: woo_hoo!\n# my method\n"
+
+ util_parser "add_my_method :foo, :bar\nadd_my_method :baz"
+
+ tk = @parser.get_tk
+
+ @parser.parse_meta_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal 'woo_hoo!', foo.name
+ assert_equal true, foo.singleton, 'singleton method'
+ assert_equal "##\n# my method\n", foo.comment
+ end
+
+ def test_parse_meta_method_string_name
+ klass = RDoc::NormalClass.new 'Foo'
+ comment = "##\n# my method\n"
+
+ util_parser "add_my_method 'foo'"
+
+ tk = @parser.get_tk
+
+ @parser.parse_meta_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal 'foo', foo.name
+ assert_equal comment, foo.comment
+ end
+
+ def test_parse_meta_method_unknown
+ klass = RDoc::NormalClass.new 'Foo'
+ comment = "##\n# my method\n"
+
+ util_parser "add_my_method ('foo')"
+
+ tk = @parser.get_tk
+
+ @parser.parse_meta_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal 'unknown', foo.name
+ assert_equal comment, foo.comment
+ end
+
+ def test_parse_method
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# my method\n"
+
+ util_parser "def foo() :bar end"
+
+ tk = @parser.get_tk
+
+ @parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal 'foo', foo.name
+ assert_equal comment, foo.comment
+
+ assert_equal [], foo.aliases
+ assert_equal nil, foo.block_params
+ assert_equal nil, foo.call_seq
+ assert_equal nil, foo.is_alias_for
+ assert_equal nil, foo.viewer
+ assert_equal true, foo.document_children
+ assert_equal true, foo.document_self
+ assert_equal '()', foo.params
+ assert_equal false, foo.done_documenting
+ assert_equal false, foo.dont_rename_initialize
+ assert_equal false, foo.force_documentation
+ assert_equal klass, foo.parent
+ assert_equal false, foo.singleton
+ assert_equal :public, foo.visibility
+ assert_equal 'def foo', foo.text
+ assert_equal klass.current_section, foo.section
+
+ stream = [
+ tk(:COMMENT, 1, 1, nil, "# File #{@top_level.absolute_name}, line 1"),
+ RDoc::Parser::Ruby::NEWLINE_TOKEN,
+ tk(:SPACE, 1, 1, nil, ''),
+ tk(:DEF, 1, 0, 'def', 'def'),
+ tk(:SPACE, 1, 3, nil, ' '),
+ tk(:IDENTIFIER, 1, 4, 'foo', 'foo'),
+ tk(:LPAREN, 1, 7, nil, '('),
+ tk(:RPAREN, 1, 8, nil, ')'),
+ tk(:SPACE, 1, 9, nil, ' '),
+ tk(:COLON, 1, 10, nil, ':'),
+ tk(:IDENTIFIER, 1, 11, 'bar', 'bar'),
+ tk(:SPACE, 1, 14, nil, ' '),
+ tk(:END, 1, 15, 'end', 'end'),
+ ]
+
+ assert_equal stream, foo.token_stream
+ end
+
+ def test_parse_method_funky
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# my method\n"
+
+ util_parser "def (blah).foo() :bar end"
+
+ tk = @parser.get_tk
+
+ @parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ assert klass.method_list.empty?
+ end
+
+ def test_parse_method_no_parens
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# my method\n"
+
+ util_parser "def foo arg1, arg2\nend"
+
+ tk = @parser.get_tk
+
+ @parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal '(arg1, arg2)', foo.params
+ end
+
+ def test_parse_method_parameters_comment
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# my method\n"
+
+ util_parser "def foo arg1, arg2 # some useful comment\nend"
+
+ tk = @parser.get_tk
+
+ @parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal '(arg1, arg2)', foo.params
+ end
+
+ def test_parse_method_parameters_comment_continue
+ klass = RDoc::NormalClass.new 'Foo'
+ klass.parent = @top_level
+
+ comment = "##\n# my method\n"
+
+ util_parser "def foo arg1, arg2, # some useful comment\narg3\nend"
+
+ tk = @parser.get_tk
+
+ @parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ foo = klass.method_list.first
+ assert_equal '(arg1, arg2, arg3)', foo.params
+ end
+
+ def test_parse_method_toplevel
+ klass = @top_level
+
+ comment = "##\n# my method\n"
+
+ util_parser "def foo arg1, arg2\nend"
+
+ tk = @parser.get_tk
+
+ @parser.parse_method klass, RDoc::Parser::Ruby::NORMAL, tk, comment
+
+ object = RDoc::TopLevel.find_class_named 'Object'
+
+ foo = object.method_list.first
+ assert_equal 'Object#foo', foo.full_name
+ end
+
+ def test_parse_statements_class_if
+ comment = "##\n# my method\n"
+
+ util_parser <<-CODE
+module Foo
+ X = if TRUE then
+ ''
+ end
+
+ def blah
+ end
+end
+ CODE
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ foo = @top_level.modules.first
+ assert_equal 'Foo', foo.full_name, 'module Foo'
+
+ methods = foo.method_list
+ assert_equal 1, methods.length
+ assert_equal 'Foo#blah', methods.first.full_name
+ end
+
+ def test_parse_statements_class_nested
+ comment = "##\n# my method\n"
+
+ util_parser "module Foo\n#{comment}class Bar\nend\nend"
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ foo = @top_level.modules.first
+ assert_equal 'Foo', foo.full_name, 'module Foo'
+
+ bar = foo.classes.first
+ assert_equal 'Foo::Bar', bar.full_name, 'class Foo::Bar'
+ assert_equal comment, bar.comment
+ end
+
+ def test_parse_statements_identifier_meta_method
+ content = <<-EOF
+class Foo
+ ##
+ # this is my method
+ add_my_method :foo
+end
+ EOF
+
+ util_parser content
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ foo = @top_level.classes.first.method_list.first
+ assert_equal 'foo', foo.name
+ end
+
+ def test_parse_statements_identifier_alias_method
+ content = "class Foo def foo() end; alias_method :foo2, :foo end"
+
+ util_parser content
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ foo = @top_level.classes.first.method_list[0]
+ assert_equal 'foo', foo.name
+
+ foo2 = @top_level.classes.first.method_list.last
+ assert_equal 'foo2', foo2.name
+ assert_equal 'foo', foo2.is_alias_for.name
+ assert @top_level.classes.first.aliases.empty?
+ end
+
+ def test_parse_statements_identifier_alias_method_before_original_method
+ # This is not strictly legal Ruby code, but it simulates finding an alias
+ # for a method before finding the original method, which might happen
+ # to rdoc if the alias is in a different file than the original method
+ # and rdoc processes the alias' file first.
+ content = <<-EOF
+class Foo
+ alias_method :foo2, :foo
+
+ alias_method :foo3, :foo
+
+ def foo()
+ end
+
+ alias_method :foo4, :foo
+
+ alias_method :foo5, :unknown
+end
+EOF
+
+ util_parser content
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ foo = @top_level.classes.first.method_list[0]
+ assert_equal 'foo', foo.name
+
+ foo2 = @top_level.classes.first.method_list[1]
+ assert_equal 'foo2', foo2.name
+ assert_equal 'foo', foo2.is_alias_for.name
+
+ foo3 = @top_level.classes.first.method_list[2]
+ assert_equal 'foo3', foo3.name
+ assert_equal 'foo', foo3.is_alias_for.name
+
+ foo4 = @top_level.classes.first.method_list.last
+ assert_equal 'foo4', foo4.name
+ assert_equal 'foo', foo4.is_alias_for.name
+
+ assert_equal 'unknown', @top_level.classes.first.aliases[0].old_name
+ end
+
+ def test_parse_statements_identifier_constant
+ content = <<-EOF
+class Foo
+ FIRST_CONSTANT = 5
+
+ SECOND_CONSTANT = [
+ 1,
+ 2,
+ 3
+ ]
+
+ THIRD_CONSTANT = {
+ :foo => 'bar',
+ :x => 'y'
+ }
+
+ FOURTH_CONSTANT = SECOND_CONSTANT.map do |element|
+ element + 1
+ element + 2
+ end
+
+ FIFTH_CONSTANT = SECOND_CONSTANT.map { |element| element + 1 }
+end
+EOF
+
+ util_parser content
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ constants = @top_level.classes.first.constants
+
+ constant = constants[0]
+ assert_equal 'FIRST_CONSTANT', constant.name
+ assert_equal '5', constant.value
+
+ constant = constants[1]
+ assert_equal 'SECOND_CONSTANT', constant.name
+ assert_equal '[ 1, 2, 3 ]', constant.value
+
+ constant = constants[2]
+ assert_equal 'THIRD_CONSTANT', constant.name
+ assert_equal "{ :foo => 'bar', :x => 'y' }", constant.value
+
+ constant = constants[3]
+ assert_equal 'FOURTH_CONSTANT', constant.name
+ assert_equal 'SECOND_CONSTANT.map do |element| element + 1 element + 2 end', constant.value
+
+ constant = constants.last
+ assert_equal 'FIFTH_CONSTANT', constant.name
+ assert_equal 'SECOND_CONSTANT.map { |element| element + 1 }', constant.value
+ end
+
+ def test_parse_statements_identifier_attr
+ content = "class Foo; attr :foo; end"
+
+ util_parser content
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ foo = @top_level.classes.first.attributes.first
+ assert_equal 'foo', foo.name
+ assert_equal 'R', foo.rw
+ end
+
+ def test_parse_statements_identifier_attr_accessor
+ content = "class Foo; attr_accessor :foo; end"
+
+ util_parser content
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ foo = @top_level.classes.first.attributes.first
+ assert_equal 'foo', foo.name
+ assert_equal 'RW', foo.rw
+ end
+
+ def test_parse_statements_identifier_include
+ content = "class Foo; include Bar; end"
+
+ util_parser content
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ foo = @top_level.classes.first
+ assert_equal 'Foo', foo.name
+ assert_equal 1, foo.includes.length
+ end
+
+ def test_parse_statements_identifier_module_function
+ content = "module Foo def foo() end; module_function :foo; end"
+
+ util_parser content
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ foo, s_foo = @top_level.modules.first.method_list
+ assert_equal 'foo', foo.name, 'instance method name'
+ assert_equal :private, foo.visibility, 'instance method visibility'
+ assert_equal false, foo.singleton, 'instance method singleton'
+
+ assert_equal 'foo', s_foo.name, 'module function name'
+ assert_equal :public, s_foo.visibility, 'module function visibility'
+ assert_equal true, s_foo.singleton, 'module function singleton'
+ end
+
+ def test_parse_statements_identifier_private
+ content = "class Foo private; def foo() end end"
+
+ util_parser content
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ foo = @top_level.classes.first.method_list.first
+ assert_equal 'foo', foo.name
+ assert_equal :private, foo.visibility
+ end
+
+ def test_parse_statements_identifier_require
+ content = "require 'bar'"
+
+ util_parser content
+
+ @parser.parse_statements @top_level, RDoc::Parser::Ruby::NORMAL, nil, ''
+
+ assert_equal 1, @top_level.requires.length
+ end
+
+ def tk(klass, line, char, name, text)
+ klass = RDoc::RubyToken.const_get "Tk#{klass.to_s.upcase}"
+
+ token = if klass.instance_method(:initialize).arity == 2 then
+ raise ArgumentError, "name not used for #{klass}" unless name.nil?
+ klass.new line, char
+ else
+ klass.new line, char, name
+ end
+
+ token.set_text text
+
+ token
+ end
+
+ def util_parser(content)
+ @parser = RDoc::Parser::Ruby.new @top_level, @filename, content, @options,
+ @stats
+ end
+
+ def util_two_parsers(first_file_content, second_file_content)
+ util_parser first_file_content
+
+ @parser2 = RDoc::Parser::Ruby.new @top_level2, @filename,
+ second_file_content, @options, @stats
+ end
+
+ def util_top_level
+ RDoc::TopLevel.reset
+ @top_level = RDoc::TopLevel.new @filename
+ @top_level2 = RDoc::TopLevel.new @filename2
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_require.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_require.rb
new file mode 100644
index 000000000..d5850bd16
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_require.rb
@@ -0,0 +1,25 @@
+require 'test/xref_test_case'
+
+class TestRDocRequire < XrefTestCase
+
+ def setup
+ super
+
+ @req = RDoc::Require.new 'foo', 'comment'
+ end
+
+ def test_initialize
+ assert_equal 'foo', @req.name
+
+ req = RDoc::Require.new '"foo"', ''
+ assert_equal 'foo', @req.name
+
+ req = RDoc::Require.new '\'foo\'', ''
+ assert_equal 'foo', @req.name
+
+ req = RDoc::Require.new '|foo|', ''
+ assert_equal 'foo', @req.name, 'for fortran?'
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_attribute_formatter.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_attribute_formatter.rb
new file mode 100644
index 000000000..a86312618
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_attribute_formatter.rb
@@ -0,0 +1,44 @@
+require 'stringio'
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/ri/formatter'
+
+class TestRDocRIAttributeFormatter < MiniTest::Unit::TestCase
+
+ def setup
+ @output = StringIO.new
+ @width = 78
+ @indent = ' '
+
+ @f = RDoc::RI::AttributeFormatter.new @output, @width, @indent
+ end
+
+ def test_wrap_empty
+ @f.wrap ''
+ assert_equal '', @output.string
+ end
+
+ def test_wrap_long
+ @f.wrap 'a ' * (@width / 2)
+ assert_equal " a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a \n a \n",
+ @output.string
+ end
+
+ def test_wrap_markup
+ @f.wrap 'a <tt>b</tt> c'
+ assert_equal " a b c\n", @output.string
+ end
+
+ def test_wrap_nil
+ @f.wrap nil
+ assert_equal '', @output.string
+ end
+
+ def test_wrap_short
+ @f.wrap 'a b c'
+ assert_equal " a b c\n", @output.string
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_default_display.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_default_display.rb
new file mode 100644
index 000000000..54b900642
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_default_display.rb
@@ -0,0 +1,302 @@
+require 'stringio'
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/ri/formatter'
+require 'rdoc/ri/display'
+require 'rdoc/ri/driver'
+
+class TestRDocRiDefaultDisplay < MiniTest::Unit::TestCase
+
+ def setup
+ @output = StringIO.new
+ @width = 78
+ @indent = ' '
+
+ @dd = RDoc::RI::DefaultDisplay.new RDoc::RI::Formatter, @width, true,
+ @output
+
+ @some_method = h \
+ 'aliases' => [{'name' => 'some_method_alias'}],
+ 'block_params' => 'block_param',
+ 'comment' => [RDoc::Markup::Flow::P.new('some comment')],
+ 'full_name' => 'SomeClass#some_method',
+ 'is_singleton' => false,
+ 'name' => 'some_method',
+ 'params' => '(arg1, arg2) {|block_param| ...}',
+ 'source_path' => '/nonexistent',
+ 'visibility' => 'public'
+ end
+
+ def test_display_class_info
+ klass = h \
+ 'attributes' => [
+ { 'name' => 'attribute', 'rw' => 'RW',
+ 'comment' => [RDoc::Markup::Flow::P.new('attribute comment')] },
+ { 'name' => 'attribute_no_comment', 'rw' => 'RW',
+ 'comment' => nil },
+ ],
+ 'class_methods' => [
+ { 'name' => 'class_method' },
+ ],
+ 'class_method_extensions' => [
+ { 'name' => 'class_method_extension' },
+ ],
+ 'comment' => [RDoc::Markup::Flow::P.new('SomeClass comment')],
+ 'constants' => [
+ { 'name' => 'CONSTANT', 'value' => '"value1"',
+ 'comment' => [RDoc::Markup::Flow::P.new('CONSTANT value')] },
+ { 'name' => 'CONSTANT_NOCOMMENT', 'value' => '"value2"',
+ 'comment' => nil },
+ ],
+ 'display_name' => 'Class',
+ 'full_name' => 'SomeClass',
+ 'includes' => [],
+ 'instance_methods' => [
+ { 'name' => 'instance_method' },
+ { 'name' => 'instance_method2' },
+ ],
+ 'instance_method_extensions' => [
+ { 'name' => 'instance_method_extension' },
+ ],
+ 'superclass' => 'Object'
+
+ @dd.display_class_info klass
+
+ expected = <<-EOF
+---------------------------------------------------- Class: SomeClass < Object
+ SomeClass comment
+
+------------------------------------------------------------------------------
+
+
+Constants:
+----------
+
+ CONSTANT = "value1"
+ CONSTANT value
+
+ CONSTANT_NOCOMMENT = "value2"
+
+
+Attributes:
+-----------
+
+ attribute (RW):
+ attribute comment
+
+ attribute_no_comment (RW)
+
+
+Class methods:
+--------------
+
+ class_method
+
+
+Class method extensions:
+------------------------
+
+ class_method_extension
+
+
+Instance methods:
+-----------------
+
+ instance_method, instance_method2
+
+
+Instance method extensions:
+---------------------------
+
+ instance_method_extension
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_display_flow
+ flow = [RDoc::Markup::Flow::P.new('flow')]
+
+ @dd.display_flow flow
+
+ assert_equal " flow\n\n", @output.string
+ end
+
+ def test_display_flow_empty
+ @dd.display_flow []
+
+ assert_equal " [no description]\n", @output.string
+ end
+
+ def test_display_flow_nil
+ @dd.display_flow nil
+
+ assert_equal " [no description]\n", @output.string
+ end
+
+ def test_display_method_info
+ @dd.display_method_info @some_method
+
+ expected = <<-EOF
+-------------------------------------------------------- SomeClass#some_method
+ some_method(arg1, arg2) {|block_param| ...}
+
+ From /nonexistent
+------------------------------------------------------------------------------
+ some comment
+
+
+ (also known as some_method_alias)
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_display_method_info_singleton
+ method = RDoc::RI::Driver::OpenStructHash.new.update \
+ 'aliases' => [],
+ 'block_params' => nil,
+ 'comment' => nil,
+ 'full_name' => 'SomeClass::some_method',
+ 'is_singleton' => true,
+ 'name' => 'some_method',
+ 'params' => '(arg1, arg2)',
+ 'visibility' => 'public'
+
+ @dd.display_method_info method
+
+ expected = <<-EOF
+------------------------------------------------------- SomeClass::some_method
+ SomeClass::some_method(arg1, arg2)
+
+ From
+------------------------------------------------------------------------------
+ [no description]
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_display_method_list
+ methods = [
+ RDoc::RI::Driver::OpenStructHash.new.update(
+ "aliases" => [],
+ "block_params" => nil,
+ "comment" => nil,
+ "full_name" => "SomeClass#some_method",
+ "is_singleton" => false,
+ "name" => "some_method",
+ "params" => "()",
+ "visibility" => "public"
+ ),
+ RDoc::RI::Driver::OpenStructHash.new.update(
+ "aliases" => [],
+ "block_params" => nil,
+ "comment" => nil,
+ "full_name" => "SomeClass#some_other_method",
+ "is_singleton" => false,
+ "name" => "some_other_method",
+ "params" => "()",
+ "visibility" => "public"
+ ),
+ ]
+
+ @dd.display_method_list methods
+
+ expected = <<-EOF
+ More than one method matched your request. You can refine your search by
+ asking for information on one of:
+
+SomeClass#some_method []
+SomeClass#some_other_method []
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_display_params
+ @dd.display_params @some_method
+
+ expected = <<-EOF
+ some_method(arg1, arg2) {|block_param| ...}
+
+ From /nonexistent
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_display_params_multiple
+ @some_method['params'] = <<-EOF
+some_method(index)
+some_method(start, length)
+ EOF
+
+ @dd.display_params @some_method
+
+ expected = <<-EOF
+ some_method(index)
+ some_method(start, length)
+
+ From /nonexistent
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_display_params_singleton
+ @some_method['is_singleton'] = true
+ @some_method['full_name'] = 'SomeClass::some_method'
+
+ @dd.display_params @some_method
+
+ expected = <<-EOF
+ SomeClass::some_method(arg1, arg2) {|block_param| ...}
+
+ From /nonexistent
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_list_known_classes
+ klasses = %w[SomeClass SomeModule]
+
+ @dd.list_known_classes klasses
+
+ expected = <<-EOF
+---------------------------------------------------- Known classes and modules
+
+ SomeClass
+ SomeModule
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_list_known_classes_empty
+ @dd.list_known_classes []
+
+ expected = <<-EOF
+No ri data found
+
+If you've installed Ruby yourself, you need to generate documentation using:
+
+ make install-doc
+
+from the same place you ran `make` to build ruby.
+
+If you installed Ruby from a packaging system, then you may need to
+install an additional package, or ask the packager to enable ri generation.
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def h(hash)
+ RDoc::RI::Driver::OpenStructHash.convert hash
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_driver.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_driver.rb
new file mode 100644
index 000000000..f16049205
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_driver.rb
@@ -0,0 +1,94 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'tmpdir'
+require 'rdoc/ri/driver'
+
+class TestRDocRIDriver < MiniTest::Unit::TestCase
+
+ def setup
+ @tmpdir = File.join Dir.tmpdir, "test_rdoc_ri_driver_#{$$}"
+ @home_ri = File.join @tmpdir, 'dot_ri'
+ @cache_dir = File.join @home_ri, 'cache'
+ @class_cache = File.join @cache_dir, 'classes'
+
+ FileUtils.mkdir_p @tmpdir
+ FileUtils.mkdir_p @home_ri
+ FileUtils.mkdir_p @cache_dir
+
+ @driver = RDoc::RI::Driver.new(RDoc::RI::Driver.process_args([]))
+ @driver.homepath = @home_ri
+ end
+
+ def teardown
+ FileUtils.rm_rf @tmpdir
+ end
+
+ def test_lookup_method
+ def @driver.load_cache_for(klassname)
+ { 'Foo#bar' => :found }
+ end
+
+ assert @driver.lookup_method('Foo#bar', 'Foo')
+ end
+
+ def test_lookup_method_class_method
+ def @driver.load_cache_for(klassname)
+ { 'Foo::Bar' => :found }
+ end
+
+ assert @driver.lookup_method('Foo::Bar', 'Foo::Bar')
+ end
+
+ def test_lookup_method_class_missing
+ def @driver.load_cache_for(klassname) end
+
+ assert_nil @driver.lookup_method('Foo#bar', 'Foo')
+ end
+
+ def test_lookup_method_dot_instance
+ def @driver.load_cache_for(klassname)
+ { 'Foo#bar' => :instance, 'Foo::bar' => :klass }
+ end
+
+ assert_equal :instance, @driver.lookup_method('Foo.bar', 'Foo')
+ end
+
+ def test_lookup_method_dot_class
+ def @driver.load_cache_for(klassname)
+ { 'Foo::bar' => :found }
+ end
+
+ assert @driver.lookup_method('Foo.bar', 'Foo')
+ end
+
+ def test_lookup_method_method_missing
+ def @driver.load_cache_for(klassname) {} end
+
+ assert_nil @driver.lookup_method('Foo#bar', 'Foo')
+ end
+
+ def test_parse_name
+ klass, meth = @driver.parse_name 'Foo::Bar'
+
+ assert_equal 'Foo::Bar', klass, 'Foo::Bar class'
+ assert_equal nil, meth, 'Foo::Bar method'
+
+ klass, meth = @driver.parse_name 'Foo#Bar'
+
+ assert_equal 'Foo', klass, 'Foo#Bar class'
+ assert_equal 'Bar', meth, 'Foo#Bar method'
+
+ klass, meth = @driver.parse_name 'Foo.Bar'
+
+ assert_equal 'Foo', klass, 'Foo#Bar class'
+ assert_equal 'Bar', meth, 'Foo#Bar method'
+
+ klass, meth = @driver.parse_name 'Foo::bar'
+
+ assert_equal 'Foo', klass, 'Foo::bar class'
+ assert_equal 'bar', meth, 'Foo::bar method'
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_formatter.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_formatter.rb
new file mode 100644
index 000000000..a70f9dcba
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_formatter.rb
@@ -0,0 +1,320 @@
+require 'stringio'
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/ri/formatter'
+require 'rdoc/markup/to_flow'
+
+class TestRDocRIFormatter < MiniTest::Unit::TestCase
+
+ def setup
+ @output = StringIO.new
+ @width = 78
+ @indent = ' '
+
+ @f = RDoc::RI::Formatter.new @output, @width, @indent
+ @markup = RDoc::Markup.new
+ @flow = RDoc::Markup::ToFlow.new
+ end
+
+ def test_blankline
+ @f.blankline
+
+ assert_equal "\n", @output.string
+ end
+
+ def test_bold_print
+ @f.bold_print 'a b c'
+
+ assert_equal 'a b c', @output.string
+ end
+
+ def test_break_to_newline
+ @f.break_to_newline
+
+ assert_equal '', @output.string
+ end
+
+ def test_conv_html
+ assert_equal '> < " &', @f.conv_html('&gt; &lt; &quot; &amp;')
+ end
+
+ def test_conv_markup
+ text = '<tt>a</tt> <code>b</code> <b>c</b> <em>d</em>'
+
+ expected = '+a+ +b+ *c* _d_'
+
+ assert_equal expected, @f.conv_markup(text)
+ end
+
+ def test_display_flow
+ flow = [
+ RDoc::Markup::Flow::H.new(1, 'heading'),
+ RDoc::Markup::Flow::P.new('paragraph'),
+ ]
+
+ @f.display_flow flow
+
+ assert_equal "\nHEADING\n=======\n\n paragraph\n\n", @output.string
+ end
+
+ def test_display_flow_item_h
+ item = RDoc::Markup::Flow::H.new 1, 'heading'
+
+ @f.display_flow_item item
+
+ assert_equal "\nHEADING\n=======\n\n", @output.string
+ end
+
+ def test_display_flow_item_li
+ item = RDoc::Markup::Flow::LI.new nil, 'paragraph'
+
+ @f.display_flow_item item
+
+ assert_equal " paragraph\n\n", @output.string
+ end
+
+ def test_display_flow_item_list
+ item = RDoc::Markup::Flow::LIST.new :NUMBER
+
+ @f.display_flow_item item
+
+ assert_equal "", @output.string
+ end
+
+ def test_display_flow_item_p
+ item = RDoc::Markup::Flow::P.new 'paragraph'
+
+ @f.display_flow_item item
+
+ assert_equal " paragraph\n\n", @output.string
+ end
+
+ def test_display_flow_item_rule
+ item = RDoc::Markup::Flow::RULE.new 1
+
+ @f.display_flow_item item
+
+ assert_equal "#{'-' * 78}\n", @output.string
+ end
+
+ def test_display_flow_item_unknown
+ e = assert_raises RDoc::Error do
+ @f.display_flow_item Object.new
+ end
+
+ assert_equal "Unknown flow element: Object", e.message
+ end
+
+ def test_display_flow_item_verb
+ item = RDoc::Markup::Flow::VERB.new 'a b c'
+
+ @f.display_flow_item item
+
+ assert_equal " a b c\n\n", @output.string
+ end
+
+ def test_display_heading_1
+ @f.display_heading 'heading', 1, ' '
+
+ assert_equal "\nHEADING\n=======\n\n", @output.string
+ end
+
+ def test_display_heading_2
+ @f.display_heading 'heading', 2, ' '
+
+ assert_equal "\nheading\n-------\n\n", @output.string
+ end
+
+ def test_display_heading_3
+ @f.display_heading 'heading', 3, ' '
+
+ assert_equal " heading\n\n", @output.string
+ end
+
+ def test_display_list
+ list = RDoc::Markup::Flow::LIST.new :NUMBER
+ list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
+ list << RDoc::Markup::Flow::LI.new(nil, 'd e f')
+
+ @f.display_list list
+
+ assert_equal " 1. a b c\n\n 2. d e f\n\n", @output.string
+ end
+
+ def test_display_list_bullet
+ list = RDoc::Markup::Flow::LIST.new :BULLET
+ list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
+
+ @f.display_list list
+
+ assert_equal " * a b c\n\n", @output.string
+ end
+
+ def test_display_list_labeled
+ list = RDoc::Markup::Flow::LIST.new :LABELED
+ list << RDoc::Markup::Flow::LI.new('label', 'a b c')
+
+ @f.display_list list
+
+ assert_equal " label a b c\n\n", @output.string
+ end
+
+ def test_display_list_lower_alpha
+ list = RDoc::Markup::Flow::LIST.new :LOWERALPHA
+ list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
+
+ @f.display_list list
+
+ assert_equal " a. a b c\n\n", @output.string
+ end
+
+ def test_display_list_note
+ list = RDoc::Markup::Flow::LIST.new :NOTE
+ list << RDoc::Markup::Flow::LI.new('note:', 'a b c')
+
+ @f.display_list list
+
+ assert_equal " note: a b c\n\n", @output.string
+ end
+
+ def test_display_list_number
+ list = RDoc::Markup::Flow::LIST.new :NUMBER
+ list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
+
+ @f.display_list list
+
+ assert_equal " 1. a b c\n\n", @output.string
+ end
+
+ def test_display_list_unknown
+ list = RDoc::Markup::Flow::LIST.new :UNKNOWN
+ list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
+
+ e = assert_raises ArgumentError do
+ @f.display_list list
+ end
+
+ assert_equal 'unknown list type UNKNOWN', e.message
+ end
+
+ def test_display_list_upper_alpha
+ list = RDoc::Markup::Flow::LIST.new :UPPERALPHA
+ list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
+
+ @f.display_list list
+
+ assert_equal " A. a b c\n\n", @output.string
+ end
+
+ def test_display_verbatim_flow_item
+ verbatim = RDoc::Markup::Flow::VERB.new "a b c\nd e f"
+
+ @f.display_verbatim_flow_item verbatim
+
+ assert_equal " a b c\n d e f\n\n", @output.string
+ end
+
+ def test_display_verbatim_flow_item_bold
+ verbatim = RDoc::Markup::Flow::VERB.new "*a* b c"
+
+ @f.display_verbatim_flow_item verbatim
+
+ assert_equal " *a* b c\n\n", @output.string
+ end
+
+ def test_draw_line
+ @f.draw_line
+
+ expected = '-' * @width + "\n"
+ assert_equal expected, @output.string
+ end
+
+ def test_draw_line_label
+ @f.draw_line 'label'
+
+ expected = '-' * (@width - 6) + " label\n"
+ assert_equal expected, @output.string
+ end
+
+ def test_draw_line_label_long
+ @f.draw_line 'a' * @width
+
+ expected = '-' * @width + "\n" + ('a' * @width) + "\n"
+ assert_equal expected, @output.string
+ end
+
+ def test_raw_print_line
+ @f.raw_print_line 'a b c'
+
+ assert_equal "a b c", @output.string
+ end
+
+ def test_strip_attributes_b
+ text = @f.strip_attributes 'hello <b>world</b>'
+
+ expected = 'hello world'
+
+ assert_equal expected, text
+ end
+
+ def test_strip_attributes_code
+ text = @f.strip_attributes 'hello <code>world</code>'
+
+ expected = 'hello world'
+
+ assert_equal expected, text
+ end
+
+ def test_strip_attributes_em
+ text = @f.strip_attributes 'hello <em>world</em>'
+
+ expected = 'hello world'
+
+ assert_equal expected, text
+ end
+
+ def test_strip_attributes_i
+ text = @f.strip_attributes 'hello <i>world</i>'
+
+ expected = 'hello world'
+
+ assert_equal expected, text
+ end
+
+ def test_strip_attributes_tt
+ text = @f.strip_attributes 'hello <tt>world</tt>'
+
+ expected = 'hello world'
+
+ assert_equal expected, text
+ end
+
+ def test_wrap_empty
+ @f.wrap ''
+ assert_equal '', @output.string
+ end
+
+ def test_wrap_long
+ @f.wrap 'a ' * (@width / 2)
+ assert_equal " a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a\n a \n",
+ @output.string
+ end
+
+ def test_wrap_markup
+ @f.wrap 'a <tt>b</tt> c'
+ assert_equal " a +b+ c\n", @output.string
+ end
+
+ def test_wrap_nil
+ @f.wrap nil
+ assert_equal '', @output.string
+ end
+
+ def test_wrap_short
+ @f.wrap 'a b c'
+ assert_equal " a b c\n", @output.string
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_html_formatter.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_html_formatter.rb
new file mode 100644
index 000000000..2206cd631
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_html_formatter.rb
@@ -0,0 +1,141 @@
+require 'stringio'
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/ri/formatter'
+require 'rdoc/markup/fragments'
+require 'rdoc/markup/to_flow'
+
+class TestRDocRIHtmlFormatter < MiniTest::Unit::TestCase
+
+ def setup
+ @output = StringIO.new
+ @width = 78
+ @indent = ' '
+
+ @f = RDoc::RI::HtmlFormatter.new @output, @width, @indent
+ @markup = RDoc::Markup.new
+ @flow = RDoc::Markup::ToFlow.new
+ @af = RDoc::RI::AttributeFormatter
+ end
+
+ def test_blankline
+ @f.blankline
+
+ assert_equal "<p />\n", @output.string
+ end
+
+ def test_bold_print
+ @f.bold_print 'text'
+
+ assert_equal '<b>text</b>', @output.string
+ end
+
+ def test_break_to_newline
+ @f.break_to_newline
+
+ assert_equal "<br />\n", @output.string
+ end
+
+ def test_display_heading
+ @f.display_heading 'text', 1, ' '
+
+ assert_equal "<h1>text</h1>\n", @output.string
+ end
+
+ def test_display_heading_level_4
+ @f.display_heading 'text', 4, ' '
+
+ assert_equal "<h4>text</h4>\n", @output.string
+ end
+
+ def test_display_heading_level_5
+ @f.display_heading 'text', 5, ' '
+
+ assert_equal "<h4>text</h4>\n", @output.string
+ end
+
+ def test_display_list_bullet
+ list = RDoc::Markup::Flow::LIST.new :BULLET
+ list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
+ list << RDoc::Markup::Flow::LI.new(nil, 'd e f')
+
+ @f.display_list list
+
+ expected = <<-EOF.strip
+<ul><li>a b c<p />
+</li><li>d e f<p />
+</li></ul>
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_display_list_number
+ list = RDoc::Markup::Flow::LIST.new :NUMBER
+ list << RDoc::Markup::Flow::LI.new(nil, 'a b c')
+ list << RDoc::Markup::Flow::LI.new(nil, 'd e f')
+
+ @f.display_list list
+
+ expected = <<-EOF.strip
+<ol><li>a b c<p />
+</li><li>d e f<p />
+</li></ol>
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_display_list_labeled
+ list = RDoc::Markup::Flow::LIST.new :LABELED
+ list << RDoc::Markup::Flow::LI.new('label', 'a b c')
+ list << RDoc::Markup::Flow::LI.new('label 2', 'd e f')
+
+ @f.display_list list
+
+ expected = <<-EOF.strip
+<dl><dt><b>label</b></dt><dd>a b c<p />
+</dd><dt><b>label 2</b></dt><dd>d e f<p />
+</dd></dl>
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_display_list_note
+ list = RDoc::Markup::Flow::LIST.new :NOTE
+ list << RDoc::Markup::Flow::LI.new('note:', 'a b c')
+ list << RDoc::Markup::Flow::LI.new('note 2:', 'd e f')
+
+ @f.display_list list
+
+ expected = <<-EOF.strip
+<table><tr valign="top"><td>note:</td><td>a b c<p />
+</td></tr><tr valign="top"><td>note&nbsp;2:</td><td>d e f<p />
+</td></tr></table>
+ EOF
+
+ assert_equal expected, @output.string
+ end
+
+ def test_display_verbatim_flow_item
+ verbatim = RDoc::Markup::Flow::VERB.new '*a* > b &gt; c'
+ @f.display_verbatim_flow_item verbatim
+
+ assert_equal "<pre>*a* &gt; b &amp;gt; c\n</pre>\n", @output.string
+ end
+
+ def test_draw_line
+ @f.draw_line
+
+ assert_equal "<hr />\n", @output.string
+ end
+
+ def test_draw_line_label
+ @f.draw_line 'label'
+
+ assert_equal "<b>label</b><hr />\n", @output.string
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_overstrike_formatter.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_overstrike_formatter.rb
new file mode 100644
index 000000000..38b95414d
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_ri_overstrike_formatter.rb
@@ -0,0 +1,71 @@
+require 'stringio'
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/ri/formatter'
+require 'rdoc/markup/fragments'
+require 'rdoc/markup/to_flow'
+
+class TestRDocRIOverstrikeFormatter < MiniTest::Unit::TestCase
+
+ def setup
+ @output = StringIO.new
+ @width = 78
+ @indent = ' '
+
+ @f = RDoc::RI::OverstrikeFormatter.new @output, @width, @indent
+ @markup = RDoc::Markup.new
+ @flow = RDoc::Markup::ToFlow.new
+
+ @af = RDoc::RI::AttributeFormatter
+ end
+
+ def test_display_verbatim_flow_item_bold
+ verbatim = RDoc::Markup::Flow::VERB.new "*a* b c"
+
+ @f.display_verbatim_flow_item verbatim
+
+ assert_equal " *a* b c\n\n", @output.string
+ end
+
+ def test_write_attribute_text_bold
+ line = [RDoc::RI::AttributeFormatter::AttrChar.new('b', @af::BOLD)]
+
+ @f.write_attribute_text ' ', line
+
+ assert_equal " b\bb\n", @output.string
+ end
+
+ def test_write_attribute_text_bold_italic
+ attr = @af::BOLD | @af::ITALIC
+ line = [RDoc::RI::AttributeFormatter::AttrChar.new('d', attr)]
+
+ @f.write_attribute_text ' ', line
+
+ assert_equal " _\bd\bd\n", @output.string
+ end
+
+ def test_write_attribute_text_code
+ line = [RDoc::RI::AttributeFormatter::AttrChar.new('c', @af::CODE)]
+
+ @f.write_attribute_text ' ', line
+
+ assert_equal " _\bc\n", @output.string
+ end
+
+ def test_write_attribute_text_italic
+ line = [RDoc::RI::AttributeFormatter::AttrChar.new('a', @af::ITALIC)]
+
+ @f.write_attribute_text ' ', line
+
+ assert_equal " _\ba\n", @output.string
+ end
+
+ def test_bold_print
+ @f.bold_print 'a b c'
+
+ assert_equal "a\ba \b b\bb \b c\bc", @output.string
+ end
+
+end
+
+MiniTest::Unit.autorun
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_task.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_task.rb
new file mode 100644
index 000000000..dd3114fb5
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_task.rb
@@ -0,0 +1,64 @@
+require 'rubygems'
+require 'minitest/autorun'
+require 'rdoc/task'
+
+class TestRDocTask < MiniTest::Unit::TestCase
+
+ def setup
+ Rake::Task.clear
+ end
+
+ def test_tasks_creation
+ RDoc::Task.new
+ assert Rake::Task[:rdoc]
+ assert Rake::Task[:clobber_rdoc]
+ assert Rake::Task[:rerdoc]
+ end
+
+ def test_tasks_creation_with_custom_name_symbol
+ rd = RDoc::Task.new(:rdoc_dev)
+ assert Rake::Task[:rdoc_dev]
+ assert Rake::Task[:clobber_rdoc_dev]
+ assert Rake::Task[:rerdoc_dev]
+ assert_equal :rdoc_dev, rd.name
+ end
+
+ def test_tasks_creation_with_custom_name_string
+ rd = RDoc::Task.new("rdoc_dev")
+ assert Rake::Task[:rdoc_dev]
+ assert Rake::Task[:clobber_rdoc_dev]
+ assert Rake::Task[:rerdoc_dev]
+ assert_equal "rdoc_dev", rd.name
+ end
+
+ def test_tasks_creation_with_custom_name_hash
+ options = { :rdoc => "rdoc", :clobber_rdoc => "rdoc:clean", :rerdoc => "rdoc:force" }
+ rd = RDoc::Task.new(options)
+ assert Rake::Task[:"rdoc"]
+ assert Rake::Task[:"rdoc:clean"]
+ assert Rake::Task[:"rdoc:force"]
+ assert_raises(RuntimeError) { Rake::Task[:clobber_rdoc] }
+ assert_equal options, rd.name
+ end
+
+ def test_tasks_creation_with_custom_name_hash_will_use_default_if_an_option_isnt_given
+ rd = RDoc::Task.new(:clobber_rdoc => "rdoc:clean")
+ assert Rake::Task[:rdoc]
+ assert Rake::Task[:"rdoc:clean"]
+ assert Rake::Task[:rerdoc]
+ end
+
+ def test_tasks_creation_with_custom_name_hash_raises_exception_if_invalid_option_given
+ assert_raises(ArgumentError) do
+ RDoc::Task.new(:foo => "bar")
+ end
+
+ begin
+ RDoc::Task.new(:foo => "bar")
+ rescue ArgumentError => e
+ assert_match(/foo/, e.message)
+ end
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/test_rdoc_top_level.rb b/vendor/gems/rdoc-2.4.3/test/test_rdoc_top_level.rb
new file mode 100644
index 000000000..3287eacfa
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/test_rdoc_top_level.rb
@@ -0,0 +1,85 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'test/xref_test_case'
+
+class TestRDocTopLevel < XrefTestCase
+
+ def setup
+ super
+
+ @top_level = RDoc::TopLevel.new 'path/top_level.rb'
+ end
+
+ def test_class_all_classes_and_modules
+ assert_equal %w[C1 C2 C2::C3 C2::C3::H1 C3 C3::H1 C3::H2 C4 C4::C4 M1],
+ RDoc::TopLevel.all_classes_and_modules.map { |m| m.full_name }.sort
+ end
+
+ def test_class_classes
+ assert_equal %w[C1 C2 C2::C3 C2::C3::H1 C3 C3::H1 C3::H2 C4 C4::C4],
+ RDoc::TopLevel.classes.map { |m| m.full_name }.sort
+ end
+
+ def test_class_files
+ assert_equal %w[path/top_level.rb xref_data.rb],
+ RDoc::TopLevel.files.map { |m| m.full_name }.sort
+ end
+
+ def test_class_find_class_named
+ assert_equal @c1, RDoc::TopLevel.find_class_named('C1')
+ end
+
+ def test_class_find_file_named
+ assert_equal @xref_data, RDoc::TopLevel.find_file_named(@file_name)
+ end
+
+ def test_class_find_module_named
+ assert_equal @m1, RDoc::TopLevel.find_module_named('M1')
+ end
+
+ def test_class_modules
+ assert_equal %w[M1],
+ RDoc::TopLevel.modules.map { |m| m.full_name }.sort
+ end
+
+ def test_class_reset
+ RDoc::TopLevel.reset
+
+ assert_empty RDoc::TopLevel.classes
+ assert_empty RDoc::TopLevel.modules
+ assert_empty RDoc::TopLevel.files
+ end
+
+ def test_base_name
+ assert_equal 'top_level.rb', @top_level.base_name
+ end
+
+ def test_find_class_or_module_named
+ assert_equal @c1, @xref_data.find_class_or_module_named('C1')
+ assert_equal @c4, @xref_data.find_class_or_module_named('C4')
+ end
+
+ def test_full_name
+ assert_equal 'path/top_level.rb', @top_level.full_name
+ end
+
+ def test_http_url
+ assert_equal 'prefix/path/top_level_rb.html', @top_level.http_url('prefix')
+ end
+
+ def test_last_modified
+ assert_equal 'Unknown', @top_level.last_modified
+
+ stat = Object.new
+ def stat.mtime() 0 end
+ @top_level.file_stat = stat
+
+ assert_equal '0', @top_level.last_modified
+ end
+
+ def test_name
+ assert_equal 'top_level.rb', @top_level.name
+ end
+
+end
+
diff --git a/vendor/gems/rdoc-2.4.3/test/xref_data.rb b/vendor/gems/rdoc-2.4.3/test/xref_data.rb
new file mode 100644
index 000000000..5d7e42bc2
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/xref_data.rb
@@ -0,0 +1,46 @@
+XREF_DATA = <<-XREF_DATA
+class C1
+
+ attr :attr
+ attr_reader :attr_reader
+ attr_writer :attr_writer
+ attr_accessor :attr_accessor
+
+ CONST = :const
+
+ def self.m
+ end
+
+ def m
+ end
+end
+
+class C2
+ class C3
+ def m
+ end
+
+ class H1
+ def m?
+ end
+ end
+ end
+end
+
+class C3
+ class H1
+ end
+
+ class H2
+ end
+end
+
+class C4
+ class C4
+ end
+end
+
+module M1
+end
+XREF_DATA
+
diff --git a/vendor/gems/rdoc-2.4.3/test/xref_test_case.rb b/vendor/gems/rdoc-2.4.3/test/xref_test_case.rb
new file mode 100644
index 000000000..9c8b4748d
--- /dev/null
+++ b/vendor/gems/rdoc-2.4.3/test/xref_test_case.rb
@@ -0,0 +1,48 @@
+require 'rubygems'
+require 'minitest/unit'
+require 'rdoc/stats'
+require 'rdoc/options'
+require 'rdoc/code_objects'
+require 'rdoc/parser/ruby'
+require 'test/xref_data'
+
+class XrefTestCase < MiniTest::Unit::TestCase
+
+ def setup
+ RDoc::TopLevel.reset
+ RDoc::AnyMethod.reset
+
+ @file_name = 'xref_data.rb'
+ @xref_data = RDoc::TopLevel.new @file_name
+
+ @options = RDoc::Options.new
+ @options.quiet = true
+
+ stats = RDoc::Stats.new 0
+
+ parser = RDoc::Parser::Ruby.new @xref_data, @file_name, XREF_DATA, @options,
+ stats
+ @top_levels = []
+ @top_levels.push parser.scan
+
+ generator = Object.new
+ def generator.class_dir() nil end
+ def generator.file_dir() nil end
+ rdoc = RDoc::RDoc.new
+ RDoc::RDoc.current = rdoc
+ rdoc.generator = generator
+
+ @c1 = @xref_data.find_module_named 'C1'
+ @c2 = @xref_data.find_module_named 'C2'
+ @c2_c3 = @xref_data.find_module_named 'C2::C3'
+ @c3 = @xref_data.find_module_named 'C3'
+ @c4 = @xref_data.find_module_named 'C4'
+ @c4_c4 = @xref_data.find_module_named 'C4::C4'
+
+ @m1 = @xref_data.find_module_named 'M1'
+ end
+
+end
+
+MiniTest::Unit.autorun
+
diff --git a/vendor/gems/recaptcha-0.3.1/.specification b/vendor/gems/recaptcha-0.3.1/.specification
index b7234754d..d021eabbb 100644
--- a/vendor/gems/recaptcha-0.3.1/.specification
+++ b/vendor/gems/recaptcha-0.3.1/.specification
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
requirements: []
rubyforge_project:
-rubygems_version: 1.3.7
+rubygems_version: 1.4.2
signing_key:
specification_version: 3
summary: Helpers for the reCAPTCHA API
diff --git a/vendor/gems/rspec-1.3.1/.specification b/vendor/gems/rspec-1.3.1/.specification
index bdc08e236..3022d067d 100644
--- a/vendor/gems/rspec-1.3.1/.specification
+++ b/vendor/gems/rspec-1.3.1/.specification
@@ -566,7 +566,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
requirements: []
rubyforge_project: rspec
-rubygems_version: 1.3.7
+rubygems_version: 1.4.2
signing_key:
specification_version: 3
summary: rspec 1.3.1
diff --git a/vendor/gems/rspec-rails-1.3.3/.specification b/vendor/gems/rspec-rails-1.3.3/.specification
index d6eb1f0b7..f1f280090 100644
--- a/vendor/gems/rspec-rails-1.3.3/.specification
+++ b/vendor/gems/rspec-rails-1.3.3/.specification
@@ -305,7 +305,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
requirements: []
rubyforge_project: rspec
-rubygems_version: 1.3.7
+rubygems_version: 1.4.2
signing_key:
specification_version: 3
summary: rspec-rails 1.3.3
diff --git a/vendor/gems/will_paginate-2.3.15/.specification b/vendor/gems/will_paginate-2.3.15/.specification
index 68e2cfca2..c1f3064e2 100644
--- a/vendor/gems/will_paginate-2.3.15/.specification
+++ b/vendor/gems/will_paginate-2.3.15/.specification
@@ -100,7 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
requirements: []
rubyforge_project:
-rubygems_version: 1.3.7
+rubygems_version: 1.4.2
signing_key:
specification_version: 3
summary: Pagination for Rails
diff --git a/vendor/plugins/action_mailer_layouts/CHANGELOG b/vendor/plugins/action_mailer_layouts/CHANGELOG
deleted file mode 100644
index 0b3f47667..000000000
--- a/vendor/plugins/action_mailer_layouts/CHANGELOG
+++ /dev/null
@@ -1,21 +0,0 @@
-2008-06-03
-* Added support for Rails 2.0 and 2.1. Thanks to Scott Windsor.
-
-2008-02-08
-* Added support for *.<format>.erb layouts and templates. Thanks to Eric Wollensen.
-
-2007-12-20
-* Fixed a bug present when specifying the layout with a string (eg: layout 'subdir/layout_template') in a multipart mail, which caused the plugin to only render one part and not the other. Thanks to Andres Koetsier.
-
-2007-12-12
-* Now works with Rails 2.0.
-
-2007-11-27
-* Now supports helpers defined in the mailer class. Thanks to Marshall Roch.
-
-2007-24-07
-* Now requires actionmailer-1.3.3.
-
-2007-05-07
-* No longer have to specify a :layout. The layout name is now inferred from the mailer class name. Thanks to Peter Boctor.
-* Helper methods are now available to action mailer layouts. Thanks to Peter Boctor. \ No newline at end of file
diff --git a/vendor/plugins/action_mailer_layouts/README b/vendor/plugins/action_mailer_layouts/README
deleted file mode 100644
index 92b19a69d..000000000
--- a/vendor/plugins/action_mailer_layouts/README
+++ /dev/null
@@ -1,35 +0,0 @@
-== Action Mailer Layouts
-
-Original Homepage: http://cardboardrocket.com/pages/action_mailer_layouts
-Original svn: http://svn.cardboardrocket.com/action_mailer_layouts
-
-A plugin to enable layouts for ActionMailer templates.
-
-Adds a new 'layout' property to the ActionMailer::Base class. Specify the name
-of the layout you want to use. The plugin will look in app/views/layouts for your
-layout. If no layout is specified, the plugin will look for a layout that matches
-the name of your mailer class.
-
-For example:
-
-If your mailer class is called UserNotifier and you are rendering the activation.rhtml
-template, then the plugin will attempt to load the user_notifier.rhtml layout. If you are
-rendering the activation.text.html.rhtml template, the plugin will look for the
-user_notifier.text.html.rhtml layout. In other words, the plugin attempts to load the
-layout named after the your ActionMailer class.
-
-You can overload this behavior by setting the layout property of your mailer:
-
-class UserNotfier < ActionMailer::Base
- def activation(user)
- @recipients = user.email
- @from = 'you@domain.com'
- @sent_on = Time.now
- @subject = 'Activate your account!'
- @layout = :email
- end
-end
-
-This arrangement will cause the plugin to render the content in
-views/user_notifier/activation.text.html.rhtml in the views/layouts/email.text.html.rhtml
-layout. \ No newline at end of file
diff --git a/vendor/plugins/action_mailer_layouts/init.rb b/vendor/plugins/action_mailer_layouts/init.rb
deleted file mode 100644
index 8289c4eb9..000000000
--- a/vendor/plugins/action_mailer_layouts/init.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-begin
- require File.join(File.dirname(__FILE__), 'plugin.rb')
- ActionController::Base.logger.fatal '** Loaded layouts plugin for ActionMailer'
-rescue Exception => e
- puts e.inspect
- ActionController::Base.logger.fatal e if ActionController::Base.logger
-end \ No newline at end of file
diff --git a/vendor/plugins/action_mailer_layouts/plugin.rb b/vendor/plugins/action_mailer_layouts/plugin.rb
deleted file mode 100644
index ef0cbc37c..000000000
--- a/vendor/plugins/action_mailer_layouts/plugin.rb
+++ /dev/null
@@ -1,48 +0,0 @@
-module ActionMailer
- class Base
-
- # Specify the layout name
- adv_attr_accessor :layout
-
- alias_method :render_message_without_layouts, :render_message
-
- def render_message(method_name, body)
- layout = @layout ? @layout.to_s.clone : self.class.to_s.underscore
-
- filename = if method_name.respond_to?(:filename)
- method_name.filename
- else
- method_name
- end
-
- md = /([^\.]+)\.([^\.]+\.[^\.]+)\.(erb|rhtml|rxml)$/.match(filename)
-
- layout << ".#{md.captures[1]}" if md && md.captures[1]
- layout << ".#{md.captures[2]}" if md && md.captures[2]
-
- if File.exists?(File.join(layouts_path, layout))
- body[:content_for_layout] = render_message_without_layouts(method_name, body)
-
- # TODO: extract content_for blocks and somehow put them in body[:content_for_...]
-
- initialize_layout_template_class(body).render(:file => "/#{layout}")
- else
- render_message_without_layouts(method_name, body)
- end
- end
-
- def initialize_layout_template_class(assigns)
- # for Rails 2.1 (and greater), we have to process view paths first!
- ActionView::TemplateFinder.process_view_paths(layouts_path) if defined?(ActionView::TemplateFinder)
-
- returning(template = ActionView::Base.new(layouts_path, assigns, self)) do
- template.extend self.class.master_helper_module
- template.extend ActionView::Helpers::CaptureHelper
- end
- end
-
- def layouts_path
- File.join(template_root, 'layouts')
- end
- end
-end \ No newline at end of file
diff --git a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
index 43f0764ca..4671b79da 100644
--- a/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
+++ b/vendor/plugins/acts_as_xapian/lib/acts_as_xapian.rb
@@ -668,8 +668,8 @@ module ActsAsXapian
self.class.to_s + "-" + self.id.to_s
end
- def xapian_value(field, type = nil)
- if self.respond_to?("translations")
+ def xapian_value(field, type = nil, index_translations = false)
+ if index_translations && self.respond_to?("translations")
if type == :date or type == :boolean
value = single_xapian_value(field, type = type)
else
@@ -756,7 +756,7 @@ module ActsAsXapian
for text in self.xapian_options[:texts]
ActsAsXapian.term_generator.increase_termpos # stop phrases spanning different text fields
# XXX the "1" here is a weight that could be varied for a boost function
- ActsAsXapian.term_generator.index_text(xapian_value(text), 1)
+ ActsAsXapian.term_generator.index_text(xapian_value(text, nil, true), 1)
end
end