From: Tom Hughes Date: Wed, 19 Mar 2025 17:47:53 +0000 (+0000) Subject: Merge remote-tracking branch 'upstream/pull/5812' X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/HEAD?ds=inline;hp=01347e22cdcc654586ed9dee239183f7154861ee Merge remote-tracking branch 'upstream/pull/5812' --- diff --git a/app/assets/javascripts/index/directions/fossgis_valhalla.js b/app/assets/javascripts/index/directions/fossgis_valhalla.js index 13fc020c2..d5e781e4a 100644 --- a/app/assets/javascripts/index/directions/fossgis_valhalla.js +++ b/app/assets/javascripts/index/directions/fossgis_valhalla.js @@ -97,7 +97,7 @@ costing: costing, directions_options: { units: "km", - language: OSM.i18n.currentLocale() + language: OSM.i18n.locale } }) }); diff --git a/app/assets/javascripts/index/directions/graphhopper.js b/app/assets/javascripts/index/directions/graphhopper.js index 6a1043fbf..b11c49472 100644 --- a/app/assets/javascripts/index/directions/graphhopper.js +++ b/app/assets/javascripts/index/directions/graphhopper.js @@ -57,7 +57,7 @@ // https://graphhopper.com/api/1/docs/routing/ const query = new URLSearchParams({ vehicle: vehicleType, - locale: OSM.i18n.currentLocale(), + locale: OSM.i18n.locale, key: "LijBPDQGfu7Iiq80w3HzwB4RUDJbMbhs6BU0dEnn", elevation: false, instructions: true, diff --git a/app/assets/javascripts/index/history.js b/app/assets/javascripts/index/history.js index dddd84354..229fdc2b6 100644 --- a/app/assets/javascripts/index/history.js +++ b/app/assets/javascripts/index/history.js @@ -47,12 +47,30 @@ OSM.History = function (map) { $("#sidebar_content .changesets").html(html); } - function displayMoreChangesets(html) { - $("#sidebar_content .changeset_more").replaceWith(html); - const oldList = $("#sidebar_content .changesets ol").first(); - const newList = oldList.next("ol"); - newList.children().appendTo(oldList); - newList.remove(); + function displayMoreChangesets(div, html) { + const sidebar = $("#sidebar")[0]; + const previousScrollHeightMinusTop = sidebar.scrollHeight - sidebar.scrollTop; + + const oldList = $("#sidebar_content .changesets ol"); + + div.replaceWith(html); + + const prevNewList = oldList.prevAll("ol"); + if (prevNewList.length) { + prevNewList.next(".changeset_more").remove(); + prevNewList.children().prependTo(oldList); + prevNewList.remove(); + + // restore scroll position only if prepending + sidebar.scrollTop = sidebar.scrollHeight - previousScrollHeightMinusTop; + } + + const nextNewList = oldList.nextAll("ol"); + if (nextNewList.length) { + nextNewList.prev(".changeset_more").remove(); + nextNewList.children().appendTo(oldList); + nextNewList.remove(); + } } function update() { @@ -71,6 +89,9 @@ OSM.History = function (map) { if (params.has("before")) { data.set("before", params.get("before")); } + if (params.has("after")) { + data.set("after", params.get("after")); + } fetch(location.pathname + "?" + data) .then(response => response.text()) @@ -90,7 +111,7 @@ OSM.History = function (map) { div.find(".loader").show(); $.get($(this).attr("href"), function (html) { - displayMoreChangesets(html); + displayMoreChangesets(div, html); updateMap(); }); } diff --git a/app/controllers/changesets_controller.rb b/app/controllers/changesets_controller.rb index abdc23f04..5e79f4da6 100644 --- a/app/controllers/changesets_controller.rb +++ b/app/controllers/changesets_controller.rb @@ -2,6 +2,7 @@ class ChangesetsController < ApplicationController include UserMethods + include PaginationMethods layout "site" @@ -18,11 +19,12 @@ class ChangesetsController < ApplicationController # list non-empty changesets in reverse chronological order def index param! :before, Integer, :min => 1 + param! :after, Integer, :min => 1 - @params = params.permit(:display_name, :bbox, :friends, :nearby, :before, :list) + @params = params.permit(:display_name, :bbox, :friends, :nearby, :before, :after, :list) - if request.format == :atom && @params[:before] - redirect_to url_for(@params.merge(:before => nil)), :status => :moved_permanently + if request.format == :atom && (@params[:before] || @params[:after]) + redirect_to url_for(@params.merge(:before => nil, :after => nil)), :status => :moved_permanently return end @@ -59,9 +61,7 @@ class ChangesetsController < ApplicationController changesets = changesets.where(:user => current_user.nearby) end - changesets = changesets.where(:changesets => { :id => ...@params[:before] }) if @params[:before] - - @changesets = changesets.order("changesets.id DESC").limit(20).preload(:user, :changeset_tags, :comments) + @changesets, @newer_changesets_id, @older_changesets_id = get_page_items(changesets, :includes => [:user, :changeset_tags, :comments]) render :action => :index, :layout => false end diff --git a/app/controllers/geocoder_controller.rb b/app/controllers/geocoder_controller.rb index 5f3b4dbb6..f23448bff 100644 --- a/app/controllers/geocoder_controller.rb +++ b/app/controllers/geocoder_controller.rb @@ -34,13 +34,13 @@ class GeocoderController < ApplicationController # We've got two nondescript numbers for a query, which can mean both "lat, lon" or "lon, lat". @results = [] - if lat >= -90 && lat <= 90 && lon >= -180 && lon <= 180 + if lat.between?(-90, 90) && lon.between?(-180, 180) @results.push(:lat => params[:lat], :lon => params[:lon], :zoom => params[:zoom], :name => "#{params[:lat]}, #{params[:lon]}") end - if lon >= -90 && lon <= 90 && lat >= -180 && lat <= 180 + if lon.between?(-90, 90) && lat.between?(-180, 180) @results.push(:lat => params[:lon], :lon => params[:lat], :zoom => params[:zoom], :name => "#{params[:lon]}, #{params[:lat]}") @@ -54,10 +54,10 @@ class GeocoderController < ApplicationController end else # Coordinates in a query have come with markers for latitude and longitude. - if lat < -90 || lat > 90 + if !lat.between?(-90, 90) @error = "Latitude #{lat} out of range" render :action => "error" - elsif lon < -180 || lon > 180 + elsif !lon.between?(-180, 180) @error = "Longitude #{lon} out of range" render :action => "error" else diff --git a/app/views/changesets/index.html.erb b/app/views/changesets/index.html.erb index 85c5f0bcb..3f25cf134 100644 --- a/app/views/changesets/index.html.erb +++ b/app/views/changesets/index.html.erb @@ -1,17 +1,17 @@ -<% if @changesets.present? %> -
    - <%= render @changesets %> -
