]> git.openstreetmap.org Git - rails.git/commitdiff
Merge pull request #5362 from AntonKhorev/color-mode-preference-map
authorAndy Allan <git@gravitystorm.co.uk>
Wed, 11 Dec 2024 16:53:15 +0000 (16:53 +0000)
committerGitHub <noreply@github.com>
Wed, 11 Dec 2024 16:53:15 +0000 (16:53 +0000)
Map color mode preference

140 files changed:
.github/workflows/danger.yml
Gemfile.lock
app/abilities/api_ability.rb
app/assets/javascripts/index.js
app/assets/javascripts/leaflet.layers.js
app/assets/javascripts/leaflet.map.js
app/assets/stylesheets/browse.scss [deleted file]
app/assets/stylesheets/common.scss
app/controllers/api/relations_controller.rb
app/controllers/api/traces/data_controller.rb [new file with mode: 0644]
app/controllers/api/traces_controller.rb
app/controllers/application_controller.rb
app/controllers/issues_controller.rb
app/helpers/browse_helper.rb
app/helpers/changesets_helper.rb
app/helpers/note_helper.rb
app/helpers/user_blocks_helper.rb
app/views/browse/_containing_relation.html.erb
app/views/browse/_node.html.erb
app/views/browse/_relation.html.erb
app/views/browse/_relation_member.html.erb
app/views/browse/_way.html.erb
app/views/changesets/_elements.html.erb
app/views/issues/index.html.erb
app/views/issues/show.html.erb
app/views/layouts/_header.html.erb
app/views/messages/_message_summary.html.erb
app/views/messages/_sent_message_summary.html.erb
app/views/notes/show.html.erb
app/views/traces/index.html.erb
app/views/user_blocks/_block.html.erb
app/views/user_blocks/_navigation.html.erb
app/views/user_blocks/_page.html.erb
config/browse_icons.yml [new file with mode: 0644]
config/initializers/browse_icons.rb [new file with mode: 0644]
config/layers.yml
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/fy.yml
config/locales/ga.yml
config/locales/gcf.yml
config/locales/gd.yml
config/locales/gl.yml
config/locales/gsw.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/kk-cyrl.yml
config/locales/km.yml
config/locales/kn.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/mo.yml
config/locales/mr.yml
config/locales/ms.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/pnb.yml
config/locales/pt-PT.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sat.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/xmf.yml
config/locales/zh-CN.yml
config/locales/zh-TW.yml
config/routes.rb
test/controllers/api/traces/data_controller_test.rb [new file with mode: 0644]
test/controllers/api/traces_controller_test.rb
test/helpers/browse_helper_test.rb
test/helpers/changesets_helper_test.rb
test/helpers/note_helper_test.rb
yarn.lock

index 67a676d87c11eea4b1879c2a715443237ea250ee..6da5e716496d05c62300b13654a44f22bbd74905 100644 (file)
@@ -24,10 +24,10 @@ jobs:
           bundler-cache: true
       - name: Create base branch
         run: |
-          git fetch ${{ github.event.pull_request.base.repo.clone_url }} ${{ github.event.pull_request.base.ref }}:danger_base
+          git fetch ${{ github.event.pull_request.base.repo.clone_url }} ${{ github.event.pull_request.base.sha }}:danger_base
       - name: Create head branch
         run: |
-          git fetch ${{ github.event.pull_request.head.repo.clone_url }} ${{ github.event.pull_request.head.ref }}:danger_head
+          git fetch ${{ github.event.pull_request.head.repo.clone_url }} ${{ github.event.pull_request.head.sha }}:danger_head
       - name: Danger
         env:
           DANGER_GITHUB_BEARER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
index 2b23ab3423372c242ff89992e09f19758603940d..455ae2bdaa2c8c303b7af1071b7a38de15b96948 100644 (file)
@@ -3,29 +3,29 @@ GEM
   specs:
     aasm (5.5.0)
       concurrent-ruby (~> 1.0)
-    actioncable (7.2.2)
-      actionpack (= 7.2.2)
-      activesupport (= 7.2.2)
+    actioncable (7.2.2.1)
+      actionpack (= 7.2.2.1)
+      activesupport (= 7.2.2.1)
       nio4r (~> 2.0)
       websocket-driver (>= 0.6.1)
       zeitwerk (~> 2.6)
-    actionmailbox (7.2.2)
-      actionpack (= 7.2.2)
-      activejob (= 7.2.2)
-      activerecord (= 7.2.2)
-      activestorage (= 7.2.2)
-      activesupport (= 7.2.2)
+    actionmailbox (7.2.2.1)
+      actionpack (= 7.2.2.1)
+      activejob (= 7.2.2.1)
+      activerecord (= 7.2.2.1)
+      activestorage (= 7.2.2.1)
+      activesupport (= 7.2.2.1)
       mail (>= 2.8.0)
-    actionmailer (7.2.2)
-      actionpack (= 7.2.2)
-      actionview (= 7.2.2)
-      activejob (= 7.2.2)
-      activesupport (= 7.2.2)
+    actionmailer (7.2.2.1)
+      actionpack (= 7.2.2.1)
+      actionview (= 7.2.2.1)
+      activejob (= 7.2.2.1)
+      activesupport (= 7.2.2.1)
       mail (>= 2.8.0)
       rails-dom-testing (~> 2.2)
-    actionpack (7.2.2)
-      actionview (= 7.2.2)
-      activesupport (= 7.2.2)
+    actionpack (7.2.2.1)
+      actionview (= 7.2.2.1)
+      activesupport (= 7.2.2.1)
       nokogiri (>= 1.8.5)
       racc
       rack (>= 2.2.4, < 3.2)
@@ -36,39 +36,39 @@ GEM
       useragent (~> 0.16)
     actionpack-page_caching (1.2.4)
       actionpack (>= 4.0.0)
-    actiontext (7.2.2)
-      actionpack (= 7.2.2)
-      activerecord (= 7.2.2)
-      activestorage (= 7.2.2)
-      activesupport (= 7.2.2)
+    actiontext (7.2.2.1)
+      actionpack (= 7.2.2.1)
+      activerecord (= 7.2.2.1)
+      activestorage (= 7.2.2.1)
+      activesupport (= 7.2.2.1)
       globalid (>= 0.6.0)
       nokogiri (>= 1.8.5)
-    actionview (7.2.2)
-      activesupport (= 7.2.2)
+    actionview (7.2.2.1)
+      activesupport (= 7.2.2.1)
       builder (~> 3.1)
       erubi (~> 1.11)
       rails-dom-testing (~> 2.2)
       rails-html-sanitizer (~> 1.6)
     active_record_union (1.3.0)
       activerecord (>= 4.0)
-    activejob (7.2.2)
-      activesupport (= 7.2.2)
+    activejob (7.2.2.1)
+      activesupport (= 7.2.2.1)
       globalid (>= 0.3.6)
-    activemodel (7.2.2)
-      activesupport (= 7.2.2)
-    activerecord (7.2.2)
-      activemodel (= 7.2.2)
-      activesupport (= 7.2.2)
+    activemodel (7.2.2.1)
+      activesupport (= 7.2.2.1)
+    activerecord (7.2.2.1)
+      activemodel (= 7.2.2.1)
+      activesupport (= 7.2.2.1)
       timeout (>= 0.4.0)
-    activerecord-import (1.8.1)
+    activerecord-import (2.0.0)
       activerecord (>= 4.2)
-    activestorage (7.2.2)
-      actionpack (= 7.2.2)
-      activejob (= 7.2.2)
-      activerecord (= 7.2.2)
-      activesupport (= 7.2.2)
+    activestorage (7.2.2.1)
+      actionpack (= 7.2.2.1)
+      activejob (= 7.2.2.1)
+      activerecord (= 7.2.2.1)
+      activesupport (= 7.2.2.1)
       marcel (~> 1.0)
-    activesupport (7.2.2)
+    activesupport (7.2.2.1)
       base64
       benchmark (>= 0.3)
       bigdecimal
@@ -92,7 +92,7 @@ GEM
     autoprefixer-rails (10.4.19.0)
       execjs (~> 2)
     aws-eventstream (1.3.0)
-    aws-partitions (1.1013.0)
+    aws-partitions (1.1019.0)
     aws-sdk-core (3.214.0)
       aws-eventstream (~> 1, >= 1.3.0)
       aws-partitions (~> 1, >= 1.992.0)
@@ -101,7 +101,7 @@ GEM
     aws-sdk-kms (1.96.0)
       aws-sdk-core (~> 3, >= 3.210.0)
       aws-sigv4 (~> 1.5)
-    aws-sdk-s3 (1.174.0)
+    aws-sdk-s3 (1.176.0)
       aws-sdk-core (~> 3, >= 3.210.0)
       aws-sdk-kms (~> 1)
       aws-sigv4 (~> 1.5)
@@ -196,7 +196,7 @@ GEM
       sprockets (> 3.0)
       sprockets-rails
       tilt
-    date (3.4.0)
+    date (3.4.1)
     debug (1.9.2)
       irb (~> 1.10)
       reline (>= 0.3.8)
@@ -208,12 +208,12 @@ GEM
       activerecord (>= 3.0, < 9.0)
       delayed_job (>= 3.0, < 5)
     docile (1.4.1)
-    doorkeeper (5.7.1)
+    doorkeeper (5.8.1)
       railties (>= 5)
     doorkeeper-i18n (5.2.7)
       doorkeeper (>= 5.2)
-    doorkeeper-openid_connect (1.8.9)
-      doorkeeper (>= 5.5, < 5.8)
+    doorkeeper-openid_connect (1.8.10)
+      doorkeeper (>= 5.5, < 5.9)
       jwt (>= 2.5)
     drb (2.2.1)
     dry-configurable (1.2.0)
@@ -265,7 +265,7 @@ GEM
     factory_bot_rails (6.4.4)
       factory_bot (~> 6.5)
       railties (>= 5.0.0)
-    faraday (2.12.1)
+    faraday (2.12.2)
       faraday-net_http (>= 2.0, < 3.5)
       json
       logger
@@ -327,7 +327,7 @@ GEM
     image_size (3.4.0)
     in_threads (1.6.0)
     iniparse (1.5.0)
-    io-console (0.7.2)
+    io-console (0.8.0)
     irb (1.14.1)
       rdoc (>= 4.0.0)
       reline (>= 0.4.2)
@@ -339,7 +339,7 @@ GEM
       rails-dom-testing (>= 1, < 3)
       railties (>= 4.2.0)
       thor (>= 0.14, < 2.0)
-    json (2.8.2)
+    json (2.9.0)
     jwt (2.9.3)
       base64
     kgio (2.11.4)
@@ -353,7 +353,7 @@ GEM
     listen (3.9.0)
       rb-fsevent (~> 0.10, >= 0.10.3)
       rb-inotify (~> 0.9, >= 0.9.10)
-    logger (1.6.1)
+    logger (1.6.2)
     logstasher (2.1.5)
       activesupport (>= 5.2)
       request_store
@@ -373,7 +373,7 @@ GEM
     mini_portile2 (2.8.8)
     mini_racer (0.9.0)
       libv8-node (~> 18.19.0.0)
-    minitest (5.25.2)
+    minitest (5.25.4)
     minitest-focus (1.4.0)
       minitest (>= 4, < 6)
     msgpack (1.7.5)
@@ -381,7 +381,7 @@ GEM
     multi_xml (0.7.1)
       bigdecimal (~> 3.1)
     nap (1.1.0)
-    net-http (0.5.0)
+    net-http (0.6.0)
       uri
     net-imap (0.5.1)
       date
@@ -393,7 +393,7 @@ GEM
     net-smtp (0.5.0)
       net-protocol
     nio4r (2.7.4)
-    nokogiri (1.16.7)
+    nokogiri (1.17.1)
       mini_portile2 (~> 2.8.2)
       racc (~> 1.4)
     oauth (1.1.0)
@@ -461,8 +461,9 @@ GEM
     pg (1.5.9)
     popper_js (2.11.8)
     progress (3.6.0)
-    pstore (0.1.3)
-    psych (5.2.0)
+    pstore (0.1.4)
+    psych (5.2.1)
+      date
       stringio
     public_suffix (6.0.1)
     puma (5.6.9)
@@ -486,20 +487,20 @@ GEM
     rackup (1.0.1)
       rack (< 3)
       webrick
-    rails (7.2.2)
-      actioncable (= 7.2.2)
-      actionmailbox (= 7.2.2)
-      actionmailer (= 7.2.2)
-      actionpack (= 7.2.2)
-      actiontext (= 7.2.2)
-      actionview (= 7.2.2)
-      activejob (= 7.2.2)
-      activemodel (= 7.2.2)
-      activerecord (= 7.2.2)
-      activestorage (= 7.2.2)
-      activesupport (= 7.2.2)
+    rails (7.2.2.1)
+      actioncable (= 7.2.2.1)
+      actionmailbox (= 7.2.2.1)
+      actionmailer (= 7.2.2.1)
+      actionpack (= 7.2.2.1)
+      actiontext (= 7.2.2.1)
+      actionview (= 7.2.2.1)
+      activejob (= 7.2.2.1)
+      activemodel (= 7.2.2.1)
+      activerecord (= 7.2.2.1)
+      activestorage (= 7.2.2.1)
+      activesupport (= 7.2.2.1)
       bundler (>= 1.15.0)
-      railties (= 7.2.2)
+      railties (= 7.2.2.1)
     rails-controller-testing (1.0.5)
       actionpack (>= 5.0.1.rc1)
       actionview (>= 5.0.1.rc1)
@@ -508,18 +509,18 @@ GEM
       activesupport (>= 5.0.0)
       minitest
       nokogiri (>= 1.6)
-    rails-html-sanitizer (1.6.0)
+    rails-html-sanitizer (1.6.1)
       loofah (~> 2.21)
-      nokogiri (~> 1.14)
+      nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
     rails-i18n (7.0.10)
       i18n (>= 0.7, < 2)
       railties (>= 6.0.0, < 8)
     rails_param (1.3.1)
       actionpack (>= 3.2.0)
       activesupport (>= 3.2.0)
-    railties (7.2.2)
-      actionpack (= 7.2.2)
-      activesupport (= 7.2.2)
+    railties (7.2.2.1)
+      actionpack (= 7.2.2.1)
+      activesupport (= 7.2.2.1)
       irb (~> 1.13)
       rackup (>= 1.0.0)
       rake (>= 12.2)
@@ -533,8 +534,8 @@ GEM
     rchardet (1.8.0)
     rdoc (6.8.1)
       psych (>= 4.0.0)
-    regexp_parser (2.9.2)
-    reline (0.5.11)
+    regexp_parser (2.9.3)
+    reline (0.5.12)
       io-console (~> 0.5)
     request_store (1.7.0)
       rack (>= 1.4)
@@ -544,17 +545,17 @@ GEM
     rouge (4.5.1)
     rtlcss (0.2.1)
       mini_racer (>= 0.6.3)
-    rubocop (1.69.0)
+    rubocop (1.69.1)
       json (~> 2.3)
       language_server-protocol (>= 3.17.0)
       parallel (~> 1.10)
       parser (>= 3.3.0.2)
       rainbow (>= 2.2.2, < 4.0)
-      regexp_parser (>= 2.4, < 3.0)
-      rubocop-ast (>= 1.36.1, < 2.0)
+      regexp_parser (>= 2.9.3, < 3.0)
+      rubocop-ast (>= 1.36.2, < 2.0)
       ruby-progressbar (~> 1.7)
       unicode-display_width (>= 2.4.0, < 4.0)
-    rubocop-ast (1.36.1)
+    rubocop-ast (1.36.2)
       parser (>= 3.3.1.0)
     rubocop-capybara (2.21.0)
       rubocop (~> 1.41)
@@ -588,7 +589,7 @@ GEM
     sawyer (0.9.2)
       addressable (>= 2.3.5)
       faraday (>= 0.17.3, < 3)
-    securerandom (0.3.2)
+    securerandom (0.4.0)
     selenium-webdriver (4.23.0)
       base64 (~> 0.2)
       logger (~> 1.4)
@@ -638,7 +639,7 @@ GEM
       concurrent-ruby (~> 1.0)
     unicode-display_width (2.6.0)
     uri (0.13.1)
-    useragent (0.16.10)
+    useragent (0.16.11)
     validates_email_format_of (1.8.2)
       i18n (>= 0.8.0)
       simpleidn
@@ -648,7 +649,7 @@ GEM
       addressable (>= 2.8.0)
       crack (>= 0.3.2)
       hashdiff (>= 0.4.0, < 2.0.0)
-    webrick (1.9.0)
+    webrick (1.9.1)
     websocket (1.2.11)
     websocket-driver (0.7.6)
       websocket-extensions (>= 0.1.0)
index 96ed9b080fa3b79f4692aab8c52c21aa1c4efe5d..c790da66ab522f1b6fcbed3baee9cfa214b5b4f1 100644 (file)
@@ -22,7 +22,7 @@ class ApiAbility
 
       if user&.active?
         can [:comment, :close, :reopen], Note
-        can [:create, :show, :update, :destroy, :data], Trace
+        can [:create, :show, :update, :destroy], Trace
         can [:details, :gpx_files], User
         can [:index, :show, :update, :update_all, :destroy], UserPreference
 
