Merge remote-tracking branch 'upstream/pull/2994'
authorTom Hughes <tom@compton.nu>
Wed, 13 Jan 2021 20:40:48 +0000 (20:40 +0000)
committerTom Hughes <tom@compton.nu>
Wed, 13 Jan 2021 20:40:48 +0000 (20:40 +0000)
421 files changed:
.coveralls.yml [deleted file]
.github/dependabot.yml
.github/workflows/lint.yml [new file with mode: 0644]
.github/workflows/tests.yml [new file with mode: 0644]
.rubocop.yml
.rubocop_todo.yml
.travis.yml [deleted file]
CONFIGURE.md
Gemfile
Gemfile.lock
README.md
Vagrantfile
app/assets/config/manifest.js
app/assets/images/aol.png [deleted file]
app/assets/images/aol.svg [new file with mode: 0644]
app/assets/images/facebook.png [deleted file]
app/assets/images/facebook.svg [new file with mode: 0644]
app/assets/images/github.png [deleted file]
app/assets/images/github.svg [new file with mode: 0644]
app/assets/images/google.png [deleted file]
app/assets/images/google.svg [new file with mode: 0644]
app/assets/images/wikipedia.png [deleted file]
app/assets/images/wikipedia.svg [new file with mode: 0644]
app/assets/images/windowslive.png [deleted file]
app/assets/images/windowslive.svg [new file with mode: 0644]
app/assets/images/wordpress.png [deleted file]
app/assets/images/wordpress.svg [new file with mode: 0644]
app/assets/images/yahoo.png [deleted file]
app/assets/images/yahoo.svg [new file with mode: 0644]
app/assets/javascripts/edit/potlatch.js.erb [deleted file]
app/assets/javascripts/edit/potlatch2.js.erb [deleted file]
app/assets/javascripts/id.js
app/assets/stylesheets/common.scss
app/controllers/api/amf_controller.rb [deleted file]
app/controllers/api/changesets_controller.rb
app/controllers/api/tracepoints_controller.rb
app/controllers/application_controller.rb
app/controllers/geocoder_controller.rb
app/controllers/redactions_controller.rb
app/controllers/site_controller.rb
app/helpers/application_helper.rb
app/helpers/user_helper.rb
app/models/oauth_nonce.rb
app/models/old_node.rb
app/models/old_relation.rb
app/models/old_way.rb
app/models/report.rb
app/models/user.rb
app/views/diary_entries/_diary_comment.html.erb
app/views/diary_entries/_diary_entry.html.erb
app/views/diary_entries/_form.html.erb
app/views/diary_entries/comments.html.erb
app/views/diary_entries/edit.html.erb
app/views/diary_entries/index.html.erb
app/views/diary_entries/new.html.erb
app/views/messages/show.html.erb
app/views/redactions/show.html.erb
app/views/shared/_html_help.erb [new file with mode: 0644]
app/views/shared/_markdown_help.html.erb [new file with mode: 0644]
app/views/shared/_richtext_field.html.erb [new file with mode: 0644]
app/views/site/_potlatch.html.erb
app/views/site/_potlatch2.html.erb
app/views/traces/_trace_paging_nav.html.erb
app/views/traces/index.html.erb
app/views/user_blocks/show.html.erb
app/views/user_mailer/message_notification.html.erb
app/views/users/_contact.html.erb
app/views/users/_user.html.erb
app/views/users/account.html.erb
app/views/users/login.html.erb
app/views/users/show.html.erb
config/application.rb
config/github.database.yml [new file with mode: 0644]
config/initializers/bootstrap_form.rb [new file with mode: 0644]
config/initializers/migrate.rb [new file with mode: 0644]
config/initializers/mime_types.rb
config/initializers/potlatch.rb [deleted file]
config/initializers/strong_migrations.rb
config/initializers/zeitwerk.rb [new file with mode: 0644]
config/locales/af.yml
config/locales/aln.yml
config/locales/ar.yml
config/locales/arz.yml
config/locales/ast.yml
config/locales/az.yml
config/locales/ba.yml
config/locales/be-Tarask.yml
config/locales/be.yml
config/locales/bg.yml
config/locales/bn.yml
config/locales/br.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/ce.yml
config/locales/cs.yml
config/locales/cy.yml
config/locales/da.yml
config/locales/de.yml
config/locales/diq.yml
config/locales/dsb.yml
config/locales/el.yml
config/locales/en-GB.yml
config/locales/en.yml
config/locales/eo.yml
config/locales/es.yml
config/locales/et.yml
config/locales/eu.yml
config/locales/fa.yml
config/locales/fi.yml
config/locales/fit.yml
config/locales/fr.yml
config/locales/fur.yml
config/locales/ga.yml
config/locales/gd.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/hi.yml
config/locales/hr.yml
config/locales/hsb.yml
config/locales/hu.yml
config/locales/ia.yml
config/locales/id.yml
config/locales/is.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ka.yml
config/locales/kab.yml
config/locales/km.yml
config/locales/ko.yml
config/locales/ku-Latn.yml
config/locales/lb.yml
config/locales/lt.yml
config/locales/lv.yml
config/locales/mk.yml
config/locales/mr.yml
config/locales/ms.yml
config/locales/my.yml
config/locales/nb.yml
config/locales/ne.yml
config/locales/nl.yml
config/locales/nn.yml
config/locales/nqo.yml
config/locales/oc.yml
config/locales/pa.yml
config/locales/pl.yml
config/locales/pt-BR.yml
config/locales/pt-PT.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sc.yml
config/locales/scn.yml
config/locales/sco.yml
config/locales/sk.yml
config/locales/sl.yml
config/locales/sq.yml
config/locales/sr-Latn.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/ta.yml
config/locales/te.yml
config/locales/th.yml
config/locales/tl.yml
config/locales/tr.yml
config/locales/tt.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/zh-CN.yml
config/locales/zh-TW.yml
config/locales/zh-hk.yml
config/potlatch/autocomplete.txt [deleted file]
config/potlatch/colours.txt [deleted file]
config/potlatch/icon_presets.txt [deleted file]
config/potlatch/locales/af.yml [deleted file]
config/potlatch/locales/aln.yml [deleted file]
config/potlatch/locales/ar.yml [deleted file]
config/potlatch/locales/arz.yml [deleted file]
config/potlatch/locales/ast.yml [deleted file]
config/potlatch/locales/be-Tarask.yml [deleted file]
config/potlatch/locales/br.yml [deleted file]
config/potlatch/locales/ca.yml [deleted file]
config/potlatch/locales/cs.yml [deleted file]
config/potlatch/locales/da.yml [deleted file]
config/potlatch/locales/de.yml [deleted file]
config/potlatch/locales/dsb.yml [deleted file]
config/potlatch/locales/en.yml [deleted file]
config/potlatch/locales/eo.yml [deleted file]
config/potlatch/locales/es.yml [deleted file]
config/potlatch/locales/eu.yml [deleted file]
config/potlatch/locales/fa.yml [deleted file]
config/potlatch/locales/fi.yml [deleted file]
config/potlatch/locales/fr.yml [deleted file]
config/potlatch/locales/gl.yml [deleted file]
config/potlatch/locales/he.yml [deleted file]
config/potlatch/locales/hr.yml [deleted file]
config/potlatch/locales/hsb.yml [deleted file]
config/potlatch/locales/hu.yml [deleted file]
config/potlatch/locales/ia.yml [deleted file]
config/potlatch/locales/id.yml [deleted file]
config/potlatch/locales/is.yml [deleted file]
config/potlatch/locales/it.yml [deleted file]
config/potlatch/locales/ja.yml [deleted file]
config/potlatch/locales/ka.yml [deleted file]
config/potlatch/locales/ko.yml [deleted file]
config/potlatch/locales/lb.yml [deleted file]
config/potlatch/locales/lolcat.yml [deleted file]
config/potlatch/locales/lt.yml [deleted file]
config/potlatch/locales/lv.yml [deleted file]
config/potlatch/locales/mk.yml [deleted file]
config/potlatch/locales/nl.yml [deleted file]
config/potlatch/locales/nn.yml [deleted file]
config/potlatch/locales/no.yml [deleted file]
config/potlatch/locales/oc.yml [deleted file]
config/potlatch/locales/pl.yml [deleted file]
config/potlatch/locales/pms.yml [deleted file]
config/potlatch/locales/pt-BR.yml [deleted file]
config/potlatch/locales/pt.yml [deleted file]
config/potlatch/locales/ro.yml [deleted file]
config/potlatch/locales/ru.yml [deleted file]
config/potlatch/locales/rue.yml [deleted file]
config/potlatch/locales/sk.yml [deleted file]
config/potlatch/locales/sl.yml [deleted file]
config/potlatch/locales/sr.yml [deleted file]
config/potlatch/locales/sv.yml [deleted file]
config/potlatch/locales/tl.yml [deleted file]
config/potlatch/locales/tr.yml [deleted file]
config/potlatch/locales/uk.yml [deleted file]
config/potlatch/locales/vi.yml [deleted file]
config/potlatch/locales/zh-CN.yml [deleted file]
config/potlatch/locales/zh-TW.yml [deleted file]
config/potlatch/presets.txt [deleted file]
config/potlatch/relation_colours.txt [deleted file]
config/routes.rb
config/settings.yml
config/wiki_pages.yml
db/migrate/001_create_osm_db.rb
db/migrate/002_cleanup_osm_db.rb
db/migrate/003_sql_session_store_setup.rb
db/migrate/004_user_enhancements.rb
db/migrate/005_tile_tracepoints.rb
db/migrate/006_tile_nodes.rb
db/migrate/007_add_relations.rb
db/migrate/008_remove_segments.rb
db/migrate/010_diary_comments.rb
db/migrate/018_create_acls.rb
db/migrate/020_populate_node_tags_and_remove.rb
db/migrate/021_move_to_innodb.rb
db/migrate/022_key_constraints.rb
db/migrate/023_add_changesets.rb
db/migrate/024_order_relation_members.rb
db/migrate/025_add_end_time_to_changesets.rb
db/migrate/028_add_more_changeset_indexes.rb
db/migrate/029_add_user_foreign_keys.rb
db/migrate/030_add_foreign_keys.rb
db/migrate/031_create_countries.rb
db/migrate/034_create_languages.rb
db/migrate/035_change_user_locale.rb
db/migrate/039_add_more_controls_to_gpx_files.rb
db/migrate/042_add_foreign_keys_to_oauth_tables.rb
db/migrate/044_create_user_roles.rb
db/migrate/045_create_user_blocks.rb
db/migrate/046_alter_user_roles_and_blocks.rb
db/migrate/051_add_status_to_user.rb
db/migrate/053_add_map_bug_tables.rb
db/migrate/054_refactor_map_bug_tables.rb
db/migrate/055_change_map_bug_comment_type.rb
db/migrate/056_add_date_closed.rb
db/migrate/057_add_map_bug_comment_event.rb
db/migrate/20110521142405_rename_bugs_to_notes.rb
db/migrate/20111212183945_add_lowercase_user_indexes.rb
db/migrate/20120214210114_add_text_format.rb
db/migrate/20120318201948_create_redactions.rb
db/migrate/20120328090602_drop_session_table.rb
db/migrate/20120404205604_add_user_and_description_to_redaction.rb
db/migrate/20140115192822_add_text_index_to_note_comments.rb
db/migrate/20140507110937_create_changeset_comments.rb
db/migrate/20140519141742_add_join_table_between_users_and_changesets.rb
db/migrate/20160822153055_create_issues_and_reports.rb
db/migrate/20161002153425_add_join_table_between_users_and_diary_entries.rb
db/migrate/20201214144017_expand_nonce_id.rb [new file with mode: 0644]
db/structure.sql
lib/bootstrap_form/inputs/richtext_field.rb [new file with mode: 0644]
lib/editors.rb
lib/gpx.rb
lib/migrate.rb [deleted file]
lib/nominatim.rb
lib/osm.rb
lib/potlatch.rb [deleted file]
lib/potlatch2.rb [deleted file]
public/potlatch/beep.mp3 [deleted file]
public/potlatch/help.css [deleted file]
public/potlatch/photos.css [deleted file]
public/potlatch/potlatch.swf [deleted file]
public/potlatch/tags.css [deleted file]
public/potlatch/ymap.swf [deleted file]
public/potlatch/ymap2.swf [deleted file]
script/normalise-structure [new file with mode: 0644]
script/statistics
test/controllers/api/amf_controller_test.rb [deleted file]
test/controllers/api/tracepoints_controller_test.rb
test/controllers/geocoder_controller_test.rb
test/controllers/site_controller_test.rb
test/controllers/traces_controller_test.rb
test/controllers/users_controller_test.rb
test/factories/diary_entry_subscriptions.rb
test/helpers/user_helper_test.rb
test/lib/osm_test.rb [new file with mode: 0644]
test/models/old_way_test.rb
test/models/user_test.rb
test/test_helper.rb
vendor/assets/potlatch2/help/introduction.jpg [deleted file]
vendor/assets/potlatch2/help/introduction.mp4 [deleted file]
vendor/assets/potlatch2/potlatch2.swf [deleted file]
vendor/assets/potlatch2/potlatch2/FontLibrary.swf [deleted file]
vendor/assets/potlatch2/potlatch2/assets.zip [deleted file]
vendor/assets/potlatch2/potlatch2/locales/af.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ar.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/arc.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ast.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/az.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ba.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/be-tarask.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/be.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/bg.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/bn.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/br.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/bs.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ca.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ce.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/cs_CZ.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/cy.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/da.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/de-formal.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/de_DE.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/diq.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/dsb.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/el.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/en_GB.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/en_US.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/eo.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/es_ES.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/et.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/eu.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/fa.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/fi.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/fo.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/fr_FR.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/fur.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/fy.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ga.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/gd.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/gl.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/grc.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/he.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/hr.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/hsb.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/hu.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ia.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/id.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/is.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/it_IT.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ja_JP.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ka.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/kab.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/km.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/kn.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ko.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/krc.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ksh.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ku-latn.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ky.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/lb.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/lez.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/lt.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/lv.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/lzz.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/mg.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/mk.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/mr.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ms.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/my.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/nb_NO.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ne.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/nl_NL.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/nn_NO.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/oc.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/pa.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/pl_PL.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ps.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/pt_BR.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/pt_PT.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ro.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ru.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/rue.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/sah.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/scn.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/shn.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/sk.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/skr-arab.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/sl.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/sq.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/sr-ec.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/sr-el.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/sty.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/sv_SE.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/ta.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/te.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/th.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/tl.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/tly.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/tr.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/tyv.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/tzm.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/uk.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/vi_VN.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/vo.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/yi.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/zh_CN.swf [deleted file]
vendor/assets/potlatch2/potlatch2/locales/zh_TW.swf [deleted file]
vendor/assets/swfobject/expressInstall.swf [deleted file]
vendor/assets/swfobject/swfobject.js [deleted file]
yarn.lock

diff --git a/.coveralls.yml b/.coveralls.yml
deleted file mode 100644 (file)
index 9160059..0000000
+++ /dev/null
@@ -1 +0,0 @@
-service_name: travis-ci
index 539fa4a1d17509ca98b4b875bf84c8519eb1d3fa..7b28ebfcd65eccc943a707844cb106f413d0aaa0 100644 (file)
@@ -5,3 +5,7 @@ updates:
     directory: "/"
     schedule:
       interval: "daily"
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "daily"
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
new file mode 100644 (file)
index 0000000..84ce14a
--- /dev/null
@@ -0,0 +1,115 @@
+name: Lint
+on:
+  - push
+  - pull_request
+env:
+  os: ubuntu-20.04
+  ruby: 2.7
+jobs:
+  rubocop:
+    name: RuboCop
+    runs-on: ubuntu-20.04
+    steps:
+    - name: Check out code
+      uses: actions/checkout@v2
+    - name: Setup ruby
+      uses: actions/setup-ruby@v1
+      with:
+        ruby-version: ${{ env.ruby }}
+    - name: Cache gems
+      uses: actions/cache@v2
+      with:
+        path: vendor/bundle
+        key: bundle-${{ env.os }}-${{ env.ruby }}-${{ hashFiles('Gemfile.lock') }}
+        restore-keys: |
+          bundle-${{ env.os }}-${{ env.ruby }}-
+    - name: Install gems
+      run: |
+        gem install bundler
+        bundle config set deployment true
+        bundle install --jobs 4 --retry 3
+    - name: Run rubocop
+      run: bundle exec rubocop --format fuubar
+  erblint:
+    name: ERB Lint
+    runs-on: ubuntu-20.04
+    steps:
+    - name: Check out code
+      uses: actions/checkout@v2
+    - name: Setup ruby
+      uses: actions/setup-ruby@v1
+      with:
+        ruby-version: ${{ env.ruby }}
+    - name: Cache gems
+      uses: actions/cache@v2
+      with:
+        path: vendor/bundle
+        key: bundle-${{ env.os }}-${{ env.ruby }}-${{ hashFiles('Gemfile.lock') }}
+        restore-keys: |
+          bundle-${{ env.os }}-${{ env.ruby }}-
+    - name: Install gems
+      run: |
+        gem install bundler
+        bundle config set deployment true
+        bundle install --jobs 4 --retry 3
+    - name: Run erblint
+      run: bundle exec erblint .
+  eslint:
+    name: ESLint
+    runs-on: ubuntu-20.04
+    steps:
+    - name: Check out code
+      uses: actions/checkout@v2
+    - name: Setup ruby
+      uses: actions/setup-ruby@v1
+      with:
+        ruby-version: ${{ env.ruby }}
+    - name: Cache gems
+      uses: actions/cache@v2
+      with:
+        path: vendor/bundle
+        key: bundle-${{ env.os }}-${{ env.ruby }}-${{ hashFiles('Gemfile.lock') }}
+        restore-keys: |
+          bundle-${{ env.os }}-${{ env.ruby }}-
+    - name: Cache node modules
+      uses: actions/cache@v1
+      with:
+        path: node_modules
+        key: yarn-${{ env.os }}-${{ hashFiles('yarn.lock') }}
+        restore-keys: |
+          yarn-${{ env.os }}-
+    - name: Install gems
+      run: |
+        gem install bundler
+        bundle config set deployment true
+        bundle install --jobs 4 --retry 3
+    - name: Install node modules
+      run: bundle exec rake yarn:install
+    - name: Create dummy database configuration
+      run: cp config/example.database.yml config/database.yml
+    - name: Run eslint
+      run: bundle exec rake eslint
+  brakeman:
+    name: Brakeman
+    runs-on: ubuntu-20.04
+    steps:
+    - name: Check out code
+      uses: actions/checkout@v2
+    - name: Setup ruby
+      uses: actions/setup-ruby@v1
+      with:
+        ruby-version: ${{ env.ruby }}
+    - name: Cache gems
+      uses: actions/cache@v2
+      with:
+        path: vendor/bundle
+        key: bundle-${{ env.os }}-${{ env.ruby }}-${{ hashFiles('Gemfile.lock') }}
+        restore-keys: |
+          bundle-${{ env.os }}-${{ env.ruby }}-
+    - name: Install gems
+      run: |
+        gem install bundler
+        bundle config set deployment true
+        bundle install --jobs 4 --retry 3
+    - name: Run brakeman
+      run: bundle exec brakeman -q
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644 (file)
index 0000000..5fcfdf6
--- /dev/null
@@ -0,0 +1,85 @@
+name: Tests
+on:
+  - push
+  - pull_request
+jobs:
+  test:
+    name: Ubuntu ${{ matrix.ubuntu }}, Ruby ${{ matrix.ruby }}
+    strategy:
+      matrix:
+        ubuntu: [18.04, 20.04]
+        ruby: [2.5, 2.7]
+    runs-on: ubuntu-${{ matrix.ubuntu }}
+    env:
+      RAILS_ENV: test
+      OPENSTREETMAP_MEMCACHE_SERVERS: 127.0.0.1
+    steps:
+    - name: Checkout source
+      uses: actions/checkout@v2
+    - name: Setup ruby
+      uses: actions/setup-ruby@v1
+      with:
+        ruby-version: ${{ matrix.ruby }}
+    - name: Cache gems
+      uses: actions/cache@v2
+      with:
+        path: vendor/bundle
+        key: bundle-ubuntu-${{ matrix.ubuntu }}-ruby-${{ matrix.ruby }}-${{ hashFiles('Gemfile.lock') }}
+        restore-keys: |
+          bundle-ubuntu-${{ matrix.ubuntu }}-ruby-${{ matrix.ruby }}-
+    - name: Cache node modules
+      uses: actions/cache@v1
+      with:
+        path: node_modules
+        key: yarn-ubuntu-${{ matrix.ubuntu }}-${{ hashFiles('yarn.lock') }}
+        restore-keys: |
+          yarn-ubuntu-${{ matrix.ubuntu }}-
+    - name: Install packages
+      run: |
+        sudo apt-get -yqq update
+        sudo apt-get -yqq install memcached
+    - name: Install gems
+      run: |
+        gem install bundler
+        bundle config set deployment true
+        bundle install --jobs 4 --retry 3
+    - name: Create database
+      run: |
+        sudo systemctl start postgresql
+        sudo -u postgres createuser -s $(id -un)
+        createdb openstreetmap
+        psql -c "CREATE EXTENSION btree_gist" openstreetmap
+        psql -f db/functions/functions.sql openstreetmap
+    - name: Configure rails
+      run: |
+        cp config/github.database.yml config/database.yml
+        cp config/example.storage.yml config/storage.yml
+        touch config/settings.local.yml
+    - name: Populate database
+      run: |
+        sed -f script/normalise-structure db/structure.sql > db/structure.expected
+        bundle exec rake db:migrate
+        sed -f script/normalise-structure db/structure.sql > db/structure.actual
+        diff -uw db/structure.expected db/structure.actual
+    - name: Export javascript strings
+      run: bundle exec rake i18n:js:export
+    - name: Install node modules
+      run: bundle exec rake yarn:install
+    - name: Run tests
+      run: bundle exec rake test:db
+    - name: Report completion to Coveralls
+      uses: coverallsapp/github-action@v1.1.2
+      with:
+        github-token: ${{ secrets.github_token }}
+        flag-name: ubuntu-${{ matrix.ubuntu }}-ruby-${{ matrix.ruby }}
+        parallel: true
+  finish:
+    name: Finalise
+    needs: test
+    runs-on: ubuntu-latest
+    steps:
+    - name: Report completion to Coveralls
+      uses: coverallsapp/github-action@v1.1.2
+      with:
+        github-token: ${{ secrets.github_token }}
+        parallel-finished: true
index 200ab8a00816b92077b78ea72c7908636d9a989e..9b7a28d87e0ad61061f9411371c9f1c3df848902 100644 (file)
@@ -6,7 +6,7 @@ require:
   - rubocop-rails
 
 AllCops:
-  TargetRubyVersion: 2.7
+  TargetRubyVersion: 2.5
   NewCops: enable
   Exclude:
     - 'vendor/**/*'
index c1060cbe2338b3c6c95a2344417a527e0c67c465..9aea439cb01f5b435f6bec0a8dce68197b5af69a 100644 (file)
@@ -1,6 +1,6 @@
 # This configuration was generated by
 # `rubocop --auto-gen-config`
-# on 2020-09-02 06:16:56 UTC using RuboCop version 0.90.0.
+# on 2021-01-11 19:00:54 UTC using RuboCop version 1.8.1.
 # The point is for the user to remove these configuration records
 # one by one as the offenses are removed from the code base.
 # Note that changes in the inspected code, or installation of new
@@ -13,12 +13,12 @@ require:
   - rubocop-performance
   - rubocop-rails
 
-# Offense count: 568
+# Offense count: 544
 # Cop supports --auto-correct.
 # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
 # URISchemes: http, https
 Layout/LineLength:
-  Max: 250
+  Max: 248
 
 # Offense count: 36
 # Configuration parameters: AllowSafeAssignment.
@@ -39,14 +39,24 @@ Lint/AssignmentInCondition:
     - 'lib/osm.rb'
     - 'script/deliver-message'
 
-# Offense count: 682
-# Configuration parameters: IgnoredMethods.
+# Offense count: 8
+# Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches.
+Lint/DuplicateBranch:
+  Exclude:
+    - 'app/controllers/api_controller.rb'
+    - 'app/controllers/diary_entries_controller.rb'
+    - 'app/controllers/geocoder_controller.rb'
+    - 'app/helpers/browse_tags_helper.rb'
+    - 'lib/password_hash.rb'
+
+# Offense count: 487
+# Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
 Metrics/AbcSize:
   Max: 194
 
-# Offense count: 72
-# Configuration parameters: CountComments, CountAsOne, ExcludedMethods.
-# ExcludedMethods: refine
+# Offense count: 62
+# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
+# IgnoredMethods: refine
 Metrics/BlockLength:
   Max: 71
 
@@ -55,43 +65,41 @@ Metrics/BlockLength:
 Metrics/BlockNesting:
   Max: 5
 
-# Offense count: 25
+# Offense count: 24
 # Configuration parameters: CountComments, CountAsOne.
 Metrics/ClassLength:
-  Max: 643
+  Max: 582
 
-# Offense count: 68
+# Offense count: 52
 # Configuration parameters: IgnoredMethods.
 Metrics/CyclomaticComplexity:
   Max: 26
 
-# Offense count: 735
-# Configuration parameters: CountComments, CountAsOne, ExcludedMethods.
+# Offense count: 553
+# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
 Metrics/MethodLength:
   Max: 179
 
-# Offense count: 4
-# Configuration parameters: CountKeywordArgs.
+# Offense count: 1
+# Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
 Metrics/ParameterLists:
-  Max: 9
+  Max: 6
 
-# Offense count: 69
+# Offense count: 56
 # Configuration parameters: IgnoredMethods.
 Metrics/PerceivedComplexity:
   Max: 26
 
-# Offense count: 540
+# Offense count: 365
 Minitest/MultipleAssertions:
   Max: 81
 
-# Offense count: 6
+# Offense count: 4
 Naming/AccessorMethodName:
   Exclude:
     - 'app/controllers/application_controller.rb'
     - 'app/helpers/title_helper.rb'
-    - 'app/models/old_way.rb'
     - 'lib/osm.rb'
-    - 'lib/potlatch.rb'
 
 # Offense count: 8
 # Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros.
@@ -101,7 +109,6 @@ Naming/AccessorMethodName:
 # MethodDefinitionMacros: define_method, define_singleton_method
 Naming/PredicateName:
   Exclude:
-    - 'spec/**/*'
     - 'app/models/changeset.rb'
     - 'app/models/old_node.rb'
     - 'app/models/old_relation.rb'
@@ -127,7 +134,7 @@ Rails/HasAndBelongsToMany:
     - 'app/models/changeset.rb'
     - 'app/models/user.rb'
 
-# Offense count: 4
+# Offense count: 3
 # Configuration parameters: Include.
 # Include: app/helpers/**/*.rb
 Rails/HelperInstanceVariable:
@@ -145,7 +152,7 @@ Rails/NotNullColumn:
     - 'db/migrate/025_add_end_time_to_changesets.rb'
     - 'db/migrate/20120404205604_add_user_and_description_to_redaction.rb'
 
-# Offense count: 19
+# Offense count: 8
 Rails/OutputSafety:
   Exclude:
     - 'app/controllers/users_controller.rb'
@@ -153,22 +160,22 @@ Rails/OutputSafety:
     - 'lib/rich_text.rb'
     - 'test/helpers/application_helper_test.rb'
 
-# Offense count: 95
+# Offense count: 80
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle.
 # SupportedStyles: strict, flexible
 Rails/TimeZone:
   Enabled: false
 
-# Offense count: 572
+# Offense count: 558
 # Cop supports --auto-correct.
 # Configuration parameters: EnforcedStyle.
 # SupportedStyles: always, always_true, never
 Style/FrozenStringLiteralComment:
   Enabled: false
 
-# Offense count: 78
+# Offense count: 54
 # Cop supports --auto-correct.
 # Configuration parameters: Strict.
 Style/NumericLiterals:
-  MinDigits: 11
+  MinDigits: 15
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644 (file)
index 77b17cf..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-dist: bionic
-language: ruby
-rvm:
-  - 2.7.0
-cache:
-  - bundler
-addons:
-  postgresql: 9.5
-  apt:
-    packages:
-      - firefox-geckodriver
-      - libarchive-dev
-      - libgd-dev
-      - libffi-dev
-      - libbz2-dev
-services:
-  - memcached
-before_script:
-  - sed -e 's/ IMMUTABLE / /' -e "/^--/d" db/structure.sql > db/structure.expected
-  - psql -U postgres -c "CREATE DATABASE openstreetmap"
-  - psql -U postgres -c "CREATE EXTENSION btree_gist" openstreetmap
-  - psql -U postgres -f db/functions/functions.sql openstreetmap
-  - cp config/travis.database.yml config/database.yml
-  - cp config/example.storage.yml config/storage.yml
-  - touch config/settings.local.yml
-  - echo -e "---\nmemcache_servers:\n  - 127.0.0.1" > config/settings/test.local.yml
-  - bundle exec rake db:migrate
-  - bundle exec rake i18n:js:export
-  - bundle exec rake yarn:install
-script:
-  - bundle exec rubocop -f fuubar
-  - bundle exec rake eslint
-  - bundle exec erblint .
-  - bundle exec brakeman -q
-  - bundle exec rake db:structure:dump
-  - sed -e "/idle_in_transaction_session_timeout/d" -e 's/ IMMUTABLE / /' -e "/^--/d" db/structure.sql > db/structure.actual
-  - diff -uw db/structure.expected db/structure.actual
-  - bundle exec rake test:db
index 598ea3f65d9207c25a3d7f6380c9b5319c9f2da3..96aac9f964e43cf14ca24b118ccf54633a85a89f 100644 (file)
@@ -8,7 +8,7 @@ Many settings are available in `config/settings.yml`. You can customize your ins
 
 ## Populating the database
 