-<% if @changesets.size == 20 -%> -
- <%= link_to t(".load_more"), url_for(@params.merge(:before => @changesets.last.id)), :class => "btn btn-primary" %> +<% if @newer_changesets_id %> +
+ <%= link_to t(".load_more"), url_for(@params.merge(:before => nil, :after => @newer_changesets_id)), :class => "btn btn-primary" %>
<%= t("browse.start_rjs.loading") %>
-<% end -%> +<% end %> +<% if @changesets.present? %> +
    + <%= render @changesets %> +
<% elsif params[:bbox] %>

<%= params[:before] ? t(".no_more_area") : t(".empty_area") %>

<% elsif params[:display_name] %> @@ -19,3 +19,13 @@ <% else %>

<%= params[:before] ? t(".no_more") : t(".empty") %>

<% end %> +<% if @older_changesets_id -%> +
+ <%= link_to t(".load_more"), url_for(@params.merge(:before => @older_changesets_id, :after => nil)), :class => "btn btn-primary" %> +
+
+ <%= t("browse.start_rjs.loading") %> +
+
+
+<% end -%> diff --git a/config/initializers/selenium.rb b/config/initializers/selenium.rb index 5e683d8b2..96fd90acd 100644 --- a/config/initializers/selenium.rb +++ b/config/initializers/selenium.rb @@ -4,28 +4,10 @@ if Rails.env.test? module OpenStreetMap module Selenium module BidiPort - module ClassMethods - attr_accessor :websocket_port - end - - def self.prepended(base) - class << base - prepend ClassMethods - end - - base.websocket_port = 10000 - - ActiveSupport::Testing::Parallelization.after_fork_hook do |worker| - base.websocket_port = 10000 + worker - end - end - def initialize(config) super - @extra_args = Array(@extra_args) << "--websocket-port=#{self.class.websocket_port}" - - self.class.websocket_port += 256 + @extra_args = Array(@extra_args) << "--websocket-port=0" end end end diff --git a/config/wiki_pages.yml b/config/wiki_pages.yml index 1995dcf38..72736751c 100644 --- a/config/wiki_pages.yml +++ b/config/wiki_pages.yml @@ -6498,6 +6498,7 @@ en: centralkey: Key:centralkey change: Key:change change:lanes: Key:change:lanes + changesets_count: ChangesetKey:changesets count changing_table: Key:changing table changing_table:adult: Key:changing table:adult changing_table:count: Key:changing table:count @@ -7483,6 +7484,7 @@ en: horse_scale: Key:horse scale hospital:level:CN: Key:hospital:level:CN hospital:level:DE: Key:hospital:level:DE + host: Key:host hot_water: Key:hot water house: Key:house hov: Key:hov @@ -7866,6 +7868,7 @@ en: memorial:subject:wikidata: Key:memorial:subject:wikidata memorial:subject:wikipedia: Key:memorial:subject:wikipedia memorial:type: Key:memorial:type + merge_conflict_resolved: ChangesetKey:merge conflict resolved message: Key:message mhs:inscription_date: Key:mhs:inscription date microbrewery: Key:microbrewery diff --git a/lib/classic_pagination/pagination.rb b/lib/classic_pagination/pagination.rb index b54b0e9f8..97f0530a8 100644 --- a/lib/classic_pagination/pagination.rb +++ b/lib/classic_pagination/pagination.rb @@ -278,7 +278,7 @@ module ActionController # Returns true if this paginator contains the page of index +number+. def contains_page?(number) - number >= 1 && number <= page_count + number.between?(1, page_count) end # Returns a new Page representing the page with the given index diff --git a/script/misc/update-wiki-pages b/script/misc/update-wiki-pages index d40708c96..84205fa35 100755 --- a/script/misc/update-wiki-pages +++ b/script/misc/update-wiki-pages @@ -71,9 +71,15 @@ for my $lang ('', map { "${_}:" } qw[ Pt Fi De It HU Cz Fr RU Pl ]) { $cnt = stick_content_in_hash("tag", "Template:${lang}ValueDescription", \%feature); ok(1, " Got $cnt value pages"); $count{value} += $cnt; + + # ChangesetKey pages + ok(1, " Getting changeset key pages"); + $cnt = stick_content_in_hash("key", "Template:${lang}ChangesetKeyDescription", \%feature, "ChangesetKey"); + ok(1, " Got $cnt changeset key pages"); + $count{changesetkey} += $cnt; } -ok(1, "Got a total of $count{$_} ${_}s") for qw[ key keyprefix value ]; +ok(1, "Got a total of $count{$_} ${_}s") for qw[ key keyprefix changesetkey value ]; # Dump to .yml file open my $out, ">", $out_file or die "Can't open file '$out_file' supplied on the command line"; @@ -87,8 +93,9 @@ exit 0; sub stick_content_in_hash { - my ($key, $title, $hash) = @_; + my ($key, $title, $hash, $namespace) = @_; my $ukey = ucfirst $key; + $namespace ||= $ukey; my $space_to_underscore = sub { my $txt = shift; @@ -105,7 +112,7 @@ sub stick_content_in_hash my $title = $link->{title}; my $lang; my $key_name; - if ($title =~ /^$ukey:(?.*?)$/) { + if ($title =~ /^($namespace|$ukey):(?.*?)$/) { # English by default $lang = "en"; $key_name = $space_to_underscore->($+{key_name}); diff --git a/test/controllers/changesets_controller_test.rb b/test/controllers/changesets_controller_test.rb index 4274f7c31..452084951 100644 --- a/test/controllers/changesets_controller_test.rb +++ b/test/controllers/changesets_controller_test.rb @@ -82,6 +82,9 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest %w[-1 0 fred].each do |id| get history_path(:format => "html", :list => "1", :before => id) assert_redirected_to :controller => :errors, :action => :bad_request + + get history_path(:format => "html", :list => "1", :after => id) + assert_redirected_to :controller => :errors, :action => :bad_request end end @@ -238,6 +241,23 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest check_index_result [changeset1] end + def test_index_after_id + changeset1 = create(:changeset, :num_changes => 1) + changeset2 = create(:changeset, :num_changes => 1) + + get history_path(:format => "html", :after => changeset1.id), :xhr => true + assert_response :success + assert_template "history" + assert_template :layout => "xhr" + assert_select "h2", :text => "Changesets", :count => 1 + + get history_path(:format => "html", :list => "1", :after => changeset1.id), :xhr => true + assert_response :success + assert_template "index" + + check_index_result [changeset2] + end + ## # Check that a list with a next page link works def test_index_more @@ -416,6 +436,11 @@ class ChangesetsControllerTest < ActionDispatch::IntegrationTest assert_redirected_to :action => :feed end + def test_feed_after + get history_feed_path(:format => "atom", :after => 100) + assert_redirected_to :action => :feed + end + private ## diff --git a/test/system/history_test.rb b/test/system/history_test.rb index 4f2114f25..7d730355a 100644 --- a/test/system/history_test.rb +++ b/test/system/history_test.rb @@ -81,6 +81,34 @@ class HistoryTest < ApplicationSystemTestCase end end + test "user history starts after specified changeset" do + user = create(:user) + changeset0 = create(:changeset) + changeset1 = create_visible_changeset(user, "1st-changeset-in-history") + changeset2 = create_visible_changeset(user, "2nd-changeset-in-history") + + visit "#{user_path user}/history?after=#{changeset2.id}" + + within_sidebar do + assert_no_link "1st-changeset-in-history" + assert_no_link "2nd-changeset-in-history" + end + + visit "#{user_path user}/history?after=#{changeset1.id}" + + within_sidebar do + assert_no_link "1st-changeset-in-history" + assert_link "2nd-changeset-in-history" + end + + visit "#{user_path user}/history?after=#{changeset0.id}" + + within_sidebar do + assert_link "1st-changeset-in-history" + assert_link "2nd-changeset-in-history" + end + end + private def create_visible_changeset(user, comment)