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