Module: Cosensee
- Defined in:
- lib/cosensee/page.rb,
lib/cosensee.rb,
lib/cosensee/user.rb,
lib/cosensee/error.rb,
lib/cosensee/project.rb,
lib/cosensee/version.rb,
lib/cosensee/node/code.rb,
lib/cosensee/node/link.rb,
lib/cosensee/cli/option.rb,
lib/cosensee/cli/parser.rb,
lib/cosensee/node/quote.rb,
lib/cosensee/page_store.rb,
lib/cosensee/web_server.rb,
lib/cosensee/delegatable.rb,
lib/cosensee/line_parser.rb,
lib/cosensee/node/indent.rb,
lib/cosensee/parsed_line.rb,
lib/cosensee/html_builder.rb,
lib/cosensee/api/page_data.rb,
lib/cosensee/node/hash_tag.rb,
lib/cosensee/bracket_parser.rb,
lib/cosensee/html_encodable.rb,
lib/cosensee/link_encodable.rb,
lib/cosensee/node/codeblock.rb,
lib/cosensee/parsed_bracket.rb,
lib/cosensee/cli/initializer.rb,
lib/cosensee/tailwind_command.rb,
lib/cosensee/node/command_line.rb,
lib/cosensee/node/icon_bracket.rb,
lib/cosensee/node/text_bracket.rb,
lib/cosensee/tailwind_renderer.rb,
lib/cosensee/bracket_serializer.rb,
lib/cosensee/node/blank_bracket.rb,
lib/cosensee/node/empty_bracket.rb,
lib/cosensee/node/image_bracket.rb,
lib/cosensee/node/double_bracket.rb,
lib/cosensee/node/formula_bracket.rb,
lib/cosensee/node/youtube_bracket.rb,
lib/cosensee/node/decorate_bracket.rb,
lib/cosensee/render_class_findable.rb,
lib/cosensee/web_content_generator.rb,
lib/cosensee/tailwind_renderer/code.rb,
lib/cosensee/tailwind_renderer/link.rb,
lib/cosensee/tailwind_renderer/page.rb,
lib/cosensee/tailwind_renderer/quote.rb,
lib/cosensee/node/gyazo_image_bracket.rb,
lib/cosensee/node/external_link_bracket.rb,
lib/cosensee/node/internal_link_bracket.rb,
lib/cosensee/tailwind_renderer/hash_tag.rb,
lib/cosensee/tailwind_renderer/codeblock.rb,
lib/cosensee/node/spotify_playlist_bracket.rb,
lib/cosensee/tailwind_renderer/parsed_line.rb,
lib/cosensee/tailwind_renderer/command_line.rb,
lib/cosensee/tailwind_renderer/icon_bracket.rb,
lib/cosensee/tailwind_renderer/text_bracket.rb,
lib/cosensee/web_server/static_file_handler.rb,
lib/cosensee/tailwind_renderer/blank_bracket.rb,
lib/cosensee/tailwind_renderer/empty_bracket.rb,
lib/cosensee/tailwind_renderer/image_bracket.rb,
lib/cosensee/tailwind_renderer/double_bracket.rb,
lib/cosensee/tailwind_renderer/formula_bracket.rb,
lib/cosensee/tailwind_renderer/inline_svg_text.rb,
lib/cosensee/tailwind_renderer/youtube_bracket.rb,
lib/cosensee/tailwind_renderer/decorate_bracket.rb,
lib/cosensee/tailwind_renderer/gyazo_image_bracket.rb,
lib/cosensee/tailwind_renderer/external_link_bracket.rb,
lib/cosensee/tailwind_renderer/internal_link_bracket.rb,
lib/cosensee/tailwind_renderer/spotify_playlist_bracket.rb
Overview
require ‘uri’
Defined Under Namespace
Modules: Api, BracketSerializer, Delegatable, HtmlEncodable, LinkEncodable, Node, RenderClassFindable, TailwindCommand Classes: BracketParser, CLI, Error, HtmlBuilder, LineParser, PageStore, ParsedBracket, ParsedLine, Project, TailwindRenderer, WebContentGenerator, WebServer
Constant Summary collapse
- MAX_SUMMARY_LINE =
10
- MAX_SUMMARY_TEXT_SIZE =
300
- DEFAULT_OUTPUT_DIR =
'./dist'
- DEFAULT_CSS_DIR =
'css'
- DEFAULT_PORT =
'1212'
- TAILWIND_CONFIG_FILE =
'tailwind.config.js'
- Page =
for Page
Data.define(:id, :title, :created, :updated, :views, :lines) do def self.from_array(args_list) args_list.map do |args| if args.is_a?(Cosensee::Page) args else new(**args) end end end def initialize(id:, title:, created:, updated:, views:, lines:) 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), updated: Time.at(updated), views:, lines: ) end attr_accessor :parsed_lines, :linking_page_titles, :first_image 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 summary_text parsed_lines.map(&:to_s).join.slice(0, MAX_SUMMARY_TEXT_SIZE) end 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('=', '=3d').gsub('/', '=2F').gsub('#', '=23') "#{body}.html" end 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 def to_json(*) to_obj.to_json(*) end def inspect "#<data Cosensee::Page id: #{id}, title: #{title}>" end end
- User =
for User
Data.define(:id, :name, :display_name, :email) do def self.from_array(users_args) users_args.map do |args| if args.is_a?(Cosensee::User) args else new(**args) end end end # allow both `:display_key` and `:displayKey` def initialize(id:, name:, email:, **kwargs) display_name = if kwargs.keys == [:display_name] kwargs[:display_name] elsif kwargs.keys == [:displayName] kwargs[:displayName] else raise Cosensee::Error, 'Cosensee::User.new need an argument :display_name or :displayName' end super( id:, display_name:, name:, email: ) end def to_obj { id:, name:, displayName: display_name, email: } end def to_json(*) to_obj.to_json(*) end end
- VERSION =
'0.8.0'