Skip to content
Open
1 change: 1 addition & 0 deletions lib/onebox/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -201,3 +201,4 @@ def always_https?
require_relative "engine/reddit_media_onebox"
require_relative "engine/google_drive_onebox"
require_relative "engine/facebook_media_onebox"
require_relative "engine/notebook_page_onebox"
73 changes: 73 additions & 0 deletions lib/onebox/engine/notebook_page_onebox.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# frozen_string_literal: true

module Onebox
module Engine
class NotebookPageOnebox
include Engine
include StandardEmbed
include LayoutSupport

matches_regexp(/^https?:\/\/(?:www\.)?(?:(?:\w)+\.)?notebook\.ai\/plan\/*([^\/]+)\/(\d+)/)
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)

if html_doc.css('.Box.md')
# For links to markdown docs
node = html_doc.css('a.anchor').find { |n| n['href'] == "##{fragment}" }
subtitle = node&.parent&.text
elsif html_doc.css('.Box.rdoc')
# For links to rdoc docs
node = html_doc.css('h3').find { |n| n['id'] == "user-content-#{fragment.downcase}" }
subtitle = node&.css('text()')&.first&.text
end

title = "#{title} - #{subtitle}" if subtitle
end

{
link: url,
image: og.image,
title: Onebox::Helpers.truncate(title, 250),
path: og.url,
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
25 changes: 25 additions & 0 deletions templates/notebookpage.mustache
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{{#image}}
<a href="{{link}}" target="_blank" rel="noopener">
<img src="{{image}}" class="thumbnail"/>
</a>
{{/image}}

<h3>
<a href="{{link}}" target="_blank" rel="noopener">{{title}}</a>
</h3>

{{#description}}
<p>
<span class="label1">
{{description}}
</span>
</p>
{{/description}}

{{#path}}
<p>
<sub>
<a href="{{link}}" target="_blank" rel="noopener">{{path}}</a>
</sub>
</p>
{{/path}}