cosensee 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +13 -2
  3. data/README.md +25 -7
  4. data/Rakefile +1 -1
  5. data/assets/js/search.js +42 -0
  6. data/assets/styles/input.css +3 -0
  7. data/exe/cosensee +36 -0
  8. data/lib/cosensee/api/page_data.rb +43 -0
  9. data/lib/cosensee/bracket_parser.rb +21 -16
  10. data/lib/cosensee/bracket_serializer.rb +3 -1
  11. data/lib/cosensee/cli/initializer.rb +64 -0
  12. data/lib/cosensee/cli/option.rb +65 -0
  13. data/lib/cosensee/cli/parser.rb +83 -0
  14. data/lib/cosensee/delegatable.rb +33 -0
  15. data/lib/cosensee/html_builder.rb +26 -17
  16. data/lib/cosensee/line_parser.rb +29 -16
  17. data/lib/cosensee/node/blank_bracket.rb +10 -0
  18. data/lib/cosensee/node/code.rb +20 -0
  19. data/lib/cosensee/node/codeblock.rb +32 -0
  20. data/lib/cosensee/node/command_line.rb +20 -0
  21. data/lib/cosensee/node/decorate_bracket.rb +23 -0
  22. data/lib/cosensee/node/double_bracket.rb +22 -0
  23. data/lib/cosensee/node/empty_bracket.rb +10 -0
  24. data/lib/cosensee/node/external_link_bracket.rb +10 -0
  25. data/lib/cosensee/node/formula_bracket.rb +10 -0
  26. data/lib/cosensee/node/gyazo_image_bracket.rb +10 -0
  27. data/lib/cosensee/node/hash_tag.rb +21 -0
  28. data/lib/cosensee/node/icon_bracket.rb +10 -0
  29. data/lib/cosensee/node/image_bracket.rb +10 -0
  30. data/lib/cosensee/node/indent.rb +27 -0
  31. data/lib/cosensee/node/internal_link_bracket.rb +10 -0
  32. data/lib/cosensee/node/link.rb +20 -0
  33. data/lib/cosensee/node/quote.rb +26 -0
  34. data/lib/cosensee/node/spotify_playlist_bracket.rb +10 -0
  35. data/lib/cosensee/node/text_bracket.rb +12 -0
  36. data/lib/cosensee/node/youtube_bracket.rb +10 -0
  37. data/lib/cosensee/page.rb +46 -16
  38. data/lib/cosensee/page_store.rb +25 -2
  39. data/lib/cosensee/parsed_line.rb +24 -6
  40. data/lib/cosensee/project.rb +21 -6
  41. data/lib/cosensee/render_class_findable.rb +13 -0
  42. data/lib/cosensee/tailwind_command.rb +24 -0
  43. data/lib/cosensee/tailwind_renderer/blank_bracket.rb +1 -1
  44. data/lib/cosensee/tailwind_renderer/code.rb +1 -1
  45. data/lib/cosensee/tailwind_renderer/codeblock.rb +22 -0
  46. data/lib/cosensee/tailwind_renderer/command_line.rb +1 -1
  47. data/lib/cosensee/tailwind_renderer/decorate_bracket.rb +1 -1
  48. data/lib/cosensee/tailwind_renderer/double_bracket.rb +2 -2
  49. data/lib/cosensee/tailwind_renderer/empty_bracket.rb +1 -1
  50. data/lib/cosensee/tailwind_renderer/external_link_bracket.rb +1 -1
  51. data/lib/cosensee/tailwind_renderer/formula_bracket.rb +1 -1
  52. data/lib/cosensee/tailwind_renderer/gyazo_image_bracket.rb +15 -0
  53. data/lib/cosensee/tailwind_renderer/hash_tag.rb +1 -1
  54. data/lib/cosensee/tailwind_renderer/icon_bracket.rb +4 -3
  55. data/lib/cosensee/tailwind_renderer/image_bracket.rb +3 -3
  56. data/lib/cosensee/tailwind_renderer/inline_svg_text.rb +37 -0
  57. data/lib/cosensee/tailwind_renderer/internal_link_bracket.rb +1 -1
  58. data/lib/cosensee/tailwind_renderer/link.rb +1 -1
  59. data/lib/cosensee/tailwind_renderer/page.rb +3 -18
  60. data/lib/cosensee/tailwind_renderer/parsed_line.rb +4 -3
  61. data/lib/cosensee/tailwind_renderer/quote.rb +2 -2
  62. data/lib/cosensee/tailwind_renderer/spotify_playlist_bracket.rb +11 -0
  63. data/lib/cosensee/tailwind_renderer/text_bracket.rb +2 -2
  64. data/lib/cosensee/tailwind_renderer/youtube_bracket.rb +11 -0
  65. data/lib/cosensee/tailwind_renderer.rb +6 -11
  66. data/lib/cosensee/user.rb +7 -1
  67. data/lib/cosensee/version.rb +1 -1
  68. data/lib/cosensee/web_content_generator.rb +77 -0
  69. data/lib/cosensee/web_server/static_file_handler.rb +43 -0
  70. data/lib/cosensee/web_server.rb +38 -0
  71. data/lib/cosensee.rb +45 -20
  72. data/templates/index.html.erb +49 -27
  73. data/templates/page.html.erb +85 -29
  74. metadata +114 -23
  75. data/lib/cosensee/blank_bracket.rb +0 -8
  76. data/lib/cosensee/code.rb +0 -18
  77. data/lib/cosensee/codeblock.rb +0 -18
  78. data/lib/cosensee/command_line.rb +0 -18
  79. data/lib/cosensee/decorate_bracket.rb +0 -16
  80. data/lib/cosensee/double_bracket.rb +0 -20
  81. data/lib/cosensee/empty_bracket.rb +0 -8
  82. data/lib/cosensee/external_link_bracket.rb +0 -8
  83. data/lib/cosensee/formula_bracket.rb +0 -8
  84. data/lib/cosensee/hash_tag.rb +0 -19
  85. data/lib/cosensee/icon_bracket.rb +0 -8
  86. data/lib/cosensee/image_bracket.rb +0 -8
  87. data/lib/cosensee/indent.rb +0 -25
  88. data/lib/cosensee/internal_link_bracket.rb +0 -8
  89. data/lib/cosensee/line.rb +0 -47
  90. data/lib/cosensee/link.rb +0 -18
  91. data/lib/cosensee/quote.rb +0 -22
  92. data/lib/cosensee/tailwind_renderer/codeblock_builder.rb +0 -37
  93. data/lib/cosensee/text_bracket.rb +0 -10
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module Cosensee
6
- # for command line
7
- CommandLine = Data.define(:content, :prompt, :raw) do
8
- alias_method :to_s, :raw
9
-
10
- def to_obj
11
- "#{prompt} #{content}"
12
- end
13
-
14
- def to_json(*)
15
- to_obj.to_json(*)
16
- end
17
- end
18
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cosensee
4
- # for Decorate
5
- DecorateBracket = Data.define(
6
- :content,
7
- :font_size,
8
- :underlined,
9
- :slanted,
10
- :deleted,
11
- :text,
12
- :raw
13
- ) do
14
- include BracketSerializer
15
- end
16
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cosensee
4
- # for double Bracket
5
- DoubleBracket = Data.define(:content, :raw) do
6
- def image?
7
- content.size == 1 && content[0].match?(/\.(png|jpg)$/)
8
- end
9
-
10
- alias_method :to_s, :raw
11
-
12
- def to_obj
13
- "[[#{content}]]"
14
- end
15
-
16
- def to_json(*)
17
- to_obj.to_json(*)
18
- end
19
- end
20
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cosensee
4
- # for empty bracket
5
- EmptyBracket = Data.define(:content, :raw) do
6
- include BracketSerializer
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cosensee
4
- # for Formula
5
- ExternalLinkBracket = Data.define(:content, :link, :anchor, :raw) do
6
- include BracketSerializer
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cosensee
4
- # for Formula
5
- FormulaBracket = Data.define(:content, :formula, :raw) do
6
- include BracketSerializer
7
- end
8
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module Cosensee
6
- # parse a hash tag
7
- HashTag = Data.define(:content, :raw) do
8
- alias_method :to_s, :raw
9
- alias_method :anchor, :content
10
-
11
- def to_obj
12
- "##{content}"
13
- end
14
-
15
- def to_json(*)
16
- to_obj.to_json(*)
17
- end
18
- end
19
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cosensee
4
- # for Icon
5
- IconBracket = Data.define(:content, :icon_name) do
6
- include BracketSerializer
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cosensee
4
- # for Image
5
- ImageBracket = Data.define(:content, :link, :src, :raw) do
6
- include BracketSerializer
7
- end
8
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module Cosensee
6
- # for normal Text
7
- Indent = Data.define(:content, :raw) do
8
- def initialize(content: '', raw: '')
9
- @level = content.size
10
- super
11
- end
12
-
13
- attr_reader :level
14
-
15
- alias_method :to_s, :raw
16
-
17
- def to_obj
18
- content
19
- end
20
-
21
- def to_json(*)
22
- to_obj.to_json(*)
23
- end
24
- end
25
- end
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cosensee
4
- # for Icon
5
- InternalLinkBracket = Data.define(:content, :link, :anchor, :raw) do
6
- include BracketSerializer
7
- end
8
- end
data/lib/cosensee/line.rb DELETED
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module Cosensee
6
- # for Line
7
- Line = Data.define(:content, :parsed) do
8
- def self.from_array(lines_args)
9
- lines_args.map { |arg| new(arg) }
10
- end
11
-
12
- def initialize(content:)
13
- super(
14
- content:,
15
- parsed: LineParser.parse(content)
16
- )
17
- end
18
-
19
- def brackets
20
- content.scan(/\[.+?\]/)
21
- end
22
-
23
- def some_images?
24
- brackets.any? { |item| item.match?(/\.(png|jpg)$/) }
25
- end
26
-
27
- def first_image
28
- brackets.find { |item| item.match?(/\.(png|jpg)$/) }
29
- end
30
-
31
- def indent_level
32
- content.match(/\A([\t ]*)/)[1].size
33
- end
34
-
35
- def indented?
36
- content.match?(/\A[\t ]/)
37
- end
38
-
39
- def to_obj
40
- content
41
- end
42
-
43
- def to_json(*)
44
- to_obj.to_json(*)
45
- end
46
- end
47
- end
data/lib/cosensee/link.rb DELETED
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module Cosensee
6
- # link node
7
- Link = Data.define(:content, :raw) do
8
- alias_method :to_s, :raw
9
-
10
- def to_obj
11
- content
12
- end
13
-
14
- def to_json(*)
15
- to_obj.to_json(*)
16
- end
17
- end
18
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module Cosensee
6
- # for quote
7
- Quote = Data.define(:content, :raw, :mark) do
8
- alias_method :to_s, :raw
9
-
10
- def replace_content(new_content)
11
- Quote.new(content: new_content, raw:, mark:)
12
- end
13
-
14
- def to_obj
15
- content
16
- end
17
-
18
- def to_json(*)
19
- to_obj.to_json(*)
20
- end
21
- end
22
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Cosensee
4
- class TailwindRenderer
5
- # connect parsed lines to a code block
6
- class CodeblockBuilder
7
- include HtmlEncodable
8
-
9
- def initialize(parsed_line)
10
- @first_line = parsed_line
11
- @base_indent_level = parsed_line.indent_level
12
- @lines = []
13
- end
14
-
15
- attr_reader :first_line, :lines, :base_indent_level
16
-
17
- def append(parsed_line)
18
- @lines << parsed_line
19
- end
20
-
21
- def continued_line?(parsed_line)
22
- parsed_line.indent_level >= base_indent_level
23
- end
24
-
25
- def render
26
- indent_level = base_indent_level * 2
27
- title = first_line.line_content.content
28
- <<~HTML_BLOCK
29
- <div class="relative pl-[#{indent_level}rem]">
30
- <div class="bg-orange-300 text-gray-900 px-4 py-1 rounded-t-lg font-mono text-sm">#{title}</div>
31
- <div class="px-4 bg-gray-300 text-gray-900 rounded-b-lg shadow-md"><pre class="overflow-x-auto"><code class="block font-mono text-sm leading-relaxed">#{escape_html(lines.map(&:raw).join("\n"))}</code></pre></div>
32
- </div>
33
- HTML_BLOCK
34
- end
35
- end
36
- end
37
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module Cosensee
6
- # for mixed content (!= single text)
7
- TextBracket = Data.define(:content, :raw) do
8
- include BracketSerializer
9
- end
10
- end