-Your installation comes with no geographic data loaded. You can either create new data using one of the editors (Potlatch 2, iD, JOSM etc) or by loading an OSM extract.
+Your installation comes with no geographic data loaded. You can either create new data using one of the editors (iD, JOSM etc) or by loading an OSM extract.
 
 After installing but before creating any users or data, import an extract with [Osmosis](https://wiki.openstreetmap.org/wiki/Osmosis) and the [``--write-apidb``](https://wiki.openstreetmap.org/wiki/Osmosis/Detailed_Usage#--write-apidb_.28--wd.29) task.
 
@@ -58,11 +58,10 @@ $ bundle exec rails console
 
 Three of the built-in applications communicate via the API, and therefore need OAuth consumer keys configured. These are:
 
-* Potlatch 2
 * iD
 * The website itself (for the Notes functionality)
 
-For example, to use the Potlatch 2 editor you need to register it as an OAuth application.
+For example, to use the iD editor you need to register it as an OAuth application.
 
 Do the following:
 * Log into your Rails Port instance - e.g. http://localhost:3000
@@ -70,25 +69,25 @@ Do the following:
 * Click on "my settings" on the user page
 * Click on "oauth settings" on the My settings page
 * Click on 'Register your application'.
-* Unless you have set up alternatives, use Name: "Local Potlatch" and URL: "http://localhost:3000"
+* Unless you have set up alternatives, use Name: "Local iD" and URL: "http://localhost:3000"
 * Check the 'modify the map' box.
 * Everything else can be left with the default blank values.
 * Click the "Register" button
 * On the next page, copy the "consumer key"
 * Edit config/settings.local.yml in your rails tree
-* Add the "potlatch2_key" configuration key and the consumer key as the value
+* Add the "id_key" configuration key and the consumer key as the value
 * Restart your rails server
 
 An example excerpt from settings.local.yml:
 
 ```
 # Default editor
-default_editor: "potlatch2"
-# OAuth consumer key for Potlatch 2
-potlatch2_key: "8lFmZPsagHV4l3rkAHq0hWY5vV3Ctl3oEFY1aXth"
+default_editor: "id"
+# OAuth consumer key for iD
+id_key: "8lFmZPsagHV4l3rkAHq0hWY5vV3Ctl3oEFY1aXth"
 ```
 
-Follow the same process for registering and configuring iD (`id_key`) and the website/Notes (`oauth_key`), or to save time, simply reuse the same consumer key for each.
+Follow the same process for registering and configuring the website/Notes (`oauth_key`), or to save time, simply reuse the same consumer key for each.
 
 ## Troubleshooting
 
diff --git a/Gemfile b/Gemfile
index 10cfb970e4b5bf0207d16a7bba9079fa78076af2..40476a5b8e3aaa21bf2b9ec6a3a105d260764ba5 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -3,12 +3,6 @@ source "https://rubygems.org"
 # Require rails
 gem "rails", "6.0.3.4"
 
-# Require things which have moved to gems in ruby 1.9
-gem "bigdecimal", "~> 1.1.0", :platforms => :ruby_19
-
-# Require things which have moved to gems in ruby 2.0
-gem "psych", :platforms => :ruby_20
-
 # Require json for multi_json
 gem "json"
 
@@ -88,9 +82,6 @@ gem "libxml-ruby", ">= 2.0.5", :require => "libxml"
 gem "htmlentities"
 gem "sanitize"
 
-# Load SystemTimer for implementing request timeouts
-gem "SystemTimer", ">= 1.1.3", :require => "system_timer", :platforms => :ruby_18
-
 # Load faraday for mockable HTTP client
 gem "faraday"
 
@@ -133,6 +124,7 @@ group :development do
   gem "annotate"
   gem "better_errors"
   gem "binding_of_caller"
+  gem "debug_inspector", "< 1.0.0"
   gem "listen"
   gem "vendorer"
 end
@@ -141,16 +133,17 @@ end
 group :test do
   gem "brakeman"
   gem "capybara", ">= 2.15"
-  gem "coveralls", :require => false
   gem "erb_lint", :require => false
   gem "factory_bot_rails"
   gem "minitest", "~> 5.1"
   gem "puma", "~> 5.0"
   gem "rails-controller-testing"
-  gem "rubocop", "~> 0.93"
+  gem "rubocop"
   gem "rubocop-minitest"
   gem "rubocop-performance"
   gem "rubocop-rails"
   gem "selenium-webdriver"
+  gem "simplecov", :require => false
+  gem "simplecov-lcov", :require => false
   gem "webmock"
 end
index 61fe25c0939f8c53d721bd17ef53e91b702b2587..59cfa88042fa13bfff6677e82171d0569cb111fb 100644 (file)
@@ -1,7 +1,6 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    SystemTimer (1.2.3)
     aasm (5.1.1)
       concurrent-ruby (~> 1.0)
     actioncable (6.0.3.4)
@@ -71,19 +70,19 @@ GEM
       activerecord (>= 3.2, < 7.0)
       rake (>= 10.4, < 14.0)
     ast (2.4.1)
-    autoprefixer-rails (10.0.3.0)
+    autoprefixer-rails (10.2.0.0)
       execjs
     aws-eventstream (1.1.0)
-    aws-partitions (1.402.0)
+    aws-partitions (1.415.0)
     aws-sdk-core (3.110.0)
       aws-eventstream (~> 1, >= 1.0.2)
       aws-partitions (~> 1, >= 1.239.0)
       aws-sigv4 (~> 1.1)
       jmespath (~> 1.0)
-    aws-sdk-kms (1.39.0)
+    aws-sdk-kms (1.40.0)
       aws-sdk-core (~> 3, >= 3.109.0)
       aws-sigv4 (~> 1.1)
-    aws-sdk-s3 (1.86.0)
+    aws-sdk-s3 (1.87.0)
       aws-sdk-core (~> 3, >= 3.109.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.1)
@@ -101,8 +100,7 @@ GEM
       html_tokenizer (~> 0.0.6)
       parser (>= 2.4)
       smart_properties
-    bigdecimal (1.1.0)
-    binding_of_caller (0.8.0)
+    binding_of_caller (1.0.0)
       debug_inspector (>= 0.0.1)
     bootsnap (1.5.1)
       msgpack (~> 1.0)
@@ -113,14 +111,14 @@ GEM
     bootstrap_form (4.5.0)
       actionpack (>= 5.2)
       activemodel (>= 5.2)
-    brakeman (4.10.0)
-    browser (5.1.0)
+    brakeman (4.10.1)
+    browser (5.2.0)
     builder (3.2.4)
     bzip2-ffi (1.0.0)
       ffi (~> 1.0)
-    cancancan (3.1.0)
-    canonical-rails (0.2.9)
-      rails (>= 4.1, < 6.1)
+    cancancan (3.2.1)
+    canonical-rails (0.2.11)
+      rails (>= 4.1, < 6.2)
     capybara (3.34.0)
       addressable
       mini_mime (>= 0.1.3)
@@ -131,45 +129,38 @@ GEM
       xpath (~> 3.2)
     childprocess (3.0.0)
     coderay (1.1.3)
-    composite_primary_keys (12.0.3)
+    composite_primary_keys (12.0.6)
       activerecord (~> 6.0.0)
     concurrent-ruby (1.1.7)
-    config (2.2.1)
+    config (2.2.3)
       deep_merge (~> 1.2, >= 1.2.1)
       dry-validation (~> 1.0, >= 1.0.0)
-    coveralls (0.8.23)
-      json (>= 1.8, < 3)
-      simplecov (~> 0.16.1)
-      term-ansicolor (~> 1.3)
-      thor (>= 0.19.4, < 2.0)
-      tins (~> 1.6)
-    crack (0.4.4)
+    crack (0.4.5)
+      rexml
     crass (1.0.6)
     dalli (2.7.11)
     debug_inspector (0.0.3)
     deep_merge (1.2.1)
-    delayed_job (4.1.8)
-      activesupport (>= 3.0, < 6.1)
-    delayed_job_active_record (4.1.4)
-      activerecord (>= 3.0, < 6.1)
+    delayed_job (4.1.9)
+      activesupport (>= 3.0, < 6.2)
+    delayed_job_active_record (4.1.5)
+      activerecord (>= 3.0, < 6.2)
       delayed_job (>= 3.0, < 5)
-    docile (1.3.2)
-    dry-configurable (0.11.6)
+    docile (1.3.4)
+    dry-configurable (0.12.0)
       concurrent-ruby (~> 1.0)
-      dry-core (~> 0.4, >= 0.4.7)
-      dry-equalizer (~> 0.2)
+      dry-core (~> 0.5, >= 0.5.0)
     dry-container (0.7.2)
       concurrent-ruby (~> 1.0)
       dry-configurable (~> 0.1, >= 0.1.3)
-    dry-core (0.4.10)
+    dry-core (0.5.0)
       concurrent-ruby (~> 1.0)
     dry-equalizer (0.3.0)
     dry-inflector (0.2.0)
     dry-initializer (3.0.4)
-    dry-logic (1.0.8)
+    dry-logic (1.1.0)
       concurrent-ruby (~> 1.0)
-      dry-core (~> 0.2)
-      dry-equalizer (~> 0.2)
+      dry-core (~> 0.5, >= 0.5)
     dry-schema (1.5.6)
       concurrent-ruby (~> 1.0)
       dry-configurable (~> 0.8, >= 0.8.3)
@@ -193,13 +184,13 @@ GEM
       dry-initializer (~> 3.0)
       dry-schema (~> 1.5, >= 1.5.2)
     dynamic_form (1.1.4)
-    erb_lint (0.0.35)
+    erb_lint (0.0.36)
       activesupport
       better_html (~> 1.0.7)
       html_tokenizer
       parser (>= 2.7.1.4)
       rainbow
-      rubocop (~> 0.79)
+      rubocop
       smart_properties
     erubi (1.10.0)
     execjs (2.7.0)
@@ -209,10 +200,12 @@ GEM
     factory_bot_rails (6.1.0)
       factory_bot (~> 6.1.0)
       railties (>= 5.0.0)
-    faraday (1.1.0)
+    faraday (1.3.0)
+      faraday-net_http (~> 1.0)
       multipart-post (>= 1.2, < 3)
       ruby2_keywords
-    ffi (1.13.1)
+    faraday-net_http (1.0.0)
+    ffi (1.14.2)
     ffi-libarchive (1.0.4)
       ffi (~> 1.0)
     fspath (3.1.2)
@@ -225,11 +218,11 @@ GEM
     html_tokenizer (0.0.7)
     htmlentities (4.3.4)
     http_accept_language (2.1.1)
-    i18n (1.8.5)
+    i18n (1.8.7)
       concurrent-ruby (~> 1.0)
     i18n-js (3.8.0)
       i18n (>= 0.6.6)
-    image_optim (0.27.1)
+    image_optim (0.28.0)
       exifr (~> 1.2, >= 1.2.2)
       fspath (~> 3.0)
       image_size (>= 1.5, < 3)
@@ -248,19 +241,17 @@ GEM
       rails-dom-testing (>= 1, < 3)
       railties (>= 4.2.0)
       thor (>= 0.14, < 2.0)
-    json (2.3.1)
+    json (2.5.1)
     jwt (2.2.2)
     kgio (2.11.3)
     kramdown (2.3.0)
       rexml
     libxml-ruby (3.2.1)
-    listen (3.3.3)
+    listen (3.4.0)
       rb-fsevent (~> 0.10, >= 0.10.3)
       rb-inotify (~> 0.9, >= 0.9.10)
-    logstash-event (1.2.02)
-    logstasher (1.3.0)
-      activesupport (>= 4.0)
-      logstash-event (~> 1.2.0)
+    logstasher (2.1.5)
+      activesupport (>= 5.2)
       request_store
     loofah (2.8.0)
       crass (~> 1.0.2)
@@ -274,15 +265,16 @@ GEM
     mimemagic (0.3.5)
     mini_magick (4.11.0)
     mini_mime (1.0.2)
-    mini_portile2 (2.4.0)
-    minitest (5.14.2)
+    mini_portile2 (2.5.0)
+    minitest (5.14.3)
     msgpack (1.3.3)
     multi_json (1.15.0)
     multi_xml (0.6.0)
     multipart-post (2.1.1)
     nio4r (2.5.4)
-    nokogiri (1.10.10)
-      mini_portile2 (~> 2.4.0)
+    nokogiri (1.11.1)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
     nokogumbo (2.0.4)
       nokogiri (~> 1.8, >= 1.8.4)
     oauth (0.4.7)
@@ -305,8 +297,9 @@ GEM
     omniauth-github (1.4.0)
       omniauth (~> 1.5)
       omniauth-oauth2 (>= 1.4.0, < 2.0)
-    omniauth-google-oauth2 (0.8.0)
+    omniauth-google-oauth2 (0.8.1)
       jwt (>= 2.0)
+      oauth2 (~> 1.1)
       omniauth (>= 1.1.1)
       omniauth-oauth2 (>= 1.6)
     omniauth-mediawiki (0.0.4)
@@ -326,17 +319,17 @@ GEM
       omniauth-oauth2 (~> 1.4)
     openstreetmap-deadlock_retry (1.3.0)
     parallel (1.20.1)
-    parser (2.7.2.0)
+    parser (3.0.0.0)
       ast (~> 2.4.1)
     pg (1.2.3)
     popper_js (1.16.0)
     progress (3.5.2)
-    psych (3.2.0)
     public_suffix (4.0.6)
-    puma (5.1.0)
+    puma (5.1.1)
       nio4r (~> 2.0)
     quad_tile (1.0.1)
     r2 (0.2.7)
+    racc (1.5.2)
     rack (2.2.3)
     rack-cors (1.1.1)
       rack (>= 2.0.0)
@@ -380,7 +373,7 @@ GEM
       rake (>= 0.8.7)
       thor (>= 0.20.3, < 2.0)
     rainbow (3.0.0)
-    rake (13.0.1)
+    rake (13.0.3)
     rb-fsevent (0.10.4)
     rb-inotify (0.10.1)
       ffi (~> 1.0)
@@ -390,31 +383,31 @@ GEM
     rexml (3.2.4)
     rinku (2.0.6)
     rotp (6.2.0)
-    rubocop (0.93.1)
+    rubocop (1.8.1)
       parallel (~> 1.10)
-      parser (>= 2.7.1.5)
+      parser (>= 3.0.0.0)
       rainbow (>= 2.2.2, < 4.0)
-      regexp_parser (>= 1.8)
+      regexp_parser (>= 1.8, < 3.0)
       rexml
-      rubocop-ast (>= 0.6.0)
+      rubocop-ast (>= 1.2.0, < 2.0)
       ruby-progressbar (~> 1.7)
-      unicode-display_width (>= 1.4.0, < 2.0)
-    rubocop-ast (1.3.0)
+      unicode-display_width (>= 1.4.0, < 3.0)
+    rubocop-ast (1.4.0)
       parser (>= 2.7.1.5)
-    rubocop-minitest (0.10.1)
-      rubocop (>= 0.87)
-    rubocop-performance (1.9.1)
+    rubocop-minitest (0.10.2)
+      rubocop (>= 0.87, < 2.0)
+    rubocop-performance (1.9.2)
       rubocop (>= 0.90.0, < 2.0)
       rubocop-ast (>= 0.4.0)
-    rubocop-rails (2.8.1)
+    rubocop-rails (2.9.1)
       activesupport (>= 4.2.0)
       rack (>= 1.1)
-      rubocop (>= 0.87.0)
+      rubocop (>= 0.90.0, < 2.0)
     ruby-openid (2.9.2)
-    ruby-progressbar (1.10.1)
+    ruby-progressbar (1.11.0)
     ruby2_keywords (0.0.2)
     rubyzip (2.3.0)
-    sanitize (5.2.1)
+    sanitize (5.2.2)
       crass (~> 1.0.2)
       nokogiri (>= 1.8.0)
       nokogumbo (~> 2.0)
@@ -430,11 +423,13 @@ GEM
     selenium-webdriver (3.142.7)
       childprocess (>= 0.5, < 4.0)
       rubyzip (>= 1.2.2)
-    simplecov (0.16.1)
+    simplecov (0.21.2)
       docile (~> 1.1)
-      json (>= 1.8, < 3)
-      simplecov-html (~> 0.10.0)
-    simplecov-html (0.10.2)
+      simplecov-html (~> 0.11)
+      simplecov_json_formatter (~> 0.1)
+    simplecov-html (0.12.3)
+    simplecov-lcov (0.8.0)
+    simplecov_json_formatter (0.1.2)
     smart_properties (1.15.0)
     sprockets (4.0.2)
       concurrent-ruby (~> 1.0)
@@ -443,25 +438,20 @@ GEM
       actionpack (>= 4.0)
       activesupport (>= 4.0)
       sprockets (>= 3.0.0)
-    strong_migrations (0.7.3)
+    strong_migrations (0.7.4)
       activerecord (>= 5)
-    sync (0.5.0)
-    term-ansicolor (1.7.1)
-      tins (~> 1.0)
     thor (1.0.1)
     thread_safe (0.3.6)
     tilt (2.0.10)
-    tins (1.26.0)
-      sync
-    tzinfo (1.2.8)
+    tzinfo (1.2.9)
       thread_safe (~> 0.1)
     uglifier (4.2.0)
       execjs (>= 0.3.0, < 3)
-    unicode-display_width (1.7.0)
+    unicode-display_width (2.0.0)
     validates_email_format_of (1.6.3)
       i18n
     vendorer (0.2.0)
-    webmock (3.10.0)
+    webmock (3.11.0)
       addressable (>= 2.3.6)
       crack (>= 0.3.2)
       hashdiff (>= 0.4.0, < 2.0.0)
@@ -476,7 +466,6 @@ PLATFORMS
   ruby
 
 DEPENDENCIES
-  SystemTimer (>= 1.1.3)
   aasm
   actionpack-page_caching (>= 1.2.0)
   active_record_union
@@ -485,7 +474,6 @@ DEPENDENCIES
   autoprefixer-rails
   aws-sdk-s3
   better_errors
-  bigdecimal (~> 1.1.0)
   binding_of_caller
   bootsnap (>= 1.4.2)
   bootstrap (~> 4.5.0)
@@ -498,8 +486,8 @@ DEPENDENCIES
   capybara (>= 2.15)
   composite_primary_keys (~> 12.0.0)
   config
-  coveralls
   dalli
+  debug_inspector (< 1.0.0)
   delayed_job_active_record
   dynamic_form
   erb_lint
@@ -533,7 +521,6 @@ DEPENDENCIES
   omniauth-windowslive
   openstreetmap-deadlock_retry (>= 1.3.0)
   pg
-  psych
   puma (~> 5.0)
   quad_tile (~> 1.0.1)
   r2 (~> 0.2.7)
@@ -544,7 +531,7 @@ DEPENDENCIES
   rails-i18n (~> 6.0.0)
   rinku (>= 2.0.6)
   rotp
-  rubocop (~> 0.93)
+  rubocop
   rubocop-minitest
   rubocop-performance
   rubocop-rails
@@ -552,6 +539,8 @@ DEPENDENCIES
   sassc-rails
   secure_headers
   selenium-webdriver
+  simplecov
+  simplecov-lcov
   strong_migrations
   uglifier (>= 1.3.0)
   validates_email_format_of (>= 1.5.1)
index 81b8ce7bf6edea94cffd08b203083e6f224a43e5..b96a77671c55dad31612736f808d6b5539a5ac33 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
 # "The Rails Port"
 
-[![Build Status](https://travis-ci.org/openstreetmap/openstreetmap-website.svg?branch=master)](https://travis-ci.org/openstreetmap/openstreetmap-website)
+[![Lint](https://github.com/openstreetmap/openstreetmap-website/workflows/Lint/badge.svg?branch=master&event=push)](https://github.com/openstreetmap/openstreetmap-website/actions?query=workflow%3ALint%20branch%3Amaster%20event%3Apush)
+[![Tests](https://github.com/openstreetmap/openstreetmap-website/workflows/Tests/badge.svg?branch=master&event=push)](https://github.com/openstreetmap/openstreetmap-website/actions?query=workflow%3ATests%20branch%3Amaster%20event%3Apush)
 [![Coverage Status](https://coveralls.io/repos/openstreetmap/openstreetmap-website/badge.svg?branch=master)](https://coveralls.io/r/openstreetmap/openstreetmap-website?branch=master)
 
 This is The Rails Port, the [Ruby on Rails](http://rubyonrails.org/)
@@ -11,7 +12,7 @@ This repository consists of:
 
 * The web site, including user accounts, diary entries, user-to-user messaging.
 * The XML-based editing [API](https://wiki.openstreetmap.org/wiki/API_v0.6).
-* The integrated versions of the [Potlatch](https://wiki.openstreetmap.org/wiki/Potlatch_1), [Potlatch 2](https://wiki.openstreetmap.org/wiki/Potlatch_2) and [iD](https://wiki.openstreetmap.org/wiki/ID) editors.
+* The integrated version of the [iD](https://wiki.openstreetmap.org/wiki/ID) editors.
 * The Browse pages - a web front-end to the OpenStreetMap data.
 * The GPX uploads, browsing and API.
 
index 271c0b3f51602e30137abe3dbf411d2fe740bf7f..2ef8991231eefbb81141a82ab342ce3039e4fb88 100644 (file)
@@ -6,7 +6,7 @@ Vagrant.configure("2") do |config|
   config.vm.provider "virtualbox" do |vb, override|
     override.vm.box = "ubuntu/focal64"
     override.vm.synced_folder ".", "/srv/openstreetmap-website"
-    vb.customize ["modifyvm", :id, "--memory", "1024"]
+    vb.customize ["modifyvm", :id, "--memory", "4096"]
     vb.customize ["modifyvm", :id, "--cpus", "2"]
     vb.customize ["modifyvm", :id, "--uartmode1", "disconnected"]
   end
index 97d6f8b98189d46b0e0a8c41330b2748238345c2..8d66a7fef711dcd3cec3fd531e780d1607f09c68 100644 (file)
 
 //= link_directory ../../../vendor/assets/polyfill .js
 
-//= link_directory ../../../vendor/assets/potlatch2/help
-//= link_tree ../../../vendor/assets/potlatch2 .swf
-//= link_tree ../../../vendor/assets/potlatch2 .zip
-
-//= link_directory ../../../vendor/assets/swfobject
-
 //= link html5shiv/dist/html5shiv.js
 
 //= link leaflet/dist/images/marker-icon.png
diff --git a/app/assets/images/aol.png b/app/assets/images/aol.png
deleted file mode 100644 (file)
index cf773f9..0000000
Binary files a/app/assets/images/aol.png and /dev/null differ
diff --git a/app/assets/images/aol.svg b/app/assets/images/aol.svg
new file mode 100644 (file)
index 0000000..53c4dad
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs><style>.a{fill:#231f20;}.b{fill:#fff;}</style></defs><rect class="a" width="36" height="36"/><path class="b" d="M19.15,19.33a1.73,1.73,0,1,0,1.72-1.83,1.76,1.76,0,0,0-1.72,1.83Zm9,3.64H26V13.33h2.18Zm3.44-11.45.73-2.32L27.7,7.75,24.5,17.94a4.25,4.25,0,0,1,.25,1.39,3.77,3.77,0,0,1-3.88,3.84,3.79,3.79,0,0,1-2.43-.8l-.62,2.69L22,26l-.78,2.47,4.61,1.45,1.44-4.6,4.09.49.37-3.13a1.46,1.46,0,0,1-2.39-1.11,1.45,1.45,0,0,1,2.62-.85l1.08-9Zm-20.5,8.1h2l-1-3.36Zm9.79-4.14a3.69,3.69,0,0,1,3.57,2.32l2.22-9.7L22,7l-.41,1.8-.86-.56-5.42,8.3,1.79-5.69L12.44,9.42l-1.23,3.91h1.85L16.82,23h-2.6l-.47-1.4H10.41L9.9,23H7.32l3.21-8.14,2.28-8.65L8.14,5,3,24.46l4.35,1.15-1.26,4,4.61,1.45,1.7-5.39,1.88,1.23,3.44-5.27A4.07,4.07,0,0,1,17,19.33a3.77,3.77,0,0,1,3.87-3.85"/></svg>
\ No newline at end of file
diff --git a/app/assets/images/facebook.png b/app/assets/images/facebook.png
deleted file mode 100644 (file)
index 8a9efc9..0000000
Binary files a/app/assets/images/facebook.png and /dev/null differ
diff --git a/app/assets/images/facebook.svg b/app/assets/images/facebook.svg
new file mode 100644 (file)
index 0000000..1968745
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs><style>.a{fill:#1877f2;}.b{fill:#fff;}</style></defs><rect class="a" width="36" height="36"/><path class="b" d="M25,23.2,25.8,18h-5V14.62a2.61,2.61,0,0,1,2.94-2.81H26V7.38A27.8,27.8,0,0,0,22,7c-4.12,0-6.8,2.49-6.8,7v4H10.62v5.2h4.57V36h5.62V23.2Z"/></svg>
\ No newline at end of file
diff --git a/app/assets/images/github.png b/app/assets/images/github.png
deleted file mode 100644 (file)
index b797e24..0000000
Binary files a/app/assets/images/github.png and /dev/null differ
diff --git a/app/assets/images/github.svg b/app/assets/images/github.svg
new file mode 100644 (file)
index 0000000..79fa0cb
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs><style>.a{fill:#191717;}.b{fill:#fff;fill-rule:evenodd;}</style></defs><rect class="a" width="36" height="36"/><path class="b" d="M18,4a14,14,0,0,0-4.41,27.23c.7.13.93-.3.93-.66V28.23c-3.88.85-4.66-1.86-4.66-1.86a3.78,3.78,0,0,0-1.57-2.05c-1.26-.87.11-.85.11-.85a2.92,2.92,0,0,1,2.13,1.45,3,3,0,0,0,4,1.17h0a3,3,0,0,1,.89-1.87c-3.11-.35-6.37-1.55-6.37-6.91a5.43,5.43,0,0,1,1.43-3.72,5.06,5.06,0,0,1,.14-3.73s1.17-.37,3.85,1.43a13.2,13.2,0,0,1,7,0c2.67-1.85,3.85-1.46,3.85-1.46a5.09,5.09,0,0,1,.14,3.74,5.44,5.44,0,0,1,1.44,3.72c0,5.36-3.28,6.52-6.38,6.89a3.37,3.37,0,0,1,.94,2.56v3.83c0,.45.26.81.93.67A14,14,0,0,0,18,4Z"/></svg>
\ No newline at end of file
diff --git a/app/assets/images/google.png b/app/assets/images/google.png
deleted file mode 100644 (file)
index b273b6b..0000000
Binary files a/app/assets/images/google.png and /dev/null differ
diff --git a/app/assets/images/google.svg b/app/assets/images/google.svg
new file mode 100644 (file)
index 0000000..fecdd4d
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs><style>.a{fill:#fff;}.b{fill:#4285f4;}.b,.c,.d,.e{fill-rule:evenodd;}.c{fill:#34a853;}.d{fill:#fbbc05;}.e{fill:#ea4335;}.f{fill:none;}</style></defs><rect class="a" width="36" height="36"/><path class="b" d="M31.44,18.31a16.07,16.07,0,0,0-.26-2.85H18v5.41h7.54a6.44,6.44,0,0,1-2.8,4.22v3.5h4.52A13.63,13.63,0,0,0,31.44,18.3Z"/><path class="c" d="M18,32a13.28,13.28,0,0,0,9.26-3.4l-4.52-3.5a8.42,8.42,0,0,1-11.65-2.51,8.28,8.28,0,0,1-.92-1.92H5.51V24.3A14,14,0,0,0,18,32Z"/><path class="d" d="M10.17,20.66a8.22,8.22,0,0,1,0-5.32V11.71H5.5a14.06,14.06,0,0,0,0,12.58Z"/><path class="e" d="M18,9.56a7.63,7.63,0,0,1,5.36,2.1l4-4A13.45,13.45,0,0,0,18,4,14,14,0,0,0,5.49,11.71l4.67,3.63A8.33,8.33,0,0,1,18,9.51Z"/><path class="f" d="M4,4H32V32H4Z"/></svg>
\ No newline at end of file
diff --git a/app/assets/images/wikipedia.png b/app/assets/images/wikipedia.png
deleted file mode 100644 (file)
index 784c184..0000000
Binary files a/app/assets/images/wikipedia.png and /dev/null differ
diff --git a/app/assets/images/wikipedia.svg b/app/assets/images/wikipedia.svg
new file mode 100644 (file)
index 0000000..7330ec7
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs><style>.a{fill:#fff;}.b{fill-rule:evenodd;}</style></defs><rect class="a" width="36" height="36"/><path class="b" d="M33,8.82a.47.47,0,0,1-.1.3.31.31,0,0,1-.22.13,2.81,2.81,0,0,0-1.62.63,5.89,5.89,0,0,0-1.29,2.06L23,27.28c0,.15-.17.22-.37.22a.41.41,0,0,1-.38-.22l-3.82-8-4.39,8a.41.41,0,0,1-.37.22.37.37,0,0,1-.39-.22L6.55,11.94a5.41,5.41,0,0,0-1.32-2,3.6,3.6,0,0,0-1.93-.7.27.27,0,0,1-.21-.12A.38.38,0,0,1,3,8.88c0-.25.07-.38.21-.38.6,0,1.22,0,1.87.08s1.18.08,1.71.08,1.19,0,1.93-.08,1.45-.08,2-.08c.14,0,.21.13.21.38s0,.37-.13.37a2.71,2.71,0,0,0-1.41.45,1.22,1.22,0,0,0-.51,1,2.11,2.11,0,0,0,.21.8L14.67,24l3.14-5.93-2.93-6.13a7.84,7.84,0,0,0-1.29-2.11,2.56,2.56,0,0,0-1.54-.58.24.24,0,0,1-.18-.12.44.44,0,0,1-.08-.25c0-.25.06-.38.18-.38a16.22,16.22,0,0,1,1.64.08,12.58,12.58,0,0,0,1.54.08,16.71,16.71,0,0,0,1.69-.08c.62-.05,1.22-.08,1.82-.08.14,0,.21.13.21.38s0,.37-.13.37c-1.19.08-1.79.42-1.79,1a3.21,3.21,0,0,0,.42,1.24l1.93,3.93,1.92-3.59a2.88,2.88,0,0,0,.41-1.28c0-.82-.6-1.26-1.79-1.31-.11,0-.16-.13-.16-.37a.48.48,0,0,1,.07-.26c.06-.08.11-.12.17-.12.42,0,.95,0,1.57.08s1.09.08,1.47.08.68,0,1.21-.07,1.25-.09,1.7-.09c.11,0,.16.11.16.32s-.1.43-.29.43a3.35,3.35,0,0,0-1.68.57,7.38,7.38,0,0,0-1.58,2.12l-2.56,4.75,3.47,7.07,5.12-11.92a3.2,3.2,0,0,0,.27-1.2c0-.87-.6-1.34-1.79-1.39-.11,0-.16-.13-.16-.37s.08-.38.24-.38c.44,0,.95,0,1.55.08A12.92,12.92,0,0,0,30,8.66a11.78,11.78,0,0,0,1.36-.08c.54-.05,1-.08,1.44-.08C32.94,8.5,33,8.61,33,8.82Z"/></svg>
\ No newline at end of file
diff --git a/app/assets/images/windowslive.png b/app/assets/images/windowslive.png
deleted file mode 100644 (file)
index 8df253c..0000000
Binary files a/app/assets/images/windowslive.png and /dev/null differ
diff --git a/app/assets/images/windowslive.svg b/app/assets/images/windowslive.svg
new file mode 100644 (file)
index 0000000..fdc0cbd
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs><style>.a{fill:#575352;}.b{fill:#f25022;}.c{fill:#7fba00;}.d{fill:#00a4ef;}.e{fill:#ffb900;}</style></defs><rect class="a" width="36" height="36"/><rect class="b" x="4" y="3.99" width="13.31" height="13.31"/><rect class="c" x="18.69" y="3.99" width="13.31" height="13.31"/><rect class="d" x="4" y="18.69" width="13.31" height="13.3"/><rect class="e" x="18.69" y="18.69" width="13.31" height="13.3"/></svg>
\ No newline at end of file
diff --git a/app/assets/images/wordpress.png b/app/assets/images/wordpress.png
deleted file mode 100644 (file)
index dd7147c..0000000
Binary files a/app/assets/images/wordpress.png and /dev/null differ
diff --git a/app/assets/images/wordpress.svg b/app/assets/images/wordpress.svg
new file mode 100644 (file)
index 0000000..d4ff7f0
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs><style>.a{fill:#32373c;}.b{fill:#fff;}</style></defs><rect class="a" width="36" height="36"/><path class="b" d="M6,18a12,12,0,0,0,6.76,10.8L7,13.12A11.89,11.89,0,0,0,6,18Zm20.09-.6a6.38,6.38,0,0,0-1-3.32,5.48,5.48,0,0,1-1.21-2.8,2.08,2.08,0,0,1,2-2.13h.16A12,12,0,0,0,9.16,9.9,12.18,12.18,0,0,0,8,11.41h.76c1.26,0,3.2-.16,3.2-.16a.49.49,0,0,1,.39.59.48.48,0,0,1-.32.37s-.65.08-1.37.12l4.37,13,2.63-7.88-1.88-5.11a7.37,7.37,0,0,1-1.25-.12.5.5,0,0,1-.3-.64.52.52,0,0,1,.38-.32s2,.16,3.15.16,3.2-.13,3.2-.13a.5.5,0,0,1,.39.59.48.48,0,0,1-.32.37s-.64.08-1.37.12L24,25.26l1.23-3.93A14,14,0,0,0,26.1,17.4Zm-7.89,1.65-3.6,10.47a12,12,0,0,0,7.37-.2l-.09-.16Zm10.34-6.81a10.32,10.32,0,0,1,.08,1.24,11.35,11.35,0,0,1-.91,4.3L24.05,28.34A12,12,0,0,0,28.55,12.24Z"/><path class="b" d="M32.49,18A14.49,14.49,0,1,1,18,3.51,14.49,14.49,0,0,1,32.49,18ZM18,4.38A13.62,13.62,0,1,0,31.62,18h0A13.62,13.62,0,0,0,18,4.38Z"/></svg>
\ No newline at end of file
diff --git a/app/assets/images/yahoo.png b/app/assets/images/yahoo.png
deleted file mode 100644 (file)
index 2a9c4a4..0000000
Binary files a/app/assets/images/yahoo.png and /dev/null differ
diff --git a/app/assets/images/yahoo.svg b/app/assets/images/yahoo.svg
new file mode 100644 (file)
index 0000000..b0bbdef
--- /dev/null
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 36 36"><defs><style>.a{fill:#6001d2;}.b{fill:#fff;fill-rule:evenodd;}</style></defs><rect class="a" width="36" height="36"/><path class="b" d="M16.55,12.38l-3,7.22-3-7.22h-5l5.53,12.4-2,4.47H14l7.36-16.87ZM22.37,19a3,3,0,0,0-3.12,2.9,2.89,2.89,0,0,0,3,2.8,3,3,0,0,0,3.12-2.9,2.87,2.87,0,0,0-3-2.8M25.86,6.85,20.93,17.91h5.51L31.37,6.85Z"/></svg>
\ No newline at end of file
diff --git a/app/assets/javascripts/edit/potlatch.js.erb b/app/assets/javascripts/edit/potlatch.js.erb
deleted file mode 100644 (file)
index d55d2ea..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-//= require swfobject
-
-$(document).ready(function () {
-  window.changesaved = true;
-
-  window.markChanged = function (saved) {
-    window.changesaved = saved;
-  }
-
-  $(window).on("beforeunload", function() {
-    if (!window.changesaved) {
-      return I18n.t("site.edit.potlatch_unsaved_changes");
-    }
-  });
-
-  window.updatelinks = function (lon, lat, zoom, layers, minlon, minlat, maxlon, maxlat, object) {
-    var hash = OSM.formatHash({ lon: lon, lat: lat, zoom: zoom });
-
-    if (hash !== location.hash) {
-      location.replace(hash);
-    }
-
-    updateLinks({ lon: lon, lat: lat }, zoom);
-  }
-
-  var potlatch = $("#potlatch"),
-      urlparams = OSM.params(),
-      potlatch_swf = <%= asset_path("potlatch/potlatch.swf").to_json %>,
-      install_swf = <%= asset_path("expressInstall.swf").to_json %>,
-      flashvars = {},
-      params = {},
-      attributes = {};
-
-  flashvars.winie = document.all && window.print ? true : false;
-  flashvars.token = potlatch.data("token");
-
-  if (potlatch.data("lat") && potlatch.data("lon")) {
-    flashvars.lat = potlatch.data("lat");
-    flashvars.long = potlatch.data("lon");
-    flashvars.scale = potlatch.data("zoom");
-  } else {
-    var mapParams = OSM.mapParams();
-
-    flashvars.lat = mapParams.lat;
-    flashvars.long = mapParams.lon;
-    flashvars.scale = mapParams.zoom || 17;
-  }
-
-  if (flashvars.scale < 11) flashvars.scale = 11;
-
-  if (urlparams.gpx) flashvars.gpx = urlparams.gpx;
-  if (urlparams.way) flashvars.way = urlparams.way;
-  if (urlparams.node) flashvars.node = urlparams.node;
-  if (urlparams.custombg) flashvars.custombg = urlparams.custombg;
-
-  attributes.id = "potlatch";
-  attributes.bgcolor = "#FFFFFF";
-
-  swfobject.embedSWF(potlatch_swf, "potlatch", "100%", "100%", "6",
-                     install_swf, flashvars, params, attributes);
-});
diff --git a/app/assets/javascripts/edit/potlatch2.js.erb b/app/assets/javascripts/edit/potlatch2.js.erb
deleted file mode 100644 (file)
index d5c6ecd..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-//= require swfobject
-
-$(document).ready(function () {
-  window.changesaved = true;
-
-  window.markChanged = function (saved) {
-    window.changesaved = saved;
-  }
-
-  $(window).on("beforeunload", function() {
-    if (!window.changesaved) {
-      return I18n.t("site.edit.potlatch2_unsaved_changes");
-    }
-  });
-
-  window.mapMoved = $.throttle(250, function(lon, lat, zoom) {
-    var hash = OSM.formatHash({ lon: lon, lat: lat, zoom: zoom });
-
-    if (hash !== location.hash) {
-      location.replace(hash);
-    }
-
-    updateLinks({ lon: lon, lat: lat }, zoom);
-  });
-
-  var potlatch = $("#potlatch"),
-      urlparams = OSM.params(),
-      potlatch_swf = <%= asset_path("potlatch2.swf").to_json %>,
-      install_swf = <%= asset_path("expressInstall.swf").to_json %>,
-      flashvars = {},
-      params = {};
-      attributes = {};
-
-  if (potlatch.data("lat") && potlatch.data("lon")) {
-    flashvars.lat = potlatch.data("lat");
-    flashvars.lon = potlatch.data("lon");
-    flashvars.zoom = potlatch.data("zoom");
-  } else {
-    var mapParams = OSM.mapParams();
-
-    flashvars.lat = mapParams.lat;
-    flashvars.lon = mapParams.lon;
-    flashvars.zoom = mapParams.zoom || 17;
-  }
-  
-  if (potlatch.data("token")) {
-    flashvars.oauth_token = potlatch.data("token");
-    flashvars.oauth_token_secret = potlatch.data("token-secret");
-    flashvars.oauth_consumer_key = potlatch.data("consumer-key");
-    flashvars.oauth_consumer_secret = potlatch.data("consumer-secret");
-  } else {
-    alert(I18n.t("site.edit.potlatch2_not_configured"));
-  }
-
-  flashvars.assets = <%= asset_path("potlatch2/assets.zip").to_json %>;
-  flashvars.font_library = <%= asset_path("potlatch2/FontLibrary.swf").to_json %>;
-  flashvars.locale = potlatch.data("locale");
-  flashvars.locale_paths = potlatch.data("locale") + "=" + potlatch.data("locale-path");
-  flashvars.intro_image = <%= asset_path("help/introduction.jpg").to_json %>;
-  flashvars.intro_video = <%= asset_path("help/introduction.mp4").to_json %>;
-  if (urlparams.gpx) flashvars.gpx = urlparams.gpx;
-  if (urlparams.tileurl) flashvars.tileurl = urlparams.tileurl;
-  flashvars.api = location.protocol + "//" + location.host + "/api/" + OSM.API_VERSION + "/";
-  flashvars.policy = location.protocol + "//" + location.host + "/api/crossdomain.xml";
-  flashvars.connection = "XML";
-  flashvars.show_help = "once";
-  flashvars.user_check = "warn";
-  flashvars.maximise_function = "maximiseMap";
-  flashvars.minimise_function = "minimiseMap";
-  flashvars.move_function = "mapMoved";
-
-  params.base = "/potlatch2";
-
-  attributes.id = "potlatch";
-  attributes.bgcolor = "#FFFFFF";
-
-  swfobject.embedSWF(potlatch_swf, "potlatch", "100%", "100%", "10.1.102",
-                     install_swf, flashvars, params, attributes);
-
-  if (flashvars.lat && flashvars.lon) {
-    updateLinks({ lon: flashvars.lon, lat: flashvars.lat }, flashvars.scale);
-  }
-});
index 889a39f864a80aba8061bfa8787b66e2c95dd138..ac18da06f7fd18a5109bb30fef0820eaf0799d0d 100644 (file)
@@ -8,7 +8,7 @@ document.addEventListener("DOMContentLoaded", function () {
   if (typeof iD === "undefined" || !iD.utilDetect().support) {
     container.innerHTML = "This editor is supported " +
       "in Firefox, Chrome, Safari, Opera, Edge, and Internet Explorer 11. " +
-      "Please upgrade your browser or use Potlatch 2 to edit the map.";
+      "Please upgrade your browser or use JOSM to edit the map.";
     container.className = "unsupported";
   } else {
     var id = iD.coreContext()
index 8aee535af1ae444704bcd1ca5f78051fe46b83ad..0998b94a92daad2661f2f5ecf2bfd706c9908173 100644 (file)
@@ -1273,16 +1273,10 @@ tr.turn:hover {
   }
 }
 
-.pagination {
-  padding-top: $lineheight;
-}
-
 /* Rules for the diary entry page */
 
 .diary_entries {
   #map {
-    position: relative;
-    width: 90%;
     height: 400px;
     border: 1px solid $grey;
     display: none;
@@ -1324,7 +1318,7 @@ tr.turn:hover {
 
 
 .diary-subscribe-buttons {
-  position:relative;
+  position: relative;
   top: -30px;
   left: 130px;
 }
@@ -1333,11 +1327,11 @@ tr.turn:hover {
 
 #login_auth_buttons {
   margin-bottom: 0;
-}
 
-#login_auth_buttons li {
-  float: left;
-  padding: $lineheight/4 $lineheight/2;
+  li {
+    float: left;
+    padding: $lineheight/4 $lineheight/2;
+  }
 }
 
 /* Rules for the account confirmation page */
@@ -1978,80 +1972,82 @@ div.secondary-actions {
 
 /* Rules for rich text editors */
 
-input.richtext_title[type="text"] {
-  width: 50%;
-  width: calc(100% - 235px);
-
-  @media only screen and (max-width:768px) {
-    width: 100%;
-  }
-}
-
-.richtext_container {
-  margin-bottom: $lineheight;
-
-  .richtext_content {
+.standard-form {
+  input.richtext_title[type="text"] {
     width: 50%;
     width: calc(100% - 235px);
-    display: inline-block;
-    vertical-align: top;
 
     @media only screen and (max-width:768px) {
       width: 100%;
     }
+  }
 
-    .richtext_preview {
+  .richtext_container {
+    margin-bottom: $lineheight;
+
+    .richtext_content {
+      width: 50%;
+      width: calc(100% - 235px);
       display: inline-block;
-      padding: $lineheight;
-      background-color: $offwhite;
-      overflow-x: auto;
+      vertical-align: top;
 
-      &.loading {
-        background-image: image-url("loading.gif");
-        background-repeat: no-repeat;
-        background-position: center;
+      @media only screen and (max-width:768px) {
+        width: 100%;
       }
 
-      > :first-child {
-        margin-top: 0px;
-      }
-    }
-  }
+      .richtext_preview {
+        display: inline-block;
+        padding: $lineheight;
+        background-color: $offwhite;
+        overflow-x: auto;
 
-  .richtext_help {
-    display: inline-block;
-    vertical-align: top;
-    margin-left: 15px;
-    background-color: $offwhite;
-    padding: $lineheight/2;
-    width: 220px;
-
-    ul {
-      margin-bottom: 0;
-    }
+        &.loading {
+          background-image: image-url("loading.gif");
+          background-repeat: no-repeat;
+          background-position: center;
+        }
 
-    h4.heading, li {
-      border-bottom: 1px solid $grey;
-      margin-bottom: $lineheight/4;
-      padding-bottom: $lineheight/4;
+        > :first-child {
+          margin-top: 0px;
+        }
+      }
     }
 
-    li h4, li span, li p {
+    .richtext_help {
       display: inline-block;
       vertical-align: top;
-      font-size: 11px;
-    }
+      margin-left: 15px;
+      background-color: $offwhite;
+      padding: $lineheight/2;
+      width: 220px;
 
-    li h4 {
-      width: 40%;
-      margin: 0;
-    }
+      ul {
+        margin-bottom: 0;
+      }
 
-    li span, li p {
-      width: 50%;
-      margin-left: $lineheight/2;
-      margin-bottom: $lineheight/4;
-      white-space: nowrap;
+      h4.heading, li {
+        border-bottom: 1px solid $grey;
+        margin-bottom: $lineheight/4;
+        padding-bottom: $lineheight/4;
+      }
+
+      li h4, li span, li p {
+        display: inline-block;
+        vertical-align: top;
+        font-size: 11px;
+      }
+
+      li h4 {
+        width: 40%;
+        margin: 0;
+      }
+
+      li span, li p {
+        width: 50%;
+        margin-left: $lineheight/2;
+        margin-bottom: $lineheight/4;
+        white-space: nowrap;
+      }
     }
   }
 }
diff --git a/app/controllers/api/amf_controller.rb b/app/controllers/api/amf_controller.rb
deleted file mode 100644 (file)
index 5d45eb0..0000000
+++ /dev/null
@@ -1,999 +0,0 @@
-# amf_controller is a semi-standalone API for Flash clients, particularly
-# Potlatch. All interaction between Potlatch (as a .SWF application) and the
-# OSM database takes place using this controller. Messages are
-# encoded in the Actionscript Message Format (AMF).
-#
-# Helper functions are in /lib/potlatch.rb
-#
-# Author::  editions Systeme D / Richard Fairhurst 2004-2008
-# Licence:: public domain.
-#
-# == General structure
-#
-# Apart from the amf_read and amf_write methods (which distribute the requests
-# from the AMF message), each method generally takes arguments in the order
-# they were sent by the Potlatch SWF. Do not assume typing has been preserved.
-# Methods all return an array to the SWF.
-#
-# == API 0.6
-#
-# Note that this requires a patched version of composite_primary_keys 1.1.0
-# (see http://groups.google.com/group/compositekeys/t/a00e7562b677e193)
-# if you are to run with POTLATCH_USE_SQL=false .
-#
-# == Debugging
-#
-# Any method that returns a status code (0 for ok) can also send:
-# return(-1,"message")        <-- just puts up a dialogue
-# return(-2,"message")        <-- also asks the user to e-mail me
-# return(-3,["type",v],id)    <-- version conflict
-# return(-4,"type",id)        <-- object not found
-# -5 indicates the method wasn't called (due to a previous error)
-#
-# To write to the Rails log, use logger.info("message").
-
-# Remaining issues:
-# * version conflict when POIs and ways are reverted
-
-module Api
-  class AmfController < ApiController
-    include Potlatch
-
-    before_action :check_api_writable
-
-    # AMF Controller implements its own authentication and authorization checks
-    # completely independently of the rest of the codebase, so best just to let
-    # it keep doing its own thing.
-    skip_authorization_check
-
-    # Main AMF handlers: process the raw AMF string (using AMF library) and
-    # calls each action (private method) accordingly.
-
-    def amf_read
-      self.status = :ok
-      self.content_type = Mime[:amf]
-      self.response_body = Dispatcher.new(request.raw_post) do |message, *args|
-        logger.info("Executing AMF #{message}(#{args.join(',')})")
-
-        case message
-        when "getpresets" then        result = getpresets(*args)
-        when "whichways" then         result = whichways(*args)
-        when "whichways_deleted" then result = whichways_deleted(*args)
-        when "getway" then            result = getway(args[0].to_i)
-        when "getrelation" then       result = getrelation(args[0].to_i)
-        when "getway_old" then        result = getway_old(args[0].to_i, args[1])
-        when "getway_history" then    result = getway_history(args[0].to_i)
-        when "getnode_history" then   result = getnode_history(args[0].to_i)
-        when "findgpx" then           result = findgpx(*args)
-        when "findrelations" then     result = findrelations(*args)
-        when "getpoi" then            result = getpoi(*args)
-        end
-
-        result
-      end
-    end
-
-    def amf_write
-      renumberednodes = {}              # Shared across repeated putways
-      renumberedways = {}               # Shared across repeated putways
-      err = false                       # Abort batch on error
-
-      self.status = :ok
-      self.content_type = Mime[:amf]
-      self.response_body = Dispatcher.new(request.raw_post) do |message, *args|
-        logger.info("Executing AMF #{message}")
-
-        if err
-          result = [-5, nil]
-        else
-          case message
-          when "putway"
-            orn = renumberednodes.dup
-            result = putway(renumberednodes, *args)
-            result[4] = renumberednodes.reject { |k, _v| orn.key?(k) }
-            renumberedways[result[2]] = result[3] if result[0].zero? && result[2] != result[3]
-          when "putrelation"
-            result = putrelation(renumberednodes, renumberedways, *args)
-          when "deleteway"
-            result = deleteway(*args)
-          when "putpoi"
-            result = putpoi(*args)
-            renumberednodes[result[2]] = result[3] if result[0].zero? && result[2] != result[3]
-          when "startchangeset"
-            result = startchangeset(*args)
-          end
-
-          err = true if result[0] == -3 # If a conflict is detected, don't execute any more writes
-        end
-
-        result
-      end
-    end
-
-    private
-
-    def amf_handle_error(call, rootobj, rootid)
-      yield
-    rescue OSM::APIAlreadyDeletedError => e
-      [-4, e.object, e.object_id]
-    rescue OSM::APIVersionMismatchError => e
-      [-3, [rootobj, rootid], [e.type.downcase, e.id, e.latest]]
-    rescue OSM::APIUserChangesetMismatchError => e
-      [-2, e.to_s]
-    rescue OSM::APIBadBoundingBox => e
-      [-2, "Sorry - I can't get the map for that area. The server said: #{e}"]
-    rescue OSM::APIError => e
-      [-1, e.to_s]
-    rescue StandardError => e
-      [-2, "An unusual error happened (in #{call}). The server said: #{e}"]
-    end
-
-    def amf_handle_error_with_timeout(call, rootobj, rootid, &block)
-      amf_handle_error(call, rootobj, rootid) do
-        OSM::Timer.timeout(Settings.api_timeout, OSM::APITimeoutError, &block)
-      end
-    end
-
-    # Start new changeset
-    # Returns success_code,success_message,changeset id
-
-    def startchangeset(usertoken, cstags, closeid, closecomment, opennew)
-      amf_handle_error("'startchangeset'", nil, nil) do
-        user = getuser(usertoken)
-        return -1, "You are not logged in, so Potlatch can't write any changes to the database." unless user
-        return -1, t("application.setup_user_auth.blocked") if user.blocks.active.exists?
-        return -1, "You must accept the contributor terms before you can edit." if user.terms_agreed.nil?
-
-        if cstags
-          return -1, "One of the tags is invalid. Linux users may need to upgrade to Flash Player 10.1." unless tags_ok(cstags)
-
-          cstags = strip_non_xml_chars cstags
-        end
-
-        # close previous changeset and add comment
-        if closeid
-          cs = Changeset.find(closeid.to_i)
-          cs.set_closed_time_now
-          if cs.user_id != user.id
-            raise OSM::APIUserChangesetMismatchError
-          elsif closecomment.empty?
-            cs.save!
-          else
-            cs.tags["comment"] = closecomment
-            # in case closecomment has chars not allowed in xml
-            cs.tags = strip_non_xml_chars cs.tags
-            cs.save_with_tags!
-          end
-        end
-
-        # open a new changeset
-        if opennew.nonzero?
-          cs = Changeset.new
-          cs.tags = cstags
-          cs.user_id = user.id
-          unless closecomment.empty?
-            cs.tags["comment"] = closecomment
-            # in case closecomment has chars not allowed in xml
-            cs.tags = strip_non_xml_chars cs.tags
-          end
-          # smsm1 doesn't like the next two lines and thinks they need to be abstracted to the model more/better
-          cs.created_at = Time.now.getutc
-          cs.closed_at = cs.created_at + Changeset::IDLE_TIMEOUT
-          cs.save_with_tags!
-          return [0, "", cs.id]
-        else
-          return [0, "", nil]
-        end
-      end
-    end
-
-    # Return presets (default tags, localisation etc.):
-    # uses POTLATCH_PRESETS global, set up in OSM::Potlatch.
-
-    def getpresets(usertoken, _lang)
-      user = getuser(usertoken)
-
-      langs = if user && !user.languages.empty?
-                Locale.list(user.languages)
-              else
-                Locale.list(http_accept_language.user_preferred_languages)
-              end
-
-      lang = getlocales.preferred(langs)
-      (real_lang, localised) = getlocalized(lang.to_s)
-
-      # Tell Potlatch what language it's using
-      localised["__potlatch_locale"] = real_lang
-
-      # Get help from i18n but delete it so we won't pass it around
-      # twice for nothing
-      help = localised["help_html"]
-      localised.delete("help_html")
-
-      # Populate icon names
-      POTLATCH_PRESETS[10].each do |id|
-        POTLATCH_PRESETS[11][id] = localised["preset_icon_#{id}"]
-        localised.delete("preset_icon_#{id}")
-      end
-
-      POTLATCH_PRESETS + [localised, help]
-    end
-
-    def getlocalized(lang)
-      # What we end up actually using. Reported in Potlatch's created_by=* string
-      loaded_lang = "en"
-
-      # Load English defaults
-      en = YAML.safe_load(File.open(Rails.root.join("config/potlatch/locales/en.yml")))["en"]
-
-      if lang == "en"
-        [loaded_lang, en]
-      else
-        # Use English as a fallback
-        begin
-          other = YAML.safe_load(File.open(Rails.root.join("config/potlatch/locales/#{lang}.yml")))[lang]
-          loaded_lang = lang
-        rescue StandardError
-          other = en
-        end
-
-        # We have to return a flat list and some of the keys won't be
-        # translated (probably)
-        [loaded_lang, en.merge(other)]
-      end
-    end
-
-    ##
-    # Find all the ways, POI nodes (i.e. not part of ways), and relations
-    # in a given bounding box. Nodes are returned in full; ways and relations
-    # are IDs only.
-    #
-    # return is of the form:
-    # [success_code, success_message,
-    #  [[way_id, way_version], ...],
-    #  [[node_id, lat, lon, [tags, ...], node_version], ...],
-    #  [[rel_id, rel_version], ...]]
-    # where the ways are any visible ways which refer to any visible
-    # nodes in the bbox, nodes are any visible nodes in the bbox but not
-    # used in any way, rel is any relation which refers to either a way
-    # or node that we're returning.
-    def whichways(xmin, ymin, xmax, ymax)
-      amf_handle_error_with_timeout("'whichways'", nil, nil) do
-        enlarge = [(xmax - xmin) / 8, 0.01].min
-        xmin -= enlarge
-        ymin -= enlarge
-        xmax += enlarge
-        ymax += enlarge
-
-        # check boundary is sane and area within defined
-        # see /config/application.yml
-        bbox = BoundingBox.new(xmin, ymin, xmax, ymax)
-        bbox.check_boundaries
-        bbox.check_size
-
-        if POTLATCH_USE_SQL
-          ways = sql_find_ways_in_area(bbox)
-          points = sql_find_pois_in_area(bbox)
-          relations = sql_find_relations_in_area_and_ways(bbox, ways.collect { |x| x[0] })
-        else
-          # find the way ids in an area
-          nodes_in_area = Node.bbox(bbox).visible.includes(:ways)
-          ways = nodes_in_area.inject([]) do |sum, node|
-            visible_ways = node.ways.select(&:visible?)
-            sum + visible_ways.collect { |w| [w.id, w.version] }
-          end.uniq
-          ways.delete([])
-
-          # find the node ids in an area that aren't part of ways
-          nodes_not_used_in_area = nodes_in_area.select { |node| node.ways.empty? }
-          points = nodes_not_used_in_area.collect { |n| [n.id, n.lon, n.lat, n.tags, n.version] }.uniq
-
-          # find the relations used by those nodes and ways
-          relations = Relation.nodes(nodes_in_area.collect(&:id)).visible +
-                      Relation.ways(ways.collect { |w| w[0] }).visible
-          relations = relations.collect { |relation| [relation.id, relation.version] }.uniq
-        end
-
-        [0, "", ways, points, relations]
-      end
-    end
-
-    # Find deleted ways in current bounding box (similar to whichways, but ways
-    # with a deleted node only - not POIs or relations).
-
-    def whichways_deleted(xmin, ymin, xmax, ymax)
-      amf_handle_error_with_timeout("'whichways_deleted'", nil, nil) do
-        enlarge = [(xmax - xmin) / 8, 0.01].min
-        xmin -= enlarge
-        ymin -= enlarge
-        xmax += enlarge
-        ymax += enlarge
-
-        # check boundary is sane and area within defined
-        # see /config/application.yml
-        bbox = BoundingBox.new(xmin, ymin, xmax, ymax)
-        bbox.check_boundaries
-        bbox.check_size
-
-        nodes_in_area = Node.bbox(bbox).joins(:ways_via_history).where(:current_ways => { :visible => false })
-        way_ids = nodes_in_area.collect { |node| node.ways_via_history.invisible.collect(&:id) }.flatten.uniq
-
-        [0, "", way_ids]
-      end
-    end
-
-    # Get a way including nodes and tags.
-    # Returns the way id, a Potlatch-style array of points, a hash of tags, the version number, and the user ID.
-
-    def getway(wayid)
-      amf_handle_error_with_timeout("'getway' #{wayid}", "way", wayid) do
-        if POTLATCH_USE_SQL
-          points = sql_get_nodes_in_way(wayid)
-          tags = sql_get_tags_in_way(wayid)
-          version = sql_get_way_version(wayid)
-          uid = sql_get_way_user(wayid)
-        else
-          # Ideally we would do ":include => :nodes" here but if we do that
-          # then rails only seems to return the first copy of a node when a
-          # way includes a node more than once
-          way = Way.where(:id => wayid).first
-
-          # check case where way has been deleted or doesn't exist
-          return [-4, "way", wayid] if way.nil? || !way.visible
-
-          points = way.nodes.preload(:node_tags).collect do |node|
-            nodetags = node.tags
-            nodetags.delete("created_by")
-            [node.lon, node.lat, node.id, nodetags, node.version]
-          end
-          tags = way.tags
-          version = way.version
-          uid = way.changeset.user.id
-        end
-
-        [0, "", wayid, points, tags, version, uid]
-      end
-    end
-
-    # Get an old version of a way, and all constituent nodes.
-    #
-    # For undelete (version<0), always uses the most recent version of each node,
-    # even if it's moved.  For revert (version >= 0), uses the node in existence
-    # at the time, generating a new id if it's still visible and has been moved/
-    # retagged.
-    #
-    # Returns:
-    # 0. success code,
-    # 1. id,
-    # 2. array of points,
-    # 3. hash of tags,
-    # 4. version,
-    # 5. is this the current, visible version? (boolean)
-
-    def getway_old(id, timestamp)
-      amf_handle_error_with_timeout("'getway_old' #{id}, #{timestamp}", "way", id) do
-        if timestamp == ""
-          # undelete
-          old_way = OldWay.where(:visible => true, :way_id => id).unredacted.order("version DESC").first
-          points = old_way.get_nodes_undelete unless old_way.nil?
-        else
-          begin
-            # revert
-            timestamp = Time.zone.strptime(timestamp.to_s, "%d %b %Y, %H:%M:%S")
-            old_way = OldWay.where("way_id = ? AND timestamp <= ?", id, timestamp).unredacted.order("timestamp DESC").first
-            unless old_way.nil?
-              if old_way.visible
-                points = old_way.get_nodes_revert(timestamp)
-              else
-                return [-1, "Sorry, the way was deleted at that time - please revert to a previous version.", id]
-              end
-            end
-          rescue ArgumentError
-            # thrown by date parsing method. leave old_way as nil for
-            # the error handler below.
-            old_way = nil
-          end
-        end
-
-        if old_way.nil?
-          return [-1, "Sorry, the server could not find a way at that time.", id]
-        else
-          curway = Way.find(id)
-          old_way.tags["history"] = "Retrieved from v#{old_way.version}"
-          return [0, "", id, points, old_way.tags, curway.version, (curway.version == old_way.version && curway.visible)]
-        end
-      end
-    end
-
-    # Find history of a way.
-    # Returns 'way', id, and an array of previous versions:
-    # - formerly [old_way.version, old_way.timestamp.strftime("%d %b %Y, %H:%M"), old_way.visible ? 1 : 0, user, uid]
-    # - now [timestamp,user,uid]
-    #
-    # Heuristic: Find all nodes that have ever been part of the way;
-    # get a list of their revision dates; add revision dates of the way;
-    # sort and collapse list (to within 2 seconds); trim all dates before the
-    # start date of the way.
-
-    def getway_history(wayid)
-      revdates = []
-      revusers = {}
-      Way.find(wayid).old_ways.unredacted.collect do |a|
-        revdates.push(a.timestamp)
-        revusers[a.timestamp.to_i] = change_user(a) unless revusers.key?(a.timestamp.to_i)
-        a.nds.each do |n|
-          Node.find(n).old_nodes.unredacted.collect do |o|
-            revdates.push(o.timestamp)
-            revusers[o.timestamp.to_i] = change_user(o) unless revusers.key?(o.timestamp.to_i)
-          end
-        end
-      end
-      waycreated = revdates[0]
-      revdates.uniq!
-      revdates.sort!
-      revdates.reverse!
-
-      # Remove any dates (from nodes) before first revision date of way
-      revdates.delete_if { |d| d < waycreated }
-      # Remove any elements where 2 seconds doesn't elapse before next one
-      revdates.delete_if { |d| revdates.include?(d + 1) || revdates.include?(d + 2) }
-      # Collect all in one nested array
-      revdates.collect! { |d| [(d + 1).strftime("%d %b %Y, %H:%M:%S")] + revusers[d.to_i] }
-      revdates.uniq!
-
-      ["way", wayid, revdates]
-    rescue ActiveRecord::RecordNotFound
-      ["way", wayid, []]
-    end
-
-    # Find history of a node. Returns 'node', id, and an array of previous versions as above.
-
-    def getnode_history(nodeid)
-      history = Node.find(nodeid).old_nodes.unredacted.reverse.collect do |old_node|
-        [(old_node.timestamp + 1).strftime("%d %b %Y, %H:%M:%S")] + change_user(old_node)
-      end
-      ["node", nodeid, history]
-    rescue ActiveRecord::RecordNotFound
-      ["node", nodeid, []]
-    end
-
-    def change_user(obj)
-      user_object = obj.changeset.user
-      user = user_object.data_public? ? user_object.display_name : "anonymous"
-      uid  = user_object.data_public? ? user_object.id : 0
-      [user, uid]
-    end
-
-    # Find GPS traces with specified name/id.
-    # Returns array listing GPXs, each one comprising id, name and description.
-
-    def findgpx(searchterm, usertoken)
-      amf_handle_error_with_timeout("'findgpx'", nil, nil) do
-        user = getuser(usertoken)
-
-        return -1, "You must be logged in to search for GPX traces." unless user
-        return -1, t("application.setup_user_auth.blocked") if user.blocks.active.exists?
-
-        query = Trace.visible_to(user)
-        query = if searchterm.to_i.positive?
-                  query.where(:id => searchterm.to_i)
-                else
-                  query.where("MATCH(name) AGAINST (?)", searchterm).limit(21)
-                end
-        gpxs = query.collect do |gpx|
-          [gpx.id, gpx.name, gpx.description]
-        end
-        [0, "", gpxs]
-      end
-    end
-
-    # Get a relation with all tags and members.
-    # Returns:
-    # 0. success code?
-    # 1. object type?
-    # 2. relation id,
-    # 3. hash of tags,
-    # 4. list of members,
-    # 5. version.
-
-    def getrelation(relid)
-      amf_handle_error("'getrelation' #{relid}", "relation", relid) do
-        rel = Relation.where(:id => relid).first
-
-        return [-4, "relation", relid] if rel.nil? || !rel.visible
-
-        [0, "", relid, rel.tags, rel.members, rel.version]
-      end
-    end
-
-    # Find relations with specified name/id.
-    # Returns array of relations, each in same form as getrelation.
-
-    def findrelations(searchterm)
-      rels = []
-      if searchterm.to_i.positive?
-        rel = Relation.where(:id => searchterm.to_i).first
-        rels.push([rel.id, rel.tags, rel.members, rel.version]) if rel&.visible
-      else
-        RelationTag.where("v like ?", "%#{searchterm}%").limit(11).each do |t|
-          rels.push([t.relation.id, t.relation.tags, t.relation.members, t.relation.version]) if t.relation.visible
-        end
-      end
-      rels
-    end
-
-    # Save a relation.
-    # Returns
-    # 0. 0 (success),
-    # 1. original relation id (unchanged),
-    # 2. new relation id,
-    # 3. version.
-
-    def putrelation(renumberednodes, renumberedways, usertoken, changeset_id, version, relid, tags, members, visible)
-      amf_handle_error("'putrelation' #{relid}", "relation", relid) do
-        user = getuser(usertoken)
-
-        return -1, "You are not logged in, so the relation could not be saved." unless user
-        return -1, t("application.setup_user_auth.blocked") if user.blocks.active.exists?
-        return -1, "You must accept the contributor terms before you can edit." if user.terms_agreed.nil?
-
-        return -1, "One of the tags is invalid. Linux users may need to upgrade to Flash Player 10.1." unless tags_ok(tags)
-
-        tags = strip_non_xml_chars tags
-
-        relid = relid.to_i
-        visible = visible.to_i.nonzero?
-
-        new_relation = nil
-        relation = nil
-        Relation.transaction do
-          # create a new relation, or find the existing one
-          relation = Relation.find(relid) if relid.positive?
-          # We always need a new node, based on the data that has been sent to us
-          new_relation = Relation.new
-
-          # check the members are all positive, and correctly type
-          typedmembers = []
-          members.each do |m|
-            mid = m[1].to_i
-            if mid.negative?
-              mid = renumberednodes[mid] if m[0] == "Node"
-              mid = renumberedways[mid] if m[0] == "Way"
-            end
-            typedmembers << [m[0], mid, m[2].delete("\000-\037\ufffe\uffff", "^\011\012\015")] if mid
-          end
-
-          # assign new contents
-          new_relation.members = typedmembers
-          new_relation.tags = tags
-          new_relation.visible = visible
-          new_relation.changeset_id = changeset_id.to_i
-          new_relation.version = version
-
-          if relid <= 0
-            # We're creating the relation
-            new_relation.create_with_history(user)
-          elsif visible
-            # We're updating the relation
-            new_relation.id = relid
-            relation.update_from(new_relation, user)
-          else
-            # We're deleting the relation
-            new_relation.id = relid
-            relation.delete_with_history!(new_relation, user)
-          end
-        end
-
-        if relid <= 0
-          return [0, "", relid, new_relation.id, new_relation.version]
-        else
-          return [0, "", relid, relid, relation.version]
-        end
-      end
-    end
-
-    # Save a way to the database, including all nodes. Any nodes in the previous
-    # version and no longer used are deleted.
-    #
-    # Parameters:
-    # 0. hash of renumbered nodes (added by amf_controller)
-    # 1. current user token (for authentication)
-    # 2. current changeset
-    # 3. new way version
-    # 4. way ID
-    # 5. list of nodes in way
-    # 6. hash of way tags
-    # 7. array of nodes to change (each one is [lon,lat,id,version,tags]),
-    # 8. hash of nodes to delete (id->version).
-    #
-    # Returns:
-    # 0. '0' (code for success),
-    # 1. message,
-    # 2. original way id (unchanged),
-    # 3. new way id,
-    # 4. hash of renumbered nodes (old id=>new id),
-    # 5. way version,
-    # 6. hash of changed node versions (node=>version)
-    # 7. hash of deleted node versions (node=>version)
-
-    def putway(renumberednodes, usertoken, changeset_id, wayversion, originalway, pointlist, attributes, nodes, deletednodes)
-      amf_handle_error("'putway' #{originalway}", "way", originalway) do
-        # -- Initialise
-
-        user = getuser(usertoken)
-        return -1, "You are not logged in, so the way could not be saved." unless user
-        return -1, t("application.setup_user_auth.blocked") if user.blocks.active.exists?
-        return -1, "You must accept the contributor terms before you can edit." if user.terms_agreed.nil?
-
-        return -2, "Server error - way is only #{pointlist.length} points long." if pointlist.length < 2
-
-        return -1, "One of the tags is invalid. Linux users may need to upgrade to Flash Player 10.1." unless tags_ok(attributes)
-
-        attributes = strip_non_xml_chars attributes
-
-        originalway = originalway.to_i
-        pointlist.collect!(&:to_i)
-
-        way = nil # this is returned, so scope it outside the transaction
-        nodeversions = {}
-        Way.transaction do
-          # -- Update each changed node
-
-          nodes.each do |a|
-            lon = a[0].to_f
-            lat = a[1].to_f
-            id = a[2].to_i
-            version = a[3].to_i
-
-            return -2, "Server error - node with id 0 found in way #{originalway}." if id.zero?
-            return -2, "Server error - node with latitude -90 found in way #{originalway}." if lat == 90
-
-            id = renumberednodes[id] if renumberednodes[id]
-
-            node = Node.new
-            node.changeset_id = changeset_id.to_i
-            node.lat = lat
-            node.lon = lon
-            node.tags = a[4]
-
-            # fixup node tags in a way as well
-            return -1, "One of the tags is invalid. Linux users may need to upgrade to Flash Player 10.1." unless tags_ok(node.tags)
-
-            node.tags = strip_non_xml_chars node.tags
-
-            node.tags.delete("created_by")
-            node.version = version
-            if id <= 0
-              # We're creating the node
-              node.create_with_history(user)
-              renumberednodes[id] = node.id
-              nodeversions[node.id] = node.version
-            else
-              # We're updating an existing node
-              previous = Node.find(id)
-              node.id = id
-              previous.update_from(node, user)
-              nodeversions[previous.id] = previous.version
-            end
-          end
-
-          # -- Save revised way
-
-          pointlist.collect! do |a|
-            renumberednodes[a] || a
-          end
-          new_way = Way.new
-          new_way.tags = attributes
-          new_way.nds = pointlist
-          new_way.changeset_id = changeset_id.to_i
-          new_way.version = wayversion
-          if originalway <= 0
-            new_way.create_with_history(user)
-            way = new_way # so we can get way.id and way.version
-          else
-            way = Way.find(originalway)
-            if way.tags != attributes || way.nds != pointlist || !way.visible?
-              new_way.id = originalway
-              way.update_from(new_way, user)
-            end
-          end
-
-          # -- Delete unwanted nodes
-
-          deletednodes.each do |id, v|
-            node = Node.find(id.to_i)
-            new_node = Node.new
-            new_node.changeset_id = changeset_id.to_i
-            new_node.version = v.to_i
-            new_node.id = id.to_i
-            begin
-              node.delete_with_history!(new_node, user)
-            rescue OSM::APIPreconditionFailedError
-              # We don't do anything here as the node is being used elsewhere
-              # and we don't want to delete it
-            end
-          end
-        end
-
-        [0, "", originalway, way.id, renumberednodes, way.version, nodeversions, deletednodes]
-      end
-    end
-
-    # Save POI to the database.
-    # Refuses save if the node has since become part of a way.
-    # Returns array with:
-    # 0. 0 (success),
-    # 1. success message,
-    # 2. original node id (unchanged),
-    # 3. new node id,
-    # 4. version.
-
-    def putpoi(usertoken, changeset_id, version, id, lon, lat, tags, visible)
-      amf_handle_error("'putpoi' #{id}", "node", id) do
-        user = getuser(usertoken)
-        return -1, "You are not logged in, so the point could not be saved." unless user
-        return -1, t("application.setup_user_auth.blocked") if user.blocks.active.exists?
-        return -1, "You must accept the contributor terms before you can edit." if user.terms_agreed.nil?
-
-        return -1, "One of the tags is invalid. Linux users may need to upgrade to Flash Player 10.1." unless tags_ok(tags)
-
-        tags = strip_non_xml_chars tags
-
-        id = id.to_i
-        visible = (visible.to_i == 1)
-        node = nil
-        new_node = nil
-        Node.transaction do
-          if id.positive?
-            begin
-              node = Node.find(id)
-            rescue ActiveRecord::RecordNotFound
-              return [-4, "node", id]
-            end
-
-            return -1, "Point #{id} has since become part of a way, so you cannot save it as a POI.", id, id, version unless visible || node.ways.empty?
-          end
-          # We always need a new node, based on the data that has been sent to us
-          new_node = Node.new
-
-          new_node.changeset_id = changeset_id.to_i
-          new_node.version = version
-          new_node.lat = lat
-          new_node.lon = lon
-          new_node.tags = tags
-          if id <= 0
-            # We're creating the node
-            new_node.create_with_history(user)
-          elsif visible
-            # We're updating the node
-            new_node.id = id
-            node.update_from(new_node, user)
-          else
-            # We're deleting the node
-            new_node.id = id
-            node.delete_with_history!(new_node, user)
-          end
-        end
-
-        if id <= 0
-          return [0, "", id, new_node.id, new_node.version]
-        else
-          return [0, "", id, node.id, node.version]
-        end
-      end
-    end
-
-    # Read POI from database
-    # (only called on revert: POIs are usually read by whichways).
-    #
-    # Returns array of id, long, lat, hash of tags, (current) version.
-
-    def getpoi(id, timestamp)
-      amf_handle_error("'getpoi' #{id}", "node", id) do
-        id = id.to_i
-        n = Node.where(:id => id).first
-        if n
-          v = n.version
-          n = OldNode.where("node_id = ? AND timestamp <= ?", id, timestamp).unredacted.order("timestamp DESC").first unless timestamp == ""
-        end
-
-        if n
-          return [0, "", id, n.lon, n.lat, n.tags, v]
-        else
-          return [-4, "node", id]
-        end
-      end
-    end
-
-    # Delete way and all constituent nodes.
-    # Params:
-    # * The user token
-    # * the changeset id
-    # * the id of the way to change
-    # * the version of the way that was downloaded
-    # * a hash of the id and versions of all the nodes that are in the way, if any
-    # of the nodes have been changed by someone else then, there is a problem!
-    # Returns 0 (success), unchanged way id, new way version, new node versions.
-
-    def deleteway(usertoken, changeset_id, way_id, way_version, deletednodes)
-      amf_handle_error("'deleteway' #{way_id}", "way", way_id) do
-        user = getuser(usertoken)
-        return -1, "You are not logged in, so the way could not be deleted." unless user
-        return -1, t("application.setup_user_auth.blocked") if user.blocks.active.exists?
-        return -1, "You must accept the contributor terms before you can edit." if user.terms_agreed.nil?
-
-        way_id = way_id.to_i
-        nodeversions = {}
-        old_way = nil # returned, so scope it outside the transaction
-        # Need a transaction so that if one item fails to delete, the whole delete fails.
-        Way.transaction do
-          # -- Delete the way
-
-          old_way = Way.find(way_id)
-          delete_way = Way.new
-          delete_way.version = way_version
-          delete_way.changeset_id = changeset_id.to_i
-          delete_way.id = way_id
-          old_way.delete_with_history!(delete_way, user)
-
-          # -- Delete unwanted nodes
-
-          deletednodes.each do |id, v|
-            node = Node.find(id.to_i)
-            new_node = Node.new
-            new_node.changeset_id = changeset_id.to_i
-            new_node.version = v.to_i
-            new_node.id = id.to_i
-            begin
-              node.delete_with_history!(new_node, user)
-              nodeversions[node.id] = node.version
-            rescue OSM::APIPreconditionFailedError
-              # We don't do anything with the exception as the node is in use
-              # elsewhere and we don't want to delete it
-            end
-          end
-        end
-        [0, "", way_id, old_way.version, nodeversions]
-      end
-    end
-
-    # ====================================================================
-    # Support functions
-
-    # Authenticate token
-    # (can also be of form user:pass)
-    # When we are writing to the api, we need the actual user model,
-    # not just the id, hence this abstraction
-
-    def getuser(token)
-      if token =~ /^(.+):(.+)$/
-        User.authenticate(:username => Regexp.last_match(1), :password => Regexp.last_match(2))
-      else
-        User.authenticate(:token => token)
-      end
-    end
-
-    def getlocales
-      @getlocales ||= Locale.list(Dir.glob(Rails.root.join("config/potlatch/locales/*")).collect { |f| File.basename(f, ".yml") })
-    end
-
-    ##
-    # check that all key-value pairs are valid UTF-8.
-    def tags_ok(tags)
-      tags.each do |k, v|
-        return false unless UTF8.valid? k
-        return false unless UTF8.valid? v
-      end
-      true
-    end
-
-    ##
-    # strip characters which are invalid in XML documents from the strings
-    # in the +tags+ hash.
-    def strip_non_xml_chars(tags)
-      new_tags = {}
-      tags&.each do |k, v|
-        new_k = k.delete "\000-\037\ufffe\uffff", "^\011\012\015"
-        new_v = v.delete "\000-\037\ufffe\uffff", "^\011\012\015"
-        new_tags[new_k] = new_v
-      end
-      new_tags
-    end
-
-    # ====================================================================
-    # Alternative SQL queries for getway/whichways
-
-    def sql_find_ways_in_area(bbox)
-      sql = <<~SQL.squish
-        SELECT DISTINCT current_ways.id AS wayid,current_ways.version AS version
-          FROM current_way_nodes
-        INNER JOIN current_nodes ON current_nodes.id=current_way_nodes.node_id
-        INNER JOIN current_ways  ON current_ways.id =current_way_nodes.id
-           WHERE current_nodes.visible=TRUE
-           AND current_ways.visible=TRUE
-           AND #{OSM.sql_for_area(bbox, 'current_nodes.')}
-      SQL
-      ActiveRecord::Base.connection.select_all(sql).collect { |a| [a["wayid"].to_i, a["version"].to_i] }
-    end
-
-    def sql_find_pois_in_area(bbox)
-      pois = []
-      sql = <<~SQL.squish
-        SELECT current_nodes.id,current_nodes.latitude*0.0000001 AS lat,current_nodes.longitude*0.0000001 AS lon,current_nodes.version
-        FROM current_nodes
-         LEFT OUTER JOIN current_way_nodes cwn ON cwn.node_id=current_nodes.id
-         WHERE current_nodes.visible=TRUE
-         AND cwn.id IS NULL
-         AND #{OSM.sql_for_area(bbox, 'current_nodes.')}
-      SQL
-      ActiveRecord::Base.connection.select_all(sql).each do |row|
-        poitags = {}
-        ActiveRecord::Base.connection.select_all("SELECT k,v FROM current_node_tags WHERE id=#{row['id']}").each do |n|
-          poitags[n["k"]] = n["v"]
-        end
-        pois << [row["id"].to_i, row["lon"].to_f, row["lat"].to_f, poitags, row["version"].to_i]
-      end
-      pois
-    end
-
-    def sql_find_relations_in_area_and_ways(bbox, way_ids)
-      # ** It would be more Potlatchy to get relations for nodes within ways
-      #    during 'getway', not here
-      sql = <<~SQL.squish
-        SELECT DISTINCT cr.id AS relid,cr.version AS version
-        FROM current_relations cr
-        INNER JOIN current_relation_members crm ON crm.id=cr.id
-        INNER JOIN current_nodes cn ON crm.member_id=cn.id AND crm.member_type='Node'
-         WHERE #{OSM.sql_for_area(bbox, 'cn.')}
-      SQL
-      unless way_ids.empty?
-        sql += <<~SQL.squish
-          UNION
-           SELECT DISTINCT cr.id AS relid,cr.version AS version
-           FROM current_relations cr
-           INNER JOIN current_relation_members crm ON crm.id=cr.id
-            WHERE crm.member_type='Way'
-            AND crm.member_id IN (#{way_ids.join(',')})
-        SQL
-      end
-      ActiveRecord::Base.connection.select_all(sql).collect { |a| [a["relid"].to_i, a["version"].to_i] }
-    end
-
-    def sql_get_nodes_in_way(wayid)
-      points = []
-      sql = <<~SQL.squish
-        SELECT latitude*0.0000001 AS lat,longitude*0.0000001 AS lon,current_nodes.id,current_nodes.version
-        FROM current_way_nodes,current_nodes
-         WHERE current_way_nodes.id=#{wayid.to_i}
-         AND current_way_nodes.node_id=current_nodes.id
-         AND current_nodes.visible=TRUE
-        ORDER BY sequence_id
-      SQL
-      ActiveRecord::Base.connection.select_all(sql).each do |row|
-        nodetags = {}
-        ActiveRecord::Base.connection.select_all("SELECT k,v FROM current_node_tags WHERE id=#{row['id']}").each do |n|
-          nodetags[n["k"]] = n["v"]
-        end
-        nodetags.delete("created_by")
-        points << [row["lon"].to_f, row["lat"].to_f, row["id"].to_i, nodetags, row["version"].to_i]
-      end
-      points
-    end
-
-    def sql_get_tags_in_way(wayid)
-      tags = {}
-      ActiveRecord::Base.connection.select_all("SELECT k,v FROM current_way_tags WHERE id=#{wayid.to_i}").each do |row|
-        tags[row["k"]] = row["v"]
-      end
-      tags
-    end
-
-    def sql_get_way_version(wayid)
-      ActiveRecord::Base.connection.select_one("SELECT version FROM current_ways WHERE id=#{wayid.to_i}")["version"]
-    end
-
-    def sql_get_way_user(wayid)
-      ActiveRecord::Base.connection.select_one("SELECT user FROM current_ways,changesets WHERE current_ways.id=#{wayid.to_i} AND current_ways.changeset=changesets.id")["user"]
-    end
-  end
-end
index a236083db2813f09bab39b03bd7b7eb0ba629172..29a57570d154383dbbbf3381be8ba6a86508ea54 100644 (file)
@@ -319,9 +319,7 @@ module Api
       end
       # stupid Time seems to throw both of these for bad parsing, so
       # we have to catch both and ensure the correct code path is taken.
-    rescue ArgumentError => e
-      raise OSM::APIBadUserInput, e.message.to_s
-    rescue RuntimeError => e
+    rescue ArgumentError, RuntimeError => e
       raise OSM::APIBadUserInput, e.message.to_s
     end
 
index f7b812f7c6be5d6d86d842e6dfaf50c8e96a7fd9..b2d755fe6caeaefccfac88a7e94ddf569c6467b6 100644 (file)
@@ -33,7 +33,7 @@ module Api
       # get all the points
       ordered_points = Tracepoint.bbox(bbox).joins(:trace).where(:gpx_files => { :visibility => %w[trackable identifiable] }).order("gpx_id DESC, trackid ASC, timestamp ASC")
       unordered_points = Tracepoint.bbox(bbox).joins(:trace).where(:gpx_files => { :visibility => %w[public private] }).order("gps_points.latitude", "gps_points.longitude", "gps_points.timestamp")
-      points = ordered_points.union_all(unordered_points).offset(offset).limit(Settings.tracepoints_per_page)
+      points = ordered_points.union_all(unordered_points).offset(offset).limit(Settings.tracepoints_per_page).preload(:trace)
 
       doc = XML::Document.new
       doc.encoding = XML::Encoding::UTF_8
@@ -53,24 +53,22 @@ module Api
       trkseg = nil
       anon_track = nil
       anon_trkseg = nil
-      gpx_file = nil
       timestamps = false
 
       points.each do |point|
         if gpx_id != point.gpx_id
           gpx_id = point.gpx_id
           trackid = -1
-          gpx_file = Trace.find(gpx_id)
 
-          if gpx_file.trackable?
+          if point.trace.trackable?
             track = XML::Node.new "trk"
             doc.root << track
             timestamps = true
 
-            if gpx_file.identifiable?
-              track << (XML::Node.new("name") << gpx_file.name)
-              track << (XML::Node.new("desc") << gpx_file.description)
-              track << (XML::Node.new("url") << url_for(:controller => "/traces", :action => "show", :display_name => gpx_file.user.display_name, :id => gpx_file.id))
+            if point.trace.identifiable?
+              track << (XML::Node.new("name") << point.trace.name)
+              track << (XML::Node.new("desc") << point.trace.description)
+              track << (XML::Node.new("url") << url_for(:controller => "/traces", :action => "show", :display_name => point.trace.user.display_name, :id => point.trace.id))
             end
           else
             # use the anonymous track segment if the user hasn't allowed
@@ -85,7 +83,7 @@ module Api
         end
 
         if trackid != point.trackid
-          if gpx_file.trackable?
+          if point.trace.trackable?
             trkseg = XML::Node.new "trkseg"
             track << trkseg
             trackid = point.trackid
index 9f2d79eaa7bf5845b4c1cb78332e11b9798170b9..586b181165941e2fb887bbe6ff1b6ab2e2b5f4dc 100644 (file)
@@ -1,4 +1,6 @@
 class ApplicationController < ActionController::Base
+  require "timeout"
+
   include SessionPersistence
 
   protect_from_forgery :with => :exception
@@ -229,7 +231,7 @@ class ApplicationController < ActionController::Base
   ##
   # wrap an api call in a timeout
   def api_call_timeout(&block)
-    OSM::Timer.timeout(Settings.api_timeout, Timeout::Error, &block)
+    Timeout.timeout(Settings.api_timeout, Timeout::Error, &block)
   rescue Timeout::Error
     raise OSM::APITimeoutError
   end
@@ -237,7 +239,7 @@ class ApplicationController < ActionController::Base
   ##
   # wrap a web page in a timeout
   def web_timeout(&block)
-    OSM::Timer.timeout(Settings.web_timeout, Timeout::Error, &block)
+    Timeout.timeout(Settings.web_timeout, Timeout::Error, &block)
   rescue ActionView::Template::Error => e
     e = e.cause
 
index 7d05b6765b3be1a965dd6f1d7a911fec06151b74..bc1220af8faa767a16a3f464b9792f5f24052b24 100644 (file)
@@ -319,11 +319,11 @@ class GeocoderController < ApplicationController
   def nsew_to_decdeg(captures)
     begin
       Float(captures[0])
-      lat = !captures[2].casecmp("s").zero? ? captures[0].to_f : -captures[0].to_f
-      lon = !captures[5].casecmp("w").zero? ? captures[3].to_f : -captures[3].to_f
+      lat = captures[2].casecmp("s").zero? ? -captures[0].to_f : captures[0].to_f
+      lon = captures[5].casecmp("w").zero? ? -captures[3].to_f : captures[3].to_f
     rescue StandardError
-      lat = !captures[0].casecmp("s").zero? ? captures[1].to_f : -captures[1].to_f
-      lon = !captures[3].casecmp("w").zero? ? captures[4].to_f : -captures[4].to_f
+      lat = captures[0].casecmp("s").zero? ? -captures[1].to_f : captures[1].to_f
+      lon = captures[3].casecmp("w").zero? ? -captures[4].to_f : captures[4].to_f
     end
     { :lat => lat, :lon => lon }
   end
@@ -331,11 +331,11 @@ class GeocoderController < ApplicationController
   def ddm_to_decdeg(captures)
     begin
       Float(captures[0])
-      lat = !captures[3].casecmp("s").zero? ? captures[0].to_f + captures[1].to_f / 60 : -(captures[0].to_f + captures[1].to_f / 60)
-      lon = !captures[7].casecmp("w").zero? ? captures[4].to_f + captures[5].to_f / 60 : -(captures[4].to_f + captures[5].to_f / 60)
+      lat = captures[3].casecmp("s").zero? ? -(captures[0].to_f + captures[1].to_f / 60) : captures[0].to_f + captures[1].to_f / 60
+      lon = captures[7].casecmp("w").zero? ? -(captures[4].to_f + captures[5].to_f / 60) : captures[4].to_f + captures[5].to_f / 60
     rescue StandardError
-      lat = !captures[0].casecmp("s").zero? ? captures[1].to_f + captures[2].to_f / 60 : -(captures[1].to_f + captures[2].to_f / 60)
-      lon = !captures[4].casecmp("w").zero? ? captures[5].to_f + captures[6].to_f / 60 : -(captures[5].to_f + captures[6].to_f / 60)
+      lat = captures[0].casecmp("s").zero? ? -(captures[1].to_f + captures[2].to_f / 60) : captures[1].to_f + captures[2].to_f / 60
+      lon = captures[4].casecmp("w").zero? ? -(captures[5].to_f + captures[6].to_f / 60) : captures[5].to_f + captures[6].to_f / 60
     end
     { :lat => lat, :lon => lon }
   end
@@ -343,11 +343,11 @@ class GeocoderController < ApplicationController
   def dms_to_decdeg(captures)
     begin
       Float(captures[0])
-      lat = !captures[4].casecmp("s").zero? ? captures[0].to_f + (captures[1].to_f + captures[2].to_f / 60) / 60 : -(captures[0].to_f + (captures[1].to_f + captures[2].to_f / 60) / 60)
-      lon = !captures[9].casecmp("w").zero? ? captures[5].to_f + (captures[6].to_f + captures[7].to_f / 60) / 60 : -(captures[5].to_f + (captures[6].to_f + captures[7].to_f / 60) / 60)
+      lat = captures[4].casecmp("s").zero? ? -(captures[0].to_f + (captures[1].to_f + captures[2].to_f / 60) / 60) : captures[0].to_f + (captures[1].to_f + captures[2].to_f / 60) / 60
+      lon = captures[9].casecmp("w").zero? ? -(captures[5].to_f + (captures[6].to_f + captures[7].to_f / 60) / 60) : captures[5].to_f + (captures[6].to_f + captures[7].to_f / 60) / 60
     rescue StandardError
-      lat = !captures[0].casecmp("s").zero? ? captures[1].to_f + (captures[2].to_f + captures[3].to_f / 60) / 60 : -(captures[1].to_f + (captures[2].to_f + captures[3].to_f / 60) / 60)
-      lon = !captures[5].casecmp("w").zero? ? captures[6].to_f + (captures[7].to_f + captures[8].to_f / 60) / 60 : -(captures[6].to_f + (captures[7].to_f + captures[8].to_f / 60) / 60)
+      lat = captures[0].casecmp("s").zero? ? -(captures[1].to_f + (captures[2].to_f + captures[3].to_f / 60) / 60) : captures[1].to_f + (captures[2].to_f + captures[3].to_f / 60) / 60
+      lon = captures[5].casecmp("w").zero? ? -(captures[6].to_f + (captures[7].to_f + captures[8].to_f / 60) / 60) : captures[6].to_f + (captures[7].to_f + captures[8].to_f / 60) / 60
     end
     { :lat => lat, :lon => lon }
   end
index 45a41058c04f77cc785775060e30a4663777a9d4..30425bd429babe42827509eb30c331e00a4cc3d1 100644 (file)
@@ -23,7 +23,7 @@ class RedactionsController < ApplicationController
     @redaction.user = current_user
     @redaction.title = params[:redaction][:title]
     @redaction.description = params[:redaction][:description]
-    # note that the description format will default to 'markdown'
+    # NOTE: the description format will default to 'markdown'
 
     if @redaction.save
       flash[:notice] = t(".flash")
@@ -38,7 +38,7 @@ class RedactionsController < ApplicationController
   def edit; end
 
   def update
-    # note - don't update the user ID
+    # NOTE: don't update the user ID
     @redaction.title = params[:redaction][:title]
     @redaction.description = params[:redaction][:description]
 
index 1cb848ea6ef09685407b622c3e83d4131fdfdb1c..00b3e78da4c858b7c36e0211106ba1190e69436c 100644 (file)
@@ -61,14 +61,7 @@ class SiteController < ApplicationController
       require_user
     end
 
-    if %w[potlatch potlatch2].include?(editor)
-      append_content_security_policy_directives(
-        :connect_src => %w[*],
-        :object_src => %w[*],
-        :plugin_types => %w[application/x-shockwave-flash],
-        :script_src => %w['unsafe-inline']
-      )
-    elsif %w[id].include?(editor)
+    if %w[id].include?(editor)
       append_content_security_policy_directives(
         :frame_src => %w[blob:]
       )
index 2c8b00c17460504ddb49319b6506992a25e2be20..db8b51f5cd9e7f7d30b904bf3cd227913c128113 100644 (file)
@@ -24,7 +24,7 @@ module ApplicationHelper
     tag.div(:id => "#{id}_container", :class => "richtext_container") do
       output_buffer << tag.div(:id => "#{id}_content", :class => "richtext_content") do
         output_buffer << text_area(object_name, method, options.merge("data-preview-url" => preview_url(:type => type)))
-        output_buffer << tag.div("", :id => "#{id}_preview", :class => "richtext_preview richtext")
+        output_buffer << tag.div("", :id => "#{id}_preview", :class => "richtext_preview richtext text-break")
       end
 
       output_buffer << tag.div(:id => "#{id}_help", :class => "richtext_help") do
index 74f16380c2ab93d8814f864e54d2f78036627931..5b33b57b331f8d842b49c201ae30ef129701de20 100644 (file)
@@ -58,7 +58,7 @@ module UserHelper
 
   def auth_button(name, provider, options = {})
     link_to(
-      image_tag("#{name}.png", :alt => t("users.login.auth_providers.#{name}.alt")),
+      image_tag("#{name}.svg", :alt => t("users.login.auth_providers.#{name}.alt"), :class => "rounded-lg"),
       auth_path(options.merge(:provider => provider)),
       :class => "auth_button",
       :title => t("users.login.auth_providers.#{name}.title")
index 5f0920a96f1fd537456ff79ea0dd243a4883acda..86463f297226e11dce96bcc55af1ffd31e92342e 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Table name: oauth_nonces
 #
-#  id         :integer          not null, primary key
+#  id         :bigint           not null, primary key
 #  nonce      :string
 #  timestamp  :integer
 #  created_at :datetime
index 12099498e2de71edd681634fcbc64827a5e24390..fe1a900136466472cb258198c3caa6a0b796fdd4 100644 (file)
@@ -32,7 +32,7 @@ class OldNode < ApplicationRecord
   self.table_name = "nodes"
   self.primary_keys = "node_id", "version"
 
-  # note this needs to be included after the table name changes, or
+  # NOTE: this needs to be included after the table name changes, or
   # the queries generated by Redactable will use the wrong table name.
   include Redactable
 
index f35678a19a262938a11f1a21198502cd27a07750..bfbe673b0881865611bcdfa64b2d2fa6188d04e4 100644 (file)
@@ -27,7 +27,7 @@ class OldRelation < ApplicationRecord
   self.table_name = "relations"
   self.primary_keys = "relation_id", "version"
 
-  # note this needs to be included after the table name changes, or
+  # NOTE: this needs to be included after the table name changes, or
   # the queries generated by Redactable will use the wrong table name.
   include Redactable
 
index 991925102c4fa9813ca4bccdae1e2f2a7f180df2..247123005c3d4464ec1b49a52254e12ad4ff91c9 100644 (file)
@@ -27,7 +27,7 @@ class OldWay < ApplicationRecord
   self.table_name = "ways"
   self.primary_keys = "way_id", "version"
 
-  # note this needs to be included after the table name changes, or
+  # NOTE: this needs to be included after the table name changes, or
   # the queries generated by Redactable will use the wrong table name.
   include Redactable
 
@@ -103,37 +103,6 @@ class OldWay < ApplicationRecord
     el
   end
 
-  # Read full version of old way
-  # For get_nodes_undelete, uses same nodes, even if they've moved since
-  # For get_nodes_revert,   allocates new ids
-  # Currently returns Potlatch-style array
-  # where [5] indicates whether latest version is usable as is (boolean)
-  # (i.e. is it visible? are we actually reverting to an earlier version?)
-
-  def get_nodes_undelete
-    nds.collect do |n|
-      node = Node.find(n)
-      [node.lon, node.lat, n, node.version, node.tags_as_hash, node.visible]
-    end
-  end
-
-  def get_nodes_revert(timestamp)
-    points = []
-    nds.each do |n|
-      oldnode = OldNode.where("node_id = ? AND timestamp <= ?", n, timestamp).unredacted.order("timestamp DESC").first
-      curnode = Node.find(n)
-      id = n
-      reuse = curnode.visible
-      # if node has changed and it's in other ways, give it a new id
-      if !curnode.ways.all?(way_id) && (oldnode.lat != curnode.lat || oldnode.lon != curnode.lon || oldnode.tags != curnode.tags)
-        id = -1
-        reuse = false
-      end
-      points << [oldnode.lon, oldnode.lat, id, curnode.version, oldnode.tags_as_hash, reuse]
-    end
-    points
-  end
-
   # Temporary method to match interface to ways
   def way_nodes
     old_nodes
index 9afedb04ee29a68a0cabf434b549a22ff6dbd1f8..346c5eea95c3d13205f1bb5ad5bc3d4b6ce9436e 100644 (file)
@@ -32,8 +32,7 @@ class Report < ApplicationRecord
 
   def self.categories_for(reportable)
     case reportable.class.name
-    when "DiaryEntry" then %w[spam offensive threat other]
-    when "DiaryComment" then %w[spam offensive threat other]
+    when "DiaryEntry", "DiaryComment" then %w[spam offensive threat other]
     when "User" then %w[spam offensive threat vandal other]
     when "Note" then %w[spam personal abusive other]
     else %w[other]
index 7e1f1c6d63f9fdc14c9e4d13e1f6cb2670ea669d..9cc8b7d8361cb62a64f7f089a8256d6d6a80ee03 100644 (file)
@@ -153,26 +153,6 @@ class User < ApplicationRecord
     user
   end
 
-  def to_xml
-    doc = OSM::API.new.get_xml_doc
-    doc.root << to_xml_node
-    doc
-  end
-
-  def to_xml_node
-    el1 = XML::Node.new "user"
-    el1["display_name"] = display_name.to_s
-    el1["account_created"] = creation_time.xmlschema
-    if home_lat && home_lon
-      home = XML::Node.new "home"
-      home["lat"] = home_lat.to_s
-      home["lon"] = home_lon.to_s
-      home["zoom"] = home_zoom.to_s
-      el1 << home
-    end
-    el1
-  end
-
   def description
     RichText.new(self[:description_format], self[:description])
   end
index 9a3ff969dfecbd64fc0e0c987fd12352f22633f5..a7cdf21d7321d2215dc8caa915d8cd884c437e54 100644 (file)
@@ -6,7 +6,7 @@
     <% end %>
   </p>
 
-  <div class="richtext"><%= diary_comment.body.to_html %></div>
+  <div class="richtext text-break"><%= diary_comment.body.to_html %></div>
   <% if can? :hidecomment, DiaryEntry %>
     <span>
       <% if diary_comment.visible? %>
index 6616417a19e31cb8d654ea23074617fc31e01c66..946c6ce1742efb2259802f0d1d82b8e8453d78ab 100644 (file)
@@ -15,7 +15,7 @@
 
   </div>
 
-  <div class="richtext" xml:lang="<%= diary_entry.language_code %>" lang="<%= diary_entry.language_code %>">
+  <div class="richtext text-break" xml:lang="<%= diary_entry.language_code %>" lang="<%= diary_entry.language_code %>">
     <%= diary_entry.body.to_html %>
   </div>
 
index 9585b09eb635d1697133edeff8df7fc957f6fd32..ed7164e88b1f4d89830dad9756094ba943a1f20f 100644 (file)
@@ -1,35 +1,19 @@
-<div class="diary_entry standard-form">
-  <fieldset>
-    <div class='standard-form-row'>
-      <label class="standard-label"><%= t ".subject" -%></label>
-      <%= f.text_field :title, :class => "richtext_title" %>
-    </div>
-    <div class='standard-form-row'>
-      <label class="standard-label"><%= t ".body" -%></label>
-      <%= richtext_area :diary_entry, :body, :cols => 80, :rows => 20, :format => @diary_entry.body_format %>
+<%= f.text_field :title %>
+<%= f.richtext_field :body, :cols => 80, :rows => 20, :format => @diary_entry.body_format %>
+<%= f.collection_select :language_code, Language.order(:english_name), :code, :name %>
+
+<fieldset>
+  <legend><%= t ".location" -%></legend>
+
+  <%= tag.div "", :id => "map", :data => { :lat => @lat, :lon => @lon, :zoom => @zoom } %>
+
+  <div class="form-row">
+    <%= f.text_field :latitude, :wrapper_class => "col-sm-4", :id => "latitude" %>
+    <%= f.text_field :longitude, :wrapper_class => "col-sm-4", :id => "longitude" %>
+    <div class="col-sm-4">
+      <label><a href="#" id="usemap"><%= t ".use_map_link" -%></a></label>
     </div>
-    <div class='standard-form-row'>
-      <label class="standard-label"><%= t ".language" -%></label>
-      <%= f.collection_select :language_code, Language.order(:english_name), :code, :name %>
   </div>
-  </fieldset>
-  <fieldset class='location'>
-    <label class="standard-label"><%= t ".location" -%></label>
-    <%= tag.div "", :id => "map", :data => { :lat => @lat, :lon => @lon, :zoom => @zoom } %>
-    <div class='standard-form-row clearfix'>
-      <div class='form-column'>
-        <label class="secondary standard-label"><%= t ".latitude" -%></label>
-        <%= f.text_field :latitude, :size => 20, :id => "latitude" %>
-      </div>
-      <div class='form-column'>
-        <label class="secondary standard-label"><%= t ".longitude" -%></label>
-        <%= f.text_field :longitude, :size => 20, :id => "longitude" %>
-      </div>
-      <div class='form-column'>
-        <a href="#" id="usemap"><%= t ".use_map_link" -%></a>
-      </div>
-    </div>
-  </fieldset>
+</fieldset>
 
-  <%= f.submit %>
-</div>
+<%= f.primary %>
index ec8c3dfda8e7535ac419171d0910171bd96abd51..67036050d635df409cc3c9ea00383ff706a4b245 100644 (file)
@@ -14,7 +14,7 @@
   <tr class="<%= "deemphasize" unless comment.visible? %>">
     <td width="25%"><%= link_to comment.diary_entry.title, diary_entry_path(comment.diary_entry.user, comment.diary_entry) %></td>
     <td width="25%"><span title="<%= l comment.created_at, :format => :friendly %>"><%= time_ago_in_words(comment.created_at, :scope => :'datetime.distance_in_words_ago') %></span></td>
-    <td width="50%" class="richtext"><%= comment.body.to_html %></td>
+    <td width="50%" class="richtext text-break"><%= comment.body.to_html %></td>
   </tr>
   <% end -%>
 </table>
index 5ea6193280c357e5d55e2036df03aad1da49bdfe..c8df07f4c4ee42ddd79ce690a1eeaecbd8ba20f7 100644 (file)
@@ -6,8 +6,6 @@
   <h1><%= @title %></h1>
 <% end %>
 
-<%= error_messages_for "diary_entry" %>
-
-<%= form_for @diary_entry, :url => diary_entry_path(current_user, @diary_entry), :html => { :method => :put } do |f| %>
+<%= bootstrap_form_for @diary_entry, :url => diary_entry_path(current_user, @diary_entry), :html => { :method => :put } do |f| %>
   <%= render :partial => "form", :locals => { :f => f } %>
 <% end %>
index 96c052da69fd940ff16c7e7f374017fbde99ed6c..17ddba62e6ffa335f771a71d4f57d4aee2f045f8 100644 (file)
@@ -5,7 +5,7 @@
     <% end %>
     <h1><%= @title %></h1>
 
-    <ul class='secondary-actions clearfix'>
+    <ul class="secondary-actions clearfix">
       <% unless params[:friends] or params[:nearby] -%>
         <li><%= rss_link_to :action => "rss", :language => params[:language] %></li>
       <% end -%>
 
   <%= render @entries %>
 
-  <div class="pagination">
-    <% if @entries.size < @page_size -%>
-      <%= t(".older_entries") %>
-    <% else -%>
-      <%= link_to t(".older_entries"), @params.merge(:page => @page + 1) %>
-    <% end -%>
-
-    |
+  <nav>
+    <ul class="pagination">
+      <% if @entries.size >= @page_size -%>
+        <li class="page-item">
+          <%= link_to t(".older_entries"), @params.merge(:page => @page + 1), :class => "page-link" %>
+        </li>
+      <% else -%>
+        <li class="page-item disabled">
+          <span class="page-link"><%= t(".older_entries") %></span>
+        </li>
+      <% end -%>
 
-    <% if @page > 1 -%>
-      <%= link_to t(".newer_entries"), @params.merge(:page => @page - 1) %>
-    <% else -%>
-      <%= t(".newer_entries") %>
-    <% end -%>
-  </div>
+      <% if @page > 1 -%>
+        <li class="page-item">
+          <%= link_to t(".newer_entries"), @params.merge(:page => @page - 1), :class => "page-link" %>
+        </li>
+      <% else -%>
+        <li class="page-item disabled">
+          <span class="page-link"><%= t(".newer_entries") %></span>
+        </li>
+      <% end -%>
+    </ul>
+  </nav>
 <% end %>
 
 <% unless params[:friends] or params[:nearby] -%>
index dfe69f22a203e795f93d41d2bd5cd3aceac0aab9..0a10cfd03c0a24f90445a4a88ef4a72003a2fbad 100644 (file)
@@ -6,8 +6,6 @@
   <h1><%= @title %></h1>
 <% end %>
 
-<%= error_messages_for "diary_entry" %>
-
-<%= form_for @diary_entry do |f| %>
+<%= bootstrap_form_for @diary_entry do |f| %>
   <%= render :partial => "form", :locals => { :f => f } %>
 <% end %>
index 080503f72fce70fc769ed6eba41744ee5f7c3a9b..3631467fd249277fa9c43af99c41ab53cd7826f7 100644 (file)
@@ -32,7 +32,7 @@
     </div>
   </div>
 
-  <div class="richtext"><%= @message.body.to_html %></div>
+  <div class="richtext text-break"><%= @message.body.to_html %></div>
 
   <div>
     <%= link_to t(".back"), outbox_messages_path, :class => "btn btn-link" %>
index 1eb20f16f1564ce0350d51bb5f3d802a0822d72e..cf5116edebe36aca4ef3d923454804f3d4af4099 100644 (file)
@@ -7,7 +7,7 @@
   <b><%= t ".user" %></b>
   <%= link_to(@redaction.user.display_name, user_path(@redaction.user)) %>
 </p>
-<div class="richtext">
+<div class="richtext text-break">
   <b><%= t ".description" %></b>
   <%= @redaction.description.to_html %>
 </div>
diff --git a/app/views/shared/_html_help.erb b/app/views/shared/_html_help.erb
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/app/views/shared/_markdown_help.html.erb b/app/views/shared/_markdown_help.html.erb
new file mode 100644 (file)
index 0000000..5bd8c49
--- /dev/null
@@ -0,0 +1,19 @@
+<h5><%= t ".title_html" %></h5>
+<dl>
+  <dt><%= t ".headings" %></dt>
+  <dd># <%= t ".heading" %><br>
+      ## <%= t ".subheading" %></dd>
+  <dt><%= t ".unordered" %></dt>
+  <dd>* <%= t ".first" %><br>
+     * <%= t ".second" %></dd>
+
+  <dt><%= t ".ordered" %></dt>
+  <dd>1. <%= t ".first" %><br>
+     2. <%= t ".second" %></dd>
+
+  <dt><%= t ".link" %></dt>
+  <dd>[<%= t ".text" %>](<%= t ".url" %>)</dd>
+
+  <dt><%= t ".image" %></dt>
+  <dd>![<%= t ".alt" %>](<%= t ".url" %>)</dd>
+</dl>
diff --git a/app/views/shared/_richtext_field.html.erb b/app/views/shared/_richtext_field.html.erb
new file mode 100644 (file)
index 0000000..cfe6f98
--- /dev/null
@@ -0,0 +1,15 @@
+<div id="<%= id %>_container" class="form-row richtext_container">
+  <div id="<%= id %>_content" class="col-sm-8 mb-3 mb-sm-0 richtext_content">
+    <%= builder.text_area(attribute, options.merge(:wrapper => false, "data-preview-url" => preview_url(:type => type))) %>
+    <div id="<%= id %>_preview" class="richtext_preview richtext text-break"></div>
+  </div>
+  <div id="<%= id %>_help" class="col-sm-4 richtext_help">
+    <div class="card bg-light h-100">
+      <div class="card-body">
+        <%= render :partial => "shared/#{type}_help" %>
+        <%= submit_tag t(".edit"), :id => "#{id}_doedit", :class => "richtext_doedit btn btn-primary", :disabled => true %>
+        <%= submit_tag t(".preview"), :id => "#{id}_dopreview", :class => "richtext_dopreview btn btn-primary" %>
+      </div>
+    </div>
+  </div>
+</div>
index 89ee47f87a35608dc531ea35ea6b8eaa4023f9df..946519d7362e36732a6a326735eb753c88075237 100644 (file)
@@ -1,10 +1,5 @@
-<%= javascript_include_tag "edit/potlatch" %>
-
-<div id="map">
-  <% session[:token] = current_user.tokens.create.token unless session[:token] && UserToken.find_by(:token => session[:token]) -%>
-  <% data = { :token => session[:token] } -%>
-  <% data[:lat] = @lat if @lat -%>
-  <% data[:lon] = @lon if @lon -%>
-  <% data[:zoom] = @zoom if @zoom -%>
-  <%= tag.div t("site.edit.flash_player_required_html"), :id => "potlatch", :data => data %>
+<div class="container">
+  <p><%= t ".removed" %></p>
+  <p><%= t ".desktop_html" %></p>
+  <p><%= t ".id_html", :settings_url => user_account_path(current_user) %></p>
 </div>
index 1ff16eac0f4d7004142e7afec7467896f5e04b37..9d271d4ce3e4dc45ac29d0e75e755d95ca04c2a9 100644 (file)
@@ -1,19 +1 @@
-<%= javascript_include_tag "edit/potlatch2" %>
-
-<div id="map">
-  <% session[:token] = current_user.tokens.create.token unless session[:token] && UserToken.find_by(:token => session[:token]) -%>
-  <% data = { :token => session[:token] } -%>
-  <% data[:lat] = @lat if @lat -%>
-  <% data[:lon] = @lon if @lon -%>
-  <% data[:zoom] = @zoom if @zoom -%>
-  <% if Settings.key?(:potlatch2_key) %>
-  <% token = current_user.access_token(Settings.potlatch2_key) %>
-  <% data[:token] = token.token -%>
-  <% data[:token_secret] = token.secret -%>
-  <% data[:consumer_key] = token.client_application.key -%>
-  <% data[:consumer_secret] = token.client_application.secret -%>
-  <% end %>
-  <% data[:locale] = Locale.list(Potlatch2::LOCALES.keys).preferred(preferred_languages).to_s -%>
-  <% data[:locale_path] = asset_path("potlatch2/locales/#{Potlatch2::LOCALES[data[:locale]]}.swf") -%>
-  <%= tag.div t("site.edit.flash_player_required_html"), :id => "potlatch", :data => data %>
-</div>
+<%= render :partial => "potlatch" %>
index 4fcc7b4d87c23a48093db2f0e1a84bac2af287cf..25e35d2266d76beec4f590437a7285d9d1670450 100644 (file)
@@ -1,18 +1,27 @@
-<p>
+<nav>
+  <ul class="pagination">
+    <% if page > 1 %>
+      <li class="page-item">
+        <%= link_to t(".newer"), params.merge(:page => page - 1), :class => "page-link" %>
+      </li>
+    <% else %>
+      <li class="page-item disabled">
+        <span class="page-link"><%= t(".newer") %></span>
+      </li>
+    <% end %>
 
-<% if @traces.size > 1 %>
-<% if @page > 1 %>
-<%= link_to t(".newer"), @params.merge(:page => @page - 1) %>
-<% else %>
-<%= t(".newer") %>
-<% end %>
+    <li class="page-item disabled">
+      <span class="page-link"><%= t(".showing_page", :page => page) %></span>
+    </li>
 
-| <%= t(".showing_page", :page => @page) %> |
-
-<% if @traces.size < @page_size %>
-<%= t(".older") %>
-<% else %>
-<%= link_to t(".older"), @params.merge(:page => @page + 1) %>
-<% end %>
-<% end %>
-</p>
+    <% if traces.size < page_size %>
+      <li class="page-item disabled">
+        <span class="page-link"><%= t(".older") %></span>
+      </li>
+    <% else %>
+      <li class="page-item">
+        <%= link_to t(".older"), params.merge(:page => page + 1), :class => "page-link" %>
+      </li>
+    <% end %>
+  </ul>
+</nav>
index 609dbcede69da11ab47d5af6acb772fb02ac277f..fa69c48a2aff55ffe22d27dce85d8247cc6015aa 100644 (file)
@@ -23,7 +23,7 @@
 <% end %>
 
 <% if @traces.size > 0 %>
-  <%= render :partial => "trace_paging_nav" %>
+  <%= render "trace_paging_nav", :page => @page, :page_size => @page_size, :traces => @traces, :params => @params %>
 
   <table id="trace_list" class="table table-borderless table-striped">
     <tbody>
@@ -31,7 +31,7 @@
     </tbody>
   </table>
 
-  <%= render :partial => "trace_paging_nav" %>
+  <%= render "trace_paging_nav", :page => @page, :page_size => @page_size, :traces => @traces, :params => @params %>
 <% else %>
   <h4><%= t ".empty_html", :upload_link => new_trace_path %></h4>
 <% end %>
index 69207d4e47e453a2ad08db84302b35d306475c45..52c099ee40318654f27bfc188bace36aad21dc42 100644 (file)
@@ -33,4 +33,4 @@
 <p><b><%= t ".status" %></b>: <%= block_status(@user_block) %></p>
 
 <p><b><%= t ".reason" %></b></p>
-<div class="richtext"><%= @user_block.reason.to_html %></div>
+<div class="richtext text-break"><%= @user_block.reason.to_html %></div>
index fd49c6723c410da3bae56a249eabe3261e8882a5..4095b5e59426f13c1a991a2ad5215d7805a00530 100644 (file)
@@ -2,7 +2,7 @@
   <%= t ".hi", :to_user => @to_user %>
 </p>
 <p>
-  <%= t ".header",
+  <%= t ".header_html",
         :from_user => link_to_user(@from_user),
         :subject => tag.em(@title) %>
 </p>
index d46a619843f02d95f0c5d878025cac6df3fd7cbe..a5b29411c64e30d34cae1ca6a6d571562320e689 100644 (file)
@@ -22,7 +22,7 @@
       <% changeset = contact.changesets.first %>
       <% if changeset %>
         <%= t("users.show.latest edit", :ago => time_ago_in_words(changeset.created_at, :scope => :'datetime.distance_in_words_ago')) %>
-        <% comment = changeset.tags["comment"].to_s != "" ? changeset.tags["comment"] : t("browse.no_comment") %>
+        <% comment = changeset.tags["comment"].to_s == "" ? t("browse.no_comment") : changeset.tags["comment"] %>
         <q><%= link_to(comment,
                        { :controller => "browse", :action => "changeset", :id => changeset.id },
                        { :title => t("changesets.changeset.view_changeset_details") }) %></q>
index 399ef8dcd89843d0c7603152b6b8ec99a5b95947..f01f8d1edce3d26bbe959e614df08df18d37639e 100644 (file)
@@ -15,7 +15,7 @@
               :date => l(user.creation_time, :format => :friendly) %>
       <% end %>
     </p>
-    <div class="richtext"><%= user.description.to_html %></div>
+    <div class="richtext text-break"><%= user.description.to_html %></div>
   </td>
   <td>
     <%= check_box_tag "user_#{user.id}", "", false, :name => "user[#{user.id}]" %>
index ad6614c76ca51a5f02a1c85330310f70d8b419b1..394e81cd1774549e2fae79bc3935e83c4d49aae5 100644 (file)
@@ -85,7 +85,7 @@
     </div>
     <div class="standard-form-row">
       <label class="standard-label"><%= t ".preferred editor" %></label>
-      <%= f.select :preferred_editor, [[t("editor.default", :name => t("editor.#{Settings.default_editor}.name")), "default"]] + Editors::ALL_EDITORS.collect { |e| [t("editor.#{e}.description"), e] } %>
+      <%= f.select :preferred_editor, [[t("editor.default", :name => t("editor.#{Settings.default_editor}.name")), "default"]] + Editors::AVAILABLE_EDITORS.collect { |e| [t("editor.#{e}.description"), e] } %>
     </div>
   </fieldset>
 
index 365245bf04a929b34bac7dcdd431d5dbdb406c39..78ba25fa4139ac5f47458c4464b75279188a4039 100644 (file)
@@ -7,41 +7,18 @@
 <% end %>
 
 <div id="login_login">
-  <%= form_tag({ :action => "login" }, { :id => "login_form" }) do %>
-    <%= hidden_field_tag("referer", h(params[:referer])) %>
-
-    <p class='text-muted'><%= t ".no account" %> <%= link_to t(".register now"), :action => :new, :referer => params[:referer] %></p>
-
-    <div id="loginForm" class="standard-form">
+  <p class='text-muted'><%= t ".no account" %> <%= link_to t(".register now"), :action => :new, :referer => params[:referer] %></p>
 
-      <fieldset>
-        <div class="standard-form-row">
-          <label for="username" class="standard-label">
-            <%= t ".email or username" %>
-          </label>
-          <%= text_field_tag "username", params[:username], :tabindex => 1 %>
-        </div>
-        <div class="standard-form-row">
-          <label for="password" class="standard-label">
-            <%= t ".password" %>
-          </label>
-          <%= password_field_tag "password", "", :tabindex => 2 %>
-        </div>
-        <span class="form-help deemphasize">
-          <%= link_to t(".lost password link"), :controller => "users", :action => "lost_password" %>
-        </span>
-      </fieldset>
-
-      <fieldset>
-        <%= check_box_tag "remember_me", "yes", params[:remember_me] == "yes", :tabindex => 3 %>
-        <label for="remember_me" class="standard-label">
-          <%= t ".remember" %>
-        </label>
-        <%= submit_tag t(".login_button"), :tabindex => 4 %>
-      </fieldset>
+  <%= bootstrap_form_tag(:action => "login", :html => { :id => "login_form" }) do |f| %>
+    <%= hidden_field_tag("referer", h(params[:referer])) %>
 
-    </div>
+    <%= f.text_field :username, :label => t(".email or username"), :tabindex => 1, :value => params[:username] %>
+    <%= f.password_field :password, :label => t(".password"), :tabindex => 2, :value => "", :help => link_to(t(".lost password link"), :controller => "users", :action => "lost_password") %>
+    <%= f.form_group do %>
+      <%= f.check_box :remember_me, { :label => t(".remember"), :tabindex => 3, :checked => (params[:remember_me] == "yes") }, "yes" %>
+    <% end %>
 
+    <%= f.primary t(".login_button"), :tabindex => 4 %>
   <% end %>
 
   <%= form_tag(auth_path(:provider => "openid"), :id => "openid_login_form") do %>
index 694f561b28aaa4d4e6bea4382206a994bcc5ee1e..302ec5bd3935db3d9a65dd8dd3beb39a02fa8e68 100644 (file)
       </p>
     </div>
 
-    <div class="user-description richtext"><%= @user.description.to_html %></div>
+    <div class="user-description richtext text-break"><%= @user.description.to_html %></div>
 
   </div>
 
index 54390ba29363a79a6eb182fadc922fcd6ab68af7..f5638e233025c9f9217df674cb1e0c0ffdb4b133 100644 (file)
@@ -31,9 +31,6 @@ module OpenStreetMap
     # Custom directories with classes and modules you want to be autoloadable.
     config.autoload_paths += %W[#{config.root}/lib]
 
-    # Continue to use the classic autoloader for now
-    config.autoloader = :classic
-
     # Force requests from old versions of IE (<= IE8) to be UTF-8 encoded.
     # This has defaulted to false since rails 6.0
     config.action_view.default_enforce_utf8 = true
diff --git a/config/github.database.yml b/config/github.database.yml
new file mode 100644 (file)
index 0000000..9f9c4b1
--- /dev/null
@@ -0,0 +1,4 @@
+test:
+  adapter: postgresql
+  database: openstreetmap
+  encoding: utf8
diff --git a/config/initializers/bootstrap_form.rb b/config/initializers/bootstrap_form.rb
new file mode 100644 (file)
index 0000000..a61932c
--- /dev/null
@@ -0,0 +1,2 @@
+# Include our custom RichtextField input method for `f.richtext_field` in forms
+BootstrapForm::FormBuilder.include BootstrapForm::Inputs::RichtextField
diff --git a/config/initializers/migrate.rb b/config/initializers/migrate.rb
new file mode 100644 (file)
index 0000000..787f3d5
--- /dev/null
@@ -0,0 +1,59 @@
+if defined?(ActiveRecord::ConnectionAdapters::AbstractAdapter)
+  module OpenStreetMap
+    module ActiveRecord
+      module AbstractAdapter
+        def add_index_options(table_name, column_name, options = {})
+          columns = options.delete(:columns)
+          index_name, index_type, index_columns, index_options, algorithm, using = super(table_name, column_name, options)
+          [index_name, index_type, columns || index_columns, index_options, algorithm, using]
+        end
+      end
+
+      module PostgreSQLAdapter
+        def quote_column_name(name)
+          Array(name).map { |n| super(n) }.join(", ")
+        end
+
+        def add_primary_key(table_name, column_name, _options = {})
+          table_name = quote_table_name(table_name)
+          column_name = quote_column_name(column_name)
+
+          execute "ALTER TABLE #{table_name} ADD PRIMARY KEY (#{column_name})"
+        end
+
+        def remove_primary_key(table_name)
+          table_name = quote_table_name(table_name)
+
+          execute "ALTER TABLE #{table_name} DROP PRIMARY KEY"
+        end
+
+        def alter_primary_key(table_name, new_columns)
+          constraint_name = quote_table_name("#{table_name}_pkey")
+          table_name = quote_table_name(table_name)
+          new_columns = quote_column_name(new_columns)
+
+          execute "ALTER TABLE #{table_name} DROP CONSTRAINT #{constraint_name}"
+          execute "ALTER TABLE #{table_name} ADD PRIMARY KEY (#{new_columns})"
+        end
+
+        def create_enumeration(enumeration_name, values)
+          execute "CREATE TYPE #{enumeration_name} AS ENUM ('#{values.join '\',\''}')"
+        end
+
+        def drop_enumeration(enumeration_name)
+          execute "DROP TYPE #{enumeration_name}"
+        end
+
+        def rename_enumeration(old_name, new_name)
+          old_name = quote_table_name(old_name)
+          new_name = quote_table_name(new_name)
+
+          execute "ALTER TYPE #{old_name} RENAME TO #{new_name}"
+        end
+      end
+    end
+  end
+
+  ActiveRecord::ConnectionAdapters::AbstractAdapter.prepend(OpenStreetMap::ActiveRecord::AbstractAdapter)
+  ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.prepend(OpenStreetMap::ActiveRecord::PostgreSQLAdapter)
+end
index 576da5285f51cbcd400145e7718dd0f10c3b0835..7e10da4fbfe29de123adf4687419812a9ccf38e5 100644 (file)
@@ -2,5 +2,4 @@
 
 # Add new mime types for use in respond_to blocks:
 # Mime::Type.register "text/richtext", :rtf
-Mime::Type.register "application/x-amf", :amf
 Mime::Type.register "application/gpx+xml", :gpx
diff --git a/config/initializers/potlatch.rb b/config/initializers/potlatch.rb
deleted file mode 100644 (file)
index 223083b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-# Load presets
-POTLATCH_PRESETS = Potlatch::Potlatch.get_presets
-
-# Use SQL (faster) or Rails (more elegant) for common Potlatch reads
-# getway speedup is approximately x2, whichways approximately x7
-POTLATCH_USE_SQL = false
index b1f4707b50272c6767fc9184341d3acd1ca0e4bf..a2a56074f6916e7d57a557908218b03f9a6399b8 100644 (file)
@@ -1 +1 @@
-StrongMigrations.start_after = 20190518115041 # rubocop:disable Style/NumericLiterals
+StrongMigrations.start_after = 20190518115041
diff --git a/config/initializers/zeitwerk.rb b/config/initializers/zeitwerk.rb
new file mode 100644 (file)
index 0000000..49bd78d
--- /dev/null
@@ -0,0 +1,8 @@
+Rails.autoloaders.each do |autoloader|
+  autoloader.inflector.inflect(
+    "gpx" => "GPX",
+    "id" => "ID",
+    "osm" => "OSM",
+    "utf8" => "UTF8"
+  )
+end
index 8b66d92d97298ee634ed92f9dc2f08ea7aae1f95..a516bc49f4675293bc1be28c98cf41ac3d97445a 100644 (file)
@@ -160,15 +160,9 @@ af:
         other: '%{count} jaar gelede'
   editor:
     default: Verstek (tans %{name})
-    potlatch:
-      name: Potknip 1
-      description: Potknip 1 (aanlynredigeerder)
     id:
       name: iD
       description: iD (aanlynredigeerder)
-    potlatch2:
-      name: Potknip 2
-      description: Potknip 2 (aanlynredigeerder)
     remote:
       name: Afstandsbeheer
       description: Afstandsbeheer (JOSM of Merkaartor)
@@ -363,12 +357,7 @@ af:
     new:
       title: Nuwe dagboekinskrywing
     form:
-      subject: 'Onderwerp:'
-      body: 'Teks:'
-      language: 'Taal:'
       location: 'Ligging:'
-      latitude: 'Breedtegraad:'
-      longitude: 'Lengtegraad:'
       use_map_link: gebruik kaart
     index:
       title: Gebruikersdagboeke
@@ -1178,21 +1167,11 @@ af:
         sodat u kan wegtrek.
     email_confirm:
       subject: '[OpenStreetMap] Bevestig u e-posadres'
-    email_confirm_plain:
       greeting: Hallo,
-    email_confirm_html:
-      greeting: Hallo,
-      hopefully_you: Iemand (hopelik u) wil hul e-posadres op %{server_url} verander
-        na %{new_address}.
-      click_the_link: As dit u is, klik die onderstaande skakel om die verandering
-        te bevestig.
     lost_password:
       subject: '[OpenStreetMap] Versoek om wagwoord te herstel'
-    lost_password_plain:
       greeting: Hallo,
       click_the_link: As dit u is, klik die onderstaande skakel om u wagwoord te herstel.
-    lost_password_html:
-      greeting: Hallo,
     note_comment_notification:
       anonymous: '''n Anonieme gebruiker'
       greeting: Hallo,
index d3b7f307df8b102b0acfdd7ff23596e64a2ac961..977c5e0ff319be25476fd8b0a7efd5d3336844e2 100644 (file)
@@ -174,12 +174,7 @@ aln:
     new:
       title: Hyrja e re Ditari
     form:
-      subject: 'Titulli:'
-      body: 'Trupi:'
-      language: 'Gjuha:'
       location: 'Lokacioni:'
-      latitude: 'Latitude:'
-      longitude: 'Gjatësi:'
       use_map_link: Harta e përdorimit
     index:
       title: ditarë Përdorues ,
@@ -668,26 +663,12 @@ aln:
       subject: '[OpenStreetMap] Konfirmoje email adresën tonde'
     email_confirm:
       subject: '[OpenStreetMap] Konfirmoje email adresën tonde'
-    email_confirm_plain:
       greeting: Tung,
       click_the_link: Nëse ky je ti, ju lutem trusni lidhjen e mëposhtme për me konfirmu
         ndryshimin.
-    email_confirm_html:
-      greeting: Tung,
-      hopefully_you: Dikush (shpresojmë se ju), do të doja të ndryshuar adresën e-mail
-        e tyre gjatë në %{server_url} në %{new_address}.
-      click_the_link: Nëse ky je ti, ju lutem trusni lidhjen e mëposhtme për me konfirmu
-        ndryshimin.
     lost_password:
       subject: '[OpenStreetMap] kërkesës Password reset'
-    lost_password_plain:
-      greeting: Tung,
-      click_the_link: Nëse kjo është që ju, ju lutemi klikoni lidhjen më poshtë për
-        të rivendosni fjalëkalimin tuaj.
-    lost_password_html:
       greeting: Tung,
-      hopefully_you: Dikush (ndoshta ju) ka kërkuar një fjalëkalim për t,u rivendosur
-        në llogarinë openstreetmap.org këtë adresë email-i.
       click_the_link: Nëse kjo është që ju, ju lutemi klikoni lidhjen më poshtë për
         të rivendosni fjalëkalimin tuaj.
   messages:
@@ -850,14 +831,6 @@ aln:
         tuaj.
       user_page_link: faqe përdorues
       anon_edits_link_text: Find out pse kjo është e rastit.
-      flash_player_required_html: Ju duhet me pas Flash player për me përdor Potlatch,
-        Flash editorin e OpenStreetMap. Ju muni <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">me
-        marr Flash Player nga Adobe.com</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">Disa
-        mënyra të tjera</a> janë të mundshme për me editu OpenStreetMap.
-      potlatch_unsaved_changes: Ju keni para shpëtimit të ndryshimeve. (Për të ruajtur
-        në Potlatch, ju duhet të asnjërën mënyrë e tanishme ose me pikën e, në qoftë
-        se redaktimi në mënyrë të jetojnë, ose klikoni ruani në qoftë se ju keni një
-        buton të shpëtuar.)
     export:
       area_to_export: Zona për Eksport
       manually_select: Manualisht zgedhe ni zon te ndryshme
index 4f83f957f3cc65b347e2b856dec562f908b4d07e..58e37a9bf6758a1f02d3ac810d428bef6d442e62 100644 (file)
@@ -21,6 +21,7 @@
 # Author: Mido
 # Author: Mohammed Qubati
 # Author: Mutarjem horr
+# Author: NEHAOUA
 # Author: Omda4wady
 # Author: OsamaK
 # Author: Ruila
@@ -58,7 +59,7 @@ ar:
         create: أرسل
       client_application:
         create: سجِّل
-        update: ØªØ¹Ø¯Ù\8aÙ\84
+        update: ØªØ­Ø¯Ù\8aØ«
       redaction:
         create: إنشاء تنقيح
         update: حفظ التنقيح
@@ -111,8 +112,17 @@ ar:
       way_tag: سمة طريق
     attributes:
       client_application:
+        name: الاسم (مطلوب)
+        url: ' مسار (URL) للتطبيق الرئيسي (مطلوب)'
         callback_url: رابط الرد
         support_url: رابط الدعم
+        allow_read_prefs: قراءة تفضيلات المستخدم الخاصة بهم
+        allow_write_prefs: تعديل تفضيلات المستخدم الخاصة بهم
+        allow_write_diary: إنشاء إدخالات اليوميات والتعليقات وتكوين صداقات
+        allow_write_api: تعديل الخريطة.
+        allow_read_gpx: قراءة آثار جي بي إس الخاصة بهم
+        allow_write_gpx: رفع آثار جي بي إس.
+        allow_write_notes: تعديل الملاحظات.
       diary_comment:
         body: الجسم
       diary_entry:
@@ -127,21 +137,22 @@ ar:
       trace:
         user: المستخدم
         visible: ظاهر
-        name: الاسم
+        name: اسم الملف
         size: الحجم
         latitude: خط العرض
         longitude: خط الطول
         public: عام
         description: الوصف
-        gpx_file: 'ارفع ملف GPX:'
-        visibility: 'الرؤية:'
-        tagstring: 'الوسوم:'
+        gpx_file: رفع ملف GPX
+        visibility: الرؤية
+        tagstring: الوسوم
       message:
         sender: المرسل
         title: الموضوع
         body: نص الرسالة
         recipient: المستلم
       report:
+        category: حدد سبب التقرير الخاص بك
         details: يُرجَى تقديم بعض التفاصيل حول المشكلة (مطلوب).
       user:
         email: البريد الإلكتروني
@@ -150,6 +161,7 @@ ar:
         description: الوصف
         languages: اللغات
         pass_crypt: كلمة السر
+        pass_crypt_confirmation: أكد كلمة السر
     help:
       trace:
         tagstring: محدد بفواصل
@@ -197,15 +209,9 @@ ar:
     with_name_html: '%{name} (%{id})'
   editor:
     default: الافتراضي (حالياً %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (محرر ضمن المتصفح)
     id:
       name: آي دي
       description: آي دي (محرر عبر المتصفح)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (محرر ضمن المتصفح)
     remote:
       name: تحكم عن بعد
       description: تحكم عن بعد (JOSM أو Merkaartor)
@@ -414,12 +420,7 @@ ar:
     new:
       title: مدخلة يومية جديدة
     form:
-      subject: 'الموضوع:'
-      body: 'النص:'
-      language: 'اللغة:'
       location: 'الموقع:'
-      latitude: 'خط العرض:'
-      longitude: 'خط الطول:'
       use_map_link: استخدم الخريطة
     index:
       title: يوميات المستخدمين
@@ -1266,7 +1267,6 @@ ar:
       footer: يمكنك أيضًا قراءة التعليق على %{readurl} ويمكنك التعليق على %{commenturl}
         أو الرد على %{replyurl}
     message_notification:
-      subject_header: '[OpenStreetMap] %{subject}'
       hi: مرحبًا %{to_user}،
       header: '%{from_user} قام بإرسال رسالة لك عبر خريطة الشارع المفتوحة بالعنوان
         %{subject}:'
@@ -1294,30 +1294,17 @@ ar:
       welcome: بعد تأكيد حسابك، سوف نقدم لك بعض المعلومات الإضافية للبدء.
     email_confirm:
       subject: '[خريطة الشارع المفتوحة] أكّد عنوان بريدك الإلكتروني'
-    email_confirm_plain:
       greeting: تحياتي،
       hopefully_you: شخص ما (نأمل أن تكون أنت) يرغب في تغيير عنوان بريده الإلكتروني
         في %{server_url} إلى %{new_address}.
       click_the_link: إذا كان هذا أنت، يُرجَى الضغط على الرابط أدناه لتأكيد التغيير.
-    email_confirm_html:
-      greeting: مرحبًا،
-      hopefully_you: شخص ما (نأمل أنت) يرغب بتغيير عنوان بريده الإلكتروني على %{server_url}
-        إلى %{new_address}.
-      click_the_link: إذا كان هذا أنت، رجاءً انقر فوق الرابط أدناه لتأكيد التغيير.
     lost_password:
       subject: '[خريطة الشارع المفتوحة] طلب إعادة تعيين كلمة السر'
-    lost_password_plain:
-      greeting: تحياتي،
+      greeting: مرحبًا،
       hopefully_you: طالب شخص ما (ربما أنت) بإعادة تعيين كلمة السر على حساب openstreetmap.org
         لعنوان البريد الإلكتروني هذا.
       click_the_link: إذا كان هذا أنت، يُرجَى الضغط على الرابط أدناه لإعادة تعيين
         كلمة المرور.
-    lost_password_html:
-      greeting: تحياتي،
-      hopefully_you: طالب شخص ما (ربما أنت) بإعادة تعيين كلمة المرور على حساب openstreetmap.org
-        لعنوان البريد الإلكتروني هذا.
-      click_the_link: إذا كان هذا أنت، يُرجَى الضغط على الرابط أدناه لإعادة تعيين
-        كلمة المرور.
     note_comment_notification:
       anonymous: مستخدم مجهول
       greeting: مرحبا،
@@ -1427,6 +1414,14 @@ ar:
       as_unread: عُلِّمت الرسالة كغير مقروءة
     destroy:
       destroyed: حُذِفت الرسالة
+  shared:
+    markdown_help:
+      unordered: قائمة غير مرتبة
+      ordered: قائمة مرتبة
+      link: وصلة
+      alt: كل النص
+    richtext_field:
+      preview: معاينة
   site:
     about:
       next: التالي
@@ -1619,17 +1614,6 @@ ar:
       user_page_link: صفحة مستخدم
       anon_edits_html: (%{link})
       anon_edits_link_text: ابحث عن السبب لماذا هو هذا الحال.
-      flash_player_required_html: أنت بحاجة لمشغل فلاش لاستخدام Potlatch، محرر فلاش
-        خريطة الشارع المفتوحة. يمكنك <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">تنزيل
-        مشغل الفلاش من موقع أدوبي</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">وهناك
-        خيارات أخرى</a> أيضًا متاحة لتعديل خريطة الشارع المفتوحة.
-      potlatch_unsaved_changes: لديك تغييرات غير محفوظة. (للحفظ في Potlatch؛ يجب إلغاء
-        الطريق أو النقطة الحاليين إن كان التعديل في الوضع الحي، أو انقر فوق حفظ إن
-        كان لديك زر الحفظ.)
-      potlatch2_not_configured: لم يتم تكوين Potlatch 2 - يُرجَى الاطلاع على  http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2
-        للمزيد من المعلومات
-      potlatch2_unsaved_changes: لديك تغييرات غير محفوظة. (للحفظ في Potlatch 2; يجب
-        النقر فوق حفظ.)
       id_not_configured: لم يتم تكوين آي دي
       no_iframe_support: متصفحك لا يدعم الإطارات المضمنة HTML، والتي هي ضرورية لهذه
         الميزة.
index c7292ed33868041513ea60622b418e38a93b9c8a..1a2dc2676dbe6cc76baced1f09bfeb3a174395cb 100644 (file)
@@ -149,12 +149,7 @@ arz:
     new:
       title: مدخله يوميه جديدة
     form:
-      subject: 'الموضوع:'
-      body: 'نص الرسالة:'
-      language: 'اللغة:'
       location: 'الموقع:'
-      latitude: 'خط العرض:'
-      longitude: 'خط الطول:'
       use_map_link: استخدم الخريطة
     index:
       title: يوميات المستخدمين
@@ -612,24 +607,11 @@ arz:
       subject: '[خريطه الشارع المفتوحه] اهلا بيك فى اوبن ستريت ماب'
     email_confirm:
       subject: '[خريطه الشارع المفتوحة] أكّد عنوان بريدك الإلكتروني'
-    email_confirm_plain:
       greeting: تحياتى،
       click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لتأكيد التغيير.
-    email_confirm_html:
-      greeting: مرحبًا،
-      hopefully_you: شخص ما (نأمل أنت) يرغب بتغيير عنوان بريده الإلكترونى على %{server_url}
-        to %{new_address}.
-      click_the_link: إذا كان هذا هو أنت، رجاءًا انقر فوق الرابط أدناه لتأكيد التغيير.
     lost_password:
       subject: '[خريطه الشارع المفتوحة] طلب إعاده تعيين كلمه المرور'
-    lost_password_plain:
-      greeting: تحياتى،
-      click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لإعاده تعيين
-        كلمه المرور.
-    lost_password_html:
-      greeting: تحياتى،
-      hopefully_you: شخص ما (ربما أنت) طلب إعاده تعيين كلمه المرور لحساب openstreetmap.org  على
-        عنوان البريد الإلكترونى هذا.
+      greeting: مرحبًا،
       click_the_link: إذا كان هذا هو أنت، يرجى الضغط على الرابط أدناه لإعاده تعيين
         كلمه المرور.
   messages:
@@ -696,13 +678,6 @@ arz:
         يمكنك تعيين تعديلاتك لتظهر بشكل علنى من حسابك %{user_page}.
       user_page_link: صفحه مستخدم
       anon_edits_link_text: ابحث عن السبب لماذا هو هذا الحال.
-      flash_player_required_html: أنت بحاجه لمشغل فلاش لاستخدام Potlatch، محرر فلاش
-        خريطه الشارع المفتوحه. يمكنك <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">تنزيل
-        مشغل الفلاش من موقع أدوبي</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">وهناك
-        خيارات أخرى</a> أيضًا متاحه لتعديل خريطه الشارع المفتوحه.
-      potlatch_unsaved_changes: لديك تغييرات غير محفوظه. (للحفظ فى Potlatch، يجب إلغاء
-        الطريق أو النقطه الحاليين إن كان التعديل فى الوضع المباشر، أو انقر فوق حفظ
-        إن كان لديك زر الحفظ.)
     export:
       area_to_export: المنطقه المطلوب تصديرها
       manually_select: اختر يدويًا منطقه أخرى
index e520e3c96a40e7221955f4af51c0f235746f4e9e..b14654f3a8436ad773a4f54611e0d72e13b874ae 100644 (file)
@@ -162,15 +162,9 @@ ast:
         other: fai %{count} años
   editor:
     default: Predetermináu (anguaño %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (editor nel restolador)
     id:
       name: iD
       description: iD (editor nel navegador)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (editor nel restolador)
     remote:
       name: Control remotu
       description: Control remotu (JOSM o Merkaartor)
@@ -377,12 +371,7 @@ ast:
     new:
       title: Nueva entrada del diariu
     form:
-      subject: 'Asuntu:'
-      body: 'Cuerpu:'
-      language: 'Llingua:'
       location: 'Allugamientu:'
-      latitude: 'Llatitú:'
-      longitude: 'Llonxitú:'
       use_map_link: usar mapa
     index:
       title: Diarios d'usuarios
@@ -1249,28 +1238,16 @@ ast:
         nos primeros pasos.
     email_confirm:
       subject: '[OpenStreetMap] Confirma la to direición de corréu'
-    email_confirm_plain:
-      greeting: Bones,
-      hopefully_you: Dalguién (esperamos que tu) quier camudar la so direición de
-        corréu en %{server_url} a %{new_address}.
-      click_the_link: Si yes tú, calca nel enllaz d'abaxo pa confirmar el cambéu.
-    email_confirm_html:
       greeting: Bones,
       hopefully_you: Dalguién (esperamos que tu) quier camudar la so direición de
         corréu en %{server_url} a %{new_address}.
       click_the_link: Si yes tú, calca nel enllaz d'abaxo pa confirmar el cambéu.
     lost_password:
       subject: '[OpenStreetMap] Solicitú de reestablecimientu de contraseña'
-    lost_password_plain:
       greeting: Bones,
       hopefully_you: Dalguién (esperamos que tu) pidió que se-y reanicie la contraseña
         na cuenta d'openstreetmap.org con estes señes de corréu.
       click_the_link: Si yes tu, calca nel enllaz d'abaxo pa reestablecer la contraseña.
-    lost_password_html:
-      greeting: Bones,
-      hopefully_you: Dalguién (posiblemente tu) pidió reestablecer la contraseña de
-        la cuenta d'openstreetmap.org con estes señes de corréu.
-      click_the_link: Si yes tu, calca nel enllaz d'abaxo pa reestablecer la contraseña.
     note_comment_notification:
       anonymous: Un usuariu anónimu
       greeting: Bones,
@@ -1569,17 +1546,6 @@ ast:
         lo faigas. Puedes marcar les tos ediciones como públiques dende la to %{user_page}.
       user_page_link: páxina d'usuariu
       anon_edits_link_text: Descubri por qué ye'l casu.
-      flash_player_required_html: Necesites un reproductor Flash pa usar Potlatch,
-        l'editor Flash d'OpenStreetMap. Puedes <a href="https://get.adobe.com/flashplayer/">descargar
-        el reproductor Flash d'Adobe.com</a>. Tamién hai disponibles <a href="https://wiki.openstreetmap.org/wiki/Editing">otres
-        opciones</a> pa editar OpenStreetMap.
-      potlatch_unsaved_changes: Tienes cambios ensin guardar. (Pa guardalos en Potlatch,
-        tienes de deseleicionar la vía o puntu actual si tas editando en vivo, o calcar
-        nel botón guardar si apaez esi botón).
-      potlatch2_not_configured: Potlatch 2 nun ta configuráu; visita https://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2
-        pa más información
-      potlatch2_unsaved_changes: Tienes cambios ensin guardar. (Pa guardar en Potlatch
-        2, tienes de calcar en guardar).
       id_not_configured: iD nun ta configuráu
       no_iframe_support: El to navegador nun tien encontu pa los iframes HTML, que
         se necesiten pa esta carauterística.
index 7d51098f7ef0ddbb2d67051d0a2058e9e2db3792..d23f997f181b114096bc84ee12a2f3094c0f36a7 100644 (file)
@@ -4,6 +4,7 @@
 # Author: AZISS
 # Author: Abijeet Patro
 # Author: Cekli829
+# Author: Huseyn
 # Author: Mushviq Abdulla
 # Author: Ruila
 # Author: SalihB
@@ -17,14 +18,23 @@ az:
     formats:
       friendly: '%e %B %Y  %H:%M'
   helpers:
+    file:
+      prompt: Fayl seçin
     submit:
       diary_comment:
         create: Qeyd et
       diary_entry:
         create: Yayımla
+        update: Yenilə
+      issue_comment:
+        create: Şərh əlavə et
       message:
         create: Göndər
+      client_application:
+        create: Qeydiyyatdan keç
+        update: Yenilə
       trace:
+        create: Yüklə
         update: Dəyişiklikləri yadda saxla
       user_block:
         create: Blok yarat
@@ -38,6 +48,7 @@ az:
       diary_comment: Gündəliyə şərh
       diary_entry: Gündəlikdə Yazı
       friend: Dost
+      issue: Problem
       language: Dil
       message: Mesaj
       node: Nöqtə
@@ -54,6 +65,7 @@ az:
       relation: Əlaqə
       relation_member: Əlaqənin İştirakçısı
       relation_tag: Əlaqənin Teqi
+      report: Hesabat
       session: Sessiya
       trace: Trek
       tracepoint: Trek Nöqtəsi
@@ -65,6 +77,11 @@ az:
       way_node: Xəttin Nöqtələri
       way_tag: Xəttin Teqi
     attributes:
+      client_application:
+        name: Ad (Vacib)
+        support_url: Dəstək linki
+        allow_read_prefs: Digər istifadəçilərin fikirlərini oxu
+        allow_write_api: Xəritəni dəyişmək
       diary_comment:
         body: Mətn
       diary_entry:
@@ -79,12 +96,14 @@ az:
       trace:
         user: İstifadəçi
         visible: Görünüş
-        name: Ad
+        name: Fayl adı
         size: Ölçüsü
         latitude: En dairəsi
         longitude: Uzunluq dairəsi
         public: İctimai
         description: İzah
+        gpx_file: GPX faylı yüklə
+        visibility: Görünüş
         tagstring: Etiketlər
       message:
         sender: Göndərən
@@ -93,6 +112,7 @@ az:
         recipient: Qəbul edən
       report:
         category: Şikayətinizin səbəbini seçin
+        details: Çətinlik haqqında daha ətraflı danışın (vacib)
       user:
         email: E-poçt
         active: Aktivdir
@@ -100,27 +120,37 @@ az:
         description: İzah
         languages: Dillər
         pass_crypt: Parol
+        pass_crypt_confirmation: Parolu təsdiqlə
+    help:
+      trace:
+        tagstring: Vergül ilə ayrılmış
+  datetime:
+    distance_in_words_ago:
+      half_a_minute: yarım dəqiqə əvvəl
   editor:
     default: Susmaya görə (hal-hazırda %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (brauzer üzərindən redaktə)
     id:
       name: iD
       description: iD (brauzerdaxili redaktə)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (brauzer üzərindən redaktə)
     remote:
       name: Uzaqdan idarəetmə
       description: Uzaqdan idarəetmə (JOSM və ya Merkaartor)
   auth:
     providers:
+      none: Heç biri
+      openid: OpenID
       google: Google
       facebook: Facebook
       windowslive: Windows Live
       github: GitHub
       wikipedia: Vikipediya
+  api:
+    notes:
+      rss:
+        title: OpenStreetMap haqqında qeydlər
+      entry:
+        comment: Şərh
+        full: Tam qeydlər
   browse:
     created: Yaradılıb
     closed: Bağlanıb
@@ -226,12 +256,7 @@ az:
     new:
       title: Yeni Gündəlik Yazısı
     form:
-      subject: 'Mövzu:'
-      body: 'Mətn:'
-      language: 'Dil:'
       location: 'Yerləşdiyi yer:'
-      latitude: 'En dairəsi:'
-      longitude: 'Uzunluq dairəsi:'
       use_map_link: xəritə üzərində göstər
     index:
       title: İstifadəçi gündəlikləri
@@ -809,19 +834,10 @@ az:
     signup_confirm:
       subject: '[OpenStreetMap] OpenStreetMap-ə xoş gəldiniz'
       greeting: Salam!
-    email_confirm_plain:
+    email_confirm:
       greeting: Salam,
-    email_confirm_html:
-      greeting: Salam,
-      click_the_link: Əgər bu sizsinizsə, zəhmət olmasa, dəyişiklikləri təsdiqləmək
-        üçün aşağı göstərilmiş istinaddakı ünvana keçin.
     lost_password:
       subject: '[OpenStreetMap] Parolu yeniləmək tələbi'
-    lost_password_plain:
-      greeting: Salam,
-      click_the_link: Əgər bu sizsinizsə, zəhmət olmasa, parolunuzu əvəzləmək üçün
-        aşağı göstərilmiş istinaddakı ünvana keçin.
-    lost_password_html:
       greeting: Salam,
       click_the_link: Əgər bu sizsinizsə, zəhmət olmasa, parolunuzu əvəzləmək üçün
         aşağı göstərilmiş istinaddakı ünvana keçin.
index 3a1e75b61dfb77089596ace119405f54ec2cb3cb..e3a29715a417a659200af737098a72361feb8f77 100644 (file)
@@ -1,8 +1,10 @@
 # Messages for Bashkir (башҡортса)
 # Exported from translatewiki.net
 # Export driver: phpyaml
+# Author: Abijeet Patro
 # Author: AiseluRB
 # Author: Lizalizaufa
+# Author: MR973
 # Author: Roustammr
 # Author: Sagan
 # Author: Visem
@@ -17,7 +19,36 @@ ba:
   time:
     formats:
       friendly: '%e %B %Y cәғәт %H:%M'
+  helpers:
+    file:
+      prompt: Файлды һайлағыҙ
+    submit:
+      diary_comment:
+        create: Һаҡларға
+      diary_entry:
+        create: Баҫтырырға
+        update: Яңыртырға
+      issue_comment:
+        create: Фекер өҫтәргә
+      message:
+        create: Ебәреү
+      client_application:
+        create: Теркәлеү
+        update: Яңыртырға
+      redaction:
+        create: Төҙәтеүҙе эшләү
+        update: Төҙәтеүҙе һаҡлау
+      trace:
+        create: Тейәү
+        update: Үҙгәрештәрҙе һаҡларға
+      user_block:
+        create: Блок яһау
+        update: Блокты яңыртыу
   activerecord:
+    errors:
+      messages:
+        invalid_email_address: Ысын электрон почта адресына оҡшамаған
+        email_address_not_routable: йүнәлешле түгел
     models:
       acl: Инеүҙе сикләү исемлеге
       changeset: Төҙәтеүҙәр пакеты
@@ -26,6 +57,7 @@ ba:
       diary_comment: Көндәлеккә комментарий
       diary_entry: Көндәлектәге яҙыу
       friend: Рәхим итегеҙ!
+      issue: бурыс
       language: Тел
       message: Хәбәр
       node: Төйөн
@@ -42,6 +74,7 @@ ba:
       relation: Мөнәсәбәт
       relation_member: Мөнәсәбәттәрҙә ҡатнашыусы
       relation_tag: Мөнәсәбәт тегы
+      report: Отчёт
       session: Сессия
       trace: Маршрут
       tracepoint: Маршрут нөктәһе
@@ -53,6 +86,18 @@ ba:
       way_node: Һыҙат нөктәһе
       way_tag: Һыҙат тегы
     attributes:
+      client_application:
+        name: Исем (Мотлаҡ)
+        url: Ҡушымта Url (Мотлаҡ)
+        support_url: Ҡулланыусыларға ярҙам URL
+        allow_read_prefs: ҡулланыусы көйләүҙәрен уҡыу
+        allow_write_prefs: ҡулланыусы көйләүҙәрен үҙгәртеү
+        allow_write_diary: көндәлектә яҙмалар булдырыу, комментарий биреү һәм дуҫтар
+          табыу
+        allow_write_api: картаны мөхәррирләү
+        allow_read_gpx: шәхси GPS-тректарҙы уҡыу
+        allow_write_gpx: GPS-тректарҙы тейәү
+        allow_write_notes: яҙмаларҙы төҙәтеү
       diary_comment:
         body: Текст
       diary_entry:
@@ -67,17 +112,23 @@ ba:
       trace:
         user: Ҡатнашыусы
         visible: Күренеш
-        name: Ð\90Ñ\82ама
+        name: Ð¤Ð°Ð¹Ð» Ð¸Ñ\81еме
         size: Күләм
         latitude: Киңлек
         longitude: Оҙонлоҡ
         public: Дөйөм
         description: Тасуирлау
+        gpx_file: GPX-файл тейәү
+        visibility: Күренеүсәнлек
+        tagstring: Тегтар
       message:
         sender: Ебәреүсе
         title: Тема
         body: Текст
         recipient: Алыусы
+      report:
+        category: 'Хәбәрегеҙҙең сәбәбен һайлағыҙ:'
+        details: Зинһар, проблема тураһында бер аҙ тулыраҡ мәғлүмәт бирегеҙ (мотлаҡ).
       user:
         email: Электрон почта адресы
         active: Әүҙем
@@ -85,38 +136,110 @@ ba:
         description: Тасуирлау
         languages: Телдәр
         pass_crypt: Серһүҙ
+        pass_crypt_confirmation: Паролде раҫлағыҙ
+    help:
+      trace:
+        tagstring: өтөр аша
+  datetime:
+    distance_in_words_ago:
+      about_x_hours:
+        one: яҡынса 1 сәғәт элек
+        other: яҡынса %{count} сәғәт элек
+      about_x_months:
+        one: яҡынса 1 ай элек
+        other: яҡынса %{count} ай элек
+      about_x_years:
+        one: яҡынса 1 йыл элек
+        other: яҡынса %{count} йыл элек
+      almost_x_years:
+        one: 1 йыл элек тиерлек
+        other: '%{count} йыл элек тиерлек'
+      half_a_minute: ярты минут элек
+      less_than_x_seconds:
+        one: 1 секунд кәм элек
+        other: '%{count} секунд кәм элек'
+      less_than_x_minutes:
+        one: 1 минут кәм элек
+        other: '%{count} минут кәм элек'
+      over_x_years:
+        one: яҡынса 1 йыл элек
+        other: яҡынса %{count} йыл элек
+      x_seconds:
+        one: 1 секунд элек
+        other: '%{count} секунд элек'
+      x_minutes:
+        one: 1 минут элек
+        other: '%{count} минут элек'
+      x_days:
+        one: 1 көн элек
+        other: '%{count} көн элек'
+      x_months:
+        one: 1 ай элек
+        other: '%{count} ай элек'
+      x_years:
+        one: 1 йыл элек
+        other: '%{count} йыл элек'
   editor:
     default: Һайланмаған (ҡуйылған %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (браузерҙағы мөхәррир)
     id:
       name: iD
       description: iD (браузерҙағы мөхәррир)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (браузерҙағы мөхәррир)
     remote:
       name: Ситтән тороп идара итеү
-      description: Ситтән тороп идара итеү (JOSM йәки Merkaartor)
+      description: Ситтән тороп идара итеү (JOSM, Potlatch, Merkaartor)
+  auth:
+    providers:
+      none: Юҡ
+      openid: OpenID
+      google: Google
+      facebook: Facebook
+      windowslive: Windows Live
+      github: GitHub
+      wikipedia: Википедия
+  api:
+    notes:
+      comment:
+        opened_at_html: Яһалған %{when}
+        opened_at_by_html: Яһалған %{when} ҡулланыусы %{user}
+        commented_at_html: Яңыртылды %{when}
+        commented_at_by_html: Яңыртылды %{when} ҡулланыусы %{user}
+        closed_at_html: Эшкәртелгән %{when}
+        closed_at_by_html: Эшкәртелгән %{when} ҡулланыусы %{user}
+        reopened_at_html: Кире асылды %{when}
+        reopened_at_by_html: Кире асылды %{when} ҡулланыусы %{user}
+      rss:
+        title: OpenStreetMap Яҙмалары
+        description_area: Һеҙҙең өлкәлә яһалған, комментарий бирелгән йәки ябылған
+          яҙмалар исемлеге [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
+        description_item: RSS-яҙмалар ағымы %{id}
+        opened: яңы яҙма (яҡынса %{place})
+        closed: ябылған яҙма (яҡынса %{place})
+        reopened: яңы асылған яҙма (яҡынса %{place})
+      entry:
+        comment: Комментарий
+        full: Тулы текст
   browse:
     created: Булдырылған
     closed: Ябыҡ
-    created_html: Булдырылған <abbr title='%{title}'>%{time} кирегә</abbr>
-    closed_html: Ябылған <abbr title='%{title}'>%{time} кирегә</abbr>
-    created_by_html: Төҙәтелгән <abbr title='%{title}'>%{time} кирегә</abbr> ҡулланыусы
-      тарафынан %{user}
-    deleted_by_html: Ябылған <abbr title='%{title}'>%{time} кирегә</abbr>ҡулланыусы
-      тарафынан%{user}
-    edited_by_html: Төҙәтелгән <abbr title='%{title}'>%{time} кирегә</abbr> ҡулланыусы
-      тарафынан %{user}
-    closed_by_html: Ябылған <abbr title='%{title}'>%{time} кирегә</abbr>ҡулланыусы
-      тарафынан%{user}
+    created_html: Яһалған <abbr title='%{title}'>%{time}</abbr>
+    closed_html: Ябылған <abbr title='%{title}'>%{time}</abbr>
+    created_by_html: Яһалған <abbr title='%{title}'>%{time}</abbr> ҡулланыусы тарафынан
+      %{user}
+    deleted_by_html: Юйылған <abbr title='%{title}'>%{time}</abbr>ҡулланыусы тарафынан%{user}
+    edited_by_html: Төҙәтелгән <abbr title='%{title}'>%{time}</abbr> ҡулланыусы тарафынан
+      %{user}
+    closed_by_html: Ябылған <abbr title='%{title}'>%{time}</abbr>ҡулланыусы тарафынан%{user}
     version: Версия
     in_changeset: Төҙәтеүҙәр пакеты
     anonymous: Аноним
     no_comment: (комментарий юҡ)
     part_of: Ҡатнаша
+    part_of_relations:
+      one: 1 мөнәсәбәт
+      other: '%{count} мөнәсәбәттәр'
+    part_of_ways:
+      one: 1 юл
+      other: '%{count} юлдар'
     download_xml: ' XML-ды күсереү'
     view_history: Тарихты ҡарау
     view_details: Ентекләберәк
@@ -127,13 +250,13 @@ ba:
       node: Нөктәләр (%{count})
       node_paginated: Нөктәләр (%{x}-%{y} из %{count})
       way: Һыҙыҡтар (%{count})
-      way_paginated: Юлдар (%{x}-%{y} %{графа}һынан)
+      way_paginated: Юлдар (%{x}-%{y} %{count}һынан)
       relation: Мөнәсәбәттәр (%{count})
-      relation_paginated: Ð\91Ó\99йлÓ\99неÑ\88Ñ\82Ó\99Ñ\80 (%{x}-%{y} %{гÑ\80аÑ\84а}нан)
+      relation_paginated: Ð\9cөнÓ\99Ñ\81Ó\99бÓ\99Ñ\82Ñ\82Ó\99Ñ\80 (%{x}-%{y} %{count}нан)
       comment: Комментарийҙар (%{count})
-      hidden_commented_by: ' %{user} <abbr title=''%{exact_time}''>%{when}тан йәшерен
-        комментарий, кирегә</abbr>'
-      commented_by: Ҡулланыусы комментарийы %{user} <abbr title='%{exact_time}'>%{when}
+      hidden_commented_by_html: ' %{user} <abbr title=''%{exact_time}''>%{when}тан
+        Ð¹Ó\99Ñ\88еÑ\80ен ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ\82аÑ\80ий, ÐºÐ¸Ñ\80егÓ\99</abbr>'
+      commented_by_html: Ҡулланыусы комментарийы %{user} <abbr title='%{exact_time}'>%{when}
         кирегә</abbr>
       changesetxml: Төҙәтеүҙәр пакетының XML-ы
       osmchangexml: osmChange XML
@@ -142,30 +265,36 @@ ba:
         title_comment: Төҙәтеүҙәр пакеты %{id} — %{comment}
       join_discussion: Фекер алышыуға ҡушылыу өсөн системаға инегеҙ
       discussion: Фекер алышыу
+      still_open: Төҙәтмәләр пакеты әле асыҡ. Фекер алышыу, төҙәтмәләр пакеты ябылғандан
+        һуң ғына буласаҡ.
     node:
-      title: 'Нөктә: %{name}'
-      history_title: 'Нөктә тарихы: %{name}'
+      title_html: 'Нөктә: %{name}'
+      history_title_html: 'Нөктә тарихы: %{name}'
     way:
-      title: 'Һыҙат: %{name}'
-      history_title: 'Һыҙат тарихы: %{name}'
+      title_html: 'Һыҙат: %{name}'
+      history_title_html: 'Һыҙат тарихы: %{name}'
       nodes: Нөктәләр
-      also_part_of:
+      also_part_of_html:
         one: һыҙатта бар %{related_ways}
         other: һыҙаттарҙа бар %{related_ways}
     relation:
-      title: 'Мөнәсәбәт: %{name}'
-      history_title: 'Мөнәсәбәт тарихы: %{name}'
+      title_html: 'Мөнәсәбәт: %{name}'
+      history_title_html: 'Мөнәсәбәт тарихы: %{name}'
       members: Ҡатнашыусылар
+      members_count:
+        one: 1 ағза
+        other: '%{count} ағзалар'
     relation_member:
-      entry_role: '%{type} %{name} ролендә %{role}'
+      entry_role_html: '%{type} %{name} ролендә %{role}'
       type:
         node: Нөктә
         way: Һыҙат
         relation: Мөнәсәбәт
     containing_relation:
-      entry: Мөнәсәбәт %{relation_name}
-      entry_role: Мөнәсәбәт %{relation_name} (ролендә %{relation_role})
+      entry_html: Мөнәсәбәт %{relation_name}
+      entry_role_html: Мөнәсәбәт %{relation_name} (ролендә %{relation_role})
     not_found:
+      title: Табылманы
       sorry: 'Үкенескә ҡаршы, %{type} #%{id} табылманы.'
       type:
         node: Нөктә
@@ -174,6 +303,7 @@ ba:
         changeset: Төҙәтеүҙәр пакеты
         note: Иҫкәрмә
     timeout:
+      title: Тайм-аут Хата
       sorry: Ғәфү итегеҙ, %{id}-тағы %{type} өсөн мәғлүмәттәр күсереү өсөн бик оҙон.
       type:
         node: Нөктә
@@ -193,6 +323,7 @@ ba:
       feature_warning: Объекттарҙың %{num_features}-ын күсереп алыу мотлаҡ, был брауҙерығыҙҙы
         яйлатыуы мөмкин. Ошо мәғлүмәттәрҙе ысынлап та ҡарарға теләйһегеҙме?
       load_data: Мәғлүмәттәрҙе күсерергә
+      loading: Тейәү...
     tag_details:
       tags: Тегтар
       wiki_link:
@@ -201,6 +332,7 @@ ba:
       wikidata_link: Викимәғлүмәттәрҙәге %{page} элементы
       wikipedia_link: ' Википедиялағы %{page} мәҡәләһе'
       telephone_link: Шылтыратырға %{phone_number}
+      colour_preview: Төҫтәрҙе ҡарау %{colour_value}
     note:
       title: ' %{id} искәрмәһе'
       new_note: Яңы мәҡәлә
@@ -208,33 +340,34 @@ ba:
       open_title: 'Эшкәртелмәгән мәҡәлә #%{note_name}'
       closed_title: 'Эшкәртелгән мәҡәләа #%{note_name}'
       hidden_title: 'Йәшерелгән яҙма #%{note_name}'
-      open_by: Ҡулланыусы тарафынан булдырылған %{user} <abbr title='%{exact_time}'>%{when}
+      opened_by_html: Ҡулланыусы тарафынан булдырылған %{user} <abbr title='%{exact_time}'>%{when}
         кирегә</abbr>
-      open_by_anonymous: Аноним тарафынан булдырылған <abbr title='%{exact_time}'>%{when}
+      opened_by_anonymous_html: Аноним тарафынан булдырылған <abbr title='%{exact_time}'>%{when}
         кирегә</abbr>
-      commented_by: Ҡулланыусы комментарийы %{user} <abbr title='%{exact_time}'>%{when}
+      commented_by_html: Ҡулланыусы комментарийы %{user} <abbr title='%{exact_time}'>%{when}
         кирегә</abbr>
-      commented_by_anonymous: Аноним комментарийы  <abbr title='%{exact_time}'>%{when}
+      commented_by_anonymous_html: Аноним комментарийы  <abbr title='%{exact_time}'>%{when}
         кирегә</abbr>
-      closed_by: Ҡулланыусы тарафынан эшкәртелгән %{user} <abbr title='%{exact_time}'>%{when}
+      closed_by_html: Ҡулланыусы тарафынан эшкәртелгән %{user} <abbr title='%{exact_time}'>%{when}
         кирегә</abbr>
-      closed_by_anonymous: Аноним тарафынан рөхсәт ителгән <abbr title='%{exact_time}'>%{when}
+      closed_by_anonymous_html: Аноним тарафынан рөхсәт ителгән <abbr title='%{exact_time}'>%{when}
         кирегә</abbr>
-      reopened_by: Ҡулланыусы тарафынан ҡабаттан асылған %{user} <abbr title='%{exact_time}'>%{when}
+      reopened_by_html: Ҡулланыусы тарафынан ҡабаттан асылған %{user} <abbr title='%{exact_time}'>%{when}
         кирегә</abbr>
-      reopened_by_anonymous: Аноним тарафынан ҡабаттан асылған <abbr title='%{exact_time}'>%{when}
+      reopened_by_anonymous_html: Аноним тарафынан ҡабаттан асылған <abbr title='%{exact_time}'>%{when}
         кирегә</abbr>
-      hidden_by: Йәшерелгән %{user} <abbr title='%{exact_time}'>%{when} кирегә</abbr>
+      hidden_by_html: Йәшерелгән %{user} <abbr title='%{exact_time}'>%{when} кирегә</abbr>
+      report: Был яҙма тураһында хәбәр итеү
     query:
       title: Объекттар тураһында мәғлүмәт
       introduction: Яҡындағы объекттарҙы табыу өсөн картаға баҫығыҙ
       nearby: Яҡындағы объекттар
       enclosing: Урыны
-  changeset:
+  changesets:
     changeset_paging_nav:
       showing_page: ' %{page} бите'
       next: Киләһе »
-      previous: Алдағы
+      previous: « Алдағы
     changeset:
       anonymous: Аноним
       no_edits: (төҙәтеүҙәр юҡ)
@@ -248,11 +381,11 @@ ba:
     index:
       title: Төҙәтеүҙәр пакеты
       title_user: ' %{user} ҡулланыусыһының төҙәтеүҙәр пакеты'
-      title_friend: Дуҫтарығыҙҙың төҙәтеүҙәре пакеты
-      title_nearby: Эргәләге ҡатнашыусыларҙың төҙәтеүҙәре пакеты
-      empty: Төҙәтеүҙәр пакеты табылманы
-      empty_area: Был өлкәлә төҙәтеүҙәр пакеты юҡ
-      empty_user: Был ҡулланыусының төҙәтеүҙәре пакеы юҡ
+      title_friend: Дуҫтарҙың төҙәтеүҙәр пакеты
+      title_nearby: Эргәләге ҡатнашыусыларҙың төҙәтеүҙәр пакеты
+      empty: Төҙәтеүҙәр пакеты табылманы.
+      empty_area: Был өлкәлә төҙәтеүҙәр пакеты юҡ.
+      empty_user: Был ҡулланыусының төҙәтеүҙәр пакеы юҡ.
       no_more: Башҡаса бер ниндәй ҙә төҙәтеүҙәр пакеты табылманы
       no_more_area: Был өлкәлә башҡа төҙәтеүҙәр пакеты юҡ
       no_more_user: Был ҡулланыусының башҡа төҙәтеүҙәре пакеы юҡ
@@ -260,17 +393,18 @@ ba:
     timeout:
       sorry: Үкенескә күрә, һеҙ һораған төҙәтеүҙәр пакеты исемлеге күсереү өсөн бик
         оҙон
-    rss:
+  changeset_comments:
+    comment:
+      commented_at_by_html: Яңыртылған%{}элек %{ҡулланыусы}тарафынан
+    index:
       title_all: OpenStreetMap төҙәтеүҙәр пакеты буйынса фекерләшеү
       title_particular: ' OpenStreetMap #%{changeset_id} төҙәтеүҙәр пакеты буйынса
         фекерләшеү'
-      commented_at_html: Яңыртылған%{}элек
-      commented_at_by_html: Яңыртылған%{}элек %{ҡулланыусы}тарафынан
-      full: Бөтөн фекерләшеү
-  diary_entry:
+  diary_entries:
     new:
       title: Яңы көндәлеккә инеү
-      publish_button: Баҫтырырға
+    form:
+      use_map_link: картаны ҡуллан
     index:
       title: Көндәлектәр
       title_friends: Дуҫтарың көндәлектәре
@@ -284,25 +418,19 @@ ba:
       newer_entries: Яңыраҡ яҙмалар
     edit:
       title: Яҙманы мөхәррирләү
-      body: Нигеҙ текст
-      language: 'Тел:'
-      latitude: Географик киңлек
-      longitude: Географик оҙонлоҡ
-      use_map_link: картаны ҡуллан
-      save_button: Һаҡларға
       marker_text: Көндәлек яҙыу урыны
     show:
       title: '%{ҡулланыусы}ның көндәлеге|%{титул}'
       user_title: '%{ҡулланыусы}ның көндәлеге'
       leave_a_comment: Фекер ҡалдыр
-      login_to_leave_a_comment: Фекер яҙыу өсөн %{login_link}
+      login_to_leave_a_comment_html: Фекер яҙыу өсөн %{login_link}
     no_such_entry:
       title: Бындай көндәлек яҙыуы юҡ
       heading: '%{id} шәхси яҙыуына инеп булмай'
       body: Ҡыҙғанысҡа ҡаршы, %{id}шәхси яҙыуы йәки фекере табылманы. Дөрөҫ яҙылышын
         тикшер. Яңылыш ссылкаға күскәнһең, ахыры.
     diary_entry:
-      posted_by: Ебәрҙем%{link_user}%{created}, тел:%{language_link}
+      posted_by_html: Ебәрҙем%{link_user}%{created}, тел:%{language_link}
       comment_link: Фекереңде яҙ
       reply_link: Инеүеңде раҫла
       comment_count:
@@ -310,7 +438,7 @@ ba:
       edit_link: Был яҙманы үҙгәрт
       hide_link: Был яҙманы йәшер
     diary_comment:
-      comment_from: '%{link_user}тарафынан%{comment_created_at}көндө ҡаралған'
+      comment_from_html: '%{link_user}тарафынан%{comment_created_at}көндө ҡаралған'
       hide_link: Был фекерҙе йәшереү
     feed:
       user:
@@ -327,24 +455,23 @@ ba:
         яҙҙы'
       post: Йәшереү
       when: ҡасан
-      ago: '%{ago}элек'
       newer_comments: Яңыраҡ фекерҙәр
       older_comments: Иҫкерәк фекерҙәр
   geocoder:
     search:
       title:
-        latlon: |2-
+        latlon_html: |2-
 
           <a href="http://openstreetmap.org/">эсендәге һөҙөмтәләр</a>
-        ca_postcode: <a href="http://www.npemap.org.uk/">NPEMap / FreeThe Postcode</a>алынған
+        ca_postcode_html: <a href="http://www.npemap.org.uk/">NPEMap / FreeThe Postcode</a>алынған
           һөҙөмтәләр
-        osm_nominatim: <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
+        osm_nominatim_html: <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
           Nominatim</a>нан сыҡҡан һөҙөмтәләр
-        geonames: <a href="http://www.geonames.org/">GeoNames</a>нан сыҡҡан һөҙөмтәләр
-        osm_nominatim_reverse: <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
+        geonames_html: <a href="http://www.geonames.org/">GeoNames</a>нан сыҡҡан һөҙөмтәләр
+        osm_nominatim_reverse_html: <a href="http://nominatim.openstreetmap.org/">OpenStreetMap
           Nominatim</a>нан һөҙөмтәләр
-        geonames_reverse: <a href="http://www.geonames.org/">GeoNames</a>нан сыҡҡан
-          һөҙөмтәләр
+        geonames_reverse_html: <a href="http://www.geonames.org/">GeoNames</a>нан
+          сыҡҡан һөҙөмтәләр
     search_osm_nominatim:
       prefix:
         aerialway:
@@ -418,19 +545,15 @@ ba:
           police: Полиция
           post_box: Почта йәшниге
           post_office: Почта бүлексәһе
-          preschool: Мәктәпкәсә уҡытыу учреждениеһы
           prison: Төрмә
           pub: Һырахана
           public_building: Йәмғиәти бина
           recycling: Киренән эшкәртеү урыны
           restaurant: Ресторан
-          retirement_home: Ҡарттар йорто
-          sauna: Сауна
           school: Мәктәп
           shelter: Йәшенеү урыны
           shower: Душ
           social_centre: Йәмғиәти үҙәк
-          social_club: Берләшмә
           social_facility: Йәмәғәт ойошмаһы
           studio: Студия
           swimming_pool: Бассейн
@@ -445,7 +568,6 @@ ba:
           village_hall: Утар
           waste_basket: Сүп һауыты
           waste_disposal: ҡалдыҡтарҙы юҡ итеү
-          youth_centre: Йәштәр үҙәге
         boundary:
           administrative: административ сик
           census: иҫәп алыу участогының сиге
@@ -511,7 +633,6 @@ ba:
           tertiary_link: Сиҙәм юлы
           track: Ауыл юлы
           traffic_signals: Светофор
-          trail: Һуҡмаҡ
           trunk: Төп юл
           trunk_link: Магистраль
           unclassified: Урындағы юл
@@ -528,7 +649,6 @@ ba:
           fort: Ҡойма
           heritage: Мәҙәни мираҫ
           house: Йорт
-          icon: Тәре
           manor: Поместье
           memorial: Һәйкәл
           mine: Карьер
@@ -570,7 +690,6 @@ ba:
           reservoir_watershed: Һыу һаҡлағыстың һыу айырсаһы
           residential: Йәшәү районы
           retail: Һатыу итеү биләмәһе
-          road: Юл селтәре зонаһы
           village_green: Йәшел ауыл
           vineyard: Йөҙөм баҡсаһы
           "yes": Ерҙе ҡулланыу
index 9969eac9c6e29866b5bb8bb5a4929c581ce53241..0baa4d6c96123f499cad4700ba3e8f888b4dec9f 100644 (file)
@@ -26,7 +26,7 @@ be-Tarask:
         create: Даслаць
       client_application:
         create: Рэгістрацыя
-        update: Ð Ñ\8dдагаваць
+        update: Ð\90бнавÑ\96ць
       redaction:
         create: Стварыць рэдакцыю
         update: Захаваць рэдакцыю
@@ -79,6 +79,8 @@ be-Tarask:
       way_tag: Тэг дарогі
     attributes:
       client_application:
+        name: Імя (абавязкова)
+        url: Асноўны URL праграмы (абавязкова)
         callback_url: URL-адрас зваротнага выкліку
         support_url: URL-адрас падтрымкі
       diary_comment:
@@ -95,15 +97,15 @@ be-Tarask:
       trace:
         user: Карыстальнік
         visible: Бачны
-        name: Назва
+        name: Назва файлу
         size: Памер
         latitude: Шырата
         longitude: Даўгата
         public: Публічны
         description: Апісаньне
-        gpx_file: 'Загрузіць GPX-файл:'
-        visibility: 'Бачнасьць:'
-        tagstring: 'Тэгі:'
+        gpx_file: Загрузіць GPX-файл
+        visibility: Бачнасьць
+        tagstring: Тэгі
       message:
         sender: Адпраўшчык
         title: Тэма
@@ -160,15 +162,9 @@ be-Tarask:
         other: '%{count} гады таму'
   editor:
     default: Па змоўчваньні (цяпер %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (рэдактар у браўзэры)
     id:
       name: iD
       description: iD (рэдактар у браўзэры)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (рэдактар у браўзэры)
     remote:
       name: Аддаленае кіраваньне
       description: Аддаленае кіраваньне (JOSM ці Merkaartor)
@@ -194,6 +190,13 @@ be-Tarask:
         reopened_at_by_html: Пераадкрыта %{when} удзельнікам %{user}
       rss:
         title: Нататкі OpenStreetMap
+        description_area: Сьпіс заўвагаў, створаных, пракамэнтаваных ці закрытых каля
+          вас [(%{min_lat}|%{min_lon}) — (%{max_lat}|%{max_lon})]
+        description_item: RSS-стужка для заўвагаў %{id}
+        opened: новая нататка (каля %{place})
+        commented: новы камэнтар (каля %{place})
+        closed: закрытая нататка (каля %{place})
+        reopened: пераадкрытая нататка (каля %{place})
       entry:
         full: Поўны тэкст
   browse:
@@ -288,12 +291,7 @@ be-Tarask:
     new:
       title: Новы запіс у дзёньніку
     form:
-      subject: 'Тэма:'
-      body: 'Тэкст:'
-      language: 'Мова:'
       location: 'Месцазнаходжаньне:'
-      latitude: 'Шырата:'
-      longitude: 'Даўгата:'
       use_map_link: на мапе
     index:
       title: Дзёньнікі карыстальнікаў
@@ -323,9 +321,9 @@ be-Tarask:
         Калі ласка, праверце дакладнасьць напісаньня, ці, магчыма, спасылка па якой
         Вы перайшлі, няслушная.
     diary_entry:
-      posted_by_html: Дасланы %{link_user} %{created} на %{language_link}
+      posted_by_html: Дасланы %{link_user} %{created} на %{language_link}.
       comment_link: Камэнтаваць гэты запіс
-      reply_link: Ð\90дказаÑ\86Ñ\8c Ð½Ð° Ð³Ñ\8dÑ\82Ñ\8b Ð·Ð°Ð¿Ñ\96Ñ\81
+      reply_link: Ð\90даÑ\81лаÑ\86Ñ\8c Ð°Ñ\9eÑ\82аÑ\80Ñ\83 Ð¿Ð°Ð²ÐµÐ´Ð°Ð¼Ð»ÐµÐ½Ñ\8cне
       comment_count:
         few: '%{count} камэнтары'
         one: '%{count} камэнтар'
@@ -447,15 +445,15 @@ be-Tarask:
           national_park: Нацыянальны парк
           protected_area: Ахоўная зона
         building:
-          apartments: Ð¨Ð¼Ð°Ñ\82кваÑ\82Ñ\8dÑ\80нÑ\8b Ð´Ð¾Ð¼
+          apartments: Ð\90паÑ\80Ñ\82амÑ\8dнÑ\82Ñ\8b
           chapel: Капліца
-          church: Ð¦Ð°Ñ\80ква
+          church: Ð\91Ñ\83дÑ\8bнак Ñ\85Ñ\80амÑ\83
           commercial: Камэрцыйны будынак
           dormitory: Інтэрнат
-          farm: Ð¤Ñ\8dÑ\80ма
+          farm: Ð\94ом Ð½Ð° Ñ\84Ñ\8dÑ\80ме
           garage: Гараж
           hospital: Будынак шпіталю
-          hotel: Ð\93аÑ\82Ñ\8dлÑ\8c
+          hotel: Ð\91Ñ\83дÑ\8bнак Ð³Ð°Ñ\82Ñ\8dлÑ\8e
           house: Дом
           industrial: Прамысловы будынак
           office: Офісны будынак
@@ -463,8 +461,8 @@ be-Tarask:
           residential: Жылы будынак
           retail: Будынак розьнічнага гандлю
           school: Школа
-          terrace: Ð¨Ñ\8dÑ\80аг Ð¶Ñ\8bлÑ\8bÑ\85 Ð´Ð°Ð¼Ð¾ў
-          train_station: Ð§Ñ\8bгÑ\83наÑ\87наÑ\8f Ñ\81Ñ\82анÑ\86Ñ\8bÑ\8f
+          terrace: Ð¨Ñ\8dÑ\80аг Ð¶Ñ\8bлÑ\8bÑ\85 Ð±Ñ\83дÑ\8bнкаў
+          train_station: Ð\91Ñ\83дÑ\8bнак Ñ\87Ñ\8bгÑ\83наÑ\87най Ñ\81Ñ\82анÑ\86Ñ\8bÑ\96
           university: Унівэрсытэт
         highway:
           bridleway: Дарога для коней
@@ -825,26 +823,12 @@ be-Tarask:
       subject: '[OpenStreetMap] Вітаем у OpenStreetMap'
     email_confirm:
       subject: '[OpenStreetMap] Пацьвердзіце Ваш адрас электроннай пошты'
-    email_confirm_plain:
       greeting: Вітаем,
       click_the_link: Калі гэта Вы, калі ласка, націсьніце на спасылку ніжэй, каб
         пацьвердзіць зьмену.
-    email_confirm_html:
-      greeting: Вітаем,
-      hopefully_you: Нехта (спадзяемся што Вы) жадае зьмяніць свой адрас электроннай
-        пошты ў %{server_url} на %{new_address}.
-      click_the_link: Калі гэта Вы, калі ласка, націсьніце на спасылку ніжэй, каб
-        пацьвердзіць зьмену.
     lost_password:
       subject: '[OpenStreetMap] Запыт на зьмену паролю'
-    lost_password_plain:
-      greeting: Вітаем,
-      click_the_link: Калі гэта Вы, калі ласка, націсьніце на спасылку ніжэй, каб
-        скінуць Ваш пароль.
-    lost_password_html:
       greeting: Вітаем,
-      hopefully_you: Нехта (магчыма Вы) запытаў зьмену паролю для гэтага адрасу электроннай
-        пошты openstreetmap.org.
       click_the_link: Калі гэта Вы, калі ласка, націсьніце на спасылку ніжэй, каб
         скінуць Ваш пароль.
   messages:
@@ -1012,18 +996,6 @@ be-Tarask:
         Вы можаце зрабіць Вашыя рэдагаваньні публічнымі на Вашай %{user_page}.
       user_page_link: старонцы карыстальніка
       anon_edits_link_text: Даведацца ў чым справа.
-      flash_player_required_html: Каб выкарыстоўваць Potlatch, флэш-рэдактар для OpenStreetMap,
-        неабходны Flash-плэер. Вы можаце <a href="https://get.adobe.com/flashplayer/">загрузіць
-        Flash-плэер з Adobe.com</a>. Існуюць і <a href="https://wiki.openstreetmap.org/wiki/Editing">іншыя
-        магчымасьці</a> для рэдагаваньня OpenStreetMap.
-      potlatch_unsaved_changes: Вы маеце незахаваныя зьмены. (Для таго каб захаваць
-        зьмены ў Potlatch, Вам неабходна зьняць пазначэньне з цяперашняй дарогі ці
-        пункту, калі рэдагуеце ўжывую, ці націснуць кнопку «захаваць».)
-      potlatch2_not_configured: Potlatch 2 ня быў наладжаны — калі ласка, паглядзіце
-        https://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2 дзеля дадатковых
-        зьвестак
-      potlatch2_unsaved_changes: Вы маеце незахаваныя зьмены. (Каб захаваць у Potlatch
-        2, Вам неабходна націснуць кнопку «захаваць».)
       no_iframe_support: Ваш браўзэр не падтрымлівае рамкі HTML, якія зьяўляюцца неабходнымі
         для гэтай магчымасьці.
     export:
@@ -1561,7 +1533,7 @@ be-Tarask:
     revoke:
       title: Пацьвердзіць адмену ролі
       heading: Пацьвердзіць адмену ролі
-      are_you_sure: Вы ўпэўнены, што жадаеце адмяніць ролю `%{role}' удзельніка `%{name}'?
+      are_you_sure: Вы ўпэўнены, што жадаеце скасаваць ролю `%{role}' удзельніка `%{name}'?
       confirm: Пацьвердзіць
       fail: Не магчыма адмяніць ролю `%{role}' удзельніка `%{name}'. Калі ласка, праверце
         каб удзельнік і роля былі слушнымі.
index 7cfe7bd0cd8dc4ad9bcb1b73d6a33ac4d8f05a6a..e339ab8a546317917083c45f177499553e5f8662 100644 (file)
@@ -7,6 +7,7 @@
 # Author: Goshaproject
 # Author: Jhnrvr
 # Author: Jim-by
+# Author: Kareyac
 # Author: Macofe
 # Author: Maksim L.
 # Author: Mechanizatar
@@ -197,15 +198,9 @@ be:
         other: '%{count} гады(оў) таму'
   editor:
     default: Тыповы (зараз %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (браўзэрны рэдактар)
     id:
       name: iD
       description: iD (браўзэрны рэдактар)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (браўзэрны рэдактар)
     remote:
       name: Вонкавы рэдактар
       description: вонкавага рэдактара (JOSM або Merkaartor)
@@ -414,12 +409,7 @@ be:
     new:
       title: Новы запіс дзённіку
     form:
-      subject: 'Тэма:'
-      body: 'Змест:'
-      language: 'Мова:'
       location: 'Месца:'
-      latitude: 'Шырата:'
-      longitude: 'Даўгата:'
       use_map_link: карыстацца картай
     index:
       title: Дзённікі карыстальнікаў
@@ -1272,13 +1262,6 @@ be:
         інфармацыю.
     email_confirm:
       subject: '[OpenStreetMap] Пацвердзіце ваш адрас электроннай пошты'
-    email_confirm_plain:
-      greeting: Добры дзень,
-      hopefully_you: 'Хтосьці (спадзяемся, што вы) жадае змяніць свой адрас электроннай
-        пошты ў %{server_url} на адрас: %{new_address}.'
-      click_the_link: Калі гэта вы, то перайдзіце па спасылцы, размешчанай ніжэй,
-        каб пацвердзіць змену.
-    email_confirm_html:
       greeting: Добры дзень,
       hopefully_you: 'Хтосьці (спадзяемся, што вы) жадае змяніць свой адрас электроннай
         пошты ў %{server_url} на адрас: %{new_address}.'
@@ -1286,18 +1269,11 @@ be:
         каб пацвердзіць змену.
     lost_password:
       subject: '[OpenStreetMap] Запыт на змену пароля'
-    lost_password_plain:
-      greeting: Прывітанне,
+      greeting: Добры дзень,
       hopefully_you: Хтосьці (спадзяемся, што вы) запытаў змену пароля для рахунка
         на openstreetmap.org, прывязанага да гэтага адраса электроннай пошты.
       click_the_link: Калі гэта вы, калі ласка, перайдзіце па спасылцы, паказанай
         ніжэй, каб змяніць ваш пароль.
-    lost_password_html:
-      greeting: Прывітанне,
-      hopefully_you: Хтосьці (магчыма, вы) запытаў змену пароля для рахунка на openstreetmap.org,
-        які выкарыстоўвае гэты адрас электроннай пошты.
-      click_the_link: Калі гэта вы, калі ласка, перайдзіце па спасылцы, паказанай
-        ніжэй, каб змяніць ваш пароль.
     note_comment_notification:
       anonymous: Ананімны карыстальнік
       greeting: Прывітанне,
@@ -1416,6 +1392,14 @@ be:
       as_unread: Паведамленне адмечана нечытаным
     destroy:
       destroyed: Паведамленне выдалена
+  shared:
+    markdown_help:
+      subheading: Падзагаловак
+      link: Спасылка
+      text: Тэкст
+      image: Выява
+    richtext_field:
+      edit: Правіць
   site:
     about:
       next: Далей
@@ -1592,17 +1576,6 @@ be:
         Вы можаце зрабіць Вашыя рэдагаваньні публічнымі на Вашай %{user_page}.
       user_page_link: старонка карыстальніка
       anon_edits_link_text: Даведацца ў чым справа.
-      flash_player_required_html: Каб выкарыстоўваць рэдактар Potlatch неабходны Flash-плэер.
-        Вы можаце <a href="https://get.adobe.com/flashplayer/">загрузіць Flash-плэер
-        з Adobe.com</a>. Існуюць і <a href="https://wiki.openstreetmap.org/wiki/Editing">іншыя
-        магчымасці</a> для рэдагавання OpenStreetMap.
-      potlatch_unsaved_changes: Маюцца незахаваныя змены. (Для захавання ў Potlatch
-        зніміце вылучэнне з лініі або пункта, калі рэдагуеце ў «жывым» рэжыме, альбо
-        націсніце кнопку «захаваць», калі вы ў рэжыме адкладзенага захавання.)
-      potlatch2_not_configured: Potlatch 2 не быў наладжаны. Калі ласка, паглядзіце
-        https://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2
-      potlatch2_unsaved_changes: Вы маеце незахаваныя змены. (Каб захаваць у Potlatch
-        2, Вам неабходна націснуць кнопку «захаваць».)
       id_not_configured: iD не быў настроены
       no_iframe_support: Ваш браўзэр не падтрымлівае HTML iframe, якія неабходныя
         для гэтай функцыі.
index 91069d8e5e42907a8cb2f5b2989e56603f7f1085..b858daf3ad0abe7799613a3279d937616c5e4856 100644 (file)
@@ -3,6 +3,7 @@
 # Export driver: phpyaml
 # Author: Abijeet Patro
 # Author: DCLXVI
+# Author: Kareyac
 # Author: Lyubomirv
 # Author: MrPanyGoff
 # Author: Plamen
@@ -177,15 +178,9 @@ bg:
         other: преди %{count} години
   editor:
     default: По подразбиране (в момента %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (редактор в браузъра)
     id:
       name: iD
       description: iD (редактиране в браузър)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (редактиране в браузър)
     remote:
       name: Дистанционно управление
       description: Дистанционно управление (JOSM или Merkaartor)
@@ -388,12 +383,7 @@ bg:
     new:
       title: Нова публикация в дневника
     form:
-      subject: 'Тема:'
-      body: 'Текст:'
-      language: 'Език:'
       location: 'Местоположение:'
-      latitude: 'Географска ширина:'
-      longitude: 'Географска дължина:'
       use_map_link: използвай карта
     index:
       title: Дневници на потребителите
@@ -1214,13 +1204,6 @@ bg:
       welcome: След като потвърдите ще ви изпратим още повече информация как да започнете.
     email_confirm:
       subject: '[OpenStreetMap] Потвърждаване на адрес за електронна поща'
-    email_confirm_plain:
-      greeting: Здравейте,
-      hopefully_you: 'Някой (надяваме се Вие) желае да промени адреса на електронната
-        си поща намиращ се на %{server_url} с адрес: %{new_address}.'
-      click_the_link: Ако това сте Вие, моля, посетете препратката за потвърждение
-        на промяната.
-    email_confirm_html:
       greeting: Здравейте,
       hopefully_you: 'Някой (надяваме се Вие) желае да промени адреса на електронната
         си поща намиращ се на %{server_url} с адрес: %{new_address}.'
@@ -1228,12 +1211,6 @@ bg:
         на промяната.
     lost_password:
       subject: '[OpenStreetMap] Заявка за промяна на парола'
-    lost_password_plain:
-      greeting: Здравейте,
-      hopefully_you: Някой (надяваме се Вие) е поискал промяна на паролата на сметка
-        в openstreetmap.org свързана този адрес на електронна поща.
-      click_the_link: Ако това сте Вие, моля, посетете препратката за промяна на паролата.
-    lost_password_html:
       greeting: Здравейте,
       hopefully_you: Някой (надяваме се Вие) е поискал промяна на паролата на сметка
         в openstreetmap.org свързана този адрес на електронна поща.
@@ -1332,6 +1309,15 @@ bg:
       as_unread: Съобщението е отбелязано като непрочетено
     destroy:
       destroyed: Съобщението беше изтрито
+  shared:
+    markdown_help:
+      headings: Заглавия
+      text: Текст
+      image: Изображение
+      alt: Алтернативен текст
+    richtext_field:
+      edit: Редактиране
+      preview: Предварителен преглед
   site:
     about:
       next: Напред
index fad9e439817af1f936284bb4b30e97bd6ed3bd79..9e3de071ab89785262a3ab4ba657b14680c3e87e 100644 (file)
@@ -182,15 +182,9 @@ bn:
         other: '%{count} বছর আগে'
   editor:
     default: পূর্বনির্ধারিত (বর্তমানে %{name})
-    potlatch:
-      name: পটল্যাচ ১
-      description: পটল্যাচ ১ (ব্রাউজার থেকে সম্পাদনা)
     id:
       name: আইডি
       description: আইডি (ব্রাউজার থেকে সম্পাদনা)
-    potlatch2:
-      name: পটল্যাচ ২
-      description: পটল্যাচ ২ (ব্রাউজার থেকে সম্পাদনা)
     remote:
       name: রিমোট কন্ট্রোল
       description: রিমোট কন্ট্রোল (JOSM অথবা Merkaartor)
@@ -392,12 +386,7 @@ bn:
     new:
       title: নতুন দিনলিপির ভুক্তি
     form:
-      subject: 'বিষয়:'
-      body: 'মূলাংশ:'
-      language: 'ভাষা:'
-      location: 'অবস্থান:'
-      latitude: 'অক্ষাংশ:'
-      longitude: 'দ্রাঘিমাংশ:'
+      location: অবস্থান
       use_map_link: মানচিত্র ব্যবহার করুন
     index:
       title: ব্যবহারকারীর দিনলিপি
@@ -1108,23 +1097,11 @@ bn:
         করেছেন।
     email_confirm:
       subject: '[OpenStreetMap] আপনার ইমেইল ঠিকানা নিশ্চিত করুন'
-    email_confirm_plain:
-      greeting: সুপ্রিয়,
-      click_the_link: এটি যদি আপনি হন, দয়া করে পরিবর্তন নিশ্চিত করতে নিচের লিংকে
-        ক্লিক করুন।
-    email_confirm_html:
       greeting: সুপ্রিয়,
       click_the_link: এটি যদি আপনি হন, দয়া করে পরিবর্তন নিশ্চিত করতে নিচের লিংকে
         ক্লিক করুন।
     lost_password:
       subject: '[ওপেনস্ট্রিটম্যাপ] পাসওয়ার্ড পুনঃধার্য করার অনুরোধ'
-    lost_password_plain:
-      greeting: সুপ্রিয়,
-      hopefully_you: কোনো একজন (সম্ভবত আপনি) এই ইমেইল ঠিকানার সাথে যুক্ত openstreetmap.org
-        অ্যাকাউন্টের পাসওয়ার্ড পরিবর্তনের অনুরোধ করেছেন।
-      click_the_link: এটি যদি আপনি হন, তবে পাসওয়ার্ড পুনঃধার্য করতে দয়া করে নিচের
-        লিংকে ক্লিক করুন।
-    lost_password_html:
       greeting: সুপ্রিয়,
       hopefully_you: কোনো একজন (সম্ভবত আপনি) এই ইমেইল ঠিকানার সাথে যুক্ত openstreetmap.org
         অ্যাকাউন্টের পাসওয়ার্ড পরিবর্তনের অনুরোধ করেছেন।
@@ -1201,6 +1178,23 @@ bn:
       as_unread: বার্তা অপঠিত হিসেবে চিহ্নিত করুন
     destroy:
       destroyed: বার্তা মোছা হয়েছে
+  shared:
+    markdown_help:
+      title_html: <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
+        দিয়ে পার্সকৃত
+      headings: শিরোনামগুলি
+      heading: শিরোনাম
+      subheading: উপশিরোনাম
+      first: প্রথম আইটেম
+      second: দ্বিতীয় আইটেম
+      link: সংযোগ
+      text: পাঠ্য
+      image: ছবি
+      alt: বিকল্প পাঠ্য
+      url: ইউআরএল
+    richtext_field:
+      edit: সম্পাদনা
+      preview: প্রাকদর্শন
   site:
     about:
       next: পরবর্তী
index 41b94c99983d818ebebe5437ff946817faab5fe7..46e09f74bdd40d3788e27cff8f42c3727fc66132 100644 (file)
@@ -196,15 +196,9 @@ br:
         other: '%{count} bloaz zo'
   editor:
     default: Dre ziouer (%{name} er mare-mañ)
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (aozer enframmet er merdeer)
     id:
       name: iD
       description: iD (aozer e-barzh ar merdeer)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (aozer enframmet er merdeer)
     remote:
       name: Aozer diavaez
       description: Aozer diavaez (JOSM pe Merkaartor)
@@ -418,12 +412,7 @@ br:
     new:
       title: Enmoned nevez en deizlevr
     form:
-      subject: 'Danvez:'
-      body: 'Korf:'
-      language: 'Yezh:'
       location: 'Lec''hiadur:'
-      latitude: 'Lec''hed:'
-      longitude: 'Hedred:'
       use_map_link: implijout ar gartenn
     index:
       title: Deizlevrioù an implijerien
@@ -1297,32 +1286,18 @@ br:
         deoc'h evit kregiñ ganti.
     email_confirm:
       subject: '[OpenStreetMap] Kadarnaat ho chomlec''h postel'
-    email_confirm_plain:
       greeting: Demat,
       hopefully_you: Unan bennak (c'hwi moarvat) a garfe cheñch e chomlec'h postel
         eus %{server_url} da %{new_address}.
       click_the_link: Ma'z eo c'hwi, klikit war al liamm amañ dindan, mar plij, evit
         kadarnaat ar c'hemm.
-    email_confirm_html:
-      greeting: Demat,
-      hopefully_you: Unan bennak (c'hwi moarvat) a garfe cheñch e chomlec'h postel
-        eus %{server_url} da %{new_address}.
-      click_the_link: Ma'z eo c'hwi, klikit war al liamm amañ dindan evit kadarnaat
-        ar c'hemm.
     lost_password:
       subject: '[OpenStreetMap] Goulenn adderaouekaat ar ger-tremen'
-    lost_password_plain:
       greeting: Demat,
       hopefully_you: Unan bennak (c'hwi moarvat) en deus goulennet e vefe adderaouekaet
         ar ger-tremen evit ar chomlec'h postel-mañ war ar gont openstreetmap.org
       click_the_link: Ma'z eo c'hwi, klikit war al liamm amañ dindan, mar plij, evit
         adderaouekaat ho ker-tremen.
-    lost_password_html:
-      greeting: Demat,
-      hopefully_you: Unan bennak (c'hwi moarvat) en deus goulennet e vefe adderaouekaet
-        ger-tremen ar gont openstreetmap.org gant ar chomlec'h postel-mañ.
-      click_the_link: Ma'z eo c'hwi, klikit war al liamm amañ dindan evit adderaouekaat
-        ho ker-tremen.
     note_comment_notification:
       anonymous: Un implijer dizanv
       greeting: Demat,
@@ -1614,17 +1589,6 @@ br:
         vezañ foran diwar ho %{user_page}.
       user_page_link: pajenn implijer
       anon_edits_link_text: Kavit perak.
-      flash_player_required_html: Ezhomm hoc'h eus eus ul lenner Flash evit implijout
-        Potlatch, aozer flash OpenStreetMap. Gallout a rit <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">pellgargañ
-        Flash Player diwar Adobe.com</a>. <a href="https://wiki.openstreetmap.org/wiki/Editing">Meur
-        a zibarzh</a> a c'haller kaout evit kemmañ OpenStreetMap.
-      potlatch_unsaved_changes: Kemmoù n'int ket bet enrollet zo ganeoc'h. (Evit enrollañ
-        e Potlatch, e tlefec'h diziuzañ an hent pe ar poent red m'emaoc'h oc'h aozañ
-        er mod bev, pe klikañ war enrollañ ma vez ur bouton enrollañ ganeoc'h.)
-      potlatch2_not_configured: Potlatch 2 n'eo ket bet kefluniet - sellit ouzh https://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2
-        da c'houzout hiroc'h
-      potlatch2_unsaved_changes: Kemmoù n'int ket enrollet zo ganeoc'h. (Evit enrollañ
-        ho kemmoù e Potlach2, klikit war enrollañ)
       id_not_configured: N'eo ket bet kefluniet an ID
       no_iframe_support: N'eo ket ho merdeer evit ober gant iframmoù HTML, hag ezhomm
         zo eus ar re-se evit an arc'hweladur-mañ.
index 51aabdd6ab26e46183a933c0d85ac6edc089f20e..92b211dbbe23a01737aaadd6b52052c88e59305b 100644 (file)
@@ -119,15 +119,9 @@ bs:
         tagstring: odvojeno zarezima
   editor:
     default: Zadano (currently %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (uređivač unutar web preglednika)
     id:
       name: iD
       description: iD (uređivač u pregledniku)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 1 (uređivač unutar web preglednika)
     remote:
       name: Udaljena kontrola
       description: Udaljena kontrola (JOSM ili Merkaartor)
@@ -252,12 +246,7 @@ bs:
     new:
       title: Novi unos u dnevnik
     form:
-      subject: 'Predmet:'
-      body: 'Tijelo:'
-      language: 'Jezik:'
       location: 'Lokacija:'
-      latitude: Geografska širina (Latitude)
-      longitude: Geografska dužina (Longitude)
       use_map_link: korisititi kartu
     index:
       title: Dnevnici korisnika
@@ -886,25 +875,12 @@ bs:
         kako bi ste počeli.
     email_confirm:
       subject: '[OpenStreetMap] Potvrdite Vašu e-mail adresu'
-    email_confirm_plain:
       greeting: Zdravo,
       click_the_link: Ako ste ovo Vi, molimo klinknite na poveznicu ispod da potvrdite
         promjene.
-    email_confirm_html:
-      greeting: Zdravo,
-      hopefully_you: Netko (nadamo se Vi) bi želio promjeniti svoju e-mail adresu
-        sa %{server_url} na %{new_address}.
-      click_the_link: Ako ste ovo Vi, kliknite na link naveden ispod za potvrdu promjene
     lost_password:
       subject: '[OpenStreetMap] Zahtjev za ponovnim postavljanjem lozinke'
-    lost_password_plain:
-      greeting: Zdravo,
-      click_the_link: Ako ste ovo Vi, kliknite na link ispod za ponovno postavljanje
-        lozinke.
-    lost_password_html:
       greeting: Zdravo,
-      hopefully_you: Neko (moguće, Vi) je pitao za ponovno postavljanje lozinke na
-        njihovim e-mail adresama openstreetmap.org računa.
       click_the_link: Ako ste ovo Vi, kliknite na link ispod za ponovno postavljanje
         lozinke.
     note_comment_notification:
@@ -1101,16 +1077,6 @@ bs:
         Možete promjeniti Vaše promjene u javne sa %{user_page}.
       user_page_link: korisnička stranica
       anon_edits_link_text: Otkrijte zašto je to tako.
-      flash_player_required_html: Potreban Vam je Flash player da bi koristili Potlatch,
-        OpenStreetMap Flash uređivač. Možete <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">preuzeti
-        Adobe Flash Player sa Adobe.com</a>. <a href="http://wiki.openstreetmap.org/wiki/Editing">Neke
-        druge mogućnosti</a> su takođe dostupne za uređivanje OpenStreetMap-a.
-      potlatch_unsaved_changes: Imate nespremljene promjene. (Da bi ste spremili u
-        Potlatch-u, morate odznačiti trenutnu putanju ili tačku, ako uređujete uživo;
-        ili kliknite SPREMITI ako imate to dugme.)
-      potlatch2_not_configured: Potlatch 2 nije konfiguriran - molimo pogledajte http://wiki.openstreetmap.org/wiki/The_Rails_Port
-      potlatch2_unsaved_changes: Imate nespremljene promjene. (Da bi ste spremili
-        u Potlatch 2, trebali bi kliknuti Spremiti.)
       no_iframe_support: Vaš preglednik ne podržava HTML iframes, koji su potrebni
         za ovu značajku.
     export:
index e91c4f7454818ecb86c9c13e12d74a1635b91110..045ea43b2dc08eda60c4c1fa88a0e9d9891b52be 100644 (file)
@@ -210,15 +210,9 @@ ca:
     with_version: '%{id}, v%{version}'
   editor:
     default: Predeterminat (actualment %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (editor integrat en el navegador)
     id:
       name: iD
       description: iD (editor integrat en el navegador)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (editor integrat en el navegador)
     remote:
       name: Control remot
       description: Control remot (JOSM o Merkaartor)
@@ -436,13 +430,8 @@ ca:
     new:
       title: Entrada de diari nova
     form:
-      subject: 'Assumpte:'
-      body: 'Cos del missatge:'
-      language: 'Idioma:'
-      location: 'Ubicació:'
-      latitude: 'Latitud:'
-      longitude: 'Longitud:'
-      use_map_link: usa el mapa
+      location: Ubicació
+      use_map_link: Useu el mapa
     index:
       title: Diaris dels usuaris
       title_friends: Diaris d'amics
@@ -471,7 +460,8 @@ ca:
       body: No hi ha cap entrada o comentari en el diari amb l'id %{id}. Si us plau,
         comproveu-ne l'ortografia. O potser l'enllaç que heu clicat no és correcte.
     diary_entry:
-      posted_by_html: Publicat per %{link_user} el %{created} en %{language_link}
+      posted_by_html: Publicat per %{link_user} el %{created} en %{language_link}.
+      updated_at_html: Última actualització de %{updated}
       comment_link: Comenta aquesta entrada
       reply_link: Enviar un missatge a l'autor
       comment_count:
@@ -1404,12 +1394,21 @@ ca:
       hi: Hola %{to_user},
       header: '%{from_user} ha comentat l''entrada de diari de l''OpenStreetMap amb
         el tema %{subject}:'
+      header_html: '%{from_user} ha comentat l''entrada de diari de l''OpenStreetMap
+        amb el tema %{subject}:'
       footer: Pots també llegit el comentari a %{readurl} i pots comentar a %{commenturl}
         o enviar un missatge a l'autor a %{replyurl}
+      footer_html: També podeu llegir el comentari a %{readurl} i comentar-lo a %{commenturl}
+        o enviar un missatge a l'autor a %{replyurl}
     message_notification:
+      subject: '[OpenStreetMap] %{message_title}'
       hi: Hola %{to_user},
       header: '%{from_user} ha enviat un missatge a través d''OpenStreetMap amb el
         tema %{subject}:'
+      header_html: '%{from_user} us ha enviat un missatge a través d''OpenStreetMap
+        amb el tema %{subject}:'
+      footer: També podeu llegir el missatge a %{readurl} i podeu enviar un missatge
+        a l'autor a %{replyurl}
       footer_html: També podeu llegir el missatge a %{readurl} i podeu enviar un missatge
         a l'autor a %{replyurl}
     friendship_notification:
@@ -1417,10 +1416,19 @@ ca:
       subject: '[OpenStreetMap] %{user} us ha afegit a la llista d''amics'
       had_added_you: '%{user} us ha afegit com a amic a l''OpenStreetMap.'
       see_their_profile: Podeu veure el seu perfil a %{userurl}.
+      see_their_profile_html: Podeu veure el seu perfil a %{userurl}.
       befriend_them: També el podeu afegir com a amic a %{befriendurl}.
+      befriend_them_html: També el podeu afegir com a amic a %{befriendurl}.
+    gpx_description:
+      description_with_tags_html: 'Sembla que el vostre fitxer GPX %{trace_name} amb
+        la descripció %{trace_description} i les etiquetes següents: %{tags}'
+      description_with_no_tags_html: Sembla que el vostre fitxer GPX %{trace_name}
+        amb la descripció %{trace_description} i sense etiquetes
     gpx_failure:
       hi: Hola %{to_user},
       failed_to_import: 'no es pot importar. L''error ha estat:'
+      more_info_html: Podeu trobar més informació sobre les fallades d'importació
+        de GPX i com per evitar-les a %{url}.
       subject: '[OpenStreetMap] Error d''importació de GPX'
     gpx_success:
       hi: Hola %{to_user},
@@ -1439,13 +1447,6 @@ ca:
         començar.
     email_confirm:
       subject: '[OpenStreetMap] Confirmeu l''adreça de correu'
-    email_confirm_plain:
-      greeting: Hola,
-      hopefully_you: Algú (esperem que vós) vol canviar la vostra adreça electrònica
-        a %{server_url} per %{new_address}.
-      click_the_link: Si sou vós mateix, feu clic a l'enllaç de sota per confirmar
-        el canvi.
-    email_confirm_html:
       greeting: Hola,
       hopefully_you: Algú (esperem que vós) vol canviar la vostra adreça electrònica
         a %{server_url} per %{new_address}.
@@ -1453,18 +1454,11 @@ ca:
         el canvi.
     lost_password:
       subject: '[OpenStreetMap] Sol·licitud de reinicialització de contrasenya'
-    lost_password_plain:
       greeting: Hola,
       hopefully_you: Algú (possiblement vós) ha demanat reincialitzar la contrasenya
         del compte d'openstreetmap.org associat a aquesta adreça de correu electrònic.
       click_the_link: Si sou vós mateix, feu clic a l'enllaç de sota per reinicialitzar
         la contrasenya.
-    lost_password_html:
-      greeting: Hola,
-      hopefully_you: Algú (possiblement vós) ha demanat reincialitzar la contrasenya
-        del compte d'openstreetmap.org associat a aquesta adreça de correu electrònic.
-      click_the_link: Si sou vós, feu clic a l'enllaç de sota per reinicialitzar la
-        vostra contrasenya.
     note_comment_notification:
       anonymous: Un usuari anònim
       greeting: Hola,
@@ -1474,25 +1468,38 @@ ca:
         subject_other: '[OpenStreetMap] %{commenter} ha comentat una nota que us interessa'
         your_note: '%{commenter} ha fet un comentari en una de les vostres notes de
           mapa a prop de %{place}.'
+        your_note_html: '%{commenter} ha deixat un comentari en una de les vostres
+          notes de mapa a prop de %{place}.'
         commented_note: '%{commenter} ha fet un comentari en una nota de mapa que
           havíeu comentat. Aquesta nota és a prop de %{place}.'
+        commented_note_html: '%{commenter} ha deixat un comentari en una nota de mapa
+          que havíeu comentat. Aquesta nota és a prop de %{place}.'
       closed:
         subject_own: '[OpenStreetMap] %{commenter} ha solucionat una de les vostres
           notes'
         subject_other: '[OpenStreetMap] %{commenter} ha solucionat una nota que us
           interessa'
         your_note: '%{commenter} ha resolt una de les notes de mapa a prop %{place}.'
+        your_note_html: '%{commenter} ha resolt una de les vostres notes de mapa a
+          prop de %{place}.'
         commented_note: '%{commenter} ha resolt una nota de mapa que havíeu comentat.
           Aquesta nota és a prop de %{place}.'
+        commented_note_html: '%{commenter} ha resolt una nota de mapa que havíeu comentat.
+          Aquesta nota és a prop de %{place}.'
       reopened:
         subject_own: '[OpenStreetMap] %{commenter} ha reactivat una de les vostres
           notes'
         subject_other: '[OpenStreetMap] %{commenter} ha reactivat una nota que us
           interessa'
         your_note: '%{commenter} ha reactivat una de les notes de mapa a prop de %{place}.'
+        your_note_html: '%{commenter} ha reactivat una de les vostres notes de mapa
+          a prop de %{place}.'
         commented_note: '%{commenter} ha reactivat una nota de mapa que havíeu comentat.
           La nota és a prop de %{place}.'
+        commented_note_html: '%{commenter} ha reactivat una nota de mapa que havíeu
+          comentat. La nota és a prop de %{place}.'
       details: Podeu trobar més detalls de la nota a %{url}.
+      details_html: Podeu trobar més detalls de la nota a %{url}.
     changeset_comment_notification:
       hi: Hola %{to_user},
       greeting: Hola,
@@ -1503,13 +1510,21 @@ ca:
           que us interessa'
         your_changeset: '%{commenter} ha fet un comentari a %{time} en un dels vostres
           conjunts de canvis'
-        commented_changeset: '%{commenter} ha fet un comentari a %{time} en un conjunt
-          de canvis de %{changeset_author} que esteu mirant'
+        your_changeset_html: '%{commenter} ha fet un comentari a %{time} en un dels
+          vostres conjunts de canvis'
+        commented_changeset: '%{commenter} ha deixat un comentari a %{time} en un
+          conjunt de canvis que esteu seguint de %{changeset_author}'
+        commented_changeset_html: '%{commenter} ha deixat un comentari a %{time} en
+          un conjunt de canvis que esteu seguint creat per %{changeset_author}'
         partial_changeset_with_comment: amb comentari '%{changeset_comment}'
+        partial_changeset_with_comment_html: amb el comentari '%{changeset_comment}'
         partial_changeset_without_comment: cap comentari
       details: Podeu trobar més detalls del conjunt de canvis a %{url}
+      details_html: Podeu trobar més detalls del conjunt de canvis a %{url}.
       unsubscribe: Per deixar de seguir les actualitzacions d'aquest conjunt de canvis,
-        visita %{url} i clica "Deixa de seguir"
+        visita %{url} i clica "Dona de baixa"
+      unsubscribe_html: Per deixar de seguir les actualitzacions d'aquest conjunt
+        de canvis, visiteu %{url} i cliqueu "Dona de baixa".
   messages:
     inbox:
       title: Safata d'entrada
@@ -1584,6 +1599,24 @@ ca:
       as_unread: Missatge marcat com a no llegit
     destroy:
       destroyed: Missatge suprimit
+  shared:
+    markdown_help:
+      title_html: Analitzat amb <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
+      headings: Encapçalaments
+      heading: Encapçalament
+      subheading: Subtítol
+      unordered: Llista sense ordenar
+      ordered: Llista ordenada
+      first: Primer element
+      second: Segon element
+      link: Enllaç
+      text: Text
+      image: Imatge
+      alt: Text alternatiu
+      url: URL
+    richtext_field:
+      edit: Edita
+      preview: Previsualitza
   site:
     about:
       next: Següent
@@ -1759,17 +1792,6 @@ ca:
         vostra %{user_page}.
       user_page_link: pàgina d'usuari
       anon_edits_link_text: Llegeix aquí perquè.
-      flash_player_required_html: Necessiteu un reproductor de Flash per a usar el
-        Potlatch, l'editor Flash de l'OpenStreetMap. Podeu <a href="https://get.adobe.com/flashplayer/"></a>baixar
-        el reproductor Flash Player des del web Adobe.com</a>. També hi ha <a href="http://wiki.openstreetmap.org/wiki/Editing">altres
-        opcions</a> per a editar l'OpenStreetMap.
-      potlatch_unsaved_changes: Teniu canvis sense desar. (Per desar els canvis al
-        Potlatch, desseleccioneu la via o el punt actuals si esteu en mode d'edició
-        en viu o feu clic a "Desa" si teniu un botó "Desa".)
-      potlatch2_not_configured: No s'ha configurat el Potlatch 2 - mireu http://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2
-        per a més informació
-      potlatch2_unsaved_changes: Teniu canvis sense desar. (Per desar els canvis al
-        Potlatch 2, feu clic a "Desa".)
       id_not_configured: iD no s'ha configurat
       no_iframe_support: El vostre navegador no és compatible amb iframes HTML, que
         són necessàries per a aquesta funcionalitat.
@@ -2796,7 +2818,7 @@ ca:
       show:
         comment: Comentari
         subscribe: Subscriure's
-        unsubscribe: Donar-se de baixa
+        unsubscribe: Dona de baixa
         hide_comment: ocultar
         unhide_comment: mostrar
     notes:
index 5cbf71b458680a69f4bd454f0f1bc62f46f95e23..fa930d75f495b12400b8eccc69ceb953fea1c40a 100644 (file)
@@ -150,15 +150,9 @@ ce:
         other: '%{count} шо хьалха'
   editor:
     default: Ӏадйитаран кеп (хӀоттина %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (браузеран тадераг)
     id:
       name: iD
       description: iD (браузеран тадераг)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (браузеран тадераг)
     remote:
       name: Генара лелор
       description: Генара лелор (JOSM я Merkaartor)
@@ -349,12 +343,7 @@ ce:
     new:
       title: Де керла дӀаяздар
     form:
-      subject: 'Тема:'
-      body: 'Йоза:'
-      language: 'Мотт:'
       location: 'Меттиг:'
-      latitude: 'Шоралла:'
-      longitude: 'Дохалла:'
       use_map_link: Гайта картан тӀехь
     index:
       title: Дневникаш
@@ -765,13 +754,9 @@ ce:
   user_mailer:
     signup_confirm:
       greeting: Маршалла!
-    email_confirm_plain:
+    email_confirm:
       greeting: Маршалла,
-    email_confirm_html:
-      greeting: Маршалла,
-    lost_password_plain:
-      greeting: Маршалла,
-    lost_password_html:
+    lost_password:
       greeting: Маршалла,
     note_comment_notification:
       greeting: Маршалла,
index 3b8d5ec52e42114380e6b44a75427dea5f152399..d1867525c1cdaa61ea7b242d5c6e52e3e21b6c49 100644 (file)
@@ -210,18 +210,12 @@ cs:
         other: před %{count} lety
   editor:
     default: Výchozí (aktuálně %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (editor v prohlížeči)
     id:
       name: iD
       description: iD (editor v prohlížeči)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (editor v prohlížeči)
     remote:
       name: Dálkové ovládání
-      description: Dálkové ovládání (JOSM nebo Merkaartor)
+      description: Dálkové ovládání (JOSM, Potlatch, Merkaartor)
   auth:
     providers:
       none: Žádná
@@ -268,6 +262,16 @@ cs:
     anonymous: anonym
     no_comment: (bez komentáře)
     part_of: Součást
+    part_of_relations:
+      one: 1 relace
+      few: '%{count} relace'
+      many: '%{count} relací'
+      other: '%{count} relací'
+    part_of_ways:
+      one: 1 cesta
+      few: '%{count} cesty'
+      many: '%{count} cest'
+      other: '%{count} cest'
     download_xml: Stáhnout XML
     view_history: Zobrazit historii
     view_details: Zobrazit detaily
@@ -302,6 +306,11 @@ cs:
       title_html: 'Cesta: %{name}'
       history_title_html: 'Historie cesty: %{name}'
       nodes: Uzly
+      nodes_count:
+        one: 1 uzel
+        few: '%{count} uzly'
+        many: '%{count} uzlů'
+        other: '%{count} uzlů'
       also_part_of_html:
         one: patří do cesty %{related_ways}
         other: patří do cest %{related_ways}
@@ -309,6 +318,11 @@ cs:
       title_html: 'Relace: %{name}'
       history_title_html: 'Historie relace: %{name}'
       members: Prvky
+      members_count:
+        one: 1 prvek
+        few: '%{count} prvky'
+        many: '%{count} prvků'
+        other: '%{count} prvků'
     relation_member:
       entry_role_html: '%{type} %{name} jako %{role}'
       type:
@@ -430,13 +444,8 @@ cs:
     new:
       title: Nový záznam do deníku
     form:
-      subject: 'Předmět:'
-      body: 'Text:'
-      language: 'Jazyk:'
-      location: 'Místo:'
-      latitude: 'Zeměpisná šířka:'
-      longitude: 'Zeměpisná délka:'
-      use_map_link: použít mapu
+      location: Místo
+      use_map_link: Použít mapu
     index:
       title: Deníky uživatelů
       title_friends: Deníky přátel
@@ -465,7 +474,8 @@ cs:
       body: Je nám líto, ale žádný deníkový záznam či komentář s ID %{id} neexistuje.
         Zkontrolujte překlepy, nebo jste možná klikli na chybný odkaz.
     diary_entry:
-      posted_by_html: Zapsal %{link_user} %{created} v jazyce %{language_link}
+      posted_by_html: Zapsal %{link_user} %{created} v jazyce %{language_link}.
+      updated_at_html: Naposledy aktualizováno %{updated}
       comment_link: Okomentovat tento zápis
       reply_link: Pošlete zprávu autorovi
       comment_count:
@@ -1278,12 +1288,15 @@ cs:
           "yes": Vodní cesta
       admin_levels:
         level2: Státní hranice
+        level3: Hranice regionu
         level4: Hranice země, provincie či regionu
         level5: Hranice regionu
         level6: Hranice okresu
+        level7: Hranice obce
         level8: Hranice obce
         level9: Hranice vesnice
         level10: Hranice městské části
+        level11: Hranice sousedství
       types:
         cities: Velkoměsta
         towns: Města
@@ -1447,12 +1460,21 @@ cs:
       hi: Ahoj, uživateli %{to_user},
       header: '%{from_user} okomentoval záznam v deníku na OpenStreetMap s předmětem
         %{subject}:'
+      header_html: '%{from_user} okomentoval záznam v deníku na OpenStreetMap s předmětem
+        %{subject}:'
       footer: Můžete si také přečíst komentář na %{readurl} a můžete komentovat na
         %{commenturl} nebo poslat zprávu autorovi na %{replyurl}
+      footer_html: Můžete si také přečíst komentář na %{readurl} a můžete komentovat
+        na %{commenturl} nebo poslat zprávu autorovi na %{replyurl}
     message_notification:
+      subject: '[OpenStreetMap] %{message_title}'
       hi: Dobrý den, uživateli %{to_user},
       header: '%{from_user} vám poslal(a) prostřednictvím OpenStreetMap zprávu s předmětem
         %{subject}:'
+      header_html: '%{from_user} vám poslal(a) prostřednictvím OpenStreetMap zprávu
+        s předmětem %{subject}:'
+      footer: Můžete si také přečíst zprávu na %{readurl} a můžete poslat zprávu autorovi
+        na %{replyurl}
       footer_html: Můžete si také přečíst zprávu na %{readurl} a můžete poslat zprávu
         autorovi na %{replyurl}
     friendship_notification:
@@ -1460,12 +1482,23 @@ cs:
       subject: '[OpenStreetMap] %{user} si vás přidal jako přítele'
       had_added_you: '%{user} si vás na OpenStreetMap přidal(a) jako přítele.'
       see_their_profile: Jeho/její profil si můžete prohlédnout na %{userurl}.
+      see_their_profile_html: Jeho/její profil si můžete prohlédnout na %{userurl}.
       befriend_them: Můžete si ho/ji také přidat jako přítele na %{befriendurl}.
+      befriend_them_html: Můžete si ho/ji také přidat jako přítele na %{befriendurl}.
+    gpx_description:
+      description_with_tags_html: 'Vypadá to, že váš GPX soubor %{trace_name} s popisem
+        %{trace_description} a s těmito značkami: %{tags}'
+      description_with_no_tags_html: Vypadá to, že váš GPX soubor %{trace_name} s
+        popisem %{trace_description} a bez značek
     gpx_failure:
+      hi: Ahoj, %{to_user},
       failed_to_import: 'se nepodařilo nahrát. Chybové hlášení následuje:'
+      more_info_html: Více informací o chybách při importu GPX a jak se jim vyhnout,
+        najdete na %{url}.
       import_failures_url: http://wiki.openstreetmap.org/wiki/GPX_Import_Failures?uselang=cs
       subject: '[OpenStreetMap] Neúspěšný import GPX'
     gpx_success:
+      hi: Ahoj %{to_user},
       loaded_successfully:
         one: se úspěšně nahrál s %{trace_points} z možného 1 bodu.
         other: se úspěšně nahrál s %{trace_points} z možných %{possible_points} bodů.
@@ -1481,13 +1514,6 @@ cs:
         informací.
     email_confirm:
       subject: '[OpenStreetMap] Potvrzení vaší e-mailové adresy'
-    email_confirm_plain:
-      greeting: Dobrý den,
-      hopefully_you: Někdo (snad vy) požádal o změnu e-mailové adresy na serveru %{server_url}
-        na %{new_address}.
-      click_the_link: Pokud jste to byli Vy, potvrďte změnu kliknutím na následující
-        odkaz.
-    email_confirm_html:
       greeting: Dobrý den,
       hopefully_you: Někdo (snad vy) požádal o změnu e-mailové adresy na serveru %{server_url}
         na %{new_address}.
@@ -1495,18 +1521,11 @@ cs:
         odkaz.
     lost_password:
       subject: '[OpenStreetMap] Žádost o nové heslo'
-    lost_password_plain:
       greeting: Dobrý den,
       hopefully_you: Někdo (patrně vy) požádal o vygenerování nového hesla pro uživatele
         serveru openstreetmap.org s touto e-mailovou adresou.
       click_the_link: Pokud jste to byli Vy, kliknutím na níže uvedený odkaz získáte
         nové heslo.
-    lost_password_html:
-      greeting: Ahoj,
-      hopefully_you: Někdo (patrně vy) požádal o vygenerování nového hesla pro uživatele
-        serveru openstreetmap.org s touto e-mailovou adresou.
-      click_the_link: Pokud jste to byli Vy, kliknutím na níže uvedený odkaz získáte
-        nové heslo.
     note_comment_notification:
       anonymous: Anonymní uživatel
       greeting: Ahoj,
@@ -1516,24 +1535,37 @@ cs:
           která vás zajímá'
         your_note: '%{commenter} okomentoval jednu z vašich poznámek k mapě nedaleko
           %{place}.'
+        your_note_html: '%{commenter} okomentoval jednu z vašich poznámek k mapě nedaleko
+          %{place}.'
         commented_note: '%{commenter} okomentoval poznámku k mapě, kterou jste také
           komentovali. Poznámka je umístěna poblíž %{place}.'
+        commented_note_html: '%{commenter} okomentoval poznámku k mapě, kterou jste
+          také komentovali. Poznámka je umístěna poblíž %{place}.'
       closed:
         subject_own: '[OpenStreetMap] %{commenter} vyřešil jednu z vašich poznámek'
         subject_other: '[OpenStreetMap] %{commenter} vyřešil jednu z poznámek, která
           vás zajímá'
         your_note: '%{commenter} vyřešil jednu z vašich poznámek k mapě nedaleko %{place}.'
+        your_note_html: '%{commenter} vyřešil jednu z vašich poznámek k mapě nedaleko
+          %{place}.'
         commented_note: '%{commenter} vyřešil poznámku k mapě, kterou jste komentovali.
           Poznámka je umístěna poblíž %{place}.'
+        commented_note_html: '%{commenter} vyřešil poznámku k mapě, kterou jste komentovali.
+          Poznámka je umístěna poblíž %{place}.'
       reopened:
         subject_own: '[OpenStreetMap] %{commenter} reaktivoval jednu z vašich poznámek'
         subject_other: '[OpenStreetMap] %{commenter} reaktivoval jednu z poznámek,
           která vás zajímá'
         your_note: '%{commenter} reaktivoval jednu z vašich poznámek k mapě nedaleko
           %{place}.'
+        your_note_html: '%{commenter} reaktivoval jednu z vašich poznámek k mapě nedaleko
+          %{place}.'
         commented_note: '%{commenter} reaktivoval poznámku k mapě, kterou jste komentovali.
           Poznámka je umístěna poblíž %{place}.'
+        commented_note_html: '%{commenter} reaktivoval poznámku k mapě, kterou jste
+          komentovali. Poznámka je umístěna poblíž %{place}.'
       details: Podrobnosti k poznámce můžete najít na %{url}.
+      details_html: Podrobnosti k poznámce můžete najít na %{url}.
     changeset_comment_notification:
       hi: Dobrý den, uživateli %{to_user},
       greeting: Dobrý den,
@@ -1544,13 +1576,21 @@ cs:
           která vás zajímá'
         your_changeset: '%{commenter} zanechal %{time} komentář na jedné z vašich
           sad změn.'
+        your_changeset_html: '%{commenter} zanechal %{time} komentář na jedné z vašich
+          sad změn.'
         commented_changeset: '%{commenter} zanechal %{time} komentář na Vámi sledované
           sadě změn, kterou vytvořil %{changeset_author}.'
+        commented_changeset_html: '%{commenter} zanechal %{time} komentář na Vámi
+          sledované sadě změn, kterou vytvořil %{changeset_author}.'
         partial_changeset_with_comment: s komentářem „%{changeset_comment}“
+        partial_changeset_with_comment_html: s komentářem „%{changeset_comment}“
         partial_changeset_without_comment: bez komentáře
       details: Více informací o této sadě změn lze nalézt na %{url}.
+      details_html: Více informací o této sadě změn lze nalézt na %{url}.
       unsubscribe: Pro odhlášení z aktualizací této sady změn jděte na %{url} a klikněte
         na „Zrušit odebírání“.
+      unsubscribe_html: Pro odhlášení z aktualizací této sady změn jděte na %{url}
+        a klikněte na „Zrušit odebírání“.
   messages:
     inbox:
       title: Doručená pošta
@@ -1629,6 +1669,24 @@ cs:
       as_unread: Zpráva označena jako nepřečtená
     destroy:
       destroyed: Zpráva smazána
+  shared:
+    markdown_help:
+      title_html: Zpracovává se <a href="https://kramdown.gettalong.org/quickref.html">kramdownem</a>
+      headings: Nadpisy
+      heading: Nadpis
+      subheading: Podnadpis
+      unordered: Neseřazený seznam
+      ordered: Číslovaný seznam
+      first: První položka
+      second: Druhá položka
+      link: Odkaz
+      text: Text
+      image: Obrázek
+      alt: Alternativní text
+      url: URL
+    richtext_field:
+      edit: Upravit
+      preview: Náhled
   site:
     about:
       next: Další
@@ -1792,17 +1850,6 @@ cs:
         editace můžete zveřejnit na %{user_page}.
       user_page_link: uživatelské stránce
       anon_edits_link_text: Proč to tak je?
-      flash_player_required_html: Pokud chcete používat Potlatch, flashový editor
-        OpenStreetMap, potřebujete přehrávač Flashe. Můžete si <a href="https://get.adobe.com/cz/flashplayer">stáhnout
-        Flash Player z Adobe.com</a>. Pro editaci OpenStreetMap existuje <a href="https://wiki.openstreetmap.org/wiki/Cs:Editory?uselang=cs">mnoho
-        dalších možností</a>.
-      potlatch_unsaved_changes: Máte neuložené změny. (V Potlatchi odznačte aktuální
-        cestu nebo bod, pokud editujete v živém režimu, nebo klikněte na tlačítko
-        uložit, pokud tam je.)
-      potlatch2_not_configured: Potlatch 2 není nakonfigurován – podrobnější informace
-        najdete na https://wiki.openstreetmap.org/wiki/The_Rails_Port#Potlatch_2
-      potlatch2_unsaved_changes: Máte neuložené změny. (V Potlatch 2 se ukládá kliknutím
-        na tlačítko.)
       id_not_configured: iD nebyl nakonfigurován
       no_iframe_support: Váš prohlížeč nepodporuje vložené HTML rámy (iframes), které
         jsou pro tuto funkci nezbytné.
@@ -1911,6 +1958,15 @@ cs:
         url: https://wiki.openstreetmap.org/wiki/Cs:Main_Page?uselang=cs
         title: OpenStreetMap Wiki
         description: Podrobnou dokumentaci OpenStreetMap najdete na wiki.
+    potlatch:
+      removed: Jako preferovaný editor pro OpenStreetMap máte nastaven Potlatch. Protože
+        byl ale Adobe Flash Player ukončen, Potlatch již pro použití ve webovém prohlížeči
+        není dostupný.
+      desktop_html: Potlatch můžete stále používat <a href="https://www.systemed.net/potlatch/">stažením
+        desktopové aplikace pro Mac a Windows</a>.
+      id_html: Nebo si můžete jako preferovaný editor nastavit iD, které běží ve webovém
+        prohlížeči tak, jak dříve fungoval Potlatch. <a href="%{settings_url}">Nastavení
+        můžete změnit zde</a>.
     sidebar:
       search_results: Výsledky hledání
       close: Zavřít
index 707f49205448e778688892378f498e6d47fc3212..6a98029713cb708ea66da9a430c994977ea29669 100644 (file)
@@ -126,15 +126,9 @@ cy:
         other: llai nag %{count} eiliad yn ôl
   editor:
     default: (currently %{name}) diofyn
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (golygygu gyda'r porwr)
     id:
       name: iD
       description: iD (golygydd y porwr)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (golygu gyda'r porwr)
     remote:
       name: Rheolaeth o bell
       description: Pellreolwr (JOSM neu Merkaartor)
@@ -311,12 +305,7 @@ cy:
     new:
       title: Cofnod Dyddiadur Newydd
     form:
-      subject: 'Pwnc:'
-      body: 'Corff:'
-      language: 'Iaith:'
       location: 'Lleoliad:'
-      latitude: Hydred
-      longitude: Lledred
       use_map_link: defnyddiwch y map
     index:
       title: Dyddiaduron defnyddwyr
@@ -1042,7 +1031,7 @@ cy:
     signup_confirm:
       greeting: Pa hwyl!
       created: Mae rhywun (chi gobeithio!) newydd greu cyfrif yn %{site_url}.
-    email_confirm_plain:
+    email_confirm:
       greeting: Pa hwyl,
     note_comment_notification:
       anonymous: Defnyddiwr anhysbys
index f985cf6bceda3c38cc7fe85883ccb1947e48fc94..ef5bbcb00b6d8f70bff162afaa26ee3df685efd4 100644 (file)
@@ -199,15 +199,9 @@ da:
         other: '%{count} år siden'
   editor:
     default: Foretrukket (i øjeblikket %{name})
-    potlatch:
-      name: Potlatch 1
-      description: Potlatch 1 (redigér i browseren)
     id:
       name: iD
       description: iD (redigér i browseren)
-    potlatch2:
-      name: Potlatch 2
-      description: Potlatch 2 (redigér i browseren)
     remote:
       name: Fjernbetjening
       description: Fjernbetjening (JOSM eller Merkaartor)
@@ -427,13 +421,8 @@ da:
     new:
       title: Nyt blogindlæg
     form:
-      subject: 'Emne:'
-      body: 'Indhold:'
-      language: 'Sprog:'
-      location: 'Position:'
-      latitude: 'Breddegrad:'
-      longitude: 'Længdegrad:'
-      use_map_link: brug kort
+      location: Position
+      use_map_link: Brug kort
     index:
       title: Brugerblogs
       title_friends: Venners blogs
@@ -1476,13 +1465,6 @@ da:
         så du kan komme godt i gang.
     email_confirm:
       subject: '[OpenStreetMap] Bekræft din e-mailadresse'
-    email_confirm_plain:
-      greeting: Hej,
-      hopefully_you: En eller anden (forhåbentlig dig) ønsker at ændre sin e-mailadresse
-        på %{server_url} til %{new_address}.
-      click_the_link: Hvis det er dig, skal du klikke på linket nedenfor for at bekræfte
-        ændringen.
-    email_confirm_html:
       greeting: Hej,
       hopefully_you: En eller&nb