index c419f93216b44507f4aed454b01792feba3744e9..56495b31a31c87fd18ca8b864ac492b84f1f0240 100644 (file)
@@ -207,7 +207,7 @@ $(document).ready(function () {
   if (OSM.MATOMO) {
     map.on("layeradd", function (e) {
       if (e.layer.options) {
-        var goal = OSM.MATOMO.goals[e.layer.options.keyid];
+        var goal = OSM.MATOMO.goals[e.layer.options.layerId];
 
         if (goal) {
           $("body").trigger("matomogoal", goal);
@@ -255,20 +255,10 @@ $(document).ready(function () {
     });
 
     function sendRemoteEditCommand(url, callback) {
-      var iframe = $("<iframe>");
-      var timeoutId = setTimeout(function () {
-        alert(I18n.t("site.index.remote_failed"));
-        iframe.remove();
-      }, 5000);
-
-      iframe
-        .hide()
-        .appendTo("body")
-        .attr("src", url)
-        .on("load", function () {
-          clearTimeout(timeoutId);
-          iframe.remove();
-          if (callback) callback();
+      fetch(url, { mode: "no-cors", signal: AbortSignal.timeout(5000) })
+        .then(callback)
+        .catch(function () {
+          alert(I18n.t("site.index.remote_failed"));
         });
     }
 
index dc692a4a5d500f0ffbba724a8309769431e7efe8..35b958c7aaa097652ccebf1f392087c8a31801b7 100644 (file)
@@ -29,7 +29,7 @@ L.OSM.layers = function (options) {
 
       map.whenReady(function () {
         var miniMap = L.map(mapContainer[0], { attributionControl: false, zoomControl: false, keyboard: false })
-          .addLayer(new layer.constructor({ apikey: layer.options.apikey }));
+          .addLayer(new layer.constructor(layer.options));
 
         miniMap.dragging.disable();
         miniMap.touchZoom.disable();
index 78f43b73a0b7d180eb9288664828db223059ecf2..02ed318acffc89eded8d0dccad99a682c8e2d05f 100644 (file)
@@ -20,17 +20,24 @@ L.OSM.Map = L.Map.extend({
     for (const layerDefinition of OSM.LAYER_DEFINITIONS) {
       if (layerDefinition.apiKeyId && !OSM[layerDefinition.apiKeyId]) continue;
 
-      const layerOptions = {
-        attribution: makeAttribution(layerDefinition.credit),
-        code: layerDefinition.code,
-        keyid: layerDefinition.keyId,
-        name: I18n.t(`javascripts.map.base.${layerDefinition.nameId}`)
-      };
-      if (layerDefinition.apiKeyId) {
-        layerOptions.apikey = OSM[layerDefinition.apiKeyId];
+      let layerConstructor = L.OSM.TileLayer;
+      const layerOptions = {};
+
+      for (const [property, value] of Object.entries(layerDefinition)) {
+        if (property === "credit") {
+          layerOptions.attribution = makeAttribution(value);
+        } else if (property === "nameId") {
+          layerOptions.name = I18n.t(`javascripts.map.base.${value}`);
+        } else if (property === "apiKeyId") {
+          layerOptions.apikey = OSM[value];
+        } else if (property === "leafletOsmId") {
+          layerConstructor = L.OSM[value];
+        } else {
+          layerOptions[property] = value;
+        }
       }
 
-      const layer = new L.OSM[layerDefinition.leafletOsmId](layerOptions);
+      const layer = new layerConstructor(layerOptions);
       this.baseLayers.push(layer);
     }
 
@@ -125,7 +132,7 @@ L.OSM.Map = L.Map.extend({
   getMapBaseLayerId: function () {
     var baseLayerId;
     this.eachLayer(function (layer) {
-      if (layer.options && layer.options.keyid) baseLayerId = layer.options.keyid;
+      if (layer.options && layer.options.layerId) baseLayerId = layer.options.layerId;
     });
     return baseLayerId;
   },
diff --git a/app/assets/stylesheets/browse.scss b/app/assets/stylesheets/browse.scss
deleted file mode 100644 (file)
index 2dac602..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-$map-sidebar-icons: (
-
-  /* Nodes (and ways as areas) */
-
-  ".aeroway.aerodrome": ("filename": "aerodrome.p.16.png"),
-  
-  ".amenity.atm": ("filename": "amenity_atm.16.png", "invert": true),
-  ".amenity.bank": ("filename": "amenity_bank.16.png", "invert": true),
-  ".amenity.bar": ("filename": "amenity_bar.16.png", "invert": true),
-  ".amenity.bench": ("filename": "amenity_bench.16.png", "invert": true),
-  ".amenity.biergarten": ("filename": "amenity_biergarten.16.png", "invert": true),
-  ".amenity.bicycle_parking": ("filename": "amenity_bicycle_parking.16.png"),
-  ".amenity.bicycle_rental": ("filename": "transport_rental_bicycle.16.png"),
-  ".amenity.bus_station": ("filename": "bus_station.n.16.png"),
-  ".amenity.cafe": ("filename": "amenity_cafe.16.png", "invert": true),
-  ".amenity.car_rental": ("filename": "transport_rental_car.16.png"),
-  ".amenity.car_sharing": ("filename": "car_share.p.16.png"),
-  ".amenity.childcare": ("filename": "amenity_childcare.p.16.png"),
-  ".amenity.cinema": ("filename": "amenity_cinema.16.png", "invert": true),
-  ".amenity.courthouse": ("filename": "amenity_courthouse.16.png", "invert": true),
-  ".amenity.dentist": ("filename": "amenity_dentist.16.png"),
-  ".amenity.doctors": ("filename": "amenity_doctors.16.png"),
-  ".amenity.drinking_water": ("filename": "amenity_drinking_water.16.png", "invert": true),
-  ".amenity.fast_food": ("filename": "amenity_fast_food.16.png", "invert": true),
-  ".amenity.fire_station": ("filename": "amenity_fire_station.16.png", "invert": true),
-  ".amenity.fuel": ("filename": "amenity_fuel.16.png"),
-  ".amenity.hospital": ("filename": "amenity_hospital.16.png"),
-  ".amenity.kindergarten": ("filename": "amenity_childcare.p.16.png"),
-  ".amenity.library": ("filename": "library.p.16.png", "invert": true),
-  ".amenity.nightclub": ("filename": "amenity_nightclub.16.png", "invert": true),
-  ".amenity.parking": ("filename": "parking.p.16.png"),
-  ".amenity.pharmacy": ("filename": "amenity_pharmacy.16.png"),
-  ".amenity.place_of_worship": ("filename": "amenity_place_of_worship.16.png", "invert": true),
-  ".amenity.police": ("filename": "amenity_police.16.png", "invert": true),
-  ".amenity.post_box": ("filename": "post_box.p.16.png", "invert": true),
-  ".amenity.post_office": ("filename": "post_office.p.16.png", "invert": true),
-  ".amenity.prison": ("filename": "amenity_prison.16.png", "invert": true),
-  ".amenity.pub": ("filename": "amenity_pub.16.png", "invert": true),
-  ".amenity.restaurant": ("filename": "amenity_restaurant.16.png", "invert": true),
-  ".amenity.recycling": ("filename": "amenity_recycling.16.png", "invert": true),
-  ".amenity.school": ("filename": "education_school.p.16.png"),
-  ".amenity.shelter": ("filename": "shelter2.p.16.png"),
-  ".amenity.taxi": ("filename": "amenity_taxi.16.png"),
-  ".amenity.telephone": ("filename": "telephone.p.16.png", "invert": true),
-  ".amenity.theatre": ("filename": "amenity_theatre.16.png", "invert": true),
-  ".amenity.toilets": ("filename": "amenity_toilets.16.png", "invert": true),
-  ".amenity.townhall": ("filename": "amenity_townhall.16.png", "invert": true),
-  ".amenity.university": ("filename": "education_university.p.16.png"),
-  ".amenity.veterinary": ("filename": "health_veterinary.p.16.png"),
-  ".amenity.waste_basket": ("filename": "amenity_waste_basket.16.png", "invert": true),
-
-  ".barrier.gate": ("filename": "gate2.p.16.png", "invert": true),
-
-  ".highway.bus_stop": ("filename": "highway_bus_stop.16.png"),
-  ".highway.mini_roundabout": ("filename": "mini_round.p.16.png"),
-  ".highway.traffic_signals": ("filename": "traffic_light.png", "invert": true),
-  ".highway.turning_circle": ("filename": "turning_circle.p.16.png"),
-
-  ".historic.archaeological_site": ("filename": "historic_archaeological_site.16.png", "invert": true),
-  ".historic.castle": ("filename": "tourist_castle.p.16.png", "invert": true),
-  ".historic.memorial": ("filename": "historic_memorial.16.png", "invert": true),
-  ".historic.monument": ("filename": "historic_monument.16.png", "invert": true),
-  ".historic.ruins": ("filename": "tourist_ruins.p.16.png", "invert": true),
-  ".historic.wreck": ("filename": "tourist_wreck.p.16.png", "invert": true),
-
-  ".man_made.lighthouse": ("filename": "man_made_lighthouse.16.png"),
-  ".man_made.water_tower": ("filename": "man_made_water_tower.16.png", "invert": true),
-  ".man_made.windmill": ("filename": "man_made_windmill.16.png", "invert": true),
-
-  ".natural.tree": ("filename": "tree.p.16.png"),
-
-  ".office.diplomatic": ("filename": "office_diplomatic.16.png"),
-  ".office.estate_agent": ("filename": "shop_estateagent.16.png"),
-
-  ".railway.halt": ("filename": "halt.p.16.png"),
-  ".railway.station": ("filename": "station.p.16.png"),
-  ".railway.level_crossing": ("filename": "level_crossing.p.16.png", "invert": true),
-
-  ".shop": ("filename": "shop_convenience.p.16.png"),
-  ".shop.alcohol": ("filename": "shop_alcohol.16.png"),
-  ".shop.bakery": ("filename": "shop_bakery.16.png"),
-  ".shop.bicycle": ("filename": "shop_bicycle.16.png"),
-  ".shop.books": ("filename": "shop_books.16.png"),
-  ".shop.butcher": ("filename": "shop_butcher.p.16.png"),
-  ".shop.clothes": ("filename": "shop_clothes.16.png"),
-  ".shop.car_parts": ("filename": "shop_car_parts.16.png"),
-  ".shop.car_repair": ("filename": "shop_car_repair.16.png"),
-  ".shop.convenience": ("filename": "shop_convenience.p.16.png"),
-  ".shop.doityourself": ("filename": "shop_doityourself.16.png"),
-  ".shop.electronics": ("filename": "shop_electronics.16.png"),
-  ".shop.estate_agent": ("filename": "shop_estateagent.16.png"),
-  ".shop.fashion": ("filename": "shop_clothes.16.png"),
-  ".shop.florist": ("filename": "shop_florist.16.png"),
-  ".shop.furniture": ("filename": "shop_furniture.16.png"),
-  ".shop.garden_centre": ("filename": "shop_florist.16.png"),
-  ".shop.gift": ("filename": "shop_gift.16.png"),
-  ".shop.greengrocer": ("filename": "shop_greengrocer.p.16.png"),
-  ".shop.hardware": ("filename": "shop_doityourself.16.png"),
-  ".shop.hairdresser": ("filename": "shop_hairdresser.16.png"),
-  ".shop.jewelry": ("filename": "shop_jewelry.16.png"),
-  ".shop.mobile_phone": ("filename": "shop_mobile_phone.16.png"),
-  ".shop.optician": ("filename": "shop_optician.16.png"),
-  ".shop.pet": ("filename": "shop_pet.16.png"),
-  ".shop.seafood": ("filename": "shop_seafood.16.png"),
-  ".shop.shoes": ("filename": "shop_shoes.16.png"),
-  ".shop.supermarket": ("filename": "shop_supermarket.p.16.png"),
-
-  ".tourism.alpine_hut": ("filename": "tourism_alpine_hut.16.png"),
-  ".tourism.camp_site": ("filename": "tourism_camp_site.16.png"),
-  ".tourism.caravan_site": ("filename": "tourism_caravan_site.16.png"),
-  ".tourism.hostel": ("filename": "tourism_hostel.16.png"),
-  ".tourism.hotel": ("filename": "tourism_hotel.16.png"),
-  ".tourism.motel": ("filename": "tourism_motel.16.png"),
-  ".tourism.museum": ("filename": "tourism_museum.16.png", "invert": true),
-  ".tourism.picnic_site": ("filename": "tourism_picnic_site.16.png", "invert": true),
-  ".tourism.viewpoint": ("filename": "view_point.p.16.png", "invert": true),
-  ".tourism.wilderness_hut": ("filename": "tourism_wilderness_hut.16.png"),
-
-  /* Ways */
-
-  ".aeroway.runway": ("filename": "runway.20.png"),
-  ".aeroway.taxiway": ("filename": "taxiway.20.png"),
-
-  ".barrier.wall": ("filename": "wall.20.png"),
-
-  ".building": ("filename": "building.png"),
-
-  ".highway.bridleway": ("filename": "bridleway.20.png"),
-  ".highway.cycleway": ("filename": "cycleway.20.png"),
-  ".highway.footway": ("filename": "footway.20.png"),
-  ".highway.motorway": ("filename": "motorway.20.png"),
-  ".highway.motorway_link": ("filename": "motorway.20.png"),
-  ".highway.path": ("filename": "path.20.png"),
-  ".highway.pedestrian": ("filename": "service.20.png"),
-  ".highway.primary": ("filename": "primary.20.png"),
-  ".highway.primary_link": ("filename": "primary.20.png"),
-  ".highway.residential": ("filename": "unclassified.20.png"),
-  ".highway.secondary": ("filename": "secondary.20.png"),
-  ".highway.secondary_link": ("filename": "secondary.20.png"),
-  ".highway.service": ("filename": "service.20.png"),
-  ".highway.tertiary": ("filename": "tertiary.20.png"),
-  ".highway.track": ("filename": "track.20.png"),
-  ".highway.trunk": ("filename": "trunk.20.png"),
-  ".highway.trunk_link": ("filename": "trunk.20.png"),
-  ".highway.unclassified": ("filename": "unclassified.20.png"),
-
-  ".landuse.brownfield": ("filename": "brownfield.png"),
-  ".landuse.cemetery": ("filename": "cemetery.png"),
-  ".landuse.commercial": ("filename": "commercial.png"),
-  ".landuse.farmland": ("filename": "farmland.png"),
-  ".landuse.farmyard": ("filename": "farmyard.png"),
-  ".landuse.forest": ("filename": "forest.png"),
-  ".landuse.grass": ("filename": "grass.png"),
-  ".landuse.industrial": ("filename": "industrial.png"),
-  ".landuse.meadow": ("filename": "meadow.png"),
-  ".landuse.military": ("filename": "military.png"),
-  ".landuse.residential": ("filename": "residential.png"),
-  ".landuse.retail": ("filename": "retail.png"),
-  ".landuse.tourism": ("filename": "tourism.png"),
-
-  ".leisure.golf_course": ("filename": "golf.png"),
-  ".leisure.park": ("filename": "park.png"),
-  ".leisure.picnic_table": ("filename": "tourism_picnic_site.16.png", "invert": true),
-  ".leisure.playground": ("filename": "leisure_playground.16.png", "invert": true),
-  ".leisure.pitch": ("filename": "pitch.png"),
-  ".leisure.nature_reserve": ("filename": "reserve.png"),
-  ".leisure.water_park": ("filename": "leisure_water_park.16.png", "invert": true),
-
-  ".natural.grassland": ("filename": "grassland.png"),
-  ".natural.heath": ("filename": "heathland.png"),
-  ".natural.scrub": ("filename": "scrub.png"),
-  ".natural.water": ("filename": "lake.png"),
-  ".natural.wood": ("filename": "wood.png"),
-
-  ".railway.light_rail": ("filename": "light_rail.20.png"),
-  ".railway.rail": ("filename": "rail.20.png"),
-  ".railway.subway": ("filename": "subway.20.png"),
-  ".railway.tram": ("filename": "tram.20.png"),
-
-)
index d39535417e1d6868c8f2c7b6b3560568d9feac19..cabdfff493bac420e9daa5b1fe0b3cc3bc6570b9 100644 (file)
@@ -1,6 +1,5 @@
 @use "sass:map";
 @import "parameters";
-@import "browse";
 @import "bootstrap";
 @import "rails_bootstrap_forms";
 
@@ -217,6 +216,10 @@ body.small-nav {
     .search_forms {
       display: block;
     }
+
+    .username {
+      max-width: unset;
+    }
   }
 
   #sidebar .search_forms {
@@ -944,13 +947,18 @@ div.secondary-actions {
   }
 }
 
-/* Rules for block pages */
+/* Rules for tables with usernames */
 
+.messages-table .username,
 #block_list .username {
   max-width: 20em;
 }
 
-/* Rules for tabs inside secondary background sections */
+/* Rules for navigation tabs */
+
+.nav-tabs .username {
+  max-width: 20em;
+}
 
 .bg-body-secondary .nav-tabs {
   --bs-border-color: var(--bs-secondary-border-subtle);
@@ -973,34 +981,20 @@ img.trace_image {
 
 /* Rules for map sidebar icons */
 
-.browse-section {
-  .node::before,
-  .way::before,
-  .relation::before {
-    display: inline-block;
-    width: 25px;
-    margin-left: -25px;
-  }
+.browse-section .browse-element-list {
+  line-height: 1.25rem;
 
-  .node, .way, .relation {
-    margin-left: 25px;
+  .browse-icon {
+    height: 1.25rem;
   }
 
-  .node::before     { content: image-url('browse/node.svg'); }
-  .way::before      { content: image-url('browse/way.svg'); }
-  .relation::before { content: image-url('browse/relation.svg'); }
-}
-
-@each $class, $item in $map-sidebar-icons {
-  .browse-section #{$class}::before {
-    content: image-url('browse/#{map.get($item, "filename")}');
+  .d-flex > .browse-icon {
+    height: max(20px, 1.25rem);
   }
 
-  @if map.get($item, "invert") {
-    @include color-mode(dark) {
-      .browse-section #{$class}::before {
-        filter: invert(.8) hue-rotate(180deg);
-      }
+  @include color-mode(dark) {
+    .browse-icon-invertible {
+      filter: invert(.8) hue-rotate(180deg);
     }
   }
 }
index b237f8bf85e09bec86fb1fcbfc6658e765b126f6..a9b85de7dc3f68d40fa84cab7b782b0766fda9e9 100644 (file)
@@ -48,8 +48,6 @@ module Api
     end
 
     def update
-      logger.debug request.raw_post
-
       relation = Relation.find(params[:id])
       new_relation = Relation.from_xml(request.raw_post)
 
diff --git a/app/controllers/api/traces/data_controller.rb b/app/controllers/api/traces/data_controller.rb
new file mode 100644 (file)
index 0000000..e04931c
--- /dev/null
@@ -0,0 +1,36 @@
+module Api
+  module Traces
+    class DataController < ApiController
+      before_action :set_locale
+      before_action :authorize
+
+      authorize_resource :trace
+
+      before_action :offline_error
+
+      def show
+        trace = Trace.visible.find(params[:trace_id])
+
+        if trace.public? || trace.user == current_user
+          if request.format == Mime[:xml]
+            send_data(trace.xml_file.read, :filename => "#{trace.id}.xml", :type => request.format.to_s, :disposition => "attachment")
+          elsif request.format == Mime[:gpx]
+            send_data(trace.xml_file.read, :filename => "#{trace.id}.gpx", :type => request.format.to_s, :disposition => "attachment")
+          elsif trace.file.attached?
+            redirect_to rails_blob_path(trace.file, :disposition => "attachment")
+          else
+            send_file(trace.trace_name, :filename => "#{trace.id}#{trace.extension_name}", :type => trace.mime_type, :disposition => "attachment")
+          end
+        else
+          head :forbidden
+        end
+      end
+
+      private
+
+      def offline_error
+        report_error "GPX files offline for maintenance", :service_unavailable if Settings.status == "gpx_offline"
+      end
+    end
+  end
+end
index 76dfb3a2dc1bd4b6d57728b17b3f074894ef88cd..e91261058efe05db7500626deacec804f562d581 100644 (file)
@@ -6,7 +6,7 @@ module Api
 
     authorize_resource
 
-    before_action :offline_error, :only => [:create, :destroy, :data]
+    before_action :offline_error, :only => [:create, :destroy]
     skip_around_action :api_call_timeout, :only => :create
 
     def show
@@ -71,24 +71,6 @@ module Api
       end
     end
 
-    def data
-      trace = Trace.visible.find(params[:id])
-
-      if trace.public? || trace.user == current_user
-        if request.format == Mime[:xml]
-          send_data(trace.xml_file.read, :filename => "#{trace.id}.xml", :type => request.format.to_s, :disposition => "attachment")
-        elsif request.format == Mime[:gpx]
-          send_data(trace.xml_file.read, :filename => "#{trace.id}.gpx", :type => request.format.to_s, :disposition => "attachment")
-        elsif trace.file.attached?
-          redirect_to rails_blob_path(trace.file, :disposition => "attachment")
-        else
-          send_file(trace.trace_name, :filename => "#{trace.id}#{trace.extension_name}", :type => trace.mime_type, :disposition => "attachment")
-        end
-      else
-        head :forbidden
-      end
-    end
-
     private
 
     def do_create(file, tags, description, visibility)
index 5bfec4ab62f219ac3cad9d114ee8d4606d84e6ae..32b53bad71c3f431d79234d65e354f6cafcf13c9 100644 (file)
@@ -21,7 +21,7 @@ class ApplicationController < ActionController::Base
 
   def self.allow_thirdparty_images(**options)
     content_security_policy(options) do |policy|
-      policy.img_src("*")
+      policy.img_src("*", :data)
     end
   end
 
@@ -253,9 +253,7 @@ class ApplicationController < ActionController::Base
   def map_layout
     policy = request.content_security_policy.clone
 
-    policy.child_src(*policy.child_src, "http://127.0.0.1:8111", "https://127.0.0.1:8112")
-    policy.frame_src(*policy.frame_src, "http://127.0.0.1:8111", "https://127.0.0.1:8112")
-    policy.connect_src(*policy.connect_src, Settings.nominatim_url, Settings.overpass_url, Settings.fossgis_osrm_url, Settings.graphhopper_url, Settings.fossgis_valhalla_url)
+    policy.connect_src(*policy.connect_src, "http://127.0.0.1:8111", Settings.nominatim_url, Settings.overpass_url, Settings.fossgis_osrm_url, Settings.graphhopper_url, Settings.fossgis_valhalla_url)
     policy.form_action(*policy.form_action, "render.openstreetmap.org")
     policy.style_src(*policy.style_src, :unsafe_inline)
 
index fe900d627e6e4cc4744e71a2a845798fb05c314e..5cedb3c705b5eeaeb42647057cb8de3c3cec7c8b 100644 (file)
@@ -18,8 +18,8 @@ class IssuesController < ApplicationController
     @title = t ".title"
 
     @issue_types = []
-    @issue_types.push("Note", "User") if current_user.moderator?
-    @issue_types.push("DiaryEntry", "DiaryComment", "User") if current_user.administrator?
+    @issue_types |= %w[Note User] if current_user.moderator?
+    @issue_types |= %w[DiaryEntry DiaryComment User] if current_user.administrator?
 
     @users = User.joins(:roles).where(:user_roles => { :role => current_user.roles.map(&:role) }).distinct
     @issues = Issue.visible_to(current_user)
@@ -48,7 +48,7 @@ class IssuesController < ApplicationController
   end
 
   def show
-    @title = t ".title", :status => @issue.status.humanize, :issue_id => @issue.id
+    @title = t ".title.#{@issue.status}", :issue_id => @issue.id
     @read_reports = @issue.read_reports
     @unread_reports = @issue.unread_reports
     @comments = @issue.comments
index 69a8f8fa2e57eb5b76a717f98506c5f4752c33da..482503e8ae66b3c48e5be261e5974c5d66aba821 100644 (file)
@@ -1,15 +1,38 @@
 module BrowseHelper
+  def element_icon(type, object)
+    selected_icon_data = { :filename => "#{type}.svg", :priority => 1 }
+
+    unless object.redacted?
+      target_tags = object.tags.find_all { |k, _v| BROWSE_ICONS.key? k }.sort
+      title = target_tags.map { |k, v| "#{k}=#{v}" }.to_sentence unless target_tags.empty?
+
+      target_tags.each do |k, v|
+        icon_data = BROWSE_ICONS[k][v] || BROWSE_ICONS[k][:*]
+        selected_icon_data = icon_data if icon_data && icon_data[:priority] > selected_icon_data[:priority]
+      end
+    end
+
+    image_tag "browse/#{selected_icon_data[:filename]}",
+              :size => 20,
+              :class => ["align-bottom object-fit-none browse-icon", { "browse-icon-invertible" => selected_icon_data[:invert] }],
+              :title => title
+  end
+
   def element_single_current_link(type, object)
-    link_to object, { :class => element_class(type, object), :title => element_title(object), :rel => (link_follow(object) if type == "node") } do
+    link_to object, { :rel => (link_follow(object) if type == "node") } do
       element_strikethrough object do
         printable_element_name object
       end
     end
   end
 
-  def element_list_item(type, object, &block)
-    tag.li :class => element_class(type, object), :title => element_title(object) do
-      element_strikethrough object, &block
+  def element_list_item(type, object, &)
+    tag.li(tag.div(element_icon(type, object) + tag.div(:class => "align-self-center", &), :class => "d-flex gap-1"))
+  end
+
+  def element_list_item_with_strikethrough(type, object, &)
+    element_list_item type, object do
+      element_strikethrough object, &
     end
   end
 
@@ -52,20 +75,6 @@ module BrowseHelper
     end
   end
 
-  def element_class(type, object)
-    classes = [type]
-    classes += icon_tags(object).flatten.map { |t| h(t) } unless object.redacted?
-    classes.join(" ")
-  end
-
-  def element_title(object)
-    if object.redacted?
-      ""
-    else
-      h(icon_tags(object).map { |k, v| "#{k}=#{v}" }.to_sentence)
-    end
-  end
-
   def link_follow(object)
     "nofollow" if object.tags.empty?
   end
@@ -107,12 +116,6 @@ module BrowseHelper
 
   private
 
-  ICON_TAGS = %w[aeroway amenity barrier building highway historic landuse leisure man_made natural office railway shop tourism waterway].freeze
-
-  def icon_tags(object)
-    object.tags.find_all { |k, _v| ICON_TAGS.include? k }.sort
-  end
-
   def name_locales(object)
     object.tags.keys.map { |k| Regexp.last_match(1) if k =~ /^name:(.*)$/ }.flatten
   end
index 9705221607cddd6a9180b1533d59d61579fcec7f..ae953c5833c59c59e2b135d342f0d2c7aa2f21e5 100644 (file)
@@ -3,7 +3,7 @@ module ChangesetsHelper
     if changeset.user.status == "deleted"
       t("users.no_such_user.deleted")
     elsif changeset.user.data_public?
-      link_to changeset.user.display_name, changeset.user
+      link_to changeset.user.display_name, changeset.user, :class => "mw-100 d-inline-block align-bottom text-truncate text-wrap", :dir => "auto"
     else
       t("browse.anonymous")
     end
index 21c8fa51e8c4326cd37182aeda636b4898c15d20..2e9850aef060f2b6549de5cdecac599d95fbdd9a 100644 (file)
@@ -18,7 +18,8 @@ module NoteHelper
     elsif author.status == "deleted"
       t("users.no_such_user.deleted")
     else
-      link_to h(author.display_name), link_options.merge(:controller => "/users", :action => "show", :display_name => author.display_name)
+      link_to h(author.display_name), link_options.merge(:controller => "/users", :action => "show", :display_name => author.display_name),
+              :class => "mw-100 d-inline-block align-bottom text-truncate text-wrap", :dir => "auto"
     end
   end
 end
index e2770eb69ea5bf655866b04499708eadd70a575e..8a3a8a3eb460f2b8c550d7daeba3c99e724e48f2 100644 (file)
@@ -25,6 +25,48 @@ module UserBlocksHelper
     end
   end
 
+  def block_short_status(block)
+    if block.active?
+      if block.needs_view?
+        if block.ends_at > Time.now.utc
+          t("user_blocks.helper.short.active_unread")
+        else
+          t("user_blocks.helper.short.expired_unread")
+        end
+      else
+        t("user_blocks.helper.short.active")
+      end
+    else
+      if block.revoker_id.nil?
+        if block.updated_at > block.ends_at
+          t("user_blocks.helper.short.read_html", :time => block_short_time_in_past(block.updated_at))
+        else
+          t("user_blocks.helper.short.ended")
+        end
+      else
+        t("user_blocks.helper.short.revoked_html", :name => link_to(block.revoker.display_name, block.revoker,
+                                                                    :class => "username d-inline-block text-truncate text-wrap align-bottom",
+                                                                    :dir => "auto"))
+      end
+    end
+  end
+
+  def block_short_time_in_future(time)
+    tag.time l(time.to_date),
+             :datetime => time.xmlschema,
+             :title => t("user_blocks.helper.short.time_in_future_title",
+                         :time_absolute => l(time, :format => :friendly),
+                         :time_relative => time_ago_in_words(time))
+  end
+
+  def block_short_time_in_past(time)
+    tag.time l(time.to_date),
+             :datetime => time.xmlschema,
+             :title => t("user_blocks.helper.short.time_in_past_title",
+                         :time_absolute => l(time, :format => :friendly),
+                         :time_relative => time_ago_in_words(time, :scope => :"datetime.distance_in_words_ago"))
+  end
+
   def block_duration_in_words(duration)
     # Ensure the requested duration isn't negative, even by a millisecond
     duration = 0 if duration.negative?
index febb3e129fcbdd4575a80cc4d024cab458415b42..2c107236497a8a7f445d10051fbd53e4f1865ee9 100644 (file)
@@ -1,7 +1,8 @@
-<li><%= linked_name = link_to printable_element_name(containing_relation.relation), containing_relation.relation
-        if containing_relation.member_role.blank?
-          t ".entry_html", :relation_name => linked_name
-        else
-          t ".entry_role_html", :relation_name => linked_name, :relation_role => containing_relation.member_role
-        end %>
-</li>
+<%= element_list_item "relation", containing_relation.relation do %>
+  <%= linked_name = link_to printable_element_name(containing_relation.relation), containing_relation.relation
+      if containing_relation.member_role.blank?
+        linked_name
+      else
+        t ".entry_role_html", :relation_name => linked_name, :relation_role => containing_relation.member_role
+      end %>
+<% end %>
index 0ffe7c68b82dd01c9cbafe2ca6966295d4b8532a..52939d3a1c5587272d64ba7e42b06c96853a6be4 100644 (file)
       <% unless node.ways.empty? %>
         <details <%= "open" if node.ways.count < 10 %>>
           <summary><%= t "browse.part_of_ways", :count => node.ways.uniq.count %></summary>
-          <ul class="list-unstyled">
+          <ul class="list-unstyled browse-element-list">
             <% node.ways.uniq.each do |way| %>
-              <li><%= element_single_current_link "way", way %></li>
+              <%= element_list_item "way", way do %>
+                <%= element_single_current_link "way", way %>
+              <% end %>
             <% end %>
           </ul>
         </details>
@@ -25,7 +27,7 @@
       <% unless node.containing_relation_members.empty? %>
         <details <%= "open" if node.containing_relation_members.count < 10 %>>
           <summary><%= t "browse.part_of_relations", :count => node.containing_relation_members.uniq.count %></summary>
-          <ul class="list-unstyled">
+          <ul class="list-unstyled browse-element-list">
             <%= render :partial => "browse/containing_relation", :collection => node.containing_relation_members.uniq %>
           </ul>
         </details>
index 5dcdffa47f6cc683d657fa8ad215adf546234c7f..44706790044d6153452ad91d4b41661e15c26a56 100644 (file)
@@ -14,7 +14,7 @@
       <h4><%= t "browse.part_of" %></h4>
       <details <%= "open" if relation.containing_relation_members.count < 10 %>>
         <summary><%= t "browse.part_of_relations", :count => relation.containing_relation_members.uniq.count %></summary>
-        <ul class="list-unstyled">
+        <ul class="list-unstyled browse-element-list">
           <%= render :partial => "browse/containing_relation", :collection => relation.containing_relation_members.uniq %>
         </ul>
       </details>
@@ -24,7 +24,7 @@
       <h4><%= t ".members" %></h4>
       <details <%= "open" if relation.relation_members.count < 10 %>>
         <summary><%= t ".members_count", :count => relation.relation_members.count %></summary>
-        <ul class="list-unstyled">
+        <ul class="list-unstyled browse-element-list">
           <%= render :partial => "browse/relation_member", :collection => relation.relation_members %>
         </ul>
       </details>
index d122f0edfed8f327f2c81893a317cbfb588073d8..c00396fbd84388c31abc8f6c3374d3a7394e16de 100644 (file)
@@ -1,6 +1,6 @@
 <% linked_name = link_to printable_element_name(relation_member.member), relation_member.member, { :rel => link_follow(relation_member.member) }
    type_str = t ".type.#{relation_member.member_type.downcase}" %>
-<%= element_list_item relation_member.member_type.downcase, relation_member.member do %>
+<%= element_list_item_with_strikethrough relation_member.member_type.downcase, relation_member.member do %>
   <%= if relation_member.member_role.blank?
         t ".entry_html", :type => type_str, :name => linked_name
       else
index d04eff14030183432704277a9e07802b378c2083..9181a3e0804d7f5e5e198bfba4c27fca7b30bdf4 100644 (file)
@@ -14,7 +14,7 @@
       <h4><%= t "browse.part_of" %></h4>
       <details <%= "open" if way.containing_relation_members.count < 10 %>>
         <summary><%= t "browse.part_of_relations", :count => way.containing_relation_members.uniq.count %></summary>
-        <ul class="list-unstyled">
+        <ul class="list-unstyled browse-element-list">
           <%= render :partial => "browse/containing_relation", :collection => way.containing_relation_members.uniq %>
         </ul>
       </details>
       <h4><%= t ".nodes" %></h4>
       <details <%= "open" if way.way_nodes.count < 10 %>>
         <summary><%= t ".nodes_count", :count => way.way_nodes.count %></summary>
-        <ul class="list-unstyled">
+        <ul class="list-unstyled browse-element-list">
           <% way.way_nodes.each do |wn| %>
-            <li>
+            <%= element_list_item "node", wn.node do %>
               <%= element_single_current_link "node", wn.node %>
               <% related_ways = wn.node.ways.reject { |w| w.id == wn.way_id } %>
+              <% icon_connector = " " %>
               <% if related_ways.size > 0 then %>
                 (<%= t ".also_part_of_html",
                        :count => related_ways.size,
-                       :related_ways => to_sentence(related_ways.map { |w| element_single_current_link "way", w }) %>)
+                       :related_ways => to_sentence(related_ways.map { |w| element_icon("way", w) + icon_connector + element_single_current_link("way", w) }) %>)
               <% end %>
-            </li>
+            <% end %>
           <% end %>
         </ul>
       </details>
index fd5dd8a26a3cd16ca6aeb5fd9a9b0f47b58fdbcc..a95bed6fa3ab5d73bd55da685cbab8d5c7b9897a 100644 (file)
@@ -1,12 +1,12 @@
 <%= turbo_frame_tag "changeset_#{type.pluralize}" do %>
   <%= render :partial => "paging_nav", :locals => { :type => type, :pages => pages } %>
-  <ul class="list-unstyled" data-turbo="false">
+  <ul class="list-unstyled browse-element-list" data-turbo="false">
     <% elements.each do |element| %>
-      <%= element_list_item type, element do
-            t "printable_name.current_and_old_links_html",
+      <%= element_list_item_with_strikethrough type, element do %>
+        <%= t "printable_name.current_and_old_links_html",
               :current_link => link_to(printable_element_name(element), :controller => type.pluralize, :action => :show, :id => element.id[0]),
-              :old_link => link_to(printable_element_version(element), :controller => "old_#{type.pluralize}", :action => :show, :id => element.id[0], :version => element.version)
-          end %>
+              :old_link => link_to(printable_element_version(element), :controller => "old_#{type.pluralize}", :action => :show, :id => element.id[0], :version => element.version) %>
+      <% end %>
     <% end %>
   </ul>
 <% end %>
index 95dfbf6f25edf8ff9e3a120d27af48af0461f43e..3f79190fae1ae09f6392934741e604d76c73f9e0 100644 (file)
@@ -15,7 +15,7 @@
     </div>
     <div class="mb-3 col-md-auto">
       <%= select_tag :issue_type,
-                     options_for_select(@issue_types, params[:issue_type]),
+                     options_for_select(@issue_types.map { |issue_type| [issue_type.constantize.model_name.human, issue_type] }, params[:issue_type]),
                      :include_blank => t(".select_type"),
                      :data => { :behavior => "category_dropdown" },
                      :class => "form-select" %>
index a58b8c5cb18b4f36c4bb1c0bf978618dc08b0255..74e7c0a4ce1f7793880c542da15d021a743c1ebc 100644 (file)
@@ -1,5 +1,5 @@
 <% content_for :heading do %>
-<h1><%= t ".title", :status => @issue.status.humanize, :issue_id => @issue.id %></h1>
+<h1><%= @title %></h1>
 <p><%= @issue.reportable.model_name.human %> : <%= link_to reportable_title(@issue.reportable), reportable_url(@issue.reportable) %></p>
 <p class="text-body-secondary">
   <small>
index fcf134fd29c8b0d9c673fcea647e3679b54e448b..190ea44e5654b53b63af24f070ad8b0130609f9a 100644 (file)
     </ul>
     <% if current_user && current_user.id %>
       <div class='d-inline-flex dropdown user-menu logged-in'>
-        <button class='d-flex gap-1 align-items-center justify-content-center dropdown-toggle btn btn-outline-secondary border-secondary-subtle bg-body text-secondary px-2 py-1 flex-grow-1' type='button' data-bs-toggle='dropdown'>
+        <button class='d-flex gap-1 align-items-center justify-content-center dropdown-toggle btn btn-outline-secondary border-secondary-subtle bg-body text-secondary px-2 py-1 flex-grow-1 mw-100' type='button' data-bs-toggle='dropdown'>
           <%= user_thumbnail_tiny(current_user, :class => "user_thumbnail_tiny rounded-1 bg-body") %>
           <% if current_user.new_messages.size > 0 %>
             <span class="badge count-number position-static m-1"><%= current_user.new_messages.size %></span>
           <% end %>
-          <span class='username align-middle text-truncate'>
+          <span class='username align-middle text-truncate' dir='auto'>
             <%= current_user.display_name %>
           </span>
         </button>
index a181e96e1254b5178f18225ea7c21917adf295a4..7213cf80dcedb66c8a20c2ecf06d4671ba372fc5 100644 (file)
@@ -1,5 +1,5 @@
 <%= tag.tr(:id => "inbox-#{message.id}", :class => { "table-success" => !message.message_read? }) do %>
-  <td><%= link_to message.sender.display_name, user_path(message.sender) %></td>
+  <td><%= link_to message.sender.display_name, user_path(message.sender), :class => "username d-inline-block text-truncate text-wrap align-bottom", :dir => "auto" %></td>
   <td><%= link_to message.title, message_path(message) %></td>
   <td class="text-nowrap"><%= l message.sent_on, :format => :friendly %></td>
   <td class="text-nowrap">
index cf10cd462ef52ef49079364ad8575d9f1aa9e01f..f744d028a6044e9478bfb1b83faca9c7cfa1346d 100644 (file)
@@ -1,5 +1,5 @@
 <%= tag.tr(:id => "outbox-#{message.id}") do %>
-  <td><%= link_to message.recipient.display_name, user_path(message.recipient) %></td>
+  <td><%= link_to message.recipient.display_name, user_path(message.recipient), :class => "username d-inline-block text-truncate text-wrap align-bottom", :dir => "auto" %></td>
   <td><%= link_to message.title, message_path(message) %></td>
   <td class="text-nowrap"><%= l message.sent_on, :format => :friendly %></td>
   <td class="text-nowrap">
index 8dda65c25dc556fa5d095d3492da272fd801fb41..d17612e2929be2a70b315dc78e955e2da56c03ef 100644 (file)
@@ -9,19 +9,17 @@
   </div>
 
   <div class="details" data-coordinates="<%= @note.lat %>,<%= @note.lon %>" data-status="<%= @note.status %>">
-    <ul class="list-unstyled">
-      <li><%= note_event("opened", @note.created_at, @note.author) %></li>
-      <% if @note.status == "closed" %>
-        <li><%= note_event(@note.status, @note.closed_at, @note.all_comments.last.author) %></li>
-      <% end %>
-      <li>
-        <%= t "browse.location" %>
-        <%= link_to(t(".coordinates_html",
-                      :latitude => tag.span(number_with_delimiter(@note.lat), :class => "latitude"),
-                      :longitude => tag.span(number_with_delimiter(@note.lon), :class => "longitude")),
-                    root_path(:anchor => "map=18/#{@note.lat}/#{@note.lon}")) %>
-      </li>
-    </ul>
+    <p class="mb-2"><%= note_event("opened", @note.created_at, @note.author) %></p>
+    <% if @note.status == "closed" %>
+      <p class="mb-2"><%= note_event(@note.status, @note.closed_at, @note.all_comments.last.author) %></p>
+    <% end %>
+    <p>
+      <%= t "browse.location" %>
+      <%= link_to t(".coordinates_html",
+                    :latitude => tag.span(number_with_delimiter(@note.lat), :class => "latitude"),
+                    :longitude => tag.span(number_with_delimiter(@note.lon), :class => "longitude")),
+                  root_path(:anchor => "map=18/#{@note.lat}/#{@note.lon}") %>
+    </p>
   </div>
 
   <% if @note_comments.find { |comment| comment.author.nil? } -%>
index 998dd248d45a14b8d108fc9a3ffe1fddf13da563..4311ba082e39de12dd945f3a66bf011c9edfabc3 100644 (file)
@@ -56,7 +56,8 @@
             </li>
           <% end %>
           <li class="nav-item">
-            <%= link_to t(".traces_from", :user => @target_user&.display_name), { :controller => "traces", :action => "index", :display_name => @target_user&.display_name }, { :class => "nav-link active" } %>
+            <%= link_to t(".traces_from_html", :user => tag.span(@target_user.display_name, :class => "username text-truncate d-inline-block align-bottom", :dir => "auto")),
+                        { :controller => "traces", :action => "index", :display_name => @target_user.display_name }, { :class => "nav-link active" } %>
           </li>
         <% end %>
       </ul>
index 1eb38f93fc50b285b7a6a66a335de94a5bded882..cbc2ee23c0b39297c07f4aac73acd2c6121a0082 100644 (file)
@@ -1,19 +1,18 @@
 <tr>
   <% if @show_user_name %>
-  <td><%= link_to block.user.display_name, block.user, :class => "username d-inline-block text-truncate text-wrap" %></td>
+  <td><%= link_to block.user.display_name, block.user, :class => "username d-inline-block text-truncate text-wrap", :dir => "auto" %></td>
   <% end %>
   <% if @show_creator_name %>
-  <td><%= link_to block.creator.display_name, block.creator, :class => "username d-inline-block text-truncate text-wrap" %></td>
+  <td><%= link_to block.creator.display_name, block.creator, :class => "username d-inline-block text-truncate text-wrap", :dir => "auto" %></td>
   <% end %>
   <td><%= h truncate(block.reason) %></td>
-  <td><%= h block_status(block) %></td>
-  <td>
-    <% if block.revoker_id.nil? %>
-      <%= t(".not_revoked") %>
-    <% else %>
-      <%= link_to block.revoker.display_name, block.revoker %>
-    <% end %>
-  </td>
+  <td><%= block_short_time_in_past(block.created_at) %></td>
+  <% if block.ends_at > Time.now.utc %>
+  <td><%= block_short_time_in_future(block.ends_at) %></td>
+  <% else %>
+  <td><%= block_short_time_in_past(block.ends_at) %></td>
+  <% end %>
+  <td><%= h block_short_status(block) %></td>
   <td><%= link_to t(".show"), block %></td>
   <td><% if can?(:edit, block) %><%= link_to t(".edit"), edit_user_block_path(block) %><% end %></td>
 </tr>
index 061989586a255b067cdcf94d219feb7d8b06df86..0770e331fdd7827d13eac1b95092bf6de36b379d 100644 (file)
@@ -14,7 +14,7 @@
   <% on_user = @user || @user_block&.user %>
   <% if on_user != current_user && on_user&.blocks&.exists? %>
     <li class="nav-item">
-      <%= link_to t(".blocks_on_user", :user => on_user.display_name),
+      <%= link_to t(".blocks_on_user_html", :user => tag.span(on_user.display_name, :class => "username text-truncate d-inline-block align-bottom", :dir => "auto")),
                   user_blocks_on_path(on_user),
                   :class => ["nav-link", { :active => action_name == "blocks_on" }] %>
     </li>
@@ -29,7 +29,7 @@
   <% by_user = @user || @user_block&.creator %>
   <% if by_user != current_user && by_user&.blocks_created&.exists? %>
     <li class="nav-item">
-      <%= link_to t(".blocks_by_user", :user => by_user.display_name),
+      <%= link_to t(".blocks_by_user_html", :user => tag.span(by_user.display_name, :class => "username text-truncate d-inline-block align-bottom", :dir => "auto")),
                   user_blocks_by_path(by_user),
                   :class => ["nav-link", { :active => action_name == "blocks_by" }] %>
     </li>
index 8c8557f606e358b196d170209ecbb5779947ccd1..c2e516170a2ee655c65aca2dfbaf8cca5f9967e8 100644 (file)
@@ -9,8 +9,9 @@
         <th><%= t ".creator_name" %></th>
         <% end %>
         <th><%= t ".reason" %></th>
+        <th><%= t ".start" %></th>
+        <th><%= t ".end" %></th>
         <th><%= t ".status" %></th>
-        <th><%= t ".revoker_name" %></th>
         <th></th>
         <th></th>
       </tr>
diff --git a/config/browse_icons.yml b/config/browse_icons.yml
new file mode 100644 (file)
index 0000000..f24d767
--- /dev/null
@@ -0,0 +1,186 @@
+aeroway:
+  aerodrome: { filename: "aerodrome.p.16.png" }
+
+  runway: { filename: "runway.20.png" }
+  taxiway: { filename: "taxiway.20.png" }
+
+amenity:
+  atm: { filename: "amenity_atm.16.png", invert: true }
+  bank: { filename: "amenity_bank.16.png", invert: true }
+  bar: { filename: "amenity_bar.16.png", invert: true }
+  bench: { filename: "amenity_bench.16.png", invert: true }
+  biergarten: { filename: "amenity_biergarten.16.png", invert: true }
+  bicycle_parking: { filename: "amenity_bicycle_parking.16.png" }
+  bicycle_rental: { filename: "transport_rental_bicycle.16.png" }
+  bus_station: { filename: "bus_station.n.16.png" }
+  cafe: { filename: "amenity_cafe.16.png", invert: true }
+  car_rental: { filename: "transport_rental_car.16.png" }
+  car_sharing: { filename: "car_share.p.16.png" }
+  childcare: { filename: "amenity_childcare.p.16.png" }
+  cinema: { filename: "amenity_cinema.16.png", invert: true }
+  courthouse: { filename: "amenity_courthouse.16.png", invert: true }
+  dentist: { filename: "amenity_dentist.16.png" }
+  doctors: { filename: "amenity_doctors.16.png" }
+  drinking_water: { filename: "amenity_drinking_water.16.png", invert: true }
+  fast_food: { filename: "amenity_fast_food.16.png", invert: true }
+  fire_station: { filename: "amenity_fire_station.16.png", invert: true }
+  fuel: { filename: "amenity_fuel.16.png" }
+  hospital: { filename: "amenity_hospital.16.png" }
+  kindergarten: { filename: "amenity_childcare.p.16.png" }
+  library: { filename: "library.p.16.png", invert: true }
+  nightclub: { filename: "amenity_nightclub.16.png", invert: true }
+  parking: { filename: "parking.p.16.png" }
+  pharmacy: { filename: "amenity_pharmacy.16.png" }
+  place_of_worship: { filename: "amenity_place_of_worship.16.png", invert: true }
+  police: { filename: "amenity_police.16.png", invert: true }
+  post_box: { filename: "post_box.p.16.png", invert: true }
+  post_office: { filename: "post_office.p.16.png", invert: true }
+  prison: { filename: "amenity_prison.16.png", invert: true }
+  pub: { filename: "amenity_pub.16.png", invert: true }
+  restaurant: { filename: "amenity_restaurant.16.png", invert: true }
+  recycling: { filename: "amenity_recycling.16.png", invert: true }
+  school: { filename: "education_school.p.16.png" }
+  shelter: { filename: "shelter2.p.16.png" }
+  taxi: { filename: "amenity_taxi.16.png" }
+  telephone: { filename: "telephone.p.16.png", invert: true }
+  theatre: { filename: "amenity_theatre.16.png", invert: true }
+  toilets: { filename: "amenity_toilets.16.png", invert: true }
+  townhall: { filename: "amenity_townhall.16.png", invert: true }
+  university: { filename: "education_university.p.16.png" }
+  veterinary: { filename: "health_veterinary.p.16.png" }
+  waste_basket: { filename: "amenity_waste_basket.16.png", invert: true }
+
+barrier:
+  gate: { filename: "gate2.p.16.png", invert: true }
+
+  wall: { filename: "wall.20.png" }
+
+building:
+  :*: { filename: "building.png" }
+
+highway:
+  bus_stop: { filename: "highway_bus_stop.16.png" }
+  mini_roundabout: { filename: "mini_round.p.16.png" }
+  traffic_signals: { filename: "traffic_light.png", invert: true }
+  turning_circle: { filename: "turning_circle.p.16.png" }
+
+  bridleway: { filename: "bridleway.20.png" }
+  cycleway: { filename: "cycleway.20.png" }
+  footway: { filename: "footway.20.png" }
+  motorway: { filename: "motorway.20.png" }
+  motorway_link: { filename: "motorway.20.png" }
+  path: { filename: "path.20.png" }
+  pedestrian: { filename: "service.20.png" }
+  primary: { filename: "primary.20.png" }
+  primary_link: { filename: "primary.20.png" }
+  residential: { filename: "unclassified.20.png" }
+  secondary: { filename: "secondary.20.png" }
+  secondary_link: { filename: "secondary.20.png" }
+  service: { filename: "service.20.png" }
+  tertiary: { filename: "tertiary.20.png" }
+  track: { filename: "track.20.png" }
+  trunk: { filename: "trunk.20.png" }
+  trunk_link: { filename: "trunk.20.png" }
+  unclassified: { filename: "unclassified.20.png" }
+
+historic:
+  archaeological_site: { filename: "historic_archaeological_site.16.png", invert: true }
+  castle: { filename: "tourist_castle.p.16.png", invert: true }
+  memorial: { filename: "historic_memorial.16.png", invert: true }
+  monument: { filename: "historic_monument.16.png", invert: true }
+  ruins: { filename: "tourist_ruins.p.16.png", invert: true }
+  wreck: { filename: "tourist_wreck.p.16.png", invert: true }
+
+landuse:
+  brownfield: { filename: "brownfield.png" }
+  cemetery: { filename: "cemetery.png" }
+  commercial: { filename: "commercial.png" }
+  farmland: { filename: "farmland.png" }
+  farmyard: { filename: "farmyard.png" }
+  forest: { filename: "forest.png" }
+  grass: { filename: "grass.png" }
+  industrial: { filename: "industrial.png" }
+  meadow: { filename: "meadow.png" }
+  military: { filename: "military.png" }
+  residential: { filename: "residential.png" }
+  retail: { filename: "retail.png" }
+  tourism: { filename: "tourism.png" }
+
+leisure:
+  golf_course: { filename: "golf.png" }
+  park: { filename: "park.png" }
+  picnic_table: { filename: "tourism_picnic_site.16.png", invert: true }
+  playground: { filename: "leisure_playground.16.png", invert: true }
+  pitch: { filename: "pitch.png" }
+  nature_reserve: { filename: "reserve.png" }
+  water_park: { filename: "leisure_water_park.16.png", invert: true }
+
+man_made:
+  lighthouse: { filename: "man_made_lighthouse.16.png" }
+  water_tower: { filename: "man_made_water_tower.16.png", invert: true }
+  windmill: { filename: "man_made_windmill.16.png", invert: true }
+
+natural:
+  tree: { filename: "tree.p.16.png" }
+
+  grassland: { filename: "grassland.png" }
+  heath: { filename: "heathland.png" }
+  scrub: { filename: "scrub.png" }
+  water: { filename: "lake.png" }
+  wood: { filename: "wood.png" }
+
+office:
+  diplomatic: { filename: "office_diplomatic.16.png" }
+  estate_agent: { filename: "shop_estateagent.16.png" }
+
+railway:
+  halt: { filename: "halt.p.16.png" }
+  station: { filename: "station.p.16.png" }
+  level_crossing: { filename: "level_crossing.p.16.png", invert: true }
+
+  light_rail: { filename: "light_rail.20.png" }
+  rail: { filename: "rail.20.png" }
+  subway: { filename: "subway.20.png" }
+  tram: { filename: "tram.20.png" }
+
+shop:
+  :*: { filename: "shop_convenience.p.16.png", priority: 20 }
+  alcohol: { filename: "shop_alcohol.16.png" }
+  bakery: { filename: "shop_bakery.16.png" }
+  bicycle: { filename: "shop_bicycle.16.png" }
+  books: { filename: "shop_books.16.png" }
+  butcher: { filename: "shop_butcher.p.16.png" }
+  clothes: { filename: "shop_clothes.16.png" }
+  car_parts: { filename: "shop_car_parts.16.png" }
+  car_repair: { filename: "shop_car_repair.16.png" }
+  convenience: { filename: "shop_convenience.p.16.png" }
+  doityourself: { filename: "shop_doityourself.16.png" }
+  electronics: { filename: "shop_electronics.16.png" }
+  estate_agent: { filename: "shop_estateagent.16.png" }
+  fashion: { filename: "shop_clothes.16.png" }
+  florist: { filename: "shop_florist.16.png" }
+  furniture: { filename: "shop_furniture.16.png" }
+  garden_centre: { filename: "shop_florist.16.png" }
+  gift: { filename: "shop_gift.16.png" }
+  greengrocer: { filename: "shop_greengrocer.p.16.png" }
+  hardware: { filename: "shop_doityourself.16.png" }
+  hairdresser: { filename: "shop_hairdresser.16.png" }
+  jewelry: { filename: "shop_jewelry.16.png" }
+  mobile_phone: { filename: "shop_mobile_phone.16.png" }
+  optician: { filename: "shop_optician.16.png" }
+  pet: { filename: "shop_pet.16.png" }
+  seafood: { filename: "shop_seafood.16.png" }
+  shoes: { filename: "shop_shoes.16.png" }
+  supermarket: { filename: "shop_supermarket.p.16.png" }
+
+tourism:
+  alpine_hut: { filename: "tourism_alpine_hut.16.png" }
+  camp_site: { filename: "tourism_camp_site.16.png" }
+  caravan_site: { filename: "tourism_caravan_site.16.png" }
+  hostel: { filename: "tourism_hostel.16.png" }
+  hotel: { filename: "tourism_hotel.16.png" }
+  motel: { filename: "tourism_motel.16.png" }
+  museum: { filename: "tourism_museum.16.png", invert: true }
+  picnic_site: { filename: "tourism_picnic_site.16.png", invert: true }
+  viewpoint: { filename: "view_point.p.16.png", invert: true }
+  wilderness_hut: { filename: "tourism_wilderness_hut.16.png" }
diff --git a/config/initializers/browse_icons.rb b/config/initializers/browse_icons.rb
new file mode 100644 (file)
index 0000000..a55df97
--- /dev/null
@@ -0,0 +1,13 @@
+begin
+  BROWSE_ICONS = YAML.load_file(Rails.root.join("config/browse_icons.yml")).transform_values do |tag_key_data|
+    transformed_tag_key_data = {}
+    tag_key_data.each do |tag_value, tag_value_data|
+      tag_value_data = tag_value_data.deep_symbolize_keys
+      tag_value_data[:priority] ||= tag_value == :* ? 10 : 100
+      transformed_tag_key_data[tag_value] = tag_value_data
+    end
+    transformed_tag_key_data
+  end
+rescue StandardError
+  BROWSE_ICONS = {}.freeze
+end
index 3b5bc944fe14a2c321cd86cf36e8d491edbbda07..4f883cc9403eea879eaad8128882e27e2d04b31f 100644 (file)
@@ -1,6 +1,6 @@
 - leafletOsmId: "Mapnik"
   code: "M"
-  keyId: "mapnik"
+  layerId: "mapnik"
   nameId: "standard"
   credit:
     id: "make_a_donation"
@@ -9,7 +9,7 @@
 
 - leafletOsmId: "CyclOSM"
   code: "Y"
-  keyId: "cyclosm"
+  layerId: "cyclosm"
   nameId: "cyclosm"
   credit:
     id: "cyclosm_credit"
@@ -23,7 +23,7 @@
 
 - leafletOsmId: "CycleMap"
   code: "C"
-  keyId: "cyclemap"
+  layerId: "cyclemap"
   nameId: "cycle_map"
   apiKeyId: "THUNDERFOREST_KEY"
   credit:
@@ -35,7 +35,7 @@
 
 - leafletOsmId: "TransportMap"
   code: "T"
-  keyId: "transportmap"
+  layerId: "transportmap"
   nameId: "transport_map"
   apiKeyId: "THUNDERFOREST_KEY"
   credit:
@@ -47,7 +47,7 @@
 
 - leafletOsmId: "TracestrackTopo"
   code: "P"
-  keyId: "tracestracktopo"
+  layerId: "tracestracktopo"
   nameId: "tracestracktop_topo"
   apiKeyId: "TRACESTRACK_KEY"
   credit:
@@ -59,7 +59,7 @@
 
 - leafletOsmId: "HOT"
   code: "H"
-  keyId: "hot"
+  layerId: "hot"
   nameId: "hot"
   credit:
     id: "hotosm_credit"
index dd6bea380aa4d27996a9249253ced1153a352a7e..7c7cdcb689b495285933161891601615ceae49aa 100644 (file)
@@ -315,7 +315,6 @@ af:
         way: Weg
         relation: Verwantskap
     containing_relation:
-      entry_html: Verwantskap %{relation_name}
       entry_role_html: Verwantskap %{relation_name} (as %{relation_role})
     not_found:
       title: Kon nie gevind word
@@ -1736,7 +1735,7 @@ af:
       tagged_with: gemerk met %{tags}
       upload_trace: Laai 'n GPS-spoor op
       my_traces: My Spore
-      traces_from: Openbare spore van %{user}
+      traces_from_html: Openbare spore van %{user}
     destroy:
       scheduled_for_deletion: Spoor is vir verwydering geoormerk
   application:
index 860ad370f40a334f24caa7306f7c8fe32c05bd7e..91784f1873de0ffa7282b0368e2ddb2f943b1ef7 100644 (file)
@@ -151,7 +151,6 @@ aln:
         way: Udhë
         relation: Lidhje
     containing_relation:
-      entry_html: Lidhja %{relation_name}
       entry_role_html: Lidhja %{relation_name} (sikur %{relation_role})
     not_found:
       sorry: Na vjen keq, %{type} me ID %{id}, nuk mujti me u gjetë.
index 033774cb54faf68163fb69afd6fe1b92bea5abfb..ee85a6bf119016bb0138a5685b774ea9c0fdf0af 100644 (file)
@@ -450,7 +450,6 @@ ar:
         way: طريق
         relation: علاقة
     containing_relation:
-      entry_html: العلاقة %{relation_name}
       entry_role_html: العلاقة %{relation_name} (كــ%{relation_role})
     not_found:
       title: لم يتم العثور عليه
index 59489ad0bf9ed8487879a966563e0d36d4e1c977..1cfd348d396821b592f8567aca475a9186837534 100644 (file)
@@ -131,7 +131,6 @@ arz:
         way: طريق
         relation: علاقة
     containing_relation:
-      entry_html: العلاقه %{relation_name}
       entry_role_html: العلاقه %{relation_name} (كــ %{relation_role})
     not_found:
       sorry: عفوًا، لم يتم العثور على %{type} بالمعرّف %{id}.
index d0e9f358da08599a80ed9e8cc834646ece69699b..b25bfd269a037180a0f89c0f5f0f97d238836344 100644 (file)
@@ -283,7 +283,6 @@ ast:
         way: Vía
         relation: Rellación
     containing_relation:
-      entry_html: Rellación %{relation_name}
       entry_role_html: Rellación %{relation_name} (como %{relation_role})
     not_found:
       sorry: Sentímoslo, el/la %{type} númberu %{id} nun pudo alcontrase.
index 917cf11bdef9cb11d28da213a0579c90eacfffad..f74e4dbc9b18348c7baba5e110c17bbbf8e64eb4 100644 (file)
@@ -186,7 +186,6 @@ az:
         way: Xətt
         relation: Əlaqə
     containing_relation:
-      entry_html: Əlaqəsi %{relation_name}
       entry_role_html: Əlaqəsi %{relation_name} (%{relation_role} kimi)
     not_found:
       sorry: Təəsüf ki, %{id} %{type} tapılmadı.
index 2b9da91afb1c1374434454bddab0a658056ca962..d097f80accb980542c4e5acbc5c4df4b4bb5a1d2 100644 (file)
@@ -375,7 +375,6 @@ ba:
         way: Һыҙат
         relation: Мөнәсәбәт
     containing_relation:
-      entry_html: Мөнәсәбәт %{relation_name}
       entry_role_html: Мөнәсәбәт %{relation_name} (ролендә %{relation_role})
     not_found:
       title: Табылманы
index 1a7f6db32a9c05fa09b019f58baf9049818c6957..b87ac1252de0adf91135406cc08cd8469958e7fd 100644 (file)
@@ -324,7 +324,6 @@ be-Tarask:
         way: Шлях
         relation: Адносіны
     containing_relation:
-      entry_html: Адносіны %{relation_name}
       entry_role_html: Адносіны %{relation_name} (як %{relation_role})
     not_found:
       title: Ня знойдзена
index a31c0917926d552f0fc070187fd712de64c6d7b7..b722d3745854354cd14ecb4908e222edfa83ff7f 100644 (file)
@@ -433,7 +433,6 @@ be:
         way: Лінія
         relation: Дачыненне
     containing_relation:
-      entry_html: Дачыненне %{relation_name}
       entry_role_html: Дачыненне %{relation_name} (як %{relation_role})
     not_found:
       title: Не знойдзена
index 7173dac39a981fb3c03a26f9f9e624103bf9cb6d..2cb7d4afb3b28585158309020ccd9dcd86369f55 100644 (file)
@@ -319,7 +319,6 @@ bg:
         way: Път
         relation: Релация
     containing_relation:
-      entry_html: Релация %{relation_name}
       entry_role_html: Релация %{relation_name} (като %{relation_role})
     not_found:
       sorry: Съжаляваме, %{type} № %{id} не е намерен.
index 3b30f1a0ae28cee3c191f4edf27862eb93c06b65..8d4576d1794141de06d81cc57592e469e266135d 100644 (file)
@@ -389,7 +389,6 @@ bn:
         way: রাস্তা
         relation: সম্পর্ক
     containing_relation:
-      entry_html: সম্পর্ক %{relation_name}
       entry_role_html: সম্পর্ক %{relation_name} (যখন %{relation_role})
     not_found:
       title: পাওয়া যায়নি
index 820609208901d2033e491c947c7a19628043eea4..dea9d56dd4287025fb3f99de050cf9b7a4ab9cc4 100644 (file)
@@ -404,7 +404,6 @@ br:
         way: Hent
         relation: Darempred
     containing_relation:
-      entry_html: Darempred %{relation_name}
       entry_role_html: Darempred %{relation_name} (evel %{relation_role})
     not_found:
       title: N'eo ket bet kavet
@@ -2417,7 +2416,7 @@ br:
       upload_trace: Kas ur roud
       all_traces: An holl roudoù
       my_traces: Ma roudoù
-      traces_from: Roudoù GPS foran gant %{user}
+      traces_from_html: Roudoù GPS foran gant %{user}
       remove_tag_filter: Lemel ar sil tikedennoù
     destroy:
       scheduled_for_deletion: Roudenn da vezañ dilamet
@@ -2801,9 +2800,9 @@ br:
     navigation:
       all_blocks: An holl stankadurioù
       blocks_on_me: Stankadurioù evidon
-      blocks_on_user: Stankadurioù evit %{user}
+      blocks_on_user_html: Stankadurioù evit %{user}
       blocks_by_me: Stankadurioù graet ganin
-      blocks_by_user: Stankadurioù gant %{user}
+      blocks_by_user_html: Stankadurioù gant %{user}
       block: 'Stankadur #%{id}'
       new_block: Stankadenn nevez
   user_mutes:
index ad06e69178cee2cf91743fa93d2c553979b2f9d4..cd7607a916cc93d9bc844fb03f8579fbb49c5769 100644 (file)
@@ -204,7 +204,6 @@ bs:
         way: Putanja
         relation: Relacija
     containing_relation:
-      entry_html: Relacija %{relation_name}
       entry_role_html: Relacija %{relation_name} (kao %{relation_role})
     not_found:
       sorry: 'Žao nam je, ali %{type} #%{id} se ne može naći.'
index 8c309fb2fba1d57c2e8ff61186ed815b1cfeccd2..9322319b979640cc2a94699b8eec516be14004c8 100644 (file)
@@ -403,7 +403,6 @@ ca:
         way: Via
         relation: Relació
     containing_relation:
-      entry_html: Relació %{relation_name}
       entry_role_html: Relació %{relation_name} (com a %{relation_role})
     not_found:
       title: No s'ha trobat
@@ -2453,7 +2452,7 @@ ca:
       upload_trace: Puja una traça
       all_traces: Totes les traces
       my_traces: Les meves traces
-      traces_from: Traces públiques de %{user}
+      traces_from_html: Traces públiques de %{user}
       remove_tag_filter: Elimina el filtre d'etiquetes
     destroy:
       scheduled_for_deletion: Traça programada per a ser suprimida
@@ -2820,9 +2819,9 @@ ca:
     navigation:
       all_blocks: Tots els bloquejos
       blocks_on_me: Bloquejos a mi
-      blocks_on_user: Bloquejos a %{user}
+      blocks_on_user_html: Bloquejos a %{user}
       blocks_by_me: Bloquejos fets per mi
-      blocks_by_user: Bloquejos fets per %{user}
+      blocks_by_user_html: Bloquejos fets per %{user}
       block: 'Bloqueig #%{id}'
   user_mutes:
     index:
index aae9eea7e3ea6e82c01775b615484d5d5ee74734..c8ae5a52fa26d1e8e520afa125e66d5a3bb033b6 100644 (file)
@@ -365,7 +365,6 @@ ce:
         way: Сиз
         relation: Хилар
     containing_relation:
-      entry_html: Хилар %{relation_name}
       entry_role_html: Хилар %{relation_name} (ролехь %{relation_role})
     not_found:
       title: Цакарийна
@@ -2544,7 +2543,7 @@ ce:
       upload_trace: Чуйаккха трек
       all_traces: Ерриге а трекаш
       my_traces: Сан трекаш
-      traces_from: '%{user}-ан йукъара трекаш'
+      traces_from_html: '%{user}-ан йукъара трекаш'
       remove_tag_filter: ДӀаяккха теган фильтр
     destroy:
       scheduled_for_deletion: ДӀаяккха лерина трек
@@ -2951,9 +2950,9 @@ ce:
     navigation:
       all_blocks: Ерриге а блокаш
       blocks_on_me: Сан блоктохарш
-      blocks_on_user: Блокаш йу %{user} тӀехь
+      blocks_on_user_html: Блокаш йу %{user} тӀехь
       blocks_by_me: Сан блоктохарш
-      blocks_by_user: Блокаш йина %{user}
+      blocks_by_user_html: Блокаш йина %{user}
       block: 'Блок #%{id}'
       new_block: Керла блок
   user_mutes:
index 71ac17404b4797a463398fb8a4c75ecfd8f768c0..79489fdce65982647cd51989c12acf24029c76df 100644 (file)
@@ -445,7 +445,6 @@ cs:
         way: Cesta
         relation: Relace
     containing_relation:
-      entry_html: Relace %{relation_name}
       entry_role_html: Relace %{relation_name} (jako %{relation_role})
     not_found:
       title: Nenalezeno
@@ -2661,7 +2660,7 @@ cs:
       upload_trace: Nahrát stopu
       all_traces: Všechny stopy
       my_traces: Moje stopy
-      traces_from: Veřejné stopy uživatele %{user}
+      traces_from_html: Veřejné stopy uživatele %{user}
       remove_tag_filter: Vymazat filtr tagů
     destroy:
       scheduled_for_deletion: Stopa označena ke smazání
@@ -3082,9 +3081,9 @@ cs:
     navigation:
       all_blocks: Všechny bloky
       blocks_on_me: Moje zablokování
-      blocks_on_user: Bloky uživatele %{user}
+      blocks_on_user_html: Bloky uživatele %{user}
       blocks_by_me: Zablokování mnou
-      blocks_by_user: Bloky od uživatele %{user}
+      blocks_by_user_html: Bloky od uživatele %{user}
       block: 'Blok #%{id}'
       new_block: Nové blokování
   user_mutes:
index 628665cd88a5ddf9ef5fbdf71f01815ffb4b90f5..8116b511e3c0360b6e1574759bcd1dd60350c8fb 100644 (file)
@@ -425,7 +425,6 @@ cy:
         way: Llwybr
         relation: Perthynas
     containing_relation:
-      entry_html: Perthynas %{relation_name}
       entry_role_html: Perthynas %{relation_name} (fel %{relation_role})
     not_found:
       title: Heb ei Ganfod
@@ -470,8 +469,8 @@ cy:
       colour_preview: Rhagolwg lliw %{colour_value}
       email_link: E-bost %{email}
     query:
-      title: Nodweddion Ymholiad
-      introduction: Cliciwch ar y map i ddarganfod nodweddion gerllaw.
+      title: Ymholiad Nodweddion
+      introduction: Cliciwch ar y map i weld nodweddion gerllaw.
       nearby: Nodweddion gerllaw
       enclosing: Nodweddion amgáu
   nodes:
@@ -553,8 +552,8 @@ cy:
       closed_ago_html: Caëwyd %{time_ago}
       created_ago_by_html: Crëwyd %{time_ago} gan %{user}
       closed_ago_by_html: Caëwyd %{time_ago} gan %{user}
-      discussion: Sgwrs
-      join_discussion: Mewngofnodwch i ymuno â'r sgwrs
+      discussion: Trafodaeth
+      join_discussion: Mewngofnodwch i ymuno â'r drafodaeth
       still_open: Mae'r grŵp newid dal ar agor - bydd trafodaeth yn agor pan fydd
         y grŵp newid wedi cau.
       subscribe: Tanysgrifio
@@ -622,7 +621,7 @@ cy:
     show:
       title: Dyddiadur %{user} | %{title}
       user_title: Dyddiadur %{user}
-      discussion: Sgwrs
+      discussion: Trafodaeth
       subscribe: Tanysgrifio
       unsubscribe: Dad-danysgrifio
       leave_a_comment: Sylw
@@ -687,6 +686,8 @@ cy:
       post: Post
       when: Pryd
       comment: Sylw
+    new:
+      heading: Ychwanegu sylw at y drafodaeth cofnod dyddiadur canlynol?
   doorkeeper:
     flash:
       applications:
@@ -2555,7 +2556,7 @@ cy:
       upload_trace: Uwchlwytho ôl
       all_traces: Pob Ôl
       my_traces: Fy Olion
-      traces_from: Olion Cyhoeddus gan %{user}
+      traces_from_html: Olion Cyhoeddus gan %{user}
       remove_tag_filter: Dileu Hidlydd Tagiau
     destroy:
       scheduled_for_deletion: Mae'r ôl wedi'i drefnu i'w ddileu
@@ -2923,9 +2924,9 @@ cy:
     navigation:
       all_blocks: Pob Bloc
       blocks_on_me: Blociau arnaf i
-      blocks_on_user: Blociau ar %{user}
+      blocks_on_user_html: Blociau ar %{user}
       blocks_by_me: Blociau gennyf i
-      blocks_by_user: Blociau gan %{user}
+      blocks_by_user_html: Blociau gan %{user}
       block: 'Bloc #%{id}'
       new_block: Bloc Newydd
   user_mutes:
@@ -2939,6 +2940,8 @@ cy:
         few: Rydych chi wedi anwybyddu %{count} defnyddiwr
         many: Rydych chi wedi anwybyddu %{count} defnyddiwr
         other: Rydych chi wedi anwybyddu %{count} defnyddiwr
+      user_mute_admins_and_moderators: Gallwch anwybyddu'r Gweinyddwyr a Chymedrolwyr
+        ond ni fydd eu negeseuon yn cael eu hanwybyddu.
       table:
         thead:
           muted_user: Defnyddiwr ag Anwybyddwyd
@@ -3083,8 +3086,8 @@ cy:
       createnote_disabled_tooltip: Chwyddwch mewn i ychwanegu nodyn i'r map
       map_notes_zoom_in_tooltip: Chwyddwch mewn i weld nodiadau'r map
       map_data_zoom_in_tooltip: Chwyddwch mewn i weld data'r map
-      queryfeature_tooltip: Manylion nodweddion
-      queryfeature_disabled_tooltip: Chwyddwch i mewn i gael manylion nodweddion
+      queryfeature_tooltip: Ymholiad nodweddion
+      queryfeature_disabled_tooltip: Chwyddwch i mewn i wneud ymholiad nodweddion
       embed_html_disabled: Nid yw mewnosod HTML ar gael ar gyfer yr haen fap hon
     edit_help: Symudwch y map a chwyddwch i mewn i leoliad rydych chi am ei olygu,
       yna cliciwch yma.
@@ -3195,7 +3198,7 @@ cy:
       directions_to: Cyfarwyddiadau i yma
       add_note: Ychwanegu nodyn yma
       show_address: Dangos cyfeiriad
-      query_features: Manylion nodweddion
+      query_features: Ymholiad nodweddion
       centre_map: Canoli'r map yma
   redactions:
     edit:
index ae2c2e2966b8ab1da4b8e6b70848cd74ebc74b73..e816a6ebcd9b21886d7544e7acf9b6d30a0dd239 100644 (file)
@@ -396,8 +396,7 @@ da:
         way: Vej
         relation: Relation
     containing_relation:
-      entry_html: Relation %{relation_name}
-      entry_role_html: Relation %{relation_name} (som %{relation_role})
+      entry_role_html: '%{relation_name} (som %{relation_role})'
     not_found:
       title: Ikke fundet
       sorry: Beklager, %{type} med id %{id} blev ikke fundet.
@@ -2599,7 +2598,7 @@ da:
       upload_trace: Overfør et spor
       all_traces: Alle GPS-spor
       my_traces: Mine spor
-      traces_from: Offentlige GPS-spor fra %{user}
+      traces_from_html: Offentlige GPS-spor fra %{user}
       remove_tag_filter: Fjern tag-filter
     destroy:
       scheduled_for_deletion: Spor planlagt til at blive slettet
@@ -3013,9 +3012,9 @@ da:
     navigation:
       all_blocks: Alle blokeringer
       blocks_on_me: Blokeringer af mig
-      blocks_on_user: Blokeringer af %{user}
+      blocks_on_user_html: Blokeringer af %{user}
       blocks_by_me: Blokeringer udført af mig
-      blocks_by_user: Blokeringer udført af %{user}
+      blocks_by_user_html: Blokeringer udført af %{user}
       block: 'Blokering #%{id}'
       new_block: Ny blokering
   user_mutes:
@@ -3083,7 +3082,7 @@ da:
       hide: Skjul
       resolve: Løs
       reactivate: Genaktiver
-      comment_and_resolve: Kommentere på og løse
+      comment_and_resolve: Kommenter og løs
       comment: Kommenter
       log_in_to_comment: Log ind for at kommentere på denne bemærkning
       report_link_html: Hvis denne bemærkning indeholder følsomme oplysninger, der
index 833e4f3c71260eb6824f993eaf207c08f7a6cc8a..ec05952589faf8706864a96d3afb599b56b4e076 100644 (file)
@@ -482,7 +482,6 @@ de:
         way: Weg
         relation: Relation
     containing_relation:
-      entry_html: Relation %{relation_name}
       entry_role_html: Relation %{relation_name} (als %{relation_role})
     not_found:
       title: Nicht gefunden
@@ -2748,7 +2747,7 @@ de:
       upload_trace: Lade einen Track hoch
       all_traces: Alle Tracks
       my_traces: Meine Tracks
-      traces_from: Öffentliche Tracks von %{user}
+      traces_from_html: Öffentliche Tracks von %{user}
       remove_tag_filter: Tag-Filter entfernen
     destroy:
       scheduled_for_deletion: Für die Löschung vorgesehener Track
@@ -3173,9 +3172,9 @@ de:
     navigation:
       all_blocks: Alle Sperren
       blocks_on_me: Meine Sperren
-      blocks_on_user: Sperren für %{user}
+      blocks_on_user_html: Sperren für %{user}
       blocks_by_me: Sperren von mir
-      blocks_by_user: Sperren von %{user}
+      blocks_by_user_html: Sperren von %{user}
       block: 'Sperre #%{id}'
       new_block: Neue Sperre
   user_mutes:
index a51629a53a679c74bd2b2255559abf9293f58cdd..73bdfb705f3138a39cc6c30134ecd18cb35a25f9 100644 (file)
@@ -239,7 +239,6 @@ diq:
         way: Ray
         relation: Elaqe
     containing_relation:
-      entry_html: Elaqe %{relation_name}
       entry_role_html: Eleqe %{relation_name} (%{relation_role} deye)
     not_found:
       title: Nêvineya
index 12d4779b156483247ec98648ff3873274f270ecf..1d7db4aa17be1eb8c2ad4ee5b0b886ee039afbea 100644 (file)
@@ -224,7 +224,6 @@ dsb:
         way: Puś
         relation: Relacija
     containing_relation:
-      entry_html: Relacija %{relation_name}
       entry_role_html: Relacija %{relation_name} (ako %{relation_role})
     not_found:
       sorry: 'Bóžko %{type} #%{id} njejo se dał namakaś.'
index 4989e02e919d42f64d23f998cb01c99a333b92da..465f9fd9a49a750836c47b161add956ac261443a 100644 (file)
@@ -414,7 +414,6 @@ el:
         way: Γραμμή
         relation: Σχέση
     containing_relation:
-      entry_html: Σχέση %{relation_name}
       entry_role_html: Σχέση %{relation_name} (ως %{relation_role})
     not_found:
       title: Δεν βρέθηκε
@@ -2675,7 +2674,7 @@ el:
       upload_trace: Αποστολή ίχνους
       all_traces: Όλα τα ίχνη
       my_traces: Τα ίχνη μου
-      traces_from: Δημόσια ίχνη από %{user}
+      traces_from_html: Δημόσια ίχνη από %{user}
       remove_tag_filter: Κατάργηση φίλτρου ετικετών
     destroy:
       scheduled_for_deletion: Το ίχνος προγραμματίστηκε για διαγραφή
@@ -3097,9 +3096,9 @@ el:
     navigation:
       all_blocks: Όλες οι φραγές
       blocks_on_me: Φραγές σε μένα
-      blocks_on_user: Φραγές σε %{user}
+      blocks_on_user_html: Φραγές σε %{user}
       blocks_by_me: Φραγές από μένα
-      blocks_by_user: Φραγές από %{user}
+      blocks_by_user_html: Φραγές από %{user}
       block: 'Φραγή #%{id}'
       new_block: Νέα Φραγή
   user_mutes:
index b478474b2ae4dd8c2e47c7e9b8f5dd7d65f5efdc..9d4d1c4a4467c39d48cff079db5645687852bd77 100644 (file)
@@ -296,7 +296,6 @@ en-GB:
         way: Way
         relation: Relation
     containing_relation:
-      entry_html: Relation %{relation_name}
       entry_role_html: Relation %{relation_name} (as %{relation_role})
     not_found:
       title: Not Found
index 770e8e40ac09faa4235437495012fc99fb6b00bf..94fc77247b8cadc74f8f433dbbc18a05ddedf1a2 100644 (file)
@@ -59,6 +59,7 @@ en:
       message: "Message"
       node: "Node"
       node_tag: "Node Tag"
+      note: "Note"
       old_node: "Old Node"
       old_node_tag: "Old Node Tag"
       old_relation: "Old Relation"
@@ -356,8 +357,7 @@ en:
         way: "Way"
         relation: "Relation"
     containing_relation:
-      entry_html: "Relation %{relation_name}"
-      entry_role_html: "Relation %{relation_name} (as %{relation_role})"
+      entry_role_html: "%{relation_name} (as %{relation_role})"
     not_found:
       title: Not Found
       sorry: "Sorry, %{type} #%{id} could not be found."
@@ -1477,7 +1477,10 @@ en:
         open: Open
         resolved: Resolved
     show:
-      title: "%{status} Issue #%{issue_id}"
+      title:
+        open: "Open Issue #%{issue_id}"
+        ignored: "Ignored Issue #%{issue_id}"
+        resolved: "Resolved Issue #%{issue_id}"
       reports:
         one: "%{count} report"
         other: "%{count} reports"
@@ -2554,7 +2557,7 @@ en:
       upload_trace: "Upload a trace"
       all_traces: "All Traces"
       my_traces: "My Traces"
-      traces_from: "Public Traces from %{user}"
+      traces_from_html: "Public Traces from %{user}"
       remove_tag_filter: "Remove Tag Filter"
     destroy:
       scheduled_for_deletion: "Trace scheduled for deletion"
@@ -2905,6 +2908,15 @@ en:
         years:
           one: "%{count} year"
           other: "%{count} years"
+      short:
+        ended: "ended"
+        revoked_html: "revoked by %{name}"
+        active: "active"
+        active_unread: "active unread"
+        expired_unread: "expired unread"
+        read_html: "read at %{time}"
+        time_in_future_title: "%{time_absolute}; in %{time_relative}"
+        time_in_past_title: "%{time_absolute}; %{time_relative}"
     blocks_on:
       title: "Blocks on %{name}"
       heading_html: "List of Blocks on %{name}"
@@ -2923,21 +2935,21 @@ en:
       reason: "Reason for block:"
       revoker: "Revoker:"
     block:
-      not_revoked: "(not revoked)"
       show: "Show"
       edit: "Edit"
     page:
       display_name: "Blocked User"
       creator_name: "Creator"
       reason: "Reason for block"
+      start: "Start"
+      end: "End"
       status: "Status"
-      revoker_name: "Revoked by"
     navigation:
       all_blocks: "All Blocks"
       blocks_on_me: "Blocks on Me"
-      blocks_on_user: "Blocks on %{user}"
+      blocks_on_user_html: "Blocks on %{user}"
       blocks_by_me: "Blocks by Me"
-      blocks_by_user: "Blocks by %{user}"
+      blocks_by_user_html: "Blocks by %{user}"
       block: "Block #%{id}"
       new_block: "New Block"
   user_mutes:
index 0e4589d1fb5ffa1d686775bb2312e07fab3d3292..4489a540fbde9323c4707595b2a5c7d518fdf80e 100644 (file)
@@ -386,7 +386,6 @@ eo:
         way: Linio
         relation: Rilato
     containing_relation:
-      entry_html: Rilato %{relation_name}
       entry_role_html: Rilato %{relation_name} (kiel %{relation_role})
     not_found:
       title: Ne trovita
@@ -2568,7 +2567,7 @@ eo:
       upload_trace: Alŝuti spuron
       all_traces: Ĉiuj spuroj
       my_traces: Miaj spuroj
-      traces_from: Publikaj spuroj de %{user}
+      traces_from_html: Publikaj spuroj de %{user}
       remove_tag_filter: Forigi filtrilon de etikedoj
     destroy:
       scheduled_for_deletion: Spuro forviŝota
@@ -2971,9 +2970,9 @@ eo:
     navigation:
       all_blocks: Ĉiuj blokadoj
       blocks_on_me: Blokadoj por mi
-      blocks_on_user: Blokadoj por %{user}
+      blocks_on_user_html: Blokadoj por %{user}
       blocks_by_me: Blokadoj de mi
-      blocks_by_user: Blokadoj de %{user}
+      blocks_by_user_html: Blokadoj de %{user}
       block: 'Blokado #%{id}'
       new_block: Nova blokado
   user_mutes:
index 26b0e2cc75fd8360bbaaa8619826bb68b22cc9b8..5487993957179abc536c6e84238e2dbb052a2d6d 100644 (file)
@@ -467,7 +467,6 @@ es:
         way: Vía
         relation: Relación
     containing_relation:
-      entry_html: Relación %{relation_name}
       entry_role_html: Relación %{relation_name} (como %{relation_role})
     not_found:
       title: No encontrado
@@ -2713,7 +2712,7 @@ es:
       upload_trace: Subir una traza
       all_traces: Todas las trazas
       my_traces: Mis trazas
-      traces_from: Trazas Públicos de %{user}
+      traces_from_html: Trazas Públicos de %{user}
       remove_tag_filter: Eliminar Filtro de Etiquetas
     destroy:
       scheduled_for_deletion: Traza programada para eliminación
@@ -3133,9 +3132,9 @@ es:
     navigation:
       all_blocks: Todos los bloqueos
       blocks_on_me: Bloqueos sobre mí
-      blocks_on_user: Bloqueos en %{user}
+      blocks_on_user_html: Bloqueos en %{user}
       blocks_by_me: Bloqueados por mí
-      blocks_by_user: Bloqueos por %{user}
+      blocks_by_user_html: Bloqueos por %{user}
       block: 'Bloqueo #%{id}'
       new_block: Nuevo bloqueo
   user_mutes:
index 6ecf31b3d68a93298a927866c9d829614a5125e3..7f9c9783bb0fd0fa0301ce4f7bb73aa7e9b940ab 100644 (file)
@@ -363,7 +363,6 @@ et:
         way: joon
         relation: relatsioon
     containing_relation:
-      entry_html: Relatsioon %{relation_name}
       entry_role_html: Relatsioon %{relation_name} (kui %{relation_role})
     not_found:
       title: Ei leidu
@@ -2450,7 +2449,7 @@ et:
       upload_trace: Lisa GPS-rada
       all_traces: Kõik rajad
       my_traces: Minu rajad
-      traces_from: Kasutaja %{user} avalikud rajad
+      traces_from_html: Kasutaja %{user} avalikud rajad
       remove_tag_filter: Eemalda sildifilter
     destroy:
       scheduled_for_deletion: Raja kustutamine kantud tööplaani.
@@ -2806,9 +2805,9 @@ et:
     navigation:
       all_blocks: Kõik blokeeringud
       blocks_on_me: Mulle seatud blokeeringud
-      blocks_on_user: Blokeeritava %{user} blokeeringud
+      blocks_on_user_html: Blokeeritava %{user} blokeeringud
       blocks_by_me: Minu seatud blokeeringud
-      blocks_by_user: Blokeerija %{user} blokeeringud
+      blocks_by_user_html: Blokeerija %{user} blokeeringud
       block: 'Blokeering #%{id}'
   user_mutes:
     index:
index 76980234003e6d785f34ea05569c31eb728fe48e..e635fa0f615363fc898608c0242d24d02e4d9dc1 100644 (file)
@@ -378,7 +378,6 @@ eu:
         way: Bide
         relation: Erlazio
     containing_relation:
-      entry_html: '%{relation_name} erlazioa'
       entry_role_html: '%{relation_name} erlazioa (%{relation_role} rolean)'
     not_found:
       title: Ez da aurkitu
@@ -2383,7 +2382,7 @@ eu:
       upload_trace: Aztarna bat igo
       all_traces: Aztarna guztiak
       my_traces: Nire aztarnak
-      traces_from: '%{user} erabiltzailearen GPS aztarna publikoak'
+      traces_from_html: '%{user} erabiltzailearen GPS aztarna publikoak'
       remove_tag_filter: Kendu etiketa-iragazkia
     destroy:
       scheduled_for_deletion: Ezabatzear dauden aztarnak
index e3dd9ed20b84eaa22cf63c905ff273bc9a2e972d..4c659ad3e53932f814f8a9d038cc47728c3d8b9f 100644 (file)
@@ -393,7 +393,6 @@ fa:
         way: راه
         relation: رابطه
     containing_relation:
-      entry_html: رابطهٔ %{relation_name}
       entry_role_html: رابطهٔ %{relation_name} (با نقش %{relation_role})
     not_found:
       title: یافت نشد
@@ -2150,7 +2149,7 @@ fa:
       upload_trace: بارگذاری یک رد
       all_traces: همهٔ ردها
       my_traces: ردهای من
-      traces_from: ردهای عمومی %{user}
+      traces_from_html: ردهای عمومی %{user}
       remove_tag_filter: حذف پالایهٔ برچسب
     destroy:
       scheduled_for_deletion: این رد در زمان‌بندی حذف قرار گرفت
@@ -2476,11 +2475,11 @@ fa:
     navigation:
       all_blocks: تمام قطع دسترسی‌ها
       blocks_on_me: قطع دسترسی‌های من
-      blocks_on_user: قطع دسترسی‌های %{user}
+      blocks_on_user_html: قطع دسترسی‌های %{user}
       blocks_by_me: |-
         Blocks by Me
         بسته شدها یا مسدود شدهها
-      blocks_by_user: |-
+      blocks_by_user_html: |-
         Blocks by %{user}
 
         بستن توسط یا مسدود شدن توسط
index 1c091e9b3db2f76b2996b5303277c1ef90dfb4ef..e288faa10c802a898b5ec68c63928450fac2549d 100644 (file)
@@ -395,7 +395,6 @@ fi:
         way: Polku
         relation: Relaatio
     containing_relation:
-      entry_html: Relaatio %{relation_name}
       entry_role_html: Relaatio %{relation_name} (rooli %{relation_role})
     not_found:
       title: Ei löytynyt
@@ -2331,7 +2330,7 @@ fi:
       upload_trace: Lisää GPS-jälki
       all_traces: Kaikki jäljet
       my_traces: Omat jäljet
-      traces_from: Julkiset jäljet käyttäjältä %{user}
+      traces_from_html: Julkiset jäljet käyttäjältä %{user}
       remove_tag_filter: Poista tunnistesuodatin
     destroy:
       scheduled_for_deletion: Jälki on poistojonossa.
index d83512221afb23eea8b3c38279c7476ed32d16ec..4f9ea0c0adbfcda1d989b466409903ceb7f0840d 100644 (file)
@@ -226,7 +226,6 @@ fit:
         way: Polku
         relation: Relaatio
     containing_relation:
-      entry_html: Relaatio %{relation_name}
       entry_role_html: Relaatio %{relation_name} (rooli %{relation_role})
     not_found:
       sorry: 'Pahoittelemme, %{type} #%{id} ei ole olemassa.'
index 454ef3abbfc65dfe6254453b317c38cec681d2d7..45da8d456c97ed288afbfa9e761088c70ad3c069 100644 (file)
@@ -498,7 +498,6 @@ fr:
         way: Chemin
         relation: Relation
     containing_relation:
-      entry_html: Relation %{relation_name}
       entry_role_html: Relation %{relation_name} (avec le rôle %{relation_role})
     not_found:
       title: Non trouvé
@@ -2781,7 +2780,7 @@ fr:
       upload_trace: Téléverser une trace
       all_traces: Toutes les traces
       my_traces: Mes traces
-      traces_from: Traces publiques de %{user}
+      traces_from_html: Traces publiques de %{user}
       remove_tag_filter: Retirer le filtre de balises
     destroy:
       scheduled_for_deletion: Trace planifiée pour suppression
@@ -3202,9 +3201,9 @@ fr:
     navigation:
       all_blocks: Tous les blocages
       blocks_on_me: Blocages me concernant
-      blocks_on_user: Blocages sur %{user}
+      blocks_on_user_html: Blocages sur %{user}
       blocks_by_me: Blocages de ma part
-      blocks_by_user: Blocages effectués par %{user}
+      blocks_by_user_html: Blocages effectués par %{user}
       block: 'Blocage #%{id}'
       new_block: Nouveau blocage
   user_mutes:
index 7faa3f1c5b33820dfde18fe379c30a961f905830..74187c38e171ae1d45417e49c331a90c797b57c8 100644 (file)
@@ -303,7 +303,6 @@ fur:
         way: Vie
         relation: Relazion
     containing_relation:
-      entry_html: Relazion %{relation_name}
       entry_role_html: Relazion %{relation_name} (come %{relation_role})
     not_found:
       title: No cjatât
@@ -1361,7 +1360,7 @@ fur:
       upload_trace: Cjame un percors
       all_traces: Ducj i percors
       my_traces: I miei percors
-      traces_from: Percors publics di %{user}
+      traces_from_html: Percors publics di %{user}
     georss:
       title: Percors GPS di OpenStreetMap
     description:
index f332de1e33a68bdbcf624e1cea9b7ecc37737aff..825f9a5835ae6a87ca1d1681697099f236831cf0 100644 (file)
@@ -337,7 +337,6 @@ fy:
         way: Line
         relation: Relaasje
     containing_relation:
-      entry_html: Relaasje %{relation_name}
       entry_role_html: Relaasje %{relation_name} (as %{relation_role})
     not_found:
       title: Net fûn
@@ -2080,7 +2079,7 @@ fy:
       upload_trace: Trajekt oplade
       all_traces: Alle trajekten
       my_traces: Myn trajekten
-      traces_from: Iepenbiere trajekten fan %{user}
+      traces_from_html: Iepenbiere trajekten fan %{user}
       remove_tag_filter: Lebelfilter weilitte
     destroy:
       scheduled_for_deletion: Trajekt ynplend om te wiskjen
index 7463a5478c97170651f5c5b629574758085d722c..92f446ed7a5c34aeef25772c23160a5137db6a15 100644 (file)
@@ -233,7 +233,6 @@ ga:
         way: Bealach
         relation: Gaol
     containing_relation:
-      entry_html: Gaol %{relation_name}
       entry_role_html: Gaol %{relation_name} (mar %{relation_role})
     not_found:
       sorry: 'Ár leithscéil, níorbh fhéidir %{type} #%{id} a aimsiú.'
index a3a89fd6700e09b2ff3c38fef2e7b956496c71b4..ff577e670df00290158d27dd27c16deb94955c67 100644 (file)
@@ -134,7 +134,6 @@ gcf:
       type:
         way: Chimen
     containing_relation:
-      entry_html: Rèlasion %{relation_name}
       entry_role_html: Rèlasion %{relation_name} (adan wol %{relation_role})
     not_found:
       sorry: Désolé, l’objet %{type} nº %{id} n’a pas pu être trouvé.
index cc09459225c14b77b2055d886a56323a8259b60c..61aa60109dd332ab9c7cb26133a805bc025616c0 100644 (file)
@@ -320,7 +320,6 @@ gd:
         way: Slighe
         relation: Dàimh
     containing_relation:
-      entry_html: Dàimh %{relation_name}
       entry_role_html: Dàimh %{relation_name} ('na %{relation_role})
     not_found:
       sorry: Duilich ach cha deach %{type} àireamh %{id} a lorg.
index 79b2016503c3db888d7ebc9df91161d400cff105..76e063b016441dd5fb8aa09760400d13b6c47318 100644 (file)
@@ -385,7 +385,6 @@ gl:
         way: Vía
         relation: Relación
     containing_relation:
-      entry_html: Relación %{relation_name}
       entry_role_html: Relación %{relation_name} (como %{relation_role})
     not_found:
       title: Non atopado
@@ -2633,7 +2632,7 @@ gl:
       upload_trace: Subir unha pista
       all_traces: Todas as pistas
       my_traces: As miñas pistas GPS
-      traces_from: Pistas públicas de %{user}
+      traces_from_html: Pistas públicas de %{user}
       remove_tag_filter: Eliminar etiqueta do filtro
     destroy:
       scheduled_for_deletion: Pista agardando a súa eliminación
@@ -3043,9 +3042,9 @@ gl:
     navigation:
       all_blocks: Todos os bloqueos
       blocks_on_me: Os meus bloqueos
-      blocks_on_user: Bloqueos feitos a %{user}
+      blocks_on_user_html: Bloqueos feitos a %{user}
       blocks_by_me: Bloqueos efectuados
-      blocks_by_user: Bloqueos feitos por %{user}
+      blocks_by_user_html: Bloqueos feitos por %{user}
       block: Bloqueo n.º %{id}
       new_block: Novo bloqueo
   user_mutes:
index 51a47ff4b059416cde2c94927d69cc62156ac76f..dbb0d0f328e7f27890552b2c9d5476eb4c9ccde6 100644 (file)
@@ -123,7 +123,6 @@ gsw:
         way: Wäg
         relation: Relation
     containing_relation:
-      entry_html: Relation %{relation_name}
       entry_role_html: Relation %{relation_name} (as %{relation_role})
     not_found:
       sorry: '%{type} mit de Nummer %{id} konnt leider net gfunde wärre.'
index ee567f2ec7af8badae6b132926a962794c71ae53..e77888d9c8bb51ecced9b1933f1e6b38886fd628 100644 (file)
@@ -426,8 +426,7 @@ he:
         way: קו
         relation: יחס
     containing_relation:
-      entry_html: יחס %{relation_name}
-      entry_role_html: יחס %{relation_name} (בתור %{relation_role})
+      entry_role_html: '%{relation_name} (בתור %{relation_role})'
     not_found:
       title: לא נמצא
       sorry: אנו מתנצלים, אך לא מצאנו %{type} מספר %{id}.
@@ -2603,7 +2602,7 @@ he:
       upload_trace: העלאת מסלול
       all_traces: כל המסלולים
       my_traces: המסלולים שלי
-      traces_from: מסלולים ציבוריים מאת %{user}
+      traces_from_html: מסלולים ציבוריים מאת %{user}
       remove_tag_filter: הסרת סינון לפי תג
     destroy:
       scheduled_for_deletion: מסלול מיועד למחיקה
@@ -3008,9 +3007,9 @@ he:
     navigation:
       all_blocks: כל החסימות
       blocks_on_me: חסימות שלי
-      blocks_on_user: חסימות של %{user}
+      blocks_on_user_html: חסימות של %{user}
       blocks_by_me: חסימות שעשיתי
-      blocks_by_user: חסימות שנעשו על־ידי %{user}
+      blocks_by_user_html: חסימות שנעשו על־ידי %{user}
       block: חסימה מס׳ %{id}
       new_block: חסימה חדשה
   user_mutes:
index f5ddfc58dd6877ff3656a80aa38f0eef36858a1d..d0e7e46e5bdb2eb6448a7e74bdf00a38ed33cc01 100644 (file)
@@ -318,7 +318,6 @@ hi:
         way: रेखा
         relation: संबंध
     containing_relation:
-      entry_html: संबंध %{relation_name}
       entry_role_html: संबंध %{relation_name} (as %{relation_role})
     not_found:
       title: नहीं मिला
index 310d2dee21997284c1f517b97feea0a30dcc67b4..be5c340a8910cd00f7d25298de5e6d83d3a98424 100644 (file)
@@ -308,7 +308,6 @@ hr:
         way: Put
         relation: Relacija
     containing_relation:
-      entry_html: Relacija %{relation_name}
       entry_role_html: Relacija %{relation_name} (kao %{relation_role})
     not_found:
       sorry: 'Nažalost, %{type} #%{id} nije pronađen.'
index d6968c849abced4a091b8d0002a503adcaef6090..db45ff706d83d942d7cff83904691d58e5a13a62 100644 (file)
@@ -363,7 +363,6 @@ hsb:
         way: Puć
         relation: Relacija
     containing_relation:
-      entry_html: Relacija %{relation_name}
       entry_role_html: Relacija %{relation_name} (jako %{relation_role})
     not_found:
       title: Njenamakane
@@ -2191,7 +2190,7 @@ hsb:
       upload_trace: Ćěr nahrać
       all_traces: Wšě ćěrje
       my_traces: Moje ćěrje
-      traces_from: Zjawne ćěrje wot %{user}
+      traces_from_html: Zjawne ćěrje wot %{user}
     destroy:
       scheduled_for_deletion: Čara předwidźana za zničenje
     offline_warning:
index d599f70b05d68a073731ca8cf1547e01c51741b1..a71e7c654ab28a706ee0bd53d84c2f83a9acddbc 100644 (file)
@@ -78,8 +78,8 @@ hu:
           is_already_muted: már el van némítva
     models:
       acl: Hozzáférés-szabályzási lista
-      changeset: Módosításkészlet
-      changeset_tag: Módosításkészlet címkéje
+      changeset: Módosításcsomag
+      changeset_tag: Módosításcsomag címkéje
       country: Ország
       diary_comment: Hozzászólás a naplóhoz
       diary_entry: Naplóbejegyzés
@@ -188,11 +188,10 @@ hu:
       trace:
         tagstring: vesszővel elválasztva
       user_block:
-        reason: A felhasználó letiltásának oka. Kérjük, légy a lehető legnyugodtabb
-          és észszerűbb, adj meg minél több részletet a helyzetről, és ne feledd,
-          hogy az üzenet nyilvánosan látható lesz. Gondolj arra, hogy nem minden felhasználó
-          érti a közösségi szakzsargont, ezért kérjük, próbálj laikus kifejezéseket
-          használni.
+        reason: A felhasználó letiltásának oka. Légy a lehető legnyugodtabb és ésszerűbb,
+          adj meg minél több részletet a helyzetről, és ne feledd, hogy az üzenet
+          nyilvánosan látható lesz. Gondolj arra, hogy nem minden felhasználó érti
+          a közösségi szakzsargont, ezért kérjük, próbálj laikus kifejezéseket használni.
         needs_view: Be kell-e jelentkeznie a felhasználónak, mielőtt a blokkolás feloldódik?
       user:
         new_email: (soha nem jelenik meg nyilvánosan)
@@ -264,11 +263,11 @@ hu:
         reopened_at_by_html: 'Újraaktiválta %{user} ekkor: %{when}'
       rss:
         title: OpenStreetMap jegyzetek
-        description_all: Jelentett, kommentált vagy lezárt feljegyzések listája
+        description_all: Jelentett, kommentált vagy lezárt jegyzetek listája
         description_area: Bejelentett, hozzászólással ellátott vagy lezárt jegyzetek
           a területeden [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
-        description_item: RSS hírcsatorna a %{id} jegyzethez
-        opened: új megjegyzés (%{place} közelében)
+        description_item: RSS hírcsatorna a(z) %{id} jegyzethez
+        opened: új jegyzet (%{place} közelében)
         commented: új hozzászólás (%{place} közelében)
         closed: lezárt jegyzet (%{place} közelében)
         reopened: újraaktivált jegyzet (%{place} közelében)
@@ -295,7 +294,7 @@ hu:
           megmaradnak, de nem lesznek láthatóak.
         retain_notes: Térképjegyzeteid és jegyzethozzászólásaid (ha vannak) megmaradnak,
           de nem lesznek láthatóak.
-        retain_changeset_discussions: A módosításkészletekhez fűzött hozzászólásaid
+        retain_changeset_discussions: A módosításcsomagokhoz fűzött hozzászólásaid
           (ha vannak) megőrződnek.
         retain_email: Az e-mail-címed is megmarad.
         recent_editing_html: Mivel nemrégiben szerkesztettél, fiókod jelenleg nem
@@ -351,7 +350,7 @@ hu:
     edited_ago_by_html: Szerkesztette %{user} %{time_ago}
     version: Verzió
     redacted_version: Szerkesztett verzió
-    in_changeset: Módosításkészlet
+    in_changeset: Módosításcsomag
     anonymous: névtelen
     no_comment: (nincs hozzászólás)
     part_of: 'Része ennek:'
@@ -369,10 +368,10 @@ hu:
     view_redaction_message: Adattörlési üzenet megtekintése
     location: 'Hely:'
     node:
-      title_html: '%{name} pont'
+      title_html: 'Pont: %{name}'
       history_title_html: '%{name} pont előzményei'
     way:
-      title_html: '%{name} vonal'
+      title_html: 'Vonal: %{name}'
       history_title_html: '%{name} vonal előzményei'
       nodes: Pontok
       nodes_count:
@@ -382,7 +381,7 @@ hu:
         one: '%{related_ways} vonal része'
         other: '%{related_ways} vonalak része'
     relation:
-      title_html: '%{name} kapcsolat'
+      title_html: 'Kapcsolat: %{name}'
       history_title_html: '%{name} kapcsolat előzményei'
       members: Tagok
       members_count:
@@ -395,7 +394,6 @@ hu:
         way: 'Vonal:'
         relation: 'Kapcsolat:'
     containing_relation:
-      entry_html: '%{relation_name} kapcsolat'
       entry_role_html: '%{relation_name} kapcsolat (mint %{relation_role})'
     not_found:
       title: Nem található
@@ -404,7 +402,7 @@ hu:
         node: pont
         way: vonal
         relation: kapcsolat
-        changeset: módosításkészlet
+        changeset: módosításcsomag
         note: jegyzet
     timeout:
       title: Időtúllépési hiba
@@ -414,7 +412,7 @@ hu:
         node: pont
         way: vonal
         relation: kapcsolat
-        changeset: módosításkészlet
+        changeset: módosításcsomag
         note: jegyzet
     redacted:
       redaction: '%{id} adattörlési művelet'
@@ -447,13 +445,13 @@ hu:
       enclosing: A helyet körülvevő objektumok
   nodes:
     timeout:
-      sorry: Sajnáljuk, a %{id} azonosítójú csomópont adatainak lekérése túl sokáig
+      sorry: Sajnáljuk, a(z) %{id} azonosítójú pont adatainak lekérése túl sokáig
         tartott.
   old_nodes:
     not_found:
       sorry: 'Sajnáljuk, nem található meg #%{id} pont %{version} verziója.'
     timeout:
-      sorry: Sajnáljuk, a %{id} azonosítójú csomópont előzményeinek lekérése túl sokáig
+      sorry: Sajnáljuk, a(z) %{id} azonosítójú pont előzményeinek lekérése túl sokáig
         tartott.
   ways:
     timeout:
@@ -478,53 +476,53 @@ hu:
   changeset_comments:
     feeds:
       comment:
-        comment: 'Új hozzászólás #%{changeset_id} módosításkészlethez %{author} felhasználótól'
+        comment: 'Új hozzászólás #%{changeset_id} módosításcsomaghoz  %{author} felhasználótól'
         commented_at_by_html: '%{user} frissítette ekkor: %{when}'
       show:
-        title_all: OpenStreetMap módosításkészlet-megbeszélés
-        title_particular: 'A #%{changeset_id} OpenStreetMap módosításkészlethez tartozó
+        title_all: OpenStreetMap módosításcsomag-megbeszélés
+        title_particular: 'A #%{changeset_id} OpenStreetMap módosításcsomaghoz tartozó
           megbeszélés'
       timeout:
-        sorry: Sajnáljuk, túl sokáig tartott az általad kért módosításkészlet-hozzászólások
+        sorry: Sajnáljuk, túl sokáig tartott az általad kért módosításcsomag-hozzászólások
           listájának lekérése.
   changesets:
     changeset:
       no_edits: (nincs szerkesztés)
-      view_changeset_details: Módosításkészlet részleteinek megtekintése
+      view_changeset_details: Módosításcsomag részleteinek megtekintése
     index:
-      title: Módosításkészletek
-      title_user: '%{user} módosításkészletei'
-      title_user_link_html: '%{user_link} módosításkészletei'
-      title_friend: Ismerősök módosításkészletei
-      title_nearby: Közeli felhasználók módosításkészletei
-      empty: Nem található módosításkészlet
-      empty_area: Ezen a területen nincs módosításkészlet.
-      empty_user: Ettől a felhasználótól nincs módosításkészlet.
-      no_more: Nem találtunk több módosításkészletet.
-      no_more_area: Ezen a területen nincs több módosításkészlet.
-      no_more_user: Ettől a felhasználótól nincs több módosításkészlet.
+      title: Módosításcsomagok
+      title_user: '%{user} módosításcsomagjai'
+      title_user_link_html: '%{user_link} módosításcsomagjai'
+      title_friend: Ismerősök módosításcsomagjai
+      title_nearby: Közeli felhasználók módosításcsomagjai
+      empty: Nem található módosításcsomag.
+      empty_area: Ezen a területen nincs módosításcsomag.
+      empty_user: Ettől a felhasználótól nincs módosításcsomag.
+      no_more: Nem található több módosításcsomag.
+      no_more_area: Ezen a területen nincs több módosításcsomag.
+      no_more_user: Ettől a felhasználótól nincs több módosításcsomag.
       load_more: Továbbiak betöltése
       feed:
-        title: '%{id} módosításkészlet'
-        title_comment: '%{id} módosításkészlet - %{comment}'
+        title: '%{id} módosításcsomag'
+        title_comment: '%{id} módosításcsomag – %{comment}'
         created: Létrehozva
         closed: Lezárva
         belongs_to: Szerző
     subscribe:
-      heading: Feliratkozol a következő módosításkészlet megbeszélésére?
+      heading: Feliratkozol a következő módosításcsomag-megbeszélésére?
       button: Feliratkozás a megbeszélésre
     unsubscribe:
-      heading: Leiratkozol a következő módosításkészlet megbeszéléséről?
+      heading: Leiratkozol a következő módosításcsomag-megbeszéléséről?
       button: Leiratkozás a megbeszélésről
     heading:
-      title: '%{id} számú módosításkészlet'
+      title: '%{id} számú módosításcsomag'
       created_by_html: 'Létrehozta: %{link_user} (%{created}).'
     no_such_entry:
       heading: Nincs %{id} azonosítójú naplóbejegyzés
-      body: Sajnáljuk, nincs %{id} azonosítójú módosításkészlet. Ellenőrizd a helyességét.
-        Az is lehet, hogy rossz linkre kattintottál.
+      body: Sajnáljuk, nincs %{id} azonosítójú módosításcsomag. Ellenőrizd, hogy jól
+        írtad-e. Az is lehet, hogy rossz linkre kattintottál.
     show:
-      title: '%{id} módosításkészlet'
+      title: 'Módosításcsomag: %{id}'
       created: 'Létrehozva: %{when}'
       closed: 'Lezárva: %{when}'
       created_ago_html: Létrehozva %{time_ago}
@@ -533,8 +531,8 @@ hu:
       closed_ago_by_html: Lezárta %{user} %{time_ago}
       discussion: Megbeszélés
       join_discussion: Jelentkezz be, hogy bekapcsolódhass a megbeszélésbe
-      still_open: A módosításkészlet még nyitva van – a megbeszélés akkor nyílik meg,
-        ha a módosításkészlet lezárul.
+      still_open: A módosításcsomag még nyitva van – a megbeszélés akkor nyílik meg,
+        ha a módosításcsomag lezárul.
       subscribe: Feliratkozás
       unsubscribe: Leiratkozás
       comment_by_html: Hozzászólt %{user} %{time_ago}
@@ -542,8 +540,8 @@ hu:
       hide_comment: elrejtés
       unhide_comment: megjelenítés
       comment: Hozzászólás
-      changesetxml: Módosításkészlet adatai (XML)
-      osmchangexml: Módosításkészlet tartalma (osmChange XML)
+      changesetxml: Módosításcsomag XML-ben
+      osmchangexml: osmChange XML
     paging_nav:
       nodes: Pontok (%{count})
       nodes_paginated: 'Pontok (%{x}-%{y} ennyiből: %{count})'
@@ -552,7 +550,7 @@ hu:
       relations: Kapcsolatok (%{count})
       relations_paginated: 'Kapcsolatok (%{x}-%{y} ennyiből: %{count})'
     timeout:
-      sorry: Sajnáljuk, az általad kért módosításkészletek listájának beolvasása túl
+      sorry: Sajnáljuk, az általad kért módosításcsomagok listájának lekérése túl
         sokáig tartott.
   dashboards:
     contact:
@@ -573,9 +571,9 @@ hu:
       nearby users: További közeli felhasználók
       no nearby users: Még nincsenek más felhasználók, akik megadták, hogy a közelben
         szerkesztenek.
-      friends_changesets: ismerősök módosításkészletei
+      friends_changesets: ismerősök módosításcsomagjai
       friends_diaries: ismerősök naplóbejegyzései
-      nearby_changesets: közeli felhasználók módosításkészletei
+      nearby_changesets: közeli felhasználók módosításcsomagjai
       nearby_diaries: közeli felhasználók naplóbejegyzései
   diary_entries:
     new:
@@ -611,8 +609,7 @@ hu:
       title: Nincs ilyen naplóbejegyzés
       heading: 'Nincs naplóbejegyzés ezzel az azonosítóval: %{id}'
       body: Sajnáljuk, de nincs %{id} azonosítójú naplóbejegyzés vagy hozzászólás.
-        Kérjük, ellenőrizd a kifejezés helyességét. Az is lehet, hogy rossz linkre
-        kattintottál.
+        Ellenőrizd, hogy jól írtad-e. Az is lehet, hogy rossz linkre kattintottál.
     diary_entry:
       posted_by_html: '%{link_user} bejegyzése %{language_link} nyelven ekkor: %{created}'
       updated_at_html: 'Utolsó frissítés: %{updated}'
@@ -702,8 +699,8 @@ hu:
       contact_url_title: A különféle kapcsolatfelvételi csatornák magyarázata
       contact: kapcsolat
       contact_the_community_html: Nyugodtan keresd fel az OpenStreetMap közösséget
-        (%{contact_link}), ha hibás linket vagy más hibát találtál. Kérjük, ne felejtsd
-        el feljegyezni a hibás oldal pontos URL-jét.
+        (%{contact_link}), ha hibás linket vagy más hibát találtál. Ne felejtsd el
+        feljegyezni a hibás oldal pontos URL-jét.
     bad_request:
       title: Rossz kérés
       description: Az OpenStreetMap szerveren kért művelet nem érvényes (HTTP 400)
@@ -1574,7 +1571,7 @@ hu:
     helper:
       reportable_title:
         diary_comment: '%{entry_title} naplóbejegyzés, #%{comment_id} hozzászólás'
-        note: 'Megjegyzés #%{note_id}'
+        note: '#%{note_id} jegyzet'
   issue_comments:
     create:
       comment_created: Hozzászólásod sikeresen létrehozva
@@ -1584,7 +1581,7 @@ hu:
       title_html: '%{link} bejelentése'
       missing_params: Nem hozhatsz létre új bejelentést
       disclaimer:
-        intro: 'Mielőtt elküldöd a bejelentést, kérjük, győződj meg a következőkről:'
+        intro: 'Mielőtt elküldöd a bejelentést, győződj meg a következőkről:'
         not_just_mistake: Biztos vagy abban, hogy a probléma nem csupán egy hiba
         unable_to_fix: A problémát nem tudod megoldani a sem magad, sem a közösség
           tagjainak segítségével
@@ -1607,9 +1604,9 @@ hu:
           vandal_label: Ez a felhasználó vandál
           other_label: Egyéb
         note:
-          spam_label: A megjegyzés spam
-          personal_label: A megjegyzés személyes adatot tartalmaz
-          abusive_label: A megjegyzés sértő
+          spam_label: A jegyzet spam
+          personal_label: A jegyzet személyes adatot tartalmaz
+          abusive_label: A jegyzet sértő
           other_label: Egyéb
     create:
       successful_report: Bejelentésedet sikeresen regisztráltuk
@@ -1692,11 +1689,11 @@ hu:
         %{trace_description} leírású, címke nélküli fájlod
     gpx_failure:
       hi: Szia %{to_user}!
-      failed_to_import: 'nem sikerült GPS nyomkövetési fájlként importálni. Kérjük,
-        ellenőrizze, hogy a fájl egy érvényes GPX-fájl vagy egy GPX-fájl(oka)t tartalmazó
-        archívum a támogatott formátumban (.tar.gz, .tar.bz2, .tar, .zip, .gpx.gz,
-        .gpx.bz2). . Formátum- vagy szintaktikai probléma lehet a fájllal? Itt van
-        az importálási hiba:'
+      failed_to_import: 'nem sikerült GPS nyomkövetési fájlként importálni. Ellenőrizd,
+        hogy a fájl egy érvényes GPX-fájl vagy egy GPX-fájl(oka)t tartalmazó archívum
+        a támogatott formátumban (.tar.gz, .tar.bz2, .tar, .zip, .gpx.gz, .gpx.bz2).
+        . Formátum- vagy szintaktikai probléma lehet a fájllal? Itt látható az importálási
+        hiba:'
       more_info: 'További információ a GPX importálási hibáiról és azok elkerüléséről
         itt található: %{url}.'
       more_info_html: 'A GPX importálási hibákról és elkerülésükről további tájékoztatás
@@ -1738,7 +1735,7 @@ hu:
       click_the_link: Ha ez Te vagy, akkor a jelszó alaphelyzetbe állításához kattints
         az alábbi hivatkozásra.
     note_comment_notification:
-      description: 'OpenStreetMap megjegyzés #%{id}'
+      description: 'OpenStreetMap jegyzet #%{id}'
       anonymous: Egy névtelen felhasználó
       greeting: Szia!
       commented:
@@ -1775,27 +1772,27 @@ hu:
       details: 'Válaszolj, vagy tudj meg többet a jegyzetről itt: %{url}.'
       details_html: 'Válaszolj, vagy tudj meg többet a jegyzetről itt: %{url}.'
     changeset_comment_notification:
-      description: 'OpenStreetMap módosításkészlet #%{id}'
+      description: 'OpenStreetMap módosításcsomag #%{id}'
       hi: Szia %{to_user}!
       commented:
-        subject_own: '[OpenStreetMap] %{commenter} hozzászólt az egyik módosításkészletedhez'
-        subject_other: '[OpenStreetMap] %{commenter} hozzászólt egy módosításkészlethez,
+        subject_own: '[OpenStreetMap] %{commenter} hozzászólt az egyik módosításcsomagodhoz'
+        subject_other: '[OpenStreetMap] %{commenter} hozzászólt egy módosításcsomaghoz,
           amely téged is érdekel'
-        your_changeset: '%{commenter} hozzászólt az egyik módosításkészletedhez ekkor:
+        your_changeset: '%{commenter} hozzászólt az egyik módosításcsomagodhoz ekkor:
           %{time}'
-        your_changeset_html: '%{commenter} hozzászólt az egyik módosításkészletedhez
+        your_changeset_html: '%{commenter} hozzászólt az egyik módosításcsomagodhoz
           ekkor: %{time}'
         commented_changeset: '%{commenter} hozzászólt %{changeset_author} általad
-          is figyelt módosításkészletéhez ekkor: %{time}'
+          is figyelt módosításcsomagjához ekkor: %{time}'
         commented_changeset_html: '%{commenter} hozzászólt %{changeset_author} általad
-          is figyelt módosításkészletéhez ekkor: %{time}'
+          is figyelt módosításcsomagjához ekkor: %{time}'
         partial_changeset_with_comment: „%{changeset_comment}” hozzászólással
         partial_changeset_with_comment_html: '%{changeset_comment} hozzászólással'
         partial_changeset_without_comment: hozzászólás nélkül
-      details: 'Válaszolj, vagy tudj meg többet a módosításkészletről itt: %{url}.'
-      details_html: 'Válaszolj, vagy tudj meg többet a módosításkészletről itt: %{url}.'
-      unsubscribe: 'A módosításkészlet frissüléseiről leiratkozhatsz itt: %{url}.'
-      unsubscribe_html: 'A módosításkészlet frissüléseiről leiratkozhatsz itt: %{url}.'
+      details: 'Válaszolj, vagy tudj meg többet a módosításcsomagról itt: %{url}.'
+      details_html: 'Válaszolj, vagy tudj meg többet a módosításcsomagról itt: %{url}.'
+      unsubscribe: 'A módosításcsomag frissüléseiről leiratkozhatsz itt: %{url}.'
+      unsubscribe_html: 'A módosításcsomag frissüléseiről leiratkozhatsz itt: %{url}.'
   confirmations:
     confirm:
       heading: Nézd meg az e-mailjeidet!
@@ -1821,7 +1818,7 @@ hu:
       failure: Ezzel a tokennel már meg lett erősítve egy e-mail cím.
       unknown_token: Ez a megerősítő kód lejárt, vagy nem létezik.
     resend_success_flash:
-      confirmation_sent: Küldtünk egy új megerősítő megjegyzést a(z) %{email} címre.
+      confirmation_sent: Küldtünk egy új megerősítő üzenetet a(z) %{email} címre.
         Amint megerősíted fiókodat, kezdhetsz is térképezni.
       whitelist: Ha olyan antispam rendszert használsz, amely visszaigazolási kéréseket
         küld, akkor kérjük, ellenőrizd, hogy a(z) %{sender} az engedélyezett listán
@@ -2209,6 +2206,8 @@ hu:
           adatokat tartalmazza, az állam szerzői joga fenntartva.'
         contributors_za_south_africa: Dél-Afrika
         contributors_za_ngi: 'Chief Directorate: National Geo-Spatial Information'
+        contributors_gb_credit_html: "%{united_kingdom}: Térképészeti Szolgálat adatai
+          &copy; Királyi szerzői és adatbázisjog \n2010-2023."
         contributors_gb_united_kingdom: Egyesült Királyság
         contributors_2_html: Ezekről és más, az OpenStreetMap fejlesztésére használt
           forrásokról további részletekért tekintsd meg a %{contributors_page_link}
@@ -2542,10 +2541,15 @@ hu:
       trace_uploaded: A GPX-fájl feltöltődött, és várakozik az adatbázisba való beillesztésre.
         Ez általában fél órán belül megtörténik, és kapni fogsz egy e-mailt, amint
         elkészült.
-      upload_failed: A GPX feltöltése meghiúsult. Kérjük, próbáld meg újra.
-      traces_waiting: '%{count} nyomvonalad várakozik feltöltésre. Kérjük, fontold
-        meg, hogy megvárod, amíg ezek befejeződnek mielőtt feltöltesz továbbiakat,
-        hogy így ne tartsd fel a többi felhasználót a sorban.'
+      upload_failed: A GPX feltöltése meghiúsult. A rendszergazda értesítést kapott
+        a hibáról. Próbáld meg újra.
+      traces_waiting:
+        one: '%{count} nyomvonalad várakozik feltöltésre. Kérjük, várd meg, amíg ezek
+          befejeződnek, mielőtt feltöltesz továbbiakat, hogy ne tartsd fel a többi
+          felhasználót a sorban.'
+        other: '%{count} nyomvonalad várakozik feltöltésre. Kérjük, várd meg, amíg
+          ezek befejeződnek, mielőtt feltöltesz továbbiakat, hogy ne tartsd fel a
+          többi felhasználót a sorban.'
     edit:
       cancel: Mégse
       title: 'Nyomvonal szerkesztése: %{name}'
@@ -2603,7 +2607,7 @@ hu:
       upload_trace: Nyomvonal feltöltése
       all_traces: Minden nyomvonal
       my_traces: Saját nyomvonalak
-      traces_from: '%{user} nyilvános nyomvonalai'
+      traces_from_html: '%{user} nyilvános nyomvonalai'
       remove_tag_filter: Címkeszűrő eltávolítása
     destroy:
       scheduled_for_deletion: A nyomvonal törlésre kijelölve
@@ -2746,8 +2750,7 @@ hu:
         paragraph_2: Regisztrálj a közreműködés megkezdéséhez.
         welcome: Üdvözlünk az OpenStreetMapen
       duplicate_social_email: Ha már rendelkezel OpenStreetMap fiókkal, és külső identitásszolgáltatót
-        szeretnél használni, kérjük, jelentkezz be jelszavaddal, és módosítsd fiókod
-        beállításait.
+        szeretnél használni, jelentkezz be jelszavaddal, és módosítsd fiókod beállításait.
       display name description: A nyilvánosan megjelenített felhasználóneved. A beállításaidban
         később megváltoztathatod.
       by_signing_up:
@@ -3013,9 +3016,9 @@ hu:
     navigation:
       all_blocks: Minden blokk
       blocks_on_me: Engem sújtó blokkolások
-      blocks_on_user: '%{user} blokkolásai'
+      blocks_on_user_html: '%{user} blokkolásai'
       blocks_by_me: Általam kiosztott blokkolások
-      blocks_by_user: '%{user} blokkolásai'
+      blocks_by_user_html: '%{user} blokkolásai'
       block: '#%{id} blokk'
       new_block: Újabb blokkolások
   user_mutes:
@@ -3055,12 +3058,17 @@ hu:
       description: Leírás
       created_at: Létrehozva ekkor
       last_changed: Utoljára módosítva
+      apply: Alkalmaz
+      all: Összes
+      open: Nyitva
+      closed: Lezárva
+      status: Állapot
     show:
-      title: '%{id} jegyzet'
+      title: 'Jegyzet: %{id}'
       description: Leírás
-      open_title: '%{note_name} megoldatlan jegyzet'
-      closed_title: '%{note_name} megoldott jegyzet'
-      hidden_title: '%{note_name} rejtett jegyzet'
+      open_title: 'Megoldatlan jegyzet: %{note_name}'
+      closed_title: 'Megoldott jegyzet: %{note_name}'
+      hidden_title: Elrejtett jegyzet %{note_name}
       event_opened_by_html: Létrehozta %{user} %{time_ago}
       event_opened_by_anonymous_html: Létrehozta egy névtelen felhasználó %{time_ago}
       event_commented_by_html: Hozzászólt %{user} %{time_ago}
@@ -3073,6 +3081,9 @@ hu:
       report: jegyzet bejelentése
       anonymous_warning: Ez a jegyzet névtelen felhasználók hozzászólásait is tartalmazza,
         amelyeket független módon kell ellenőrizni.
+      discussion: Megbeszélés
+      subscribe: Feliratkozás
+      unsubscribe: Leiratkozás
       hide: Elrejtés
       resolve: Megoldás
       reactivate: Újraaktiválás
index 2c41b8f25414ce2ed8bb65355a4a22b45dac41c0..1afe3205a4ea6b345b07399e6b9454a8a6d5ed33 100644 (file)
@@ -369,7 +369,6 @@ ia:
         way: Via
         relation: Relation
     containing_relation:
-      entry_html: Relation %{relation_name}
       entry_role_html: Relation %{relation_name} (como %{relation_role})
     not_found:
       title: Non trovate
@@ -2602,7 +2601,7 @@ ia:
       upload_trace: Incargar un tracia
       all_traces: Tote le tracias
       my_traces: Mi tracias
-      traces_from: Tracias public de %{user}
+      traces_from_html: Tracias public de %{user}
       remove_tag_filter: Remover filtro de etiquettas
     destroy:
       scheduled_for_deletion: Tracia programmate pro deletion
@@ -3011,9 +3010,9 @@ ia:
     navigation:
       all_blocks: Tote le blocadas
       blocks_on_me: Blocadas sur me
-      blocks_on_user: Blocadas sur %{user}
+      blocks_on_user_html: Blocadas sur %{user}
       blocks_by_me: Blocadas facite per me
-      blocks_by_user: Blocadas facite per %{user}
+      blocks_by_user_html: Blocadas facite per %{user}
       block: Blocada №%{id}
       new_block: Nove blocada
   user_mutes:
index f16032aab44026b8407a11b85af2790ec9a8f90f..d44592b693f177f1c27f46fc848e2bf3e8210393 100644 (file)
@@ -381,7 +381,6 @@ id:
         way: Way/Garis
         relation: Relasi
     containing_relation:
-      entry_html: Relasi %{relation_name}
       entry_role_html: Relasi %{relation_name} (as %{relation_role})
     not_found:
       title: Tidak Ditemukan
@@ -2504,7 +2503,7 @@ id:
       upload_trace: Unggah jejak GPS
       all_traces: Semua Jejak
       my_traces: Jejak Saya
-      traces_from: Jejak Publik dari %{user}
+      traces_from_html: Jejak Publik dari %{user}
       remove_tag_filter: Hapus Filter Tag
     destroy:
       scheduled_for_deletion: Trek yang dijadwalkan untuk dihapus
index 821c795520a419b914eaa9a9db846e7b3969e081..c83902172a8c7aeeb0fa86e035d41e6d0aff0ebe 100644 (file)
@@ -392,7 +392,6 @@ is:
         way: Leið
         relation: Vensl
     containing_relation:
-      entry_html: Venslin %{relation_name}
       entry_role_html: Venslin %{relation_name} (sem „%{relation_role}“)
     not_found:
       title: Fannst ekki
@@ -2651,7 +2650,7 @@ is:
       upload_trace: Senda inn feril
       all_traces: Allar ferlar
       my_traces: Ferlarnir mínir
-      traces_from: Opinberir ferlar frá %{user}
+      traces_from_html: Opinberir ferlar frá %{user}
       remove_tag_filter: Fjarlægja merkjasíu
     destroy:
       scheduled_for_deletion: Þessum feril verður eitt
@@ -3064,9 +3063,9 @@ is:
     navigation:
       all_blocks: Öll bönn
       blocks_on_me: Bönn gegn mér
-      blocks_on_user: Bönn gegn %{user}
+      blocks_on_user_html: Bönn gegn %{user}
       blocks_by_me: Bönn eftir mig
-      blocks_by_user: Bönn eftir %{user}
+      blocks_by_user_html: Bönn eftir %{user}
       block: 'Bann #%{id}'
   user_mutes:
     index:
index 51c2bfc4b6a7671ca581be15009f993275adb9ad..d0925a5f6f9089ca5fb3da3f3cd68f8d442a671f 100644 (file)
@@ -24,6 +24,7 @@
 # Author: Fringio
 # Author: Frubino
 # Author: Gianfranco
+# Author: HaukweKwor
 # Author: Isiond
 # Author: JackLantern
 # Author: Jlrb+
@@ -362,7 +363,7 @@ it:
         link: https://osmfoundation.org/wiki/Licence/Contributor_Terms/IT
         link text: che cos'è questo?
       save changes button: Salva modifiche
-      delete_account: Elimina account...
+      delete_account: Elimina Utenza...
     go_public:
       heading: Modifica pubblica
       currently_not_public: Attualmente le tue modifiche sono anonime e le persone
@@ -431,8 +432,7 @@ it:
         way: Percorso
         relation: Relazione
     containing_relation:
-      entry_html: Relazione %{relation_name}
-      entry_role_html: Relazione %{relation_name} (come %{relation_role})
+      entry_role_html: '%{relation_name} (come %{relation_role})'
     not_found:
       title: Non trovato
       sorry: 'Impossibile trovare %{type} #%{id}.'
@@ -2667,7 +2667,7 @@ it:
       upload_trace: Carica un tracciato
       all_traces: Tutti i tracciati
       my_traces: I miei tracciati
-      traces_from: Tracciati pubblici di %{user}
+      traces_from_html: Tracciati pubblici di %{user}
       remove_tag_filter: Rimuovi filtro delle etichette
     destroy:
       scheduled_for_deletion: Tracciato in attesa di essere eliminato
@@ -3078,9 +3078,9 @@ it:
     navigation:
       all_blocks: Tutti i blocchi
       blocks_on_me: Blocchi su di me
-      blocks_on_user: Blocchi su %{user}
+      blocks_on_user_html: Blocchi su %{user}
       blocks_by_me: Blocchi applicati da me
-      blocks_by_user: Blocchi imposti da %{user}
+      blocks_by_user_html: Blocchi imposti da %{user}
       block: 'Blocco #%{id}'
       new_block: Nuovo blocco
   user_mutes:
index 7ee065dfeed4fff5f069a59430664ab79340b61a..9f85fac2983bccd4d3fa8eaddd4d0a1f88370982 100644 (file)
@@ -390,7 +390,6 @@ ja:
         way: ウェイ
         relation: リレーション
     containing_relation:
-      entry_html: リレーション %{relation_name}
       entry_role_html: リレーション %{relation_name} (%{relation_role} として)
     not_found:
       title: 見つかりません
@@ -2390,7 +2389,7 @@ ja:
       upload_trace: トレースをアップロード
       all_traces: 全てのトレース
       my_traces: 自分のトレース
-      traces_from: '%{user}さんによる公開GPSトレース'
+      traces_from_html: '%{user}さんによる公開GPSトレース'
       remove_tag_filter: タグフィルターの削除
     destroy:
       scheduled_for_deletion: トレースの削除準備を行いました
index 16fe02f2192ef1730a582caec4dba0872a8df88d..6cc951a446c3a91aaa232020ac2ede290448223b 100644 (file)
@@ -163,7 +163,6 @@ ka:
         way: გზა
         relation: ურთიერთობა
     containing_relation:
-      entry_html: ურთიერთობა %{relation_name}
       entry_role_html: ურთიერთობა %{relation_name} (როგორც %{relation_role})
     not_found:
       sorry: 'სამწუხაროდ, %{type} #%{id} ვერ მოიძებნა.'
index 24d5b1dc7e2f49dcfd56690335a142ad00ddd44a..dffc4b02dd9488787808b64e32c1c8f8abf6ebd3 100644 (file)
@@ -257,7 +257,6 @@ kab:
         way: Abrid
         relation: Assaɣ
     containing_relation:
-      entry_html: Assaɣ %{relation_name}
       entry_role_html: Assaɣ %{relation_name} (am %{relation_role})
     not_found:
       sorry: 'Suref-aɣ, %{type} #%{id} ulac-it.'
index 54c620e84349cd773ab313c6b10af9696c4aa798..0e713250cef2ce2f432b8533ff3906f7182635b2 100644 (file)
@@ -266,8 +266,6 @@ kk-cyrl:
         node: Нүкте
         way: Сызық
         relation: Қатынас
-    containing_relation:
-      entry_html: Қатынас %{relation_name}
     not_found:
       title: Табылмады
       type:
index 98237c03f768fdebc5033116fd30552f5c05f426..ae4c859b10bff8d4ede96704cf79b34bf8ac4682 100644 (file)
@@ -133,7 +133,6 @@ km:
         way: ផ្លូវ​
         relation: ទំនាក់ទំនង
     containing_relation:
-      entry_html: ទំនាក់ទំនង​ %{relation_name}
       entry_role_html: ទំនាក់ទំនង %{relation_name} (ជា %{relation_role})
     not_found:
       sorry: សូមទោស រកមិនឃើញ %{type}%{id}​ ទេ។
index 632c965614b5612d1a5a774f538e7f485f1687c9..dabdf6f745f51788bba78a57781398a3c5443172 100644 (file)
@@ -237,8 +237,6 @@ kn:
       type:
         way: ರಸ್ತೆ
         relation: ಸಂಬಂಧ
-    containing_relation:
-      entry_html: ಸಂಬಂಧ %{relation_name}
     not_found:
       title: ಸಿಗಲಿಲ್ಲ
       sorry: 'ಕ್ಷಮಿಸಿ, %{type} #%{id} ಸಿಗುತ್ತಿಲ್ಲ.'
index aaf9f098d5f1494b3611f30c91b804ddf59dfa1f..75fb9dbd8a9bea917da3fa01cdf63acc99ea148e 100644 (file)
@@ -374,7 +374,6 @@ ko:
         way: 길
         relation: 관계
     containing_relation:
-      entry_html: 관계 %{relation_name}
       entry_role_html: (%{relation_role}로서) 관계 %{relation_name}
     not_found:
       title: 찾을 수 없음
@@ -2378,7 +2377,7 @@ ko:
       upload_trace: 궤적 올리기
       all_traces: 모든 궤적
       my_traces: 내 발자취
-      traces_from: '%{user}님의 공개 GPS 궤적'
+      traces_from_html: '%{user}님의 공개 GPS 궤적'
       remove_tag_filter: 태그 필터 제거
     destroy:
       scheduled_for_deletion: 삭제 계획중인 궤적
@@ -2738,9 +2737,9 @@ ko:
     navigation:
       all_blocks: 모든 차단
       blocks_on_me: 나의 차단내역
-      blocks_on_user: '%{user}님의 차단내역'
+      blocks_on_user_html: '%{user}님의 차단내역'
       blocks_by_me: 내가 차단한 내역
-      blocks_by_user: '%{user}님이 차단한 내역'
+      blocks_by_user_html: '%{user}님이 차단한 내역'
       block: '#%{id} 차단'
       new_block: 최근 차단
   user_mutes:
index deab2c5c1c4fcdde076bae3cf0fe12280a0d43a4..8d02e9c3bdd0a2ce2362bcf1add9736d1db350b3 100644 (file)
@@ -354,7 +354,6 @@ ku-Latn:
         way: Rê
         relation: Eleqe
     containing_relation:
-      entry_html: Eleqe %{relation_name}
       entry_role_html: Eleqe %{relation_name} (wekî %{relation_role})
     not_found:
       title: Nehate dîtin
@@ -2177,7 +2176,7 @@ ku-Latn:
       upload_trace: Şopek GPSê bar bike
       all_traces: Temamê Şopan
       my_traces: Şopên min
-      traces_from: Şopên Giştî ji %{user}
+      traces_from_html: Şopên Giştî ji %{user}
       remove_tag_filter: Parzûna etîketê rake
     destroy:
       scheduled_for_deletion: Şop ji bo jêbirinê hate plankirin
index be03792e517d0b541663c8e82a93a43279d47302..a1bcbdb99a95916c5daf132545dda7f482550f90 100644 (file)
@@ -346,7 +346,6 @@ lb:
         way: Wee
         relation: Relatioun
     containing_relation:
-      entry_html: Relatioun %{relation_name}
       entry_role_html: Relatioun %{relation_name} (als %{relation_role})
     not_found:
       title: Net fonnt
@@ -2107,7 +2106,7 @@ lb:
       wiki_page: Wiki-Säit
       all_traces: All Spuren
       my_traces: Meng Spueren
-      traces_from: Ëffentlech Spuere vum %{user}
+      traces_from_html: Ëffentlech Spuere vum %{user}
       remove_tag_filter: Tag-Filter ewechhuelen
     destroy:
       scheduled_for_deletion: Fir d'Läsche bestëmmt Spuer
index b8b1f7b30ac4376b128364020aab5ee19d759cb3..55ab98698dec5589330fe28793421eece8e90092 100644 (file)
@@ -419,7 +419,6 @@ lt:
         way: Kelias
         relation: Ryšys
     containing_relation:
-      entry_html: Ryšys %{relation_name}
       entry_role_html: Ryšys %{relation_name} (kaip %{relation_role})
     not_found:
       title: Nerasta
@@ -2536,7 +2535,7 @@ lt:
       upload_trace: Įkelti pėdsaką
       all_traces: Visi pėdsakai
       my_traces: Mano GPS pėdsakai
-      traces_from: Vieši naudotojo %{user} pėdsakai
+      traces_from_html: Vieši naudotojo %{user} pėdsakai
       remove_tag_filter: Pašalinti žymų filtrą
     destroy:
       scheduled_for_deletion: Trasa, numatyta ištrinimui
@@ -2946,9 +2945,9 @@ lt:
     navigation:
       all_blocks: Visi blokavimai
       blocks_on_me: Mano blokavimai
-      blocks_on_user: '%{user} blokavimai'
+      blocks_on_user_html: '%{user} blokavimai'
       blocks_by_me: Mano sukurti blokavimai
-      blocks_by_user: '%{user} sukurti blokavimai'
+      blocks_by_user_html: '%{user} sukurti blokavimai'
       block: 'Blokavimas #%{id}'
       new_block: Naujas blokavimas
   user_mutes:
index 405c47dcbb8b9e2a563ddb2308f7400b0e39d7d9..3cc3fe8b1dc20434da62a987d0107be8b7afaaa3 100644 (file)
@@ -280,7 +280,6 @@ lv:
         way: Līnija
         relation: Relācija
     containing_relation:
-      entry_html: Relācija %{relation_name}
       entry_role_html: Relācija %{relation_name} (kā %{relation_role})
     not_found:
       sorry: 'Atvainojiet, %{type} ar id #%{id} nevarējām atrast.'
index f64385a105837af110fb0e9c8f6ce5b3e3358f20..aff5cfc22bcdd94d57c0dd0424b733e985c16610 100644 (file)
@@ -365,7 +365,6 @@ mk:
         way: Пат
         relation: Однос
     containing_relation:
-      entry_html: Однос %{relation_name}
       entry_role_html: Однос %{relation_name} (како %{relation_role})
     not_found:
       title: Не е најдено
@@ -2581,7 +2580,7 @@ mk:
       upload_trace: Подигни трага
       all_traces: Сите траги
       my_traces: Мои траги
-      traces_from: Јавни траги од %{user}
+      traces_from_html: Јавни траги од %{user}
       remove_tag_filter: Отстрани филтер за ознаки
     destroy:
       scheduled_for_deletion: Трагата е закажана за бришење
@@ -2990,9 +2989,9 @@ mk:
     navigation:
       all_blocks: Сите блокови
       blocks_on_me: Добиени блокови
-      blocks_on_user: Блокови за %{user}
+      blocks_on_user_html: Блокови за %{user}
       blocks_by_me: Извршени болокови
-      blocks_by_user: Блокови од %{user}
+      blocks_by_user_html: Блокови од %{user}
       block: Блок бр. %{id}
       new_block: Нов блок
   user_mutes:
index 0dd8e0ef68fc207b18cf5d4d821932469f8de223..846afd851511b767373db8fc61dcef6388a55b56 100644 (file)
@@ -117,7 +117,6 @@ mo:
         way: Кале
         relation: Релацие
     containing_relation:
-      entry_html: Релация %{relation_name}
       entry_role_html: Релация %{relation_name} (ын ролул %{relation_role})
     not_found:
       type:
index 1f1f7da6fd5d63e9bff99a151383faaaa01c07f6..801fad8d45861ad5304ea13b57f0a1ccb261b198 100644 (file)
@@ -227,7 +227,6 @@ mr:
         way: मार्ग
         relation: संबंध
     containing_relation:
-      entry_html: संबंध %{relation_name}
       entry_role_html: संबंध %{relation_name} (%{relation_role} म्हणून)
     not_found:
       sorry: 'क्षमा असावी, %{type} #%{id} सापडले नाही.'
index 1ba56971f85f34f07005aba0331055f210c92ed7..cbb0cd37fa2e54420e197a584fa593f2895be509 100644 (file)
@@ -294,7 +294,6 @@ ms:
         way: Jalan
         relation: Hubungan
     containing_relation:
-      entry_html: Hubungan %{relation_name}
       entry_role_html: Hubungan %{relation_name} (sebagai %{relation_role})
     not_found:
       title: Tidak Dijumpai
index c24f750519308f547db7cc201574b19ebe6fda31..01e32571f9740ad3e1adfa4752d3fe8c064cb977 100644 (file)
@@ -354,7 +354,6 @@ nb:
         way: Linje
         relation: Relasjon
     containing_relation:
-      entry_html: Relasjon %{relation_name}
       entry_role_html: Relasjon %{relation_name} (som %{relation_role})
     not_found:
       title: Ikke funnet
index b6a7bf7a06160b0fc83d413ff50574d112c34e18..9c1179408aef234e25114ef9f7291f6ac3baeed1 100644 (file)
@@ -292,7 +292,6 @@ ne:
         way: बाटो
         relation: सम्बन्ध
     containing_relation:
-      entry_html: सम्बन्ध %{relation_name}
       entry_role_html: सम्बन्ध %{relation_name} (as %{relation_role})
     not_found:
       title: फेला परेन
index e12810d5a8e80acc629844e15203b12b372e931a..80aa25e974d14c50e283b0a9aff6d9829181b234 100644 (file)
@@ -429,7 +429,6 @@ nl:
         way: Weg
         relation: Relatie
     containing_relation:
-      entry_html: Relatie %{relation_name}
       entry_role_html: Relatie %{relation_name} (als %{relation_role})
     not_found:
       title: Kon niet gevonden worden
@@ -592,7 +591,7 @@ nl:
       latest_edit_html: 'Laatste bewerking (%{ago}):'
     popup:
       your location: Uw locatie
-      nearby mapper: Dichtbijzijnde mapper
+      nearby mapper: Nabije kaartmaker
       friend: Vriend
     show:
       title: Mijn dashboard
@@ -601,7 +600,7 @@ nl:
       edit_your_profile: Pas uw profiel aan
       my friends: Mijn vrienden
       no friends: U hebt nog geen vrienden toegevoegd.
-      nearby users: Andere dichtbijzijnde gebruikers
+      nearby users: Andere nabije gebruikers
       no nearby users: Er zijn nog geen andere gebruikers die hebben opgegeven in
         de buurt te mappen.
       friends_changesets: wijzigingensets van vrienden
@@ -1884,7 +1883,7 @@ nl:
         other: '%{count} oude berichten'
       no_messages_yet_html: U hebt nog geen berichten. Waarom legt u geen contact
         met %{people_mapping_nearby_link}?
-      people_mapping_nearby: dichtbijzijnde mappers
+      people_mapping_nearby: nabije kaartmakers
     messages_table:
       from: Van
       to: Aan
@@ -1915,7 +1914,7 @@ nl:
         other: U hebt %{count} verzonden berichten
       no_sent_messages_html: U hebt nog geen berichten verzonden. Waarom legt u geen
         contact met %{people_mapping_nearby_link}?
-      people_mapping_nearby: dichtbijzijnde mappers
+      people_mapping_nearby: nabije kaartmakers
     muted:
       title: Gedempte berichten
       messages:
@@ -2074,9 +2073,9 @@ nl:
       heading_html: '%{copyright}OpenStreetMap- %{br} bijdragers'
       used_by_html: '%{name} levert kaartgegevens aan duizenden websites, mobiele
         apps en hardware-apparaten'
-      lede_text: OpenStreetMap wordt gemaakt door een gemeenschap van mappers die
-        gegevens over wegen, paden, cafés, treinstations en nog veel meer, over de
-        hele wereld bijdragen en onderhouden.
+      lede_text: OpenStreetMap wordt gemaakt door een gemeenschap van kaartmakers
+        die gegevens over wegen, paden, cafés, treinstations en nog veel meer, over
+        de hele wereld bijdragen en onderhouden.
       local_knowledge_title: Lokale kennis
       local_knowledge_html: OpenStreetMap legt de nadruk op lokale kennis. Bijdragers
         gebruiken luchtfoto's, gps-apparaten en low-tech veldkaarten om te controleren
@@ -2354,7 +2353,7 @@ nl:
           instructions_1_html: |-
             Klik op %{note_icon} of hetzelfde pictogram op de kaartweergave.
             Er wordt een markering toegevoegd aan de kaart die u kunt verplaatsen
-            door haar te verslepen. Voeg uw bericht toe, klik op "opslaan" en andere mappers zullen uw melding nagaan.
+            door deze te verslepen. Voeg uw bericht toe en klik op “Opslaan”, dan zullen andere kaartmakers uw melding nagaan.
       other_concerns:
         title: Andere aangelegenheden
         concerns_html: |-
@@ -2566,7 +2565,7 @@ nl:
           toevoegen.
         para_2_html: |-
           Ga naar %{map_link} en klik op het opmerkingssymbool:
-          %{note_icon}. Er wordt een markering toegevoegd aan de kaart die u kunt verplaatsen door te slepen. Voeg uw bericht toe en klik dan op Opslaan, zodat andere mappers het kunnen onderzoeken.
+          %{note_icon}. Er wordt een markering toegevoegd aan de kaart die u kunt verplaatsen door te slepen. Voeg uw bericht toe en klik op “Opslaan”, dan zullen andere kaartmakers uw melding nagaan.
         the_map: de kaart
     communities:
       title: Gemeenschappen
@@ -2578,8 +2577,8 @@ nl:
       local_chapters:
         title: Lokale Afdelingen
         about_text: |-
-          Lokale Afdelingen zijn groepen op land- of regioniveau die de formele stap hebben gezet om juridische entiteiten zonder winstoogmerk op te richten. Ze vertegenwoordigen de kaart en kaartenmakers van het gebied wanneer te maken heeft met de lokale overheid, het bedrijfsleven en de media. Ze hebben ook een affiliatie
-          met de OpenStreetMap Foundation (OSMF), waardoor ze een link hebben met de wettelijke en auteursrechtelijke-overheidsinstantie.
+          Lokale Afdelingen zijn groepen op land- of regioniveau die de formele stap hebben gezet om juridische entiteiten zonder winstoogmerk op te richten. Ze vertegenwoordigen de kaart en kaartmakers van het gebied bij het omgaan met de lokale overheid, het bedrijfsleven en de media. Ze hebben ook een affiliatie
+          met de OpenStreetMap Foundation (OSMF), waardoor ze een link hebben met de wettelijke en auteursrechtelijke overheidsinstantie.
         list_text: 'De volgende gemeenschappen zijn formeel opgericht als Lokale Afdelingen:'
       other_groups:
         title: Andere Groepen
@@ -2672,7 +2671,7 @@ nl:
       upload_trace: Traject uploaden
       all_traces: Alle trajecten
       my_traces: Mijn trajecten
-      traces_from: Openbare trajecten van %{user}
+      traces_from_html: Openbare trajecten van %{user}
       remove_tag_filter: Labelfilter verwijderen
     destroy:
       scheduled_for_deletion: Traject staat op de lijst voor verwijdering
@@ -2901,7 +2900,7 @@ nl:
       notes: Kaartopmerkingen
       remove as friend: Vriend verwijderen
       add as friend: Vriend toevoegen
-      mapper since: 'Mapper sinds:'
+      mapper since: 'Kaartmaker sinds:'
       last map edit: 'Recentste bewerking:'
       no activity yet: Nog geen activiteit
       uid: 'Gebruikers-ID:'
@@ -3086,9 +3085,9 @@ nl:
     navigation:
       all_blocks: Alle blokkades
       blocks_on_me: Blokkades voor u
-      blocks_on_user: Blokkades voor %{user}
+      blocks_on_user_html: Blokkades voor %{user}
       blocks_by_me: Blokkades door u
-      blocks_by_user: Blokkades door %{user}
+      blocks_by_user_html: Blokkades door %{user}
       block: 'Blokkade #%{id}'
       new_block: Nieuwe blokkade
   user_mutes:
@@ -3170,9 +3169,9 @@ nl:
         %{disappear_in}.
     new:
       title: Nieuwe opmerking
-      intro: Een fout gezien of ontbreekt er iets? Laat het andere mappers weten zodat
-        wij het kunnen oplossen. Verplaats de markering naar de correcte positie en
-        beschrijf het probleem.
+      intro: Een fout gezien? Ontbreekt er iets? Laat het andere kaartmakers weten
+        zodat wij het kunnen verbeteren. Verplaats de markering naar de juiste positie
+        en beschrijf het probleem.
       anonymous_warning_html: U bent niet aangemeld. Als u updates van uw aantekening
         wilt ontvangen, kunt u %{log_in} of %{sign_up}.
       anonymous_warning_log_in: aanmelden
index c8c922764c9e80c6bed75b5617f84cb44540df4d..468da74f5eff888b073abcb9d8df06a5ee60f784 100644 (file)
@@ -334,7 +334,6 @@ nn:
         way: Veg
         relation: Relasjon
     containing_relation:
-      entry_html: Relasjon %{relation_name}
       entry_role_html: Relasjon %{relation_name} (som %{relation_role})
     not_found:
       title: Ikkje funne
index 01ac78d5296dba0e89c493b056aec31e5108e939..3d06d9cf7154ddc5f604f1d60fb9d74839cea566 100644 (file)
@@ -302,7 +302,6 @@ nqo:
         way: ߛߌߟߊ
         relation: ߕߍߓߊ߯ߦߊ
     containing_relation:
-      entry_html: ߕߍߓߊ߯ߦߊ %{relation_name}
       entry_role_html: ߕߍߓߊ߯ߦߊ %{relation_role} %{relation_name} ߘߌ߫
     not_found:
       title: ߡߊ߫ ߛߐ߬ߘߐ߲߫
@@ -1525,7 +1524,7 @@ nqo:
       upload_trace: ߜߋ߬ߙߋ ߘߏ߫ ߟߊߦߟߍ߬
       all_traces: ߜߋ߬ߙߋ ߟߎ߬ ߓߍ߯
       my_traces: ߒ ߝߏ߲߬ߝߏ߲ ߠߎ߬
-      traces_from: ߜߍߘߐ߫ ߜߙߋ ߟߎ߬ ߞߊ߬ ߝߘߊ߫ %{user} ߟߊ߫
+      traces_from_html: ߜߍߘߐ߫ ߜߙߋ ߟߎ߬ ߞߊ߬ ߝߘߊ߫ %{user} ߟߊ߫
     destroy:
       scheduled_for_deletion: ߜߋ߬ߙߋ ߟߐ߯ߟߊߟߌ ߖߏ߰ߛߌ߬ ߞߊ߲ߡߊ߬
     offline_warning:
index e1f9da2e250a842d11aefb2dd5dff6bbaf6dfbd6..27c20f748ac0c4926270b5fd1a5df5abbe279d0d 100644 (file)
@@ -352,7 +352,6 @@ oc:
         way: Linha
         relation: Relacion
     containing_relation:
-      entry_html: Relacion %{relation_name}
       entry_role_html: Relacion %{relation_name} (per %{relation_role})
     not_found:
       title: S'es pas trobat
@@ -2069,7 +2068,7 @@ oc:
       upload_trace: Mandar una traça
       all_traces: Totei lei traças
       my_traces: Mei traças GPS
-      traces_from: Traças GPS publicas de %{user}
+      traces_from_html: Traças GPS publicas de %{user}
       remove_tag_filter: Elimina lo filtre d'etiquetas
     destroy:
       scheduled_for_deletion: Pista prevista per la supression
index 9df3f0be93a6535c32bca904d1ab42e7d7986536..0236ca7c968ce044beaf1810ef32b2dc78ac9193 100644 (file)
@@ -351,7 +351,6 @@ pa:
         way: ਰਾਹ
         relation: ਸਬੰਧ
     containing_relation:
-      entry_html: ਸਬੰਧ %{relation_name}
       entry_role_html: ਸਬੰਧ %{relation_name} (%{relation_role} ਵਜੋਂ)
     not_found:
       title: ਨਹੀਂ ਲੱਭਿਆ
@@ -1712,7 +1711,7 @@ pa:
       upload_trace: ਕੋਈ ਖੁਰਾ-ਖੋਜ ਚੜ੍ਹਾਉ
       all_traces: ਸਾਰੇ ਖੁਰਾ-ਖੋਜ
       my_traces: ਮੇਰੇ ਖੁਰਾ-ਖੋਜ
-      traces_from: '%{user} ਤੋਂ ਜਨਤਕ ਖੁਰਾ-ਖੋਜ'
+      traces_from_html: '%{user} ਤੋਂ ਜਨਤਕ ਖੁਰਾ-ਖੋਜ'
     georss:
       title: OpenStreetMap GPS ਖੁਰਾ-ਖੋਜ
     description:
index 6d47057867b4b5f772ec08ff58a8fbca1c955f86..9db8153886a391ac4ac7aa207f254f97336db892 100644 (file)
@@ -463,7 +463,6 @@ pl:
         way: Linia
         relation: Relacja
     containing_relation:
-      entry_html: Relacja %{relation_name}
       entry_role_html: Relacja %{relation_name} (jako %{relation_role})
     not_found:
       title: Nie znaleziono
@@ -2687,7 +2686,7 @@ pl:
       upload_trace: Wyślij ślad
       all_traces: Wszystkie ślady
       my_traces: Moje ślady GPS
-      traces_from: Publiczne ślady GPS użytkownika %{user}
+      traces_from_html: Publiczne ślady GPS użytkownika %{user}
       remove_tag_filter: Usuń filtr tagów
     destroy:
       scheduled_for_deletion: Ślad oczekuje na usunięcie
@@ -3112,9 +3111,9 @@ pl:
     navigation:
       all_blocks: Wszystkie blokady
       blocks_on_me: Blokady nałożone na mnie
-      blocks_on_user: Blokady na %{user}
+      blocks_on_user_html: Blokady na %{user}
       blocks_by_me: Blokady nałożone przeze mnie
-      blocks_by_user: Blokady nałożone przez %{user}
+      blocks_by_user_html: Blokady nałożone przez %{user}
       block: Blokada nr %{id}
       new_block: Nowy blok
   user_mutes:
@@ -3156,6 +3155,11 @@ pl:
       description: Opis
       created_at: Utworzono w dniu
       last_changed: Ostatnio zmieniono
+      apply: Zastosuj
+      all: Wszystkie
+      open: Otwarte
+      closed: Zamknięte
+      status: Status
     show:
       title: 'Uwaga: %{id}'
       description: 'Opis:'
@@ -3174,6 +3178,9 @@ pl:
       report: ją zgłosić
       anonymous_warning: Uwaga zawiera informacje od anonimowych użytkowników, które
         należy zweryfikować przed wprowadzeniem zmian na mapie.
+      discussion: Dyskusja
+      subscribe: Obserwuj
+      unsubscribe: Nie obserwuj
       hide: Ukryj
       resolve: Oznacz jako rozwiązaną
       reactivate: Ponownie aktywuj
index a36e67b0f47ddbfcfdf967362c00de0756fd9b64..7c325bb305305cb597aff604a4ef86d08b4a6c60 100644 (file)
@@ -314,7 +314,6 @@ pnb:
         way: راہ
         relation: سمبندھ
     containing_relation:
-      entry_html: سمبندھ «⁠%{relation_name}⁠»
       entry_role_html: سمبندھ «⁠%{relation_name}⁠» وچ «⁠%{relation_role}⁠⁠» رول
     not_found:
       title: کجھ نہیں لبھیا
@@ -1684,7 +1683,7 @@ pnb:
       upload_trace: کھرا چڑھایو
       all_traces: سارے کھرے کھوجاں
       my_traces: میرے کھرے
-      traces_from: «%{user}» دے عوام کھرے
+      traces_from_html: «%{user}» دے عوام کھرے
       remove_tag_filter: فلٹر ہٹاؤ
     georss:
       title: کھرے کھوجاں
index fe0ded915ff5b87d4ef54b5c6d89cd88f7fc1ae7..1a5f2f122393bbe7dd36e8f69115eb572b113545 100644 (file)
@@ -161,7 +161,7 @@ pt-PT:
         longitude: Longitude
         public: Público
         description: Descrição
-        gpx_file: Enviar ficheiro GPX
+        gpx_file: Escolher ficheiro GPX
         visibility: Visibilidade
         tagstring: Etiquetas
       message:
@@ -409,7 +409,6 @@ pt-PT:
         way: Linha
         relation: Relação
     containing_relation:
-      entry_html: Relação %{relation_name}
       entry_role_html: Relação %{relation_name} (como %{relation_role})
     not_found:
       title: Não encontrado
@@ -470,12 +469,23 @@ pt-PT:
     timeout:
       sorry: Lamentamos, mas o histórico do nó com o id %{id} demorou muito para ser
         obido.
+  ways:
+    timeout:
+      sorry: Os dados para a linha com o id %{id} levaram demasiado tempo a ser carregados.
   old_ways:
     not_found:
       sorry: 'Desculpe, não foi possível encontrar #%{id} versão %{version}.'
+    timeout:
+      sorry: O histórico da linha com o id %{id} levou demasiado tempo a ser carregado.
+  relations:
+    timeout:
+      sorry: Os dados para a relação com o id %{id} levaram demasiado tempo a ser
+        carregados.
   old_relations:
     not_found:
       sorry: 'Desculpe, a relação #%{id} versão %{version} não foi encontrada.'
+    timeout:
+      sorry: O histórico da relação com o id %{id} levou demasiado tempo a ser carregado.
   changeset_comments:
     feeds:
       comment:
@@ -1692,17 +1702,21 @@ pt-PT:
       befriend_them: Também podes adicioná-lo como amigo em %{befriendurl}.
       befriend_them_html: Também podes adicionar este utilizador como amigo em %{befriendurl}.
     gpx_description:
-      description_with_tags: 'Parece que o teu ficheiro GPX %{trace_name} com a descrição
-        %{trace_description} e as seguintes etiquetas: %{tags}'
-      description_with_tags_html: 'Parece que o teu ficheiro GPX %{trace_name} com
-        a descrição %{trace_description} e as etiquetas: %{tags}'
-      description_with_no_tags: Parece que o teu ficheiro GPX %{trace_name} com a
+      description_with_tags: 'Parece que o teu ficheiro %{trace_name} com a descrição
+        %{trace_description} e as etiquetas: %{tags}'
+      description_with_tags_html: 'Parece que o teu ficheiro %{trace_name} com a descrição
+        %{trace_description} e as etiquetas: %{tags}'
+      description_with_no_tags: Parece que o teu ficheiro %{trace_name} com a descrição
+        %{trace_description} e sem etiquetas
+      description_with_no_tags_html: Parece que o teu ficheiro %{trace_name} com a
         descrição %{trace_description} e sem etiquetas
-      description_with_no_tags_html: Parece que o teu ficheiro GPX %{trace_name} com
-        a descrição %{trace_description} e sem etiquetas
     gpx_failure:
       hi: Olá, %{to_user}.
-      failed_to_import: 'falhou na importação. Eis o erro:'
+      failed_to_import: 'não pôde ser importado como ficheiro de rota GPS. Verifica
+        se o teu ficheiro é um ficheiro GPX válido ou um arquivo com ficheiro(s) GPX
+        no formato suportado (.tar.gz, .tar.bz2, .tar, .zip, .gpx.gz, .gpx.bz2). Será
+        que existe algum problema de formato ou sintaxe com o ficheiro? Este é o erro
+        de importação:'
       more_info: Podes encontrar mais informações sobre falhas de importação de ficheiros
         GPX e como as evitar em %{url}.
       more_info_html: Podes encontrar mais informações sobre falhas de importação
@@ -1886,7 +1900,7 @@ pt-PT:
         one: '%{count} mensagem silenciada'
         other: Tens %{count} mensagens silenciadas
     reply:
-      wrong_user: Estás autenticado como `%{user}', mas a mensagem a que pretendes
+      wrong_user: Iniciaste sessão como `%{user}', mas a mensagem a que pretendes
         responder não foi enviada para esse utilizador. Por favor, entra na conta
         correta para poderes responder.
     show:
@@ -1895,7 +1909,7 @@ pt-PT:
       unread_button: Marcar como não lida
       destroy_button: Eliminar
       back: Voltar
-      wrong_user: Estás autenticado como `%{user}', mas a mensagem que pediste para
+      wrong_user: Iniciaste sessão como `%{user}', mas a mensagem que pediste para
         ler não foi enviada por ou para esse utilizador. Por favor, entra na conta
         correta para poderes ler a mensagem.
     sent_message_summary:
@@ -2436,6 +2450,9 @@ pt-PT:
           hospital: Hospital
           building: Edifício importante
           station: Estação ferroviária
+          railway_halt: Paragem ferroviária
+          subway_station: Estação de metro
+          tram_stop: Paragem de elétrico
           summit: Cume
           peak: Pico
           tunnel: Linha tracejada = túnel
@@ -2606,7 +2623,7 @@ pt-PT:
       upload_trace: Enviar rota GPS
       all_traces: Todas as Rotas
       my_traces: As Minhas Rotas
-      traces_from: Rotas Públicas de %{user}
+      traces_from_html: Rotas Públicas de %{user}
       remove_tag_filter: Eliminar filtro de etiqueta
     destroy:
       scheduled_for_deletion: Rota programada para eliminação
@@ -2794,6 +2811,7 @@ pt-PT:
       informal_translations: traduções informais
       continue: Continuar
       declined: https://wiki.openstreetmap.org/wiki/Pt:Contributor_Terms_Declined
+      cancel: Cancelar
       you need to accept or decline: Por favor, lê e, em seguida, aceita ou recusa
         os novos Termos do Contribuidor para continuar.
       legale_select: 'País de residência:'
@@ -2912,13 +2930,13 @@ pt-PT:
         ao teu ID nas tuas definições de utilizador.
   user_role:
     filter:
-      not_a_role: A expressão `%{role}' não é um cargo válido.
+      not_a_role: O texto `%{role}' não corresponde a um cargo válido.
       already_has_role: O utilizador já tem o cargo %{role}.
       doesnt_have_role: O utilizador não tem o cargo %{role}.
       not_revoke_admin_current_user: Não foi possível retirar os direitos de administrador
         do atual utilizador.
     grant:
-      are_you_sure: Tens a certeza de que pretendes conceder o cargo `%{role}' ao
+      are_you_sure: Tens a certeza de que pretendes atribuir o cargo `%{role}' ao
         utilizador `%{name}'?
     revoke:
       are_you_sure: Tens a certeza de que pretendes retirar o cargo `%{role}' ao utilizador
@@ -3022,9 +3040,9 @@ pt-PT:
     navigation:
       all_blocks: Todos os bloqueios
       blocks_on_me: Quem me bloqueou
-      blocks_on_user: Bloqueios a %{user}
+      blocks_on_user_html: Bloqueios a %{user}
       blocks_by_me: Os meus bloqueios
-      blocks_by_user: Bloqueios de %{user}
+      blocks_by_user_html: Bloqueios de %{user}
       block: 'Bloqueio #%{id}'
       new_block: Novo Bloqueio
   user_mutes:
@@ -3066,6 +3084,11 @@ pt-PT:
       description: Descrição
       created_at: Criada em
       last_changed: Última alteração
+      apply: Aplicar
+      all: Todas
+      open: Abrir
+      closed: Encerrada
+      status: Estado
     show:
       title: 'Nota: %{id}'
       description: Descrição
@@ -3084,6 +3107,9 @@ pt-PT:
       report: denunciar esta nota
       anonymous_warning: Esta nota inclui comentários de utilizadores anónimos que
         devem ser confirmados por fonte independente.
+      discussion: Discussão
+      subscribe: Subscrever
+      unsubscribe: Cancelar subscrição
       hide: Esconder
       resolve: Marcar como resolvida
       reactivate: Reabrir
@@ -3112,6 +3138,8 @@ pt-PT:
       add: Adicionar Nota
     notes_paging_nav:
       showing_page: Página %{page}
+      next: Próxima
+      previous: Anterior
   javascripts:
     close: Fechar
     share:
@@ -3307,6 +3335,7 @@ pt-PT:
       empty: Não existem supressões para mostrar.
       heading: Lista de supressões
       title: Lista de supressões
+      new: Nova redação
     new:
       heading: Introduza a informação da nova supressão
       title: A criar uma nova supressão
index 3e1789eebef5d53c13609b084198abb75fa859c0..5a819de188afb4b2284d14ff4fc8f0b118b14e5e 100644 (file)
@@ -430,7 +430,6 @@ pt:
         way: Linha
         relation: Relação
     containing_relation:
-      entry_html: Relação %{relation_name}
       entry_role_html: Relação %{relation_name} (como %{relation_role})
     not_found:
       title: Não encontrado
@@ -2656,7 +2655,7 @@ pt:
       upload_trace: Enviar uma trilha
       all_traces: Todos os traços
       my_traces: Minhas trilhas
-      traces_from: Traços públicos de %{user}
+      traces_from_html: Traços públicos de %{user}
       remove_tag_filter: Remova o filtro de marcações
     destroy:
       scheduled_for_deletion: Trilha marcada para ser apagada
@@ -3068,9 +3067,9 @@ pt:
     navigation:
       all_blocks: Todos os bloqueios
       blocks_on_me: Bloqueios sobre mim
-      blocks_on_user: Bloqueios em %{user}
+      blocks_on_user_html: Bloqueios em %{user}
       blocks_by_me: Bloqueios por mim
-      blocks_by_user: Bloqueios por %{user}
+      blocks_by_user_html: Bloqueios por %{user}
       block: 'Bloqueio #%{id}'
       new_block: Novo bloqueio
   user_mutes:
index 9350e4ee5a4151e5b9c1fc7d0c32ace2c61f6174..4601eb5e44df63d00630a9db5ee7f092aad7c58c 100644 (file)
@@ -399,7 +399,6 @@ ro:
         way: Cale
         relation: Relație
     containing_relation:
-      entry_html: Relația %{relation_name}
       entry_role_html: Relația %{relation_name} (ca %{relation_role})
     not_found:
       title: Nu a fost găsit
@@ -2574,7 +2573,7 @@ ro:
       upload_trace: Încărcați urma
       all_traces: Toate track-urile
       my_traces: Înregistrările mele GPS
-      traces_from: Traseele GPS publice de la %{user}
+      traces_from_html: Traseele GPS publice de la %{user}
       remove_tag_filter: Eliminați filtrul de etichete
     destroy:
       scheduled_for_deletion: Traseul este programat pentru ștergere
index 5bbdf567b26cb523fda9c4a96f7e4c09a42918fa..86b9b6eb29fcdfe5a5a138de85c5af9518f89b5c 100644 (file)
@@ -12,6 +12,7 @@
 # Author: Alexey zakharenkov
 # Author: Amire80
 # Author: Andrewsh
+# Author: Anton Khorev
 # Author: Ashed
 # Author: Banonotit
 # Author: BushmanK
@@ -513,8 +514,7 @@ ru:
         way: Линия
         relation: Отношение
     containing_relation:
-      entry_html: Отношение %{relation_name}
-      entry_role_html: Отношение %{relation_name} (в роли %{relation_role})
+      entry_role_html: '%{relation_name} (в роли %{relation_role})'
     not_found:
       title: Не найдено
       sorry: 'К сожалению, %{type} #%{id} не найден.'
@@ -2102,6 +2102,9 @@ ru:
       traces:
         older: Более старые треки
         newer: Более новые треки
+      user_blocks:
+        older: Более старые блокировки
+        newer: Более новые блокировки
       users:
         older: Участники с большим стажем
         newer: Новые участники
@@ -2626,7 +2629,7 @@ ru:
       upload_trace: Загрузить треки
       all_traces: Все треки
       my_traces: Мои треки
-      traces_from: Общедоступные трассировки от %{user}
+      traces_from_html: Общедоступные трассировки от %{user}
       remove_tag_filter: Удалить фильтр тегов
     destroy:
       scheduled_for_deletion: Запланировано к удалению
@@ -3025,6 +3028,10 @@ ru:
       description: Описание
       created_at: Создана
       last_changed: Изменена
+      apply: Применить
+      all: Все
+      open: Незакрытые
+      closed: Закрытые
     show:
       title: 'Заметка: %{id}'
       description: Описание
@@ -3068,6 +3075,8 @@ ru:
       add: Добавить заметку
     notes_paging_nav:
       showing_page: Страница %{page}
+      next: Следующая
+      previous: Предыдущая
   javascripts:
     close: Закрыть
     share:
index 60bc6b0f63f12340a0496c9c7efa1aa3618d82f6..8a989acaceadadab5c19612d71c22b649cb56c41 100644 (file)
@@ -163,7 +163,6 @@ sat:
         way: ᱦᱚᱨ
         relation: ᱥᱟᱹᱜᱟᱹᱭ
     containing_relation:
-      entry_html: ᱥᱟᱹᱜᱟᱹᱭ %{relation_name}
       entry_role_html: ᱥᱟᱹᱜᱟᱹᱭ %{relation_name} (as %{relation_role})
     not_found:
       title: ᱵᱟᱝ ᱧᱟᱢ ᱞᱮᱱᱟ
index effa017924c693e6c05e38ffd90f1f799441f3e7..2de82f03a53e44cfac92d146499f41f60d22933d 100644 (file)
@@ -365,7 +365,6 @@ sc:
         way: Lìnia
         relation: Relata
     containing_relation:
-      entry_html: Relata %{relation_name}
       entry_role_html: Relata %{relation_name} (comente %{relation_role})
     not_found:
       title: No agatadu
@@ -2486,7 +2485,7 @@ sc:
       upload_trace: Càrriga una rasta
       all_traces: Totu sas rastas
       my_traces: Sas rastas meas
-      traces_from: Rastas pùblicas de %{user}
+      traces_from_html: Rastas pùblicas de %{user}
       remove_tag_filter: Boga su filtru de etichetas
     destroy:
       scheduled_for_deletion: Rasta programmada pro s'iscantzelladura
index a39c4316f7403cb3575b943ecf3ff43d16613645..850d9d5a2dbe7c4ab486f2bcb16ae039e2dc3318 100644 (file)
@@ -291,7 +291,6 @@ scn:
         way: Caminu
         relation: Rilazzioni
     containing_relation:
-      entry_html: Rilazzioni %{relation_name}
       entry_role_html: Rilazzioni %{relation_name} (comu %{relation_role})
     not_found:
       title: Senza truvatu
index 15509a1c523cd3dbecce268a0a3cb4a30f087ca0..a12a62cfcc8a5eebdb1df8b2a6aaf8a3b7f9716e 100644 (file)
@@ -134,7 +134,6 @@ sco:
         way: Wey
         relation: Relation
     containing_relation:
-      entry_html: Relation %{relation_name}
       entry_role_html: Relation %{relation_name} (as %{relation_role})
     not_found:
       sorry: 'Sorry, %{type} #%{id} could nae be foond.'
index 3972e6df9b08298b78f67e17b722835e69e8312a..5a4472b60efa1184fce5dce831bda54fdda04dd0 100644 (file)
@@ -415,7 +415,6 @@ sk:
         way: Cesta
         relation: Relácia
     containing_relation:
-      entry_html: Relácia %{relation_name}
       entry_role_html: Relácia %{relation_name} (ako %{relation_role})
     not_found:
       title: Nenájdené
@@ -2473,7 +2472,7 @@ sk:
       upload_trace: Nahrať stopu
       all_traces: Všetky stopy
       my_traces: Moje stopy
-      traces_from: Verejné stopy od %{user}
+      traces_from_html: Verejné stopy od %{user}
       remove_tag_filter: Odstrániť filter značiek
     destroy:
       scheduled_for_deletion: Stopa plánovaná na vymazanie
@@ -2861,12 +2860,19 @@ sk:
       title: Poznámky vytvorené alebo komentované používateľom %{user}
       heading: Poznámky používateľa %{user}
       subheading_html: Poznámky %{submitted} alebo %{commented}používateľom %{user}
+      subheading_submitted: vytvorené
+      subheading_commented: komentované
       no_notes: Žiadne poznámky
       id: ID
       creator: Autor
       description: Popis
       created_at: Vytvorené
       last_changed: Posledná zmena
+      apply: Použiť
+      all: Všetky
+      open: Otvorené
+      closed: Uzavreté
+      status: Stav
     show:
       title: 'Poznámka: %{id}'
       description: Popis
@@ -2885,11 +2891,15 @@ sk:
       report: nahlásiť túto poznámku
       anonymous_warning: Táto poznámka zahŕňa komentáre anonymných používateľov, ktoré
         by sa mali nezávisle preveriť.
+      discussion: Diskusia
+      subscribe: Sledovať
+      unsubscribe: Zrušiť sledovanie
       hide: Skryť
       resolve: Vyriešiť
       reactivate: Opätovne aktivovať
       comment_and_resolve: Okomentovať a vyriešiť
       comment: Okomentovať
+      log_in_to_comment: Ak chcete komentovať túto poznámku, prihláste sa
       report_link_html: Ak táto poznámka obsahuje citlivé údaje, ktoré by mali byť
         odstránené, môžete %{link}.
       other_problems_resolve: Pre všetky ostatné problémy s poznámkou, prosím vyriešte
@@ -2901,6 +2911,10 @@ sk:
       intro: Zahliadli ste chybu alebo že niečo chýba? Dajte to vedieť ostatným používateľom,
         aby sme to mohli opraviť. Umiestnite značku na správnu pozíciu a zapíšte poznámku
         na vysvetlenie problému.
+      anonymous_warning_html: Nie ste prihlásený. Prosím, %{log_in} alebo %{sign_up},
+        ak chcete dostávať aktualizácie vašej poznámky.
+      anonymous_warning_log_in: prihláste sa
+      anonymous_warning_sign_up: zaregistrujte sa
       advice: Vaša poznámka je verejná a môže slúžiť na úpravu mapy, preto nevkladajte
         žiadne osobné údaje ani informácie z máp alebo databáz chránených autorskými
         právami.
index 1a17de400f9a8e44ada4c9f2a67422a685994fd4..5a31955f6db5caa313e6775ba8bf2e2ca4c71138 100644 (file)
@@ -412,7 +412,6 @@ sl:
         way: Pot
         relation: Relacija
     containing_relation:
-      entry_html: Relacija %{relation_name}
       entry_role_html: Relacija %{relation_name} (kot %{relation_role})
     not_found:
       title: Ni najdeno
@@ -2580,7 +2579,7 @@ sl:
       upload_trace: Naloži sled GPS
       all_traces: Vse sledi
       my_traces: Moje sledi
-      traces_from: Javne sledi uporabnika %{user}
+      traces_from_html: Javne sledi uporabnika %{user}
       remove_tag_filter: Odstrani filter oznak
     destroy:
       scheduled_for_deletion: Sled bo izbrisana
index 1d18749667ca21513420c4501152c3b28ce9f749..37686e78680d4fc77715907e6d609b119a546faa 100644 (file)
@@ -186,7 +186,6 @@ sq:
         way: Rruga
         relation: Lidhja
     containing_relation:
-      entry_html: Lidhja %{relation_name}
       entry_role_html: Lidhja %{relation_name} (sikur %{relation_role})
     not_found:
       sorry: 'Na vjen keq, %{type} #%{id} nuk mund të gjendet.'
index 0e72e3ddabcc876f2562710927fda942c8fdf381..5b2fbfd147e97c0339c936bbd15cef1da16d1efc 100644 (file)
@@ -157,7 +157,6 @@ sr-Latn:
         way: Putanja
         relation: Odnos
     containing_relation:
-      entry_html: Odnos %{relation_name}
       entry_role_html: Odnos %{relation_name} (kao %{relation_role})
     not_found:
       sorry: Žao nam je, ali %{type} s IB %{id} nije pronađen.
index 2a6d11089e9c630c3daf5be1a0c70f0184dbb5e1..686541447ddfa0780442a0cefb1f11079f33f04e 100644 (file)
@@ -336,8 +336,7 @@ sr:
         way: Линија
         relation: Однос
     containing_relation:
-      entry_html: Однос %{relation_name}
-      entry_role_html: Однос %{relation_name} (као %{relation_role})
+      entry_role_html: '%{relation_name} (као %{relation_role})'
     not_found:
       title: Није нађено
       sorry: 'Нажалост, %{type} #%{id} није пронађен.'
index 21f21f5cc37016dd9a4de5395cb29e579533c304..5f124b2936249a34017bcd72651acd50c85dfd2c 100644 (file)
@@ -412,7 +412,6 @@ sv:
         way: Sträcka
         relation: Relation
     containing_relation:
-      entry_html: Relation %{relation_name}
       entry_role_html: Relation %{relation_name} (som %{relation_role})
     not_found:
       title: Hittades inte
@@ -2621,7 +2620,7 @@ sv:
       upload_trace: Ladda upp GPS-spår
       all_traces: Alla spår
       my_traces: Mina spår
-      traces_from: Offentliga GPS-spår från %{user}
+      traces_from_html: Offentliga GPS-spår från %{user}
       remove_tag_filter: Ta bort taggfilter
     destroy:
       scheduled_for_deletion: GPS-spår schemalagt för radering
@@ -3036,9 +3035,9 @@ sv:
     navigation:
       all_blocks: Alla blockeringar
       blocks_on_me: Blockeringar på mig
-      blocks_on_user: Blockeringar på %{user}
+      blocks_on_user_html: Blockeringar på %{user}
       blocks_by_me: Blockeringar av mig
-      blocks_by_user: Blockeringar av %{user}
+      blocks_by_user_html: Blockeringar av %{user}
       block: 'Blockering #%{id}'
       new_block: Ny blockering
   user_mutes:
index faeb0d1b2d0df270371aa8351969c2fcfbf1d7c6..41a46386931c460f6c32ae74900f901cdfbb6d99 100644 (file)
@@ -223,7 +223,6 @@ ta:
         way: வழி
         relation: தொடர்பு
     containing_relation:
-      entry_html: தொடர்பு %{relation_name}
       entry_role_html: தொடர்பு %{relation_name} (%{relation_role} ஆக)
     not_found:
       title: காணப்படவில்லை
index b3e90c3d253a9c54e88f4d7acf4a4442a425f1a9..49d0fd69a6fb144364507645adb04f763c7c6c74 100644 (file)
@@ -339,7 +339,6 @@ te:
         way: దారి
         relation: సంబంధం
     containing_relation:
-      entry_html: '%{relation_name} సంబంధం'
       entry_role_html: '%{relation_name} సంబంధం (%{relation_role} లాగా)'
     not_found:
       title: కనబడలేదు
@@ -2034,7 +2033,7 @@ te:
       upload_trace: ఓ ట్రేసును ఎక్కించండి
       all_traces: ట్రేసులన్నీ
       my_traces: నా ట్రేసులు
-      traces_from: '%{user} గారి బహిరంగ ట్రేసులు'
+      traces_from_html: '%{user} గారి బహిరంగ ట్రేసులు'
       remove_tag_filter: ట్యాగు వడపోతను తీసెయ్యి
     destroy:
       scheduled_for_deletion: ఈ ట్రేసు తొలగింపు కోసం వేచి ఉంది
index 62dff464fc8ce8414d54d8775510a045db8b86fe..19e3c8483c7b83e0a1ef05dde208a2e0488f232a 100644 (file)
@@ -343,7 +343,6 @@ th:
         way: เส้นทาง
         relation: ความสัมพันธ์
     containing_relation:
-      entry_html: ความสัมพันธ์%{relation_name}
       entry_role_html: ความสัมพันธ์%{relation_name} (ในฐานะ%{relation_role})
     not_found:
       title: ไม่พบข้อมูล
index 81d7a3899dcf2985a1596c40372299a7d3816faa..2df1597c6b762e78f6d3bfd91c7125d44afaaaa5 100644 (file)
@@ -308,7 +308,6 @@ tl:
         way: Daan
         relation: Kaugnayan
     containing_relation:
-      entry_html: Kaugnayan %{relation_name}
       entry_role_html: Kaugnayan %{relation_name} (bilang %{relation_role})
     not_found:
       title: Hindi Matagpuan
@@ -1722,7 +1721,7 @@ tl:
       tagged_with: tinatakan ng %{tags}
       upload_trace: Magkargang paitaas ng isang bakas
       all_traces: Lahat ng mga Bakas
-      traces_from: Pangmadlang Pagbakas mula kay %{user}
+      traces_from_html: Pangmadlang Pagbakas mula kay %{user}
     destroy:
       scheduled_for_deletion: Itinakda ang bakas para sa pagtatanggal
     offline_warning:
index 2640125c2f4af376cfdd5314f21850c8f387aa50..bff10101ec8a1944a760424e3f90c9b18aa98898 100644 (file)
@@ -414,7 +414,6 @@ tr:
         way: Yol
         relation: İlişki
     containing_relation:
-      entry_html: İlişki %{relation_name}
       entry_role_html: İlişki %{relation_name} (%{relation_role} olarak)
     not_found:
       title: Bulunamadı
@@ -2619,7 +2618,7 @@ tr:
       upload_trace: GPS izi gönder
       all_traces: Tüm İzler
       my_traces: GPS İzlerim
-      traces_from: '%{user} kullanıcısına ait herkese açık izler'
+      traces_from_html: '%{user} kullanıcısına ait herkese açık izler'
       remove_tag_filter: Etiket Filtresini Kaldır
     destroy:
       scheduled_for_deletion: İz, silme işlemi için ayarlandı
@@ -3032,9 +3031,9 @@ tr:
     navigation:
       all_blocks: Tüm Engellemeler
       blocks_on_me: Engellendiklerim
-      blocks_on_user: '%{user} kişisinin engelleri'
+      blocks_on_user_html: '%{user} kişisinin engelleri'
       blocks_by_me: Engellediklerim
-      blocks_by_user: '%{user} tarafından engellenenler'
+      blocks_by_user_html: '%{user} tarafından engellenenler'
       block: 'Engel #%{id}'
       new_block: Yeni Engel
   user_mutes:
index 5fd4c4f9f9cd767b51f1ea0c57d7997a2630cf68..efdbb1a9aec25a3095374a5966115930b6b8200d 100644 (file)
@@ -350,7 +350,6 @@ tt:
         way: Юл
         relation: Мөнәсәбәт
     containing_relation:
-      entry_html: Мөнәсәбәт %{relation_name}
       entry_role_html: Мөнәсәбәт %{relation_name} (%{relation_role} сыйфатында)
     not_found:
       title: Табылмады
index 8757283d9bf7433d68e77814732bc26d32a9564e..12fbcd1996731ce53584e8e6df68e9ab6704658a 100644 (file)
@@ -449,7 +449,6 @@ uk:
         way: Лінія
         relation: Зв’язок
     containing_relation:
-      entry_html: Зв’язок %{relation_name}
       entry_role_html: Зв’язок %{relation_name} (як %{relation_role})
     not_found:
       title: Не знайдено
@@ -2688,7 +2687,7 @@ uk:
       upload_trace: Надіслати GPS-трек на сервер
       all_traces: Всі GPS-треки
       my_traces: Мої GPS-треки
-      traces_from: Загальнодоступні GPS треки %{user}
+      traces_from_html: Загальнодоступні GPS треки %{user}
       remove_tag_filter: Прибрати фільтри
     destroy:
       scheduled_for_deletion: Заплановано для вилучення
@@ -3122,9 +3121,9 @@ uk:
     navigation:
       all_blocks: Всі блокування
       blocks_on_me: Мої блокування
-      blocks_on_user: Блокування для %{user}
+      blocks_on_user_html: Блокування для %{user}
       blocks_by_me: Заблокований(а) мною
-      blocks_by_user: Блокування, що їх наклав %{user}
+      blocks_by_user_html: Блокування, що їх наклав %{user}
       block: Блокування №%{id}
       new_block: Нове блокування
   user_mutes:
@@ -3166,6 +3165,11 @@ uk:
       description: Опис
       created_at: Створено
       last_changed: Остання зміна
+      apply: Застосувати
+      all: Всі
+      open: Відкриті
+      closed: Закриті
+      status: Стан
     show:
       title: 'Нотатка: %{id}'
       description: Опис
@@ -3184,6 +3188,9 @@ uk:
       report: поскаржитися на цю нотатку
       anonymous_warning: Ця нотатка містить коментарі від анонімних учасників. Потрібна
         додаткова перевірка відомостей.
+      discussion: Обговорення
+      subscribe: Підписатися
+      unsubscribe: Відписатись
       hide: Приховати
       resolve: Опрацьовано
       reactivate: Поновити
index 1aabe21952a075e3b64b279eaf94fdb7170df8f2..3f31c152aeb393341d09f4eaa46f54492e93b12a 100644 (file)
@@ -373,7 +373,6 @@ vi:
         way: Lối
         relation: Quan hệ
     containing_relation:
-      entry_html: Quan hệ %{relation_name}
       entry_role_html: 'Quan hệ %{relation_name} (vai trò: %{relation_role})'
     not_found:
       title: Không Tìm thấy
@@ -2390,7 +2389,7 @@ vi:
       upload_trace: Tải lên tuyến đường
       all_traces: Tất cả các Tuyến đường
       my_traces: Tuyến đường của Tôi
-      traces_from: Tuyến đường Công khai của %{user}
+      traces_from_html: Tuyến đường Công khai của %{user}
       remove_tag_filter: Loại bỏ Bộ lọc Thẻ
     destroy:
       scheduled_for_deletion: Tuyến đường chờ được xóa
@@ -2784,9 +2783,9 @@ vi:
     navigation:
       all_blocks: Tất cả các Tác vụ Cấm
       blocks_on_me: Tác vụ Cấm Tôi
-      blocks_on_user: Tác vụ Cấm %{user}
+      blocks_on_user_html: Tác vụ Cấm %{user}
       blocks_by_me: Tác vụ Cấm bởi Tôi
-      blocks_by_user: Tác vụ Cấm bởi %{user}
+      blocks_by_user_html: Tác vụ Cấm bởi %{user}
       block: Tác vụ cấm số %{id}
   user_mutes:
     index:
index 772cd9d0d086a724559e065ea7108229b40ff11d..3c1882f2dc161272abf77b41c890cc939057e88e 100644 (file)
@@ -309,7 +309,6 @@ xmf:
         way: რზა
         relation: ურთიართობა
     containing_relation:
-      entry_html: ურთიართობა %{relation_name}
       entry_role_html: ურთიართობა %{relation_name} (მუჭოთ %{relation_role})
     not_found:
       title: ვეგორჷ
index 2a6a9a02650660a241229f1c5d9ab6e2f829543f..d764999195a7fe613f90fd87a9a6d4598f916adf 100644 (file)
@@ -423,7 +423,6 @@ zh-CN:
         way: 路径
         relation: 关系
     containing_relation:
-      entry_html: 关系 %{relation_name}
       entry_role_html: 关系 %{relation_name} (作为 %{relation_role})
     not_found:
       title: 未找到
@@ -2429,7 +2428,7 @@ zh-CN:
       upload_trace: 上传轨迹
       all_traces: 所有轨迹
       my_traces: 我的轨迹
-      traces_from: 来自%{user}的公开轨迹
+      traces_from_html: 来自%{user}的公开轨迹
       remove_tag_filter: 移除标签过滤器
     destroy:
       scheduled_for_deletion: 计划删除的轨迹
@@ -2797,9 +2796,9 @@ zh-CN:
     navigation:
       all_blocks: 所有封禁
       blocks_on_me: 对我的封禁
-      blocks_on_user: 对%{user}的封禁
+      blocks_on_user_html: 对%{user}的封禁
       blocks_by_me: 由我做出的封禁
-      blocks_by_user: 由%{user}做出的封禁
+      blocks_by_user_html: 由%{user}做出的封禁
       block: 封禁#%{id}
       new_block: 新封禁
   user_mutes:
index 193fd8b15947eac89cedb340b7d7631a5ef4d6ee..7552d4882d67d459d0d026f6770cca177144f7ee 100644 (file)
@@ -378,7 +378,6 @@ zh-TW:
         way: 路徑
         relation: 關聯
     containing_relation:
-      entry_html: 關聯 %{relation_name}
       entry_role_html: 關聯 %{relation_name} (作為 %{relation_role})
     not_found:
       title: 找不到
@@ -2399,7 +2398,7 @@ zh-TW:
       upload_trace: 上傳軌跡
       all_traces: 所有軌跡
       my_traces: 我的軌跡
-      traces_from: 來自 %{user} 的公開軌跡
+      traces_from_html: 來自 %{user} 的公開軌跡
       remove_tag_filter: 移除標籤篩選
     destroy:
       scheduled_for_deletion: 軌跡已被排程刪除
@@ -2769,9 +2768,9 @@ zh-TW:
     navigation:
       all_blocks: 所有封鎖
       blocks_on_me: 對我的封鎖
-      blocks_on_user: 對%{user}的封鎖
+      blocks_on_user_html: 對%{user}的封鎖
       blocks_by_me: 由我做出的封鎖
-      blocks_by_user: 由%{user}做出的封鎖
+      blocks_by_user_html: 由%{user}做出的封鎖
       block: 封鎖#%{id}
       new_block: 新封鎖
   user_mutes:
index f65042dd7d9ab1c9bf83e22b5c2f1c71c5503ff9..871fef1bf27f667279d32c4a22be320abd2d3a4a 100644 (file)
@@ -86,16 +86,17 @@ OpenStreetMap::Application.routes.draw do
     end
 
     post "/user/messages/:id" => "messages#update", :as => :api_message_update
-
-    post "gpx/create" => "traces#create"
-    get "gpx/:id" => "traces#show", :as => :api_trace, :id => /\d+/
-    put "gpx/:id" => "traces#update", :id => /\d+/
-    delete "gpx/:id" => "traces#destroy", :id => /\d+/
-    get "gpx/:id/details" => "traces#show", :id => /\d+/
-    get "gpx/:id/data" => "traces#data", :as => :api_trace_data
   end
 
   namespace :api, :path => "api/0.6" do
+    resources :traces, :path => "gpx", :only => [:create, :show, :update, :destroy], :id => /\d+/ do
+      scope :module => :traces do
+        resource :data, :only => :show
+      end
+    end
+    post "gpx/create" => "traces#create", :id => /\d+/, :as => :trace_create
+    get "gpx/:id/details" => "traces#show", :id => /\d+/, :as => :trace_details
+
     # Map notes API
     resources :notes, :except => [:new, :edit, :update], :id => /\d+/, :controller => "notes" do
       collection do
diff --git a/test/controllers/api/traces/data_controller_test.rb b/test/controllers/api/traces/data_controller_test.rb
new file mode 100644 (file)
index 0000000..b4aa399
--- /dev/null
@@ -0,0 +1,114 @@
+require "test_helper"
+
+module Api
+  module Traces
+    class DataControllerTest < ActionDispatch::IntegrationTest
+      ##
+      # test all routes which lead to this controller
+      def test_routes
+        assert_routing(
+          { :path => "/api/0.6/gpx/1/data", :method => :get },
+          { :controller => "api/traces/data", :action => "show", :trace_id => "1" }
+        )
+        assert_routing(
+          { :path => "/api/0.6/gpx/1/data.xml", :method => :get },
+          { :controller => "api/traces/data", :action => "show", :trace_id => "1", :format => "xml" }
+        )
+      end
+
+      # Test downloading a trace through the api
+      def test_show
+        public_trace_file = create(:trace, :visibility => "public", :fixture => "a")
+
+        # First with no auth
+        get api_trace_data_path(public_trace_file)
+        assert_response :unauthorized
+
+        # Now with some other user, which should work since the trace is public
+        auth_header = bearer_authorization_header
+        get api_trace_data_path(public_trace_file), :headers => auth_header
+        follow_redirect!
+        follow_redirect!
+        check_trace_data public_trace_file, "848caa72f2f456d1bd6a0fdf228aa1b9"
+
+        # And finally we should be able to do it with the owner of the trace
+        auth_header = bearer_authorization_header public_trace_file.user
+        get api_trace_data_path(public_trace_file), :headers => auth_header
+        follow_redirect!
+        follow_redirect!
+        check_trace_data public_trace_file, "848caa72f2f456d1bd6a0fdf228aa1b9"
+      end
+
+      # Test downloading a compressed trace through the api
+      def test_data_compressed
+        identifiable_trace_file = create(:trace, :visibility => "identifiable", :fixture => "d")
+
+        # Authenticate as the owner of the trace we will be using
+        auth_header = bearer_authorization_header identifiable_trace_file.user
+
+        # First get the data as is
+        get api_trace_data_path(identifiable_trace_file), :headers => auth_header
+        follow_redirect!
+        follow_redirect!
+        check_trace_data identifiable_trace_file, "c6422a3d8750faae49ed70e7e8a51b93", "application/gzip", "gpx.gz"
+
+        # Now ask explicitly for XML format
+        get api_trace_data_path(identifiable_trace_file, :format => "xml"), :headers => auth_header
+        check_trace_data identifiable_trace_file, "abd6675fdf3024a84fc0a1deac147c0d", "application/xml", "xml"
+
+        # Now ask explicitly for GPX format
+        get api_trace_data_path(identifiable_trace_file, :format => "gpx"), :headers => auth_header
+        check_trace_data identifiable_trace_file, "abd6675fdf3024a84fc0a1deac147c0d"
+      end
+
+      # Check an anonymous trace can't be downloaded by another user through the api
+      def test_data_anon
+        anon_trace_file = create(:trace, :visibility => "private", :fixture => "b")
+
+        # First with no auth
+        get api_trace_data_path(anon_trace_file)
+        assert_response :unauthorized
+
+        # Now with some other user, which shouldn't work since the trace is anon
+        auth_header = bearer_authorization_header
+        get api_trace_data_path(anon_trace_file), :headers => auth_header
+        assert_response :forbidden
+
+        # And finally we should be able to do it with the owner of the trace
+        auth_header = bearer_authorization_header anon_trace_file.user
+        get api_trace_data_path(anon_trace_file), :headers => auth_header
+        follow_redirect!
+        follow_redirect!
+        check_trace_data anon_trace_file, "db4cb5ed2d7d2b627b3b504296c4f701"
+      end
+
+      # Test downloading a trace that doesn't exist through the api
+      def test_data_not_found
+        deleted_trace_file = create(:trace, :deleted)
+
+        # Try first with no auth, as it should require it
+        get api_trace_data_path(0)
+        assert_response :unauthorized
+
+        # Login, and try again
+        auth_header = bearer_authorization_header
+        get api_trace_data_path(0), :headers => auth_header
+        assert_response :not_found
+
+        # Now try a trace which did exist but has been deleted
+        auth_header = bearer_authorization_header deleted_trace_file.user
+        get api_trace_data_path(deleted_trace_file), :headers => auth_header
+        assert_response :not_found
+      end
+
+      private
+
+      def check_trace_data(trace, digest, content_type = "application/gpx+xml", extension = "gpx")
+        assert_response :success
+        assert_equal digest, Digest::MD5.hexdigest(response.body)
+        assert_equal content_type, response.media_type
+        assert_equal "attachment; filename=\"#{trace.id}.#{extension}\"; filename*=UTF-8''#{trace.id}.#{extension}", @response.header["Content-Disposition"]
+      end
+    end
+  end
+end
index 6ce35bc7cb6089cb24c8dbe6860e582c999a009f..367bb6d21e1fe0b057d5f7de06abfe7f46e8f9c7 100644 (file)
@@ -6,9 +6,13 @@ module Api
     # test all routes which lead to this controller
     def test_routes
       assert_routing(
-        { :path => "/api/0.6/gpx/create", :method => :post },
+        { :path => "/api/0.6/gpx", :method => :post },
         { :controller => "api/traces", :action => "create" }
       )
+      assert_recognizes(
+        { :controller => "api/traces", :action => "create" },
+        { :path => "/api/0.6/gpx/create", :method => :post }
+      )
       assert_routing(
         { :path => "/api/0.6/gpx/1", :method => :get },
         { :controller => "api/traces", :action => "show", :id => "1" }
@@ -25,14 +29,6 @@ module Api
         { :controller => "api/traces", :action => "show", :id => "1" },
         { :path => "/api/0.6/gpx/1/details", :method => :get }
       )
-      assert_routing(
-        { :path => "/api/0.6/gpx/1/data", :method => :get },
-        { :controller => "api/traces", :action => "data", :id => "1" }
-      )
-      assert_routing(
-        { :path => "/api/0.6/gpx/1/data.xml", :method => :get },
-        { :controller => "api/traces", :action => "data", :id => "1", :format => "xml" }
-      )
     end
 
     # Check getting a specific trace through the api
@@ -93,91 +89,6 @@ module Api
       assert_response :not_found
     end
 
-    # Test downloading a trace through the api
-    def test_data
-      public_trace_file = create(:trace, :visibility => "public", :fixture => "a")
-
-      # First with no auth
-      get api_trace_data_path(public_trace_file)
-      assert_response :unauthorized
-
-      # Now with some other user, which should work since the trace is public
-      auth_header = bearer_authorization_header
-      get api_trace_data_path(public_trace_file), :headers => auth_header
-      follow_redirect!
-      follow_redirect!
-      check_trace_data public_trace_file, "848caa72f2f456d1bd6a0fdf228aa1b9"
-
-      # And finally we should be able to do it with the owner of the trace
-      auth_header = bearer_authorization_header public_trace_file.user
-      get api_trace_data_path(public_trace_file), :headers => auth_header
-      follow_redirect!
-      follow_redirect!
-      check_trace_data public_trace_file, "848caa72f2f456d1bd6a0fdf228aa1b9"
-    end
-
-    # Test downloading a compressed trace through the api
-    def test_data_compressed
-      identifiable_trace_file = create(:trace, :visibility => "identifiable", :fixture => "d")
-
-      # Authenticate as the owner of the trace we will be using
-      auth_header = bearer_authorization_header identifiable_trace_file.user
-
-      # First get the data as is
-      get api_trace_data_path(identifiable_trace_file), :headers => auth_header
-      follow_redirect!
-      follow_redirect!
-      check_trace_data identifiable_trace_file, "c6422a3d8750faae49ed70e7e8a51b93", "application/gzip", "gpx.gz"
-
-      # Now ask explicitly for XML format
-      get api_trace_data_path(identifiable_trace_file, :format => "xml"), :headers => auth_header
-      check_trace_data identifiable_trace_file, "abd6675fdf3024a84fc0a1deac147c0d", "application/xml", "xml"
-
-      # Now ask explicitly for GPX format
-      get api_trace_data_path(identifiable_trace_file, :format => "gpx"), :headers => auth_header
-      check_trace_data identifiable_trace_file, "abd6675fdf3024a84fc0a1deac147c0d"
-    end
-
-    # Check an anonymous trace can't be downloaded by another user through the api
-    def test_data_anon
-      anon_trace_file = create(:trace, :visibility => "private", :fixture => "b")
-
-      # First with no auth
-      get api_trace_data_path(anon_trace_file)
-      assert_response :unauthorized
-
-      # Now with some other user, which shouldn't work since the trace is anon
-      auth_header = bearer_authorization_header
-      get api_trace_data_path(anon_trace_file), :headers => auth_header
-      assert_response :forbidden
-
-      # And finally we should be able to do it with the owner of the trace
-      auth_header = bearer_authorization_header anon_trace_file.user
-      get api_trace_data_path(anon_trace_file), :headers => auth_header
-      follow_redirect!
-      follow_redirect!
-      check_trace_data anon_trace_file, "db4cb5ed2d7d2b627b3b504296c4f701"
-    end
-
-    # Test downloading a trace that doesn't exist through the api
-    def test_data_not_found
-      deleted_trace_file = create(:trace, :deleted)
-
-      # Try first with no auth, as it should require it
-      get api_trace_data_path(:id => 0)
-      assert_response :unauthorized
-
-      # Login, and try again
-      auth_header = bearer_authorization_header
-      get api_trace_data_path(:id => 0), :headers => auth_header
-      assert_response :not_found
-
-      # Now try a trace which did exist but has been deleted
-      auth_header = bearer_authorization_header deleted_trace_file.user
-      get api_trace_data_path(deleted_trace_file), :headers => auth_header
-      assert_response :not_found
-    end
-
     # Test creating a trace through the api
     def test_create
       # Get file to use
@@ -186,7 +97,7 @@ module Api
       user = create(:user)
 
       # First with no auth
-      post gpx_create_path, :params => { :file => file, :description => "New Trace", :tags => "new,trace", :visibility => "trackable" }
+      post api_traces_path, :params => { :file => file, :description => "New Trace", :tags => "new,trace", :visibility => "trackable" }
       assert_response :unauthorized
 
       # Rewind the file
@@ -200,7 +111,7 @@ module Api
 
       # Create trace and import tracepoints in background job
       perform_enqueued_jobs do
-        post gpx_create_path, :params => { :file => file, :description => "New Trace", :tags => "new,trace", :visibility => "trackable" }, :headers => auth_header
+        post api_traces_path, :params => { :file => file, :description => "New Trace", :tags => "new,trace", :visibility => "trackable" }, :headers => auth_header
       end
 
       assert_response :success
@@ -232,7 +143,7 @@ module Api
       # Now authenticated, with the legacy public flag
       assert_not_equal "public", user.preferences.find_by(:k => "gps.trace.visibility").v
       auth_header = bearer_authorization_header user
-      post gpx_create_path, :params => { :file => file, :description => "New Trace", :tags => "new,trace", :public => 1 }, :headers => auth_header
+      post api_traces_path, :params => { :file => file, :description => "New Trace", :tags => "new,trace", :public => 1 }, :headers => auth_header
       assert_response :success
       trace = Trace.find(response.body.to_i)
       assert_equal "a.gpx", trace.name
@@ -251,7 +162,7 @@ module Api
       second_user = create(:user)
       assert_nil second_user.preferences.find_by(:k => "gps.trace.visibility")
       auth_header = bearer_authorization_header second_user
-      post gpx_create_path, :params => { :file => file, :description => "New Trace", :tags => "new,trace", :public => 0 }, :headers => auth_header
+      post api_traces_path, :params => { :file => file, :description => "New Trace", :tags => "new,trace", :public => 0 }, :headers => auth_header
       assert_response :success
       trace = Trace.find(response.body.to_i)
       assert_equal "a.gpx", trace.name
@@ -354,13 +265,6 @@ module Api
 
     private
 
-    def check_trace_data(trace, digest, content_type = "application/gpx+xml", extension = "gpx")
-      assert_response :success
-      assert_equal digest, Digest::MD5.hexdigest(response.body)
-      assert_equal content_type, response.media_type
-      assert_equal "attachment; filename=\"#{trace.id}.#{extension}\"; filename*=UTF-8''#{trace.id}.#{extension}", @response.header["Content-Disposition"]
-    end
-
     ##
     # build XML for traces
     # this builds a minimum viable XML for the tests in this suite
index 4cf0ab69ad3aab53863c4c2872ffda8a45a03073..4162223d1b88919b8b537f9e114499706f1b09a5 100644 (file)
@@ -66,7 +66,7 @@ class BrowseHelperTest < ActionView::TestCase
     assert_equal "<s>test</s>", deleted_output
   end
 
-  def test_element_class
+  def test_element_icon
     node = create(:node, :with_history, :version => 2)
     node_v1 = node.old_nodes.find_by(:version => 1)
     node_v2 = node.old_nodes.find_by(:version => 2)
@@ -76,60 +76,35 @@ class BrowseHelperTest < ActionView::TestCase
     add_old_tags_selection(node_v2)
     add_old_tags_selection(node_v1)
 
-    assert_equal "node", element_class("node", create(:node))
-    assert_equal "node", element_class("node", create(:node, :deleted))
-
-    assert_equal "node building yes shop gift tourism museum", element_class("node", node)
-    assert_equal "node building yes shop gift tourism museum", element_class("node", node_v2)
-    assert_equal "node", element_class("node", node_v1)
-  end
-
-  def test_element_title
-    node = create(:node, :with_history, :version => 2)
-    node_v1 = node.old_nodes.find_by(:version => 1)
-    node_v2 = node.old_nodes.find_by(:version => 2)
-    node_v1.redact!(create(:redaction))
-
-    add_tags_selection(node)
-    add_old_tags_selection(node_v2)
-    add_old_tags_selection(node_v1)
-
-    assert_equal "", element_title(create(:node))
-    assert_equal "", element_title(create(:node, :deleted))
-
-    assert_equal "building=yes, shop=gift, and tourism=museum", element_title(node)
-    assert_equal "building=yes, shop=gift, and tourism=museum", element_title(node_v2)
-    assert_equal "", element_title(node_v1)
-  end
-
-  def test_icon_tags
-    node = create(:node, :with_history, :version => 2)
-    node_v1 = node.old_nodes.find_by(:version => 1)
-    node_v2 = node.old_nodes.find_by(:version => 2)
-    node_v1.redact!(create(:redaction))
+    icon = element_icon("node", create(:node))
+    icon_dom = Rails::Dom::Testing.html_document_fragment.parse(icon)
+    assert_dom icon_dom, "img:root", :count => 1 do
+      assert_dom "> @title", 0
+    end
 
-    add_tags_selection(node)
+    icon = element_icon("node", create(:node, :deleted))
+    icon_dom = Rails::Dom::Testing.html_document_fragment.parse(icon)
+    assert_dom icon_dom, "img:root", :count => 1 do
+      assert_dom "> @title", 0
+    end
 
-    tags = icon_tags(node)
-    assert_equal 3, tags.count
-    assert_includes tags, %w[building yes]
-    assert_includes tags, %w[tourism museum]
-    assert_includes tags, %w[shop gift]
+    icon = element_icon("node", node)
+    icon_dom = Rails::Dom::Testing.html_document_fragment.parse(icon)
+    assert_dom icon_dom, "img:root", :count => 1 do
+      assert_dom "> @title", "building=yes, shop=gift, and tourism=museum"
+    end
 
-    add_old_tags_selection(node_v2)
-    add_old_tags_selection(node_v1)
+    icon = element_icon("node", node_v2)
+    icon_dom = Rails::Dom::Testing.html_document_fragment.parse(icon)
+    assert_dom icon_dom, "img:root", :count => 1 do
+      assert_dom "> @title", "building=yes, shop=gift, and tourism=museum"
+    end
 
-    tags = icon_tags(node_v2)
-    assert_equal 3, tags.count
-    assert_includes tags, %w[building yes]
-    assert_includes tags, %w[tourism museum]
-    assert_includes tags, %w[shop gift]
-
-    tags = icon_tags(node_v1)
-    assert_equal 3, tags.count
-    assert_includes tags, %w[building yes]
-    assert_includes tags, %w[tourism museum]
-    assert_includes tags, %w[shop gift]
+    icon = element_icon("node", node_v1)
+    icon_dom = Rails::Dom::Testing.html_document_fragment.parse(icon)
+    assert_dom icon_dom, "img:root", :count => 1 do
+      assert_dom "> @title", 0
+    end
   end
 
   private
index 067c2b071e41711004ba62551a65debf73e12fc0..9f6c112b4bef8c9871a7600a95349116e4832035 100644 (file)
@@ -3,7 +3,10 @@ require "test_helper"
 class ChangesetsHelperTest < ActionView::TestCase
   def test_changeset_user_link
     changeset = create(:changeset)
-    assert_equal %(<a href="/user/#{ERB::Util.u(changeset.user.display_name)}">#{changeset.user.display_name}</a>), changeset_user_link(changeset)
+    changeset_user_link_dom = Rails::Dom::Testing.html_document_fragment.parse changeset_user_link(changeset)
+    assert_dom changeset_user_link_dom, "a:root", :text => changeset.user.display_name do
+      assert_dom "> @href", "/user/#{ERB::Util.u(changeset.user.display_name)}"
+    end
 
     changeset = create(:changeset, :user => create(:user, :data_public => false))
     assert_equal "anonymous", changeset_user_link(changeset)
@@ -16,12 +19,25 @@ class ChangesetsHelperTest < ActionView::TestCase
     changeset = create(:changeset, :created_at => Time.utc(2007, 1, 1, 0, 0, 0), :user => create(:user, :data_public => false))
     # We need to explicitly reset the closed_at to some point in the future, and avoid the before_save callback
     changeset.update_column(:closed_at, Time.now.utc + 1.day) # rubocop:disable Rails/SkipsModelValidations
-
-    assert_match %r{^Created <time title="Mon, 01 Jan 2007 00:00:00 \+0000" datetime="2007-01-01T00:00:00Z">.*</time> by anonymous$}, changeset_details(changeset)
+    changeset_details_dom = Rails::Dom::Testing.html_document_fragment.parse "<div>#{changeset_details(changeset)}</div>"
+    assert_dom changeset_details_dom, ":root", :text => /^Created .* by anonymous$/ do
+      assert_dom "> time", :count => 1 do
+        assert_dom "> @title", "Mon, 01 Jan 2007 00:00:00 +0000"
+        assert_dom "> @datetime", "2007-01-01T00:00:00Z"
+      end
+      assert_dom "> a", :count => 0
+    end
 
     changeset = create(:changeset, :created_at => Time.utc(2007, 1, 1, 0, 0, 0), :closed_at => Time.utc(2007, 1, 2, 0, 0, 0))
-    user_link = %(<a href="/user/#{ERB::Util.u(changeset.user.display_name)}">#{changeset.user.display_name}</a>)
-
-    assert_match %r{^Closed <time title="Created: Mon, 01 Jan 2007 00:00:00 \+0000&#10;Closed: Tue, 02 Jan 2007 00:00:00 \+0000" datetime="2007-01-02T00:00:00Z">.*</time> by #{user_link}$}, changeset_details(changeset)
+    changeset_details_dom = Rails::Dom::Testing.html_document_fragment.parse "<div>#{changeset_details(changeset)}</div>"
+    assert_dom changeset_details_dom, ":root", :text => /^Closed .* by #{changeset.user.display_name}$/ do
+      assert_dom "> time", :count => 1 do
+        assert_dom "> @title", "Created: Mon, 01 Jan 2007 00:00:00 +0000\nClosed: Tue, 02 Jan 2007 00:00:00 +0000"
+        assert_dom "> @datetime", "2007-01-02T00:00:00Z"
+      end
+      assert_dom "> a", :count => 1, :text => changeset.user.display_name do
+        assert_dom "> @href", "/user/#{ERB::Util.u(changeset.user.display_name)}"
+      end
+    end
   end
 end
index bee1cdc2c5485291cf52cdfb5d09e3b0520ee6cd..8b817369456fb0c253887890aa3810ff259cfa70 100644 (file)
@@ -8,8 +8,25 @@ class NoteHelperTest < ActionView::TestCase
     date = Time.utc(2014, 3, 5, 21, 37, 45)
     user = create(:user)
 
-    assert_match %r{^Created by anonymous <time title=" 5 March 2014 at 21:37" datetime="2014-03-05T21:37:45Z">.* ago</time>$}, note_event("opened", date, nil)
-    assert_match %r{^Resolved by <a href="/user/#{ERB::Util.u(user.display_name)}">#{user.display_name}</a> <time title=" 5 March 2014 at 21:37" datetime="2014-03-05T21:37:45Z">.* ago</time>$}, note_event("closed", date, user)
+    note_event_dom = Rails::Dom::Testing.html_document_fragment.parse "<div>#{note_event('opened', date, nil)}</div>"
+    assert_dom note_event_dom, ":root", :text => /^Created by anonymous .* ago$/ do
+      assert_dom "> a", :count => 0
+      assert_dom "> time", :count => 1 do
+        assert_dom "> @title", "5 March 2014 at 21:37"
+        assert_dom "> @datetime", "2014-03-05T21:37:45Z"
+      end
+    end
+
+    note_event_dom = Rails::Dom::Testing.html_document_fragment.parse "<div>#{note_event('closed', date, user)}</div>"
+    assert_dom note_event_dom, ":root", :text => /^Resolved by #{user.display_name} .* ago$/ do
+      assert_dom "> a", :count => 1, :text => user.display_name do
+        assert_dom "> @href", "/user/#{ERB::Util.u(user.display_name)}"
+      end
+      assert_dom "> time", :count => 1 do
+        assert_dom "> @title", "5 March 2014 at 21:37"
+        assert_dom "> @datetime", "2014-03-05T21:37:45Z"
+      end
+    end
   end
 
   def test_note_author
@@ -17,8 +34,17 @@ class NoteHelperTest < ActionView::TestCase
     user = create(:user)
 
     assert_equal "", note_author(nil)
+
     assert_equal "deleted", note_author(deleted_user)
-    assert_equal "<a href=\"/user/#{ERB::Util.u(user.display_name)}\">#{user.display_name}</a>", note_author(user)
-    assert_equal "<a href=\"http://test.host/user/#{ERB::Util.u(user.display_name)}\">#{user.display_name}</a>", note_author(user, :only_path => false)
+
+    note_author_dom = Rails::Dom::Testing.html_document_fragment.parse note_author(user)
+    assert_dom note_author_dom, "a:root", :text => user.display_name do
+      assert_dom "> @href", "/user/#{ERB::Util.u(user.display_name)}"
+    end
+
+    note_author_dom = Rails::Dom::Testing.html_document_fragment.parse note_author(user, :only_path => false)
+    assert_dom note_author_dom, "a:root", :text => user.display_name do
+      assert_dom "> @href", "http://test.host/user/#{ERB::Util.u(user.display_name)}"
+    end
   end
 end
index 4e40de8d5e95ebadbffcb24151b96e1795d94109..45a3058f73d5ea438195753e4eadf7588a0345b5 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
     minimatch "^3.1.2"
     strip-json-comments "^3.1.1"
 
-"@eslint/js@9.15.0":
-  version "9.15.0"
-  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.15.0.tgz#df0e24fe869143b59731942128c19938fdbadfb5"
-  integrity sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==
+"@eslint/js@9.16.0":
+  version "9.16.0"
+  resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.16.0.tgz#3df2b2dd3b9163056616886c86e4082f45dbf3f4"
+  integrity sha512-tw2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTVg==
 
 "@eslint/object-schema@^2.1.4":
   version "2.1.4"
@@ -265,16 +265,16 @@ eslint-visitor-keys@^4.2.0:
   integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
 
 eslint@^9.0.0:
-  version "9.15.0"
-  resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.15.0.tgz#77c684a4e980e82135ebff8ee8f0a9106ce6b8a6"
-  integrity sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==
+  version "9.16.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.16.0.tgz#66832e66258922ac0a626f803a9273e37747f2a6"
+  integrity sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
     "@eslint-community/regexpp" "^4.12.1"
     "@eslint/config-array" "^0.19.0"
     "@eslint/core" "^0.9.0"
     "@eslint/eslintrc" "^3.2.0"
-    "@eslint/js" "9.15.0"
+    "@eslint/js" "9.16.0"
     "@eslint/plugin-kit" "^0.2.3"
     "@humanfs/node" "^0.16.6"
     "@humanwhocodes/module-importer" "^1.0.1"