+html {
+ height: 100%;
+}
+
+body {
+ height: 100%;
+ margin: 0;
+}
+
+#content {
+ height: 100%;
+}
+
header,
-#sidebar,
-#permalink,
.leaflet-control {
display: none;
}
-html {
- height: 100%;
+.map-layout .overlay-sidebar #sidebar {
+ display: none;
+}
+
+.map-layout #sidebar {
+ page-break-after: always;
+
+ & > * {
+ display: none;
+ }
+ #sidebar_content {
+ display: unset;
+ }
+
+ button,
+ input,
+ textarea,
+ .secondary-actions {
+ display: none;
+ }
+}
+
+#map-ui {
+ display: none !important;
}
#map {
- position: absolute !important;
- top: 0;
- bottom: 40px;
- left: 0;
- right: 0;
+ position: relative;
+ height: calc(100% - 40px);
+ box-sizing: border-box;
border: 1px solid black;
}
/* Rules for attribution text under the main map shown on printouts */
#attribution {
- position: absolute !important;
- bottom: 0;
- left: 0;
- right: 0;
+ page-break-inside: avoid;
height: 40px;
font-size: 12px;
text-align: center;
end
def open_issues_count
- count = Issue.visible_to(current_user).open.limit(100).size
- if count > 99
- tag.span("99+", :class => "badge count-number")
+ count = Issue.visible_to(current_user).open.limit(Settings.max_issues_count).size
+ if count >= Settings.max_issues_count
+ tag.span(I18n.t("count.at_least_pattern", :count => Settings.max_issues_count), :class => "badge count-number")
elsif count.positive?
tag.span(count, :class => "badge count-number")
end
<form method="GET" action="<%= search_path %>" class="search_form px-1 py-2">
<div class="row gx-2 mx-0">
<div class="col">
- <div class="input-group flex-nowrap">
- <div class='query_wrapper position-relative flex-grow-1'>
+ <div class="d-flex">
+ <span class='position-relative flex-grow-1'>
<%= link_to t("site.search.where_am_i"), "#", :class => "describe_location position-absolute", :title => t("site.search.where_am_i_title") %>
- <%= text_field_tag "query", params[:query], :placeholder => t("site.search.search"), :autofocus => autofocus, :autocomplete => "on", :class => "form-control form-control-sm", :dir => "auto" %>
- </div>
- <div class="input-group-append">
- <%= submit_tag t("site.search.submit_text"), :class => "btn btn-sm btn-primary", :data => { :disable_with => false } %>
- </div>
+ <%= text_field_tag "query", params[:query], :placeholder => t("site.search.search"), :autofocus => autofocus, :autocomplete => "on", :class => "form-control form-control-sm rounded-0 rounded-start border-end-0", :dir => "auto" %>
+ </span>
+ <%= submit_tag t("site.search.submit_text"), :class => "btn btn-sm btn-primary rounded-0 rounded-end", :data => { :disable_with => false } %>
</div>
</div>
<div class="col-auto">
</li>
<% end %>
- <li class="nav-item flex-sm-grow-1"></li>
- <li class="nav-item">
- <div class="px-3 py-2 py-sm-0">
- <%= link_to({ :action => :georss, :display_name => @target_user&.display_name, :tag => params[:tag] }, { :class => "btn btn-secondary btn-sm" }) do %>
- <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="white" viewBox="0 0 16 16">
- <path d="M5.5 12a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm-3-8.5a1 1 0 0 1 1-1c5.523 0 10 4.477 10 10a1 1 0 1 1-2 0 8 8 0 0 0-8-8 1 1 0 0 1-1-1zm0 4a1 1 0 0 1 1-1 6 6 0 0 1 6 6 1 1 0 1 1-2 0 4 4 0 0 0-4-4 1 1 0 0 1-1-1z" />
- </svg>
- <% end -%>
- <%= link_to t(".upload_trace"), new_trace_path, :class => "btn btn-secondary btn-sm" %>
+ <li class="nav-item ms-auto">
+ <div class="nav-link pe-0">
+ <%= link_to({ :action => :georss, :display_name => @target_user&.display_name, :tag => params[:tag] }, { :class => "btn btn-secondary btn-sm my-n2 align-baseline border-0" }) do %>
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" class="align-text-bottom">
+ <circle cx="2" cy="14" r="2" fill="white" />
+ <path d="M 8 14 a 6 6 0 0 0 -6 -6 M 14 14 a 12 12 0 0 0 -12 -12" fill="none" stroke="white" stroke-width="3" stroke-linecap="round" />
+ </svg><% end -%>
+ <%= link_to t(".upload_trace"), new_trace_path, :class => "btn btn-secondary btn-sm my-n2 align-baseline border-0" %>
</div>
</li>
</ul>
required(:tracepoints_per_page).filled(:int?)
required(:max_number_of_way_nodes).filled(:int?)
required(:max_number_of_relation_members).filled(:int?)
+ required(:max_issues_count).filled(:int?)
required(:api_timeout).filled(:int?)
required(:imagery_blacklist).maybe(:array?)
required(:status).filled(:str?, :included_in? => ALLOWED_STATUS)
contributors_at_stadt_wien: Ciutat de Viena
contributors_at_cc_by: CC BY
contributors_at_land_vorarlberg: Estat de Vorarlberg
+ contributors_at_cc_by_at_with_amendments: CC BY AT amb esmenes
contributors_au_australia: Austràlia
contributors_ca_canada: Canadà
contributors_fi_finland: Finlàndia
cyclosm: CyclOSM
cycle_map: Mapa ciclista
transport_map: Mapa de transports
+ tracestracktop_topo: Tracestrack Topo
hot: Humanitari
opnvkarte: ÖPNVKarte (mapa de transport públic)
layers:
andy_allan: Andy Allan
opnvkarte_credit: Tessel·les cortesia de %{memomaps_link}
memomaps: MeMoMaps
+ tracestrack_credit: Tessel·les cortesia de %{tracestrack_link}
+ tracestrack: Tracestrack
hotosm_credit: Estil de tessel·les per %{hotosm_link}, hostatjades per %{osm_france_link}
hotosm_name: Equip humanitari de l'OpenStreetMap
site:
closed: ДӀачӀагӀа
version: Верси
in_changeset: Нисдарш
- anonymous: цӀе хьулйина
+ anonymous: аноним
no_comment: (коммент йац)
part_of: Дакъалоцу цу
download_xml: Схьаэца XML
telephone_link: Телпо тоха %{phone_number}
query:
title: ХӀун йу кхузахь?
- introduction: УллеÑ\80а обÑ\8aекÑ\82аÑ\88 каÑ\80айан, каÑ\80Ñ\82ан Ñ\82Ó\80еÑ\82аÓ\80ае
+ introduction: УллеÑ\80а обÑ\8aекÑ\82аÑ\88 каÑ\80айан, каÑ\80Ñ\82ин Ñ\82Ó\80еÑ\82аÓ\80айe
nearby: Уллера объекташ
enclosing: Йолу меттиг
changesets:
title_html: Хаам %{link}
categories:
diary_entry:
- other_label: Кхиерг
+ other_label: Ð\9aÑ\85ийеÑ\80г
diary_comment:
- other_label: Кхиерг
+ other_label: Ð\9aÑ\85ийеÑ\80г
user:
- other_label: Кхиерг
+ other_label: Ð\9aÑ\85ийеÑ\80г
note:
- other_label: Кхиерг
+ other_label: Ð\9aÑ\85ийеÑ\80г
layouts:
logout: Болх дӀаберзор
log_in: ЧугӀо
export: Экспорт
issues: Проблемаш
data: Хаамаш
- export_data: Хаамаш экспортъян
+ export_data: Хаамаш экспортбан
gps_traces: GPS-трекаш
gps_traces_tooltip: Болхбе GPS-трекашца
user_diaries: Декъашхочун дневник
hidden_title: 'Къайлайаьккхина билгало #%{note_name}'
report: Хаамбе хӀокху билгалонах
hide: Къайлайаккха
- resolve: Кечъян
+ resolve: Кечйан
reactivate: Йуха йела
comment_and_resolve: Жопделла кечъе
comment: Жопдала
formats:
friendly: "%e %B %Y at %H:%M"
blog: "%e %B %Y"
+ count:
+ at_least_pattern: "%{count}+"
helpers:
file:
prompt: Choose file
cyclosm: CyclOSM
cycle_map: Biciklada mapo
transport_map: Transporta mapo
+ tracestracktop_topo: Topografia mapo
hot: Hom-helpa mapo
opnvkarte: ÖPNVKarte
layers:
andy_allan: Andy ALLAN
opnvkarte_credit: Kaheloj danke al %{memomaps_link}
memomaps: MeMoMaps
+ tracestrack_credit: Kaheloj danke al %{tracestrack_link}
+ tracestrack: Tracestrack
hotosm_credit: 'Stilo de kaheloj: %{hotosm_link}, retgastigo: %{osm_france_link}'
hotosm_name: HOTOSM
site:
cyclosm: CyclOSM
cycle_map: Mapa ciclista
transport_map: Mapa de transporte
+ tracestracktop_topo: Tracestrack Topo
hot: Humanitario
opnvkarte: ÖPNVKarte
layers:
andy_allan: Andy Allan
opnvkarte_credit: Teselas cortesía de %{memomaps_link}
memomaps: MeMoMaps
+ tracestrack: Tracestrack
hotosm_credit: Estilo de teselas por %{hotosm_link} alojados por %{osm_france_link}
hotosm_name: Equipo humanitario de OpenStreetMap
site:
formats:
friendly: '%e %B %Y à %-Hh%M'
blog: '%e %B %Y'
+ count:
+ at_least_pattern: '%{count}+'
helpers:
file:
prompt: Choisir un fichier
cyclosm: CyclOSM
cycle_map: Carte cyclable
transport_map: Carte de transport
+ tracestracktop_topo: Topo de Tracestack
hot: Humanitaire
opnvkarte: ÖPNVKarte
layers:
andy_allan: Andy Allan
opnvkarte_credit: Carreaux fournis aimablement par %{memomaps_link}
memomaps: MeMoMaps
+ tracestrack_credit: Carreaux fournis aimablement par %{tracestrack_link}
+ tracestrack: Tracestrack
hotosm_credit: Style de carreaux par %{hotosm_link} hébergé par %{osm_france_link}
hotosm_name: L’Équipe OpenStreetMap Humanitaire
site:
time:
formats:
friendly: '%e %B %Y la %H:%M'
+ count:
+ at_least_pattern: '%{count}+'
helpers:
file:
prompt: Selectează fișier
reopened_at_by_html: Reactivat %{when} de %{user}
rss:
title: Note OpenStreetMap
+ description_all: O listă de note raportate, comentate sau închise
description_area: O listă de note, raportate, comentate sau închise în zona
dvs. [(%{min_lat}|%{min_lon}) -- (%{max_lat}|%{max_lon})]
description_item: Un feed RSS pentru nota %{id}
remove as friend: Scoate din lista de prieteni
add as friend: Adaugă Prieten
mapper since: 'Cartograf din:'
+ uid: 'ID-ul de utilizator:'
ct status: 'Termenii colaboratorului:'
ct undecided: Nedefinit
ct declined: Declinat
cyclosm: CyclOSM
cycle_map: Hartă de ciclism
transport_map: Hartă de transport
+ tracestracktop_topo: Tracestrack Topo
hot: Umanitară
opnvkarte: ÖPNVKarte
layers:
andy_allan: Andy Allan
opnvkarte_credit: Tile-uri prin amabilitatea lui %{memomaps_link}
memomaps: MeMoMaps
+ tracestrack_credit: Tile-uri prin amabilitatea lui %{tracestrack_link}
+ tracestrack: Tracetrack
hotosm_credit: Stilul tile-urilor creat de %{hotosm_link} găzduit de %{osm_france_link}
hotosm_name: Echipa Umanitară OpenStreetMap
site:
-# Messages for Serbian (Latin script) (srpski (latinica))
+# Messages for srpski (latinica) (srpski (latinica))
# Exported from translatewiki.net
# Export driver: phpyaml
# Author: Macofe
-# Messages for Serbian (Cyrillic script) (српски (ћирилица))
+# Messages for српски (ћирилица) (српски (ћирилица))
# Exported from translatewiki.net
# Export driver: phpyaml
# Author: Acamicamacaraca
send_message_to_html: 寄出新訊息給 %{name}
back_to_inbox: 回到收件匣
create:
- message_sent: 訊息已寄出
+ message_sent: 已傳送訊息
limit_exceeded: 您最近寄出了大量的訊息。在嘗試寄出其他訊息之前請稍候。
no_such_message:
title: 沒有這個訊息
default_note_query_limit: 100
# Maximum limit on the number of notes returned by the note search api method
max_note_query_limit: 10000
+# Maximum value of open issues counter for moderators, anything equal or greater to this value "n" is shown as "n+"
+max_issues_count: 99
# Zoom level to use for postcode results from the geocoder
postcode_zoom: 15
# Timeout for API calls in seconds
--- /dev/null
+require "test_helper"
+
+class IssuesHelperTest < ActionView::TestCase
+ attr_accessor :current_user
+
+ def test_issues_count
+ target_user = create(:user)
+ self.current_user = create(:moderator_user)
+
+ n = (Settings.max_issues_count - 1)
+ n.times do
+ create(:note_with_comments) do |note|
+ create(:issue, :reportable => note, :reported_user => target_user, :assigned_role => "moderator")
+ end
+ end
+ expected = <<~HTML.delete("\n")
+ <span class="badge count-number">#{n}</span>
+ HTML
+ assert_dom_equal expected, open_issues_count
+
+ n += 1
+ create(:note_with_comments) do |note|
+ create(:issue, :reportable => note, :reported_user => target_user, :assigned_role => "moderator")
+ end
+ expected = <<~HTML.delete("\n")
+ <span class="badge count-number">#{n}+</span>
+ HTML
+ assert_dom_equal expected, open_issues_count
+ end
+end