# frozen_string_literal: true module Onebox module Engine class GithubFolderOnebox include Engine include StandardEmbed include LayoutSupport matches_regexp(/^https?:\/\/(?:www\.)?(?:(?:\w)+\.)?(github)\.com[\:\d]*(\/[^\/]+){2}\/tree/) always_https private def data og = get_opengraph max_length = 250 display_path = extract_path(og.url, max_length) display_description = clean_description(og.description, og.title, max_length) title = og.title fragment = Addressable::URI.parse(url).fragment if fragment fragment = Addressable::URI.unencode(fragment) # For links to markdown and rdoc if html_doc.css(".Box.md, .Box.rdoc").present? node = html_doc.css("a.anchor").find { |n| n["href"] == "##{fragment}" } subtitle = node&.parent&.text end title = "#{title} - #{subtitle}" if subtitle end { link: url, title: Onebox::Helpers.truncate(title, 250), path: display_path, description: display_description, favicon: get_favicon, } end def extract_path(root, max_length) path = url.split("#")[0].split("?")[0] path = path["#{root}/tree/".length..-1] return unless path path.length > max_length ? path[-max_length..-1] : path end def clean_description(description, title, max_length) return unless description desc_end = " - #{title}" if description[-desc_end.length..-1] == desc_end description = description[0...-desc_end.length] end Onebox::Helpers.truncate(description, max_length) end end end end