[openstreetmap/openstreetmap-website] Add URL prettification for plain texts (PR #6518)

Pablo Brasero notifications at github.com
Wed Nov 12 12:21:33 UTC 2025


@pablobm commented on this pull request.



>        end.html_safe
     end
 
     private
 
+    def unshorten_links(text)
+      Settings.linkify.paths.each do |path_rule|

Probably worth providing for the case where this setting is not present. This appears to be done for `Settings.linkify_hosts`, as `shorten_host` does `hosts&.include(host)`.

```suggestion
      linkify_paths = Array.wrap(Settings.linkify&.paths)
      linkify_paths.each do |path_rule|
```

> +        path_rule.list.each do |expression|
+          text.gsub!(Regexp.new("(?<before>\\s|^|>)(?i)#{expression}(?<after>\\s|$|<)"), "\\k<before>#{Settings.server_protocol}://#{path_rule.host || Settings.server_url}/#{path_rule.replacement}\\k<after>") if path_rule.replacement
+        end
+      end
+      [[Settings.linkify_hosts, Settings.linkify_hosts_replacement], [Settings.linkify_wiki_hosts, Settings.linkify_wiki_hosts_replacement]].each do |hosts, replacement|
+        text.gsub!(/(\s)#{Regexp.escape(replacement)}/, "\\1#{Settings.server_protocol}://#{hosts[0]}") if replacement && hosts&.any?
+      end
+      text
+    end
+
+    def shorten_link(url)
+      url = shorten_host(url, Settings.linkify_hosts, Settings.linkify_hosts_replacement)
+      url = shorten_host(url, Settings.linkify_wiki_hosts, Settings.linkify_wiki_hosts_replacement) do |path|
+        path.sub(Regexp.new(Settings.linkify_wiki_optional_path_prefix || ""), "")
+      end
+      Settings.linkify.print.each do |print_rule|

Similarly:

```suggestion
      linkify_print = Array.wrap(Settings.linkify&.print)
      linkify_print.each do |print_rule|
```

> +      replacement: "way/\\k<id>"
+    - list: ["relation/(?<id>\\d+)", "relation (?<id>\\d{5,})", "r(?<id>\\d+)"]
+      replacement: "relation/\\k<id>"
+    - list: ["changeset/(?<id>\\d+)", "changeset (?<id>\\d{5,})", "cs ?(?<id>\\d{5,})"]
+      replacement: "changeset/\\k<id>"
+    - list: ["note/(?<id>\\d+)", "note (?<id>\\d{5,})"]
+      replacement: "note/\\k<id>"
+    - list: ["user/(?<username>[^\\s]+)", "@(?<username>[^\\s]+)"]
+      replacement: "user/\\k<username>"
+    - list: ["(?<key>[^\"?#<>/\\s]+)=\\*?"]
+      replacement: "wiki/Key:\\k<key>"
+      host: "wiki.openstreetmap.org"
+    - list: ["(?<key>[^\"?#<>/\\s]+)=(?<value>[^\"?#<>\\s]+)"]
+      replacement: "wiki/Tag:\\k<key>=\\k<value>"
+      host: "wiki.openstreetmap.org"
+  print:

I was a bit confused about the word `print` here, but now that I've looked into this in a bit more detail, I'm very confused 😅 with all this `shorten`, `unshorten`, `print` and `paths`.

Would you be able to explain the pipeline for me to understand? An example of how the transformations take place.

-- 
Reply to this email directly or view it on GitHub:
https://github.com/openstreetmap/openstreetmap-website/pull/6518#pullrequestreview-3453087583
You are receiving this because you are subscribed to this thread.

Message ID: <openstreetmap/openstreetmap-website/pull/6518/review/3453087583 at github.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/rails-dev/attachments/20251112/97dfbb24/attachment.htm>


More information about the rails-dev mailing list