]> git.openstreetmap.org Git - rails.git/blobdiff - app/helpers/open_graph_helper.rb
Merge remote-tracking branch 'upstream/pull/5135'
[rails.git] / app / helpers / open_graph_helper.rb
index 99b8d00a3f95dc97d7b66d40bb10facd1e9e690c..cde848e5d13762ac718431632aaf44c597c3bf54 100644 (file)
@@ -1,17 +1,40 @@
 module OpenGraphHelper
 module OpenGraphHelper
-  def opengraph_tags(title = nil)
+  require "addressable/uri"
+
+  def opengraph_tags(title, properties)
     tags = {
       "og:site_name" => t("layouts.project_name.title"),
     tags = {
       "og:site_name" => t("layouts.project_name.title"),
-      "og:title" => [title, t("layouts.project_name.title")].compact.join(" | "),
+      "og:title" => title || t("layouts.project_name.title"),
       "og:type" => "website",
       "og:type" => "website",
-      "og:image" => image_url("osm_logo_256.png", :protocol => "http"),
-      "og:image:secure_url" => image_url("osm_logo_256.png", :protocol => "https"),
       "og:url" => url_for(:only_path => false),
       "og:url" => url_for(:only_path => false),
-      "og:description" => t("layouts.intro_text")
-    }
+      "og:description" => properties["og:description"] || t("layouts.intro_text")
+    }.merge(
+      opengraph_image_properties(properties)
+    ).merge(
+      properties.slice("article:published_time")
+    )
 
     safe_join(tags.map do |property, content|
 
     safe_join(tags.map do |property, content|
-      tag(:meta, :property => property, :content => content)
+      tag.meta(:property => property, :content => content)
     end, "\n")
   end
     end, "\n")
   end
+
+  private
+
+  def opengraph_image_properties(properties)
+    begin
+      if properties["og:image"]
+        image_properties = {}
+        image_properties["og:image"] = Addressable::URI.join(root_url, properties["og:image"]).normalize
+        image_properties["og:image:alt"] = properties["og:image:alt"] if properties["og:image:alt"]
+        return image_properties
+      end
+    rescue Addressable::URI::InvalidURIError
+      # return default image
+    end
+    {
+      "og:image" => image_url("osm_logo_256.png"),
+      "og:image:alt" => t("layouts.logo.alt_text")
+    }
+  end
 end
 end