From: Adam Hoyle Date: Tue, 14 Dec 2021 10:42:42 +0000 (+0000) Subject: Merge branch 'master' into feature/add-communities-page X-Git-Tag: live~1027^2~23 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/46875fdde3ecdc37bb69e892b15509132a3bf9cf?hp=bae2900288d9b74969800e9c4fc9ce00b7701ae1 Merge branch 'master' into feature/add-communities-page --- diff --git a/app/abilities/ability.rb b/app/abilities/ability.rb index 769fbca47..f33ce182d 100644 --- a/app/abilities/ability.rb +++ b/app/abilities/ability.rb @@ -7,7 +7,7 @@ class Ability can [:relation, :relation_history, :way, :way_history, :node, :node_history, :changeset, :note, :new_note, :query], :browse can :search, :direction - can [:index, :permalink, :edit, :help, :fixthemap, :offline, :export, :about, :preview, :copyright, :key, :id], :site + can [:index, :permalink, :edit, :help, :fixthemap, :offline, :export, :about, :communities, :preview, :copyright, :key, :id], :site can [:finish, :embed], :export can [:search, :search_latlon, :search_ca_postcode, :search_osm_nominatim, :search_geonames, :search_osm_nominatim_reverse, :search_geonames_reverse], :geocoder diff --git a/app/controllers/site_controller.rb b/app/controllers/site_controller.rb index 00b3e78da..a73d1e2e5 100644 --- a/app/controllers/site_controller.rb +++ b/app/controllers/site_controller.rb @@ -106,6 +106,11 @@ class SiteController < ApplicationController @locale = params[:about_locale] || I18n.locale end + def communities + OsmCommunityIndex::LocalChapter.add_to_i18n # this should be called on app init + @local_chapters = OsmCommunityIndex::LocalChapter.local_chapters + end + def export; end def offline; end diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb index 0171752ff..904665ca7 100644 --- a/app/views/layouts/_header.html.erb +++ b/app/views/layouts/_header.html.erb @@ -50,6 +50,9 @@ + @@ -72,6 +75,7 @@ <% end %>
  • <%= link_to t("layouts.gps_traces"), traces_path, :class => "dropdown-item" %>
  • <%= link_to t("layouts.user_diaries"), diary_entries_path, :class => "dropdown-item" %>
  • +
  • <%= link_to t("layouts.communities"), communities_path, :class => "dropdown-item" %>
  • <%= link_to t("layouts.copyright"), copyright_path, :class => "dropdown-item" %>
  • <%= link_to t("layouts.help"), help_path, :class => "dropdown-item" %>
  • <%= link_to t("layouts.about"), about_path, :class => "dropdown-item" %>
  • diff --git a/app/views/site/communities.html.erb b/app/views/site/communities.html.erb new file mode 100644 index 000000000..adbd7ab3d --- /dev/null +++ b/app/views/site/communities.html.erb @@ -0,0 +1,19 @@ +<% content_for :heading do %> + <%= tag.h1 do %> + <%= t ".title" %> + <% end %> +<% end %> + +<%= tag.div do %> +

    <%= t ".lede_text" %>

    +

    <%= t ".local_chapters.title" %>

    +

    <%= t ".local_chapters.about_text" %>

    +

    <%= t ".local_chapters.list_text" %>

    + +

    <%= t ".other_groups.title" %>

    +

    <%= t ".other_groups.about_html" %>

    +<% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index df3ae37f5..f3bde72d7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1459,6 +1459,7 @@ en: help: Help about: About copyright: Copyright + communities: Communities community: Community community_blogs: "Community Blogs" community_blogs_title: "Blogs from members of the OpenStreetMap community" @@ -2224,6 +2225,30 @@ en: Just go to the map and click the note icon: . This will add a marker to the map, which you can move by dragging. Add your message, then click save, and other mappers will investigate. + communities: + title: Communities + lede_text: | + People from all over the world contribute to or use OpenStreetMap. + Whilst some are content to participate as individuals, others have formed communities. + These groups come in a range of sizes and represent geographies from small towns to large multi-country regions. + They can also be formal or informal. + local_chapters: + title: Local Chapters + about_text: | + Local Chapters are country-level or region-level groups that have taken the formal step of + establishing not-for-profit legal entities. They represent the area's map and mappers when + dealing with local government, business, and media. They have also formed an affiliation + with the OpenStreetMap Foundation (OSMF), giving them a link to the legal and copyright + governing body. + list_text: | + So far we have the following formally established foundation Local Chapters: + other_groups: + title: Other Groups + about_html: | + There is no need to formally establish a group to the same extent as the Local Chapters. + Indeed many groups exist very sucessfully as an informal gathering of people or as a + community group. Anyone can set up or join these. Read more on the + Communities wiki page. traces: visibility: private: "Private (only shared as anonymous, unordered points)" diff --git a/config/routes.rb b/config/routes.rb index f4c19f88c..f52ee739d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -147,6 +147,7 @@ OpenStreetMap::Application.routes.draw do get "/help" => "site#help" get "/about/:about_locale" => "site#about" get "/about" => "site#about" + get "/communities" => "site#communities" get "/history" => "changesets#index" get "/history/feed" => "changesets#feed", :defaults => { :format => :atom } get "/history/comments/feed" => "changeset_comments#index", :as => :changesets_comments_feed, :defaults => { :format => "rss" } diff --git a/lib/osm_community_index/local_chapter.rb b/lib/osm_community_index/local_chapter.rb new file mode 100644 index 000000000..10029a77e --- /dev/null +++ b/lib/osm_community_index/local_chapter.rb @@ -0,0 +1,61 @@ +module OsmCommunityIndex + class LocalChapter + attr_reader :id, :url + + def initialize(id, url) + @id = id + @url = url + end + + def self.local_chapters + @chapters = init_local_chapters + end + + def self.init_local_chapters + raw_local_chapters = load_raw_local_chapters + local_chapters = [] + raw_local_chapters.each do |chapter| + id = chapter[:id] + url = chapter[:resource]["strings"]["url"] + local_chapters.push(LocalChapter.new(id, url)) + end + local_chapters + end + + def self.load_raw_local_chapters + community_index = OsmCommunityIndex.community_index + raw_local_chapters = [] + community_index["resources"].each do |id, resource| + resource.each do |key, value| + next unless key == "type" && value == "osm-lc" && id != "OSMF" + raw_local_chapters.push({ :id => id, :resource => resource }) + end + end + raw_local_chapters + end + + def self.add_to_i18n + raw_local_chapters = load_raw_local_chapters + files = Dir.glob(Rails.root.join("node_modules/osm-community-index/i18n/*")) + files.each do |file| + locale = File.basename(file,".yaml") + community_index_yaml = YAML.safe_load(File.read(file))[locale] + # rails wants en-GB but osm-community-index has en_GB + locale_rails = locale.split("_").join("-") + data = {} + + raw_local_chapters.each do |chapter| + id = chapter[:id] + resource = chapter[:resource] + + strings = community_index_yaml[id] || {} + # if the name isn't defined then fall back on community, + # as per discussion here: https://github.com/osmlab/osm-community-index/issues/483 + strings['name'] = strings['name'] || resource["strings"]["name"] || resource["strings"]["community"] + + data.deep_merge!({"osm_community_index" => {"local_chapter" => {id => strings}}}) + end + end + end + end +end diff --git a/lib/osm_community_index/osm_community_index.rb b/lib/osm_community_index/osm_community_index.rb new file mode 100644 index 000000000..cceb1e05b --- /dev/null +++ b/lib/osm_community_index/osm_community_index.rb @@ -0,0 +1,15 @@ +module OsmCommunityIndex + class OsmCommunityIndex + require "yaml" + + def self.community_index + @community_index ||= community_index_from_json + end + + def self.community_index_from_json + json_file = Rails.root.join("node_modules/osm-community-index/dist/resources.json") + JSON.parse(File.read(json_file)) + end + + end +end diff --git a/package.json b/package.json index 5a50c3c21..944ac1ba9 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "js-cookie": "^3.0.0", "leaflet": "^1.6.0", "leaflet.locatecontrol": "^0.75.0", + "osm-community-index": "^5.1.3", "qs": "^6.9.4" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index c13ba6942..385a1b33a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -156,6 +156,11 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +diacritics@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/diacritics/-/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1" + integrity sha1-PvqHMj67hj5mls67AILUj/PW96E= + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -523,6 +528,13 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +osm-community-index@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/osm-community-index/-/osm-community-index-5.1.3.tgz#df2bd0db2b3e43b95fa026138905dc2f3f473062" + integrity sha512-kERHt/O+QFp7DB5jH/Pkh3P1GwT3vH+lYskN7EVEBcnnsW8AIcdGpmQDlLO9IZNCbzmP7YY81wlUv8AuWKUTIg== + dependencies: + diacritics "^1.3.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"