lib/cosensee/page.rb in cosensee-0.6.0 vs lib/cosensee/page.rb in cosensee-0.8.0
- old
+ new
@@ -5,20 +5,24 @@
module Cosensee
# for Page
Page = Data.define(:id, :title, :created, :updated, :views, :lines) do
def self.from_array(args_list)
- args_list.map { |args| new(**args) }
+ args_list.map do |args|
+ if args.is_a?(Cosensee::Page)
+ args
+ else
+ new(**args)
+ end
+ end
end
- def self.from_hash(obj)
- new(**obj)
- end
-
def initialize(id:, title:, created:, updated:, views:, lines:)
- @parsed_lines = Cosensee::Line.from_array(lines.drop(1)).map(&:parsed)
+ temp_lines = lines.drop(1).map { |arg| LineParser.parse(arg) }
+ @parsed_lines = LineParser.merge_blocks(temp_lines)
@linking_page_titles = @parsed_lines.map(&:internal_links).flatten
+ @first_image = @parsed_lines.find(&:first_image)&.first_image
super(
id:,
title:,
created: Time.at(created),
@@ -26,32 +30,58 @@
views:,
lines:
)
end
- attr_accessor :parsed_lines, :linking_page_titles
+ attr_accessor :parsed_lines, :linking_page_titles, :first_image
- def body_lines
- lines.drop(1)
+ def summary
+ if (image = first_image)
+ if image.is_a?(Cosensee::Node::GyazoImageBracket)
+ %(<img src="#{image.src}/raw" loading="lazy">)
+ else
+ %(<img src="#{image.src}" loading="lazy">)
+ end
+ else
+ parsed_lines.map(&:to_s).take(MAX_SUMMARY_LINE).join
+ end
end
- def some_images?
- lines.any?(&:some_image?)
+ def summary_text
+ parsed_lines.map(&:to_s).join.slice(0, MAX_SUMMARY_TEXT_SIZE)
end
- def first_image
- lines.find(&:some_image?)&.first_image
+ def description
+ summary_text
end
+ def ogp_image_url
+ first_image
+ end
+
+ def song_page?
+ parsed_lines.any?(&:song_tagged?)
+ end
+
+ def body_lines
+ lines.drop(1)
+ end
+
def link_path
# body = URI.encode_www_form_component(title.gsub(/ /, '_'))
- body = title.gsub(/ /, '_').gsub('/', '%2F')
+ body = title.gsub(/ /, '_').gsub('=', '=3d').gsub('/', '=2F').gsub('#', '=23')
"#{body}.html"
end
- def to_html
- Cosensee::TailwindRenderer.new(content: self).render
+ def full_url(base_url:)
+ return unless base_url && link_path
+
+ "#{base_url}/#{link_path}"
+ end
+
+ def to_html(project: nil)
+ Cosensee::TailwindRenderer.new(content: self, project:).render
end
def to_obj
{ id:, title:, created: created.to_i, updated: updated.to_i, views:, lines: }
end