milkdown_engine 0.1.1
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.
- checksums.yaml +7 -0
- data/LICENSE +201 -0
- data/README.md +15 -0
- data/Rakefile +11 -0
- data/app/assets/javascripts/milkdown_engine/milkdown.min.js +997 -0
- data/app/assets/stylesheets/milkdown_engine/application.css +40 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_AMS-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_AMS-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Bold.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Bold.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Bold.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Italic.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Italic.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Italic.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-Italic.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-Italic.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-Italic.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Script-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Script-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Script-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size1-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size1-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size2-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size2-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size3-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size3-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size4-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size4-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- data/app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- data/app/assets/stylesheets/milkdown_engine/milkdown.css +1 -0
- data/app/controllers/milkdown_engine/application_controller.rb +6 -0
- data/app/helpers/milkdown_engine/application_helper.rb +88 -0
- data/app/javascript/milkdown_engine/controllers/editor_controller.js +122 -0
- data/app/models/milkdown_engine/application_record.rb +7 -0
- data/app/models/milkdown_engine/md_document.rb +104 -0
- data/config/importmap.rb +8 -0
- data/config/routes.rb +4 -0
- data/db/migrate/20260325000000_create_milkdown_engine_md_documents.rb +16 -0
- data/lib/milkdown_engine/engine.rb +46 -0
- data/lib/milkdown_engine/version.rb +5 -0
- data/lib/milkdown_engine/version.rb.erb +5 -0
- data/lib/milkdown_engine.rb +7 -0
- metadata +175 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module MilkdownEngine
|
|
4
|
+
class MdDocument < ApplicationRecord
|
|
5
|
+
ChecklistItem = Data.define(:text, :checked)
|
|
6
|
+
Heading = Data.define(:level, :id, :text)
|
|
7
|
+
|
|
8
|
+
validates :content, presence: true
|
|
9
|
+
|
|
10
|
+
before_save :set_title_from_content, if: -> { title.blank? && content_changed? }
|
|
11
|
+
|
|
12
|
+
# ── JSON query helpers (PostgreSQL jsonb_path_query) ─────────────────
|
|
13
|
+
|
|
14
|
+
# Extract task-list items from the ProseMirror JSON stored in +content+.
|
|
15
|
+
#
|
|
16
|
+
# In Milkdown's ProseMirror output, task-list items are regular
|
|
17
|
+
# +list_item+ nodes whose +attrs.checked+ is +true+ or +false+
|
|
18
|
+
# (regular list items have +checked: null+).
|
|
19
|
+
#
|
|
20
|
+
# Returns an Array of ChecklistItem (text:, checked:).
|
|
21
|
+
def checklist_items
|
|
22
|
+
rows = exec_jsonb_query(<<~SQL.squish)
|
|
23
|
+
SELECT
|
|
24
|
+
(item #>> '{attrs,checked}')::boolean AS checked,
|
|
25
|
+
string_agg(text_node #>> '{text}', '' ORDER BY text_ord) AS item_text
|
|
26
|
+
FROM jsonb_path_query(
|
|
27
|
+
(SELECT content FROM milkdown_engine_md_documents WHERE id = :id),
|
|
28
|
+
'strict $.** ? (@.type == "list_item" && @.attrs.checked != null)'
|
|
29
|
+
) WITH ORDINALITY AS items(item, item_ord),
|
|
30
|
+
jsonb_path_query(item, 'strict $.** ? (@.type == "text")') WITH ORDINALITY AS texts(text_node, text_ord)
|
|
31
|
+
GROUP BY items.item_ord, item #>> '{attrs,checked}'
|
|
32
|
+
ORDER BY items.item_ord
|
|
33
|
+
SQL
|
|
34
|
+
|
|
35
|
+
rows.map { |row| ChecklistItem.new(text: row["item_text"], checked: row["checked"]) }
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Extract every heading from the document.
|
|
39
|
+
#
|
|
40
|
+
# Returns an Array of Heading (level:, id:, text:) in document order.
|
|
41
|
+
# Useful for building a table of contents.
|
|
42
|
+
def headings
|
|
43
|
+
rows = exec_jsonb_query(<<~SQL.squish)
|
|
44
|
+
SELECT
|
|
45
|
+
(heading #>> '{attrs,level}')::integer AS level,
|
|
46
|
+
heading #>> '{attrs,id}' AS id,
|
|
47
|
+
string_agg(text_node #>> '{text}', '' ORDER BY text_ord) AS heading_text
|
|
48
|
+
FROM jsonb_path_query(
|
|
49
|
+
(SELECT content FROM milkdown_engine_md_documents WHERE id = :id),
|
|
50
|
+
'strict $.** ? (@.type == "heading")'
|
|
51
|
+
) WITH ORDINALITY AS headings(heading, heading_ord),
|
|
52
|
+
jsonb_path_query(heading, 'strict $.** ? (@.type == "text")') WITH ORDINALITY AS texts(text_node, text_ord)
|
|
53
|
+
GROUP BY headings.heading_ord, heading #>> '{attrs,level}', heading #>> '{attrs,id}'
|
|
54
|
+
ORDER BY headings.heading_ord
|
|
55
|
+
SQL
|
|
56
|
+
|
|
57
|
+
rows.map { |row| Heading.new(level: row["level"], id: row["id"], text: row["heading_text"]) }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
alias_method :table_of_contents, :headings
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
# Execute a raw SQL string that contains jsonb_path_query expressions.
|
|
65
|
+
#
|
|
66
|
+
# We avoid +sanitize_sql_array+ here because its +?+ placeholder syntax
|
|
67
|
+
# conflicts with the +?+ filter operator in PostgreSQL jsonb path
|
|
68
|
+
# expressions (e.g. '$.** ? (@.type == "heading")').
|
|
69
|
+
#
|
|
70
|
+
# Instead we interpolate the quoted id via +:id+ and +connection.quote+.
|
|
71
|
+
def exec_jsonb_query(sql)
|
|
72
|
+
quoted = sql.gsub(":id", self.class.connection.quote(id))
|
|
73
|
+
self.class.connection.select_all(quoted)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Walk the ProseMirror JSON tree in Ruby to find the first heading's text.
|
|
77
|
+
# Runs before save so it doesn't require a DB round-trip.
|
|
78
|
+
def set_title_from_content
|
|
79
|
+
return unless content.is_a?(Hash)
|
|
80
|
+
|
|
81
|
+
heading = first_node_of_type(content, "heading")
|
|
82
|
+
return unless heading
|
|
83
|
+
|
|
84
|
+
self.title = collect_text(heading).presence
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def first_node_of_type(node, type)
|
|
88
|
+
return node if node["type"] == type
|
|
89
|
+
|
|
90
|
+
Array(node["content"]).each do |child|
|
|
91
|
+
found = first_node_of_type(child, type)
|
|
92
|
+
return found if found
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
nil
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def collect_text(node)
|
|
99
|
+
return node["text"].to_s if node["type"] == "text"
|
|
100
|
+
|
|
101
|
+
Array(node["content"]).map { |child| collect_text(child) }.join
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
data/config/importmap.rb
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Vendored Milkdown bundle (built by esbuild from src/)
|
|
4
|
+
pin "milkdown_engine/milkdown", to: "milkdown_engine/milkdown.min.js"
|
|
5
|
+
|
|
6
|
+
# MilkdownEngine Stimulus controllers
|
|
7
|
+
pin_all_from MilkdownEngine::Engine.root.join("app/javascript/milkdown_engine/controllers"),
|
|
8
|
+
under: "controllers/milkdown_engine", to: "milkdown_engine/controllers"
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class CreateMilkdownEngineMdDocuments < ActiveRecord::Migration[8.1]
|
|
4
|
+
def change
|
|
5
|
+
create_table :milkdown_engine_md_documents do |t|
|
|
6
|
+
t.string :title
|
|
7
|
+
t.jsonb :content, null: false,
|
|
8
|
+
default: { type: "doc", content: [{ type: "paragraph" }] }
|
|
9
|
+
t.timestamps
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
add_index :milkdown_engine_md_documents, :content,
|
|
13
|
+
using: :gin, opclass: :jsonb_path_ops,
|
|
14
|
+
name: "idx_md_documents_content_path"
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "ui"
|
|
4
|
+
|
|
5
|
+
module MilkdownEngine
|
|
6
|
+
class Engine < ::Rails::Engine
|
|
7
|
+
isolate_namespace MilkdownEngine
|
|
8
|
+
|
|
9
|
+
# Register importmap pins for Stimulus controllers
|
|
10
|
+
initializer "milkdown_engine.importmap", before: "importmap" do |app|
|
|
11
|
+
if app.config.respond_to?(:importmap)
|
|
12
|
+
app.config.importmap.paths << Engine.root.join("config/importmap.rb")
|
|
13
|
+
app.config.importmap.cache_sweepers << Engine.root.join("app/javascript")
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Add engine assets to the asset load path (for propshaft/sprockets)
|
|
18
|
+
initializer "milkdown_engine.assets" do |app|
|
|
19
|
+
app.config.assets.paths << Engine.root.join("app/assets/javascripts")
|
|
20
|
+
app.config.assets.paths << Engine.root.join("app/assets/stylesheets")
|
|
21
|
+
|
|
22
|
+
# Stimulus controllers live under app/javascript/ — add it so
|
|
23
|
+
# importmap pin_all_from URLs resolve through the asset pipeline.
|
|
24
|
+
app.config.assets.paths << Engine.root.join("app/javascript")
|
|
25
|
+
|
|
26
|
+
# rails-active-ui ships stylesheets.css directly in app/assets/
|
|
27
|
+
app.config.assets.paths << Ui::Engine.root.join("app/assets")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Append engine migrations so host apps pick them up without copying
|
|
31
|
+
initializer "milkdown_engine.migrations", after: :load_config_initializers do |app|
|
|
32
|
+
unless app.root.to_s == root.to_s
|
|
33
|
+
engine_migrate_path = root.join("db/migrate").to_s
|
|
34
|
+
app.config.paths["db/migrate"] << engine_migrate_path
|
|
35
|
+
ActiveRecord::Migrator.migrations_paths << engine_migrate_path
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Make engine helpers available in host app views
|
|
40
|
+
initializer "milkdown_engine.helpers" do
|
|
41
|
+
ActiveSupport.on_load(:action_view) do
|
|
42
|
+
include MilkdownEngine::ApplicationHelper
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: milkdown_engine
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Nathan Kidd
|
|
8
|
+
bindir: bin
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-01 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: rails
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '8.1'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '8.1'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: importmap-rails
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: stimulus-rails
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: rails-active-ui
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
description: Provides a Milkdown-based rich markdown editor as a Rails engine with
|
|
69
|
+
Stimulus controllers, importmap integration, and rails-active-ui components.
|
|
70
|
+
email:
|
|
71
|
+
- nathankidd@hey.com
|
|
72
|
+
executables: []
|
|
73
|
+
extensions: []
|
|
74
|
+
extra_rdoc_files: []
|
|
75
|
+
files:
|
|
76
|
+
- LICENSE
|
|
77
|
+
- README.md
|
|
78
|
+
- Rakefile
|
|
79
|
+
- app/assets/javascripts/milkdown_engine/milkdown.min.js
|
|
80
|
+
- app/assets/stylesheets/milkdown_engine/application.css
|
|
81
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_AMS-Regular.ttf
|
|
82
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_AMS-Regular.woff
|
|
83
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_AMS-Regular.woff2
|
|
84
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Bold.ttf
|
|
85
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Bold.woff
|
|
86
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Bold.woff2
|
|
87
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Regular.ttf
|
|
88
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Regular.woff
|
|
89
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Caligraphic-Regular.woff2
|
|
90
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Bold.ttf
|
|
91
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Bold.woff
|
|
92
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Bold.woff2
|
|
93
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Regular.ttf
|
|
94
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Regular.woff
|
|
95
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Fraktur-Regular.woff2
|
|
96
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Bold.ttf
|
|
97
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Bold.woff
|
|
98
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Bold.woff2
|
|
99
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-BoldItalic.ttf
|
|
100
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-BoldItalic.woff
|
|
101
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-BoldItalic.woff2
|
|
102
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Italic.ttf
|
|
103
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Italic.woff
|
|
104
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Italic.woff2
|
|
105
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Regular.ttf
|
|
106
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Regular.woff
|
|
107
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Main-Regular.woff2
|
|
108
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-BoldItalic.ttf
|
|
109
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-BoldItalic.woff
|
|
110
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-BoldItalic.woff2
|
|
111
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-Italic.ttf
|
|
112
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-Italic.woff
|
|
113
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Math-Italic.woff2
|
|
114
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Bold.ttf
|
|
115
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Bold.woff
|
|
116
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Bold.woff2
|
|
117
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Italic.ttf
|
|
118
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Italic.woff
|
|
119
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Italic.woff2
|
|
120
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Regular.ttf
|
|
121
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Regular.woff
|
|
122
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_SansSerif-Regular.woff2
|
|
123
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Script-Regular.ttf
|
|
124
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Script-Regular.woff
|
|
125
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Script-Regular.woff2
|
|
126
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size1-Regular.ttf
|
|
127
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size1-Regular.woff
|
|
128
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size1-Regular.woff2
|
|
129
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size2-Regular.ttf
|
|
130
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size2-Regular.woff
|
|
131
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size2-Regular.woff2
|
|
132
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size3-Regular.ttf
|
|
133
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size3-Regular.woff
|
|
134
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size3-Regular.woff2
|
|
135
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size4-Regular.ttf
|
|
136
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size4-Regular.woff
|
|
137
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Size4-Regular.woff2
|
|
138
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Typewriter-Regular.ttf
|
|
139
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Typewriter-Regular.woff
|
|
140
|
+
- app/assets/stylesheets/milkdown_engine/fonts/KaTeX_Typewriter-Regular.woff2
|
|
141
|
+
- app/assets/stylesheets/milkdown_engine/milkdown.css
|
|
142
|
+
- app/controllers/milkdown_engine/application_controller.rb
|
|
143
|
+
- app/helpers/milkdown_engine/application_helper.rb
|
|
144
|
+
- app/javascript/milkdown_engine/controllers/editor_controller.js
|
|
145
|
+
- app/models/milkdown_engine/application_record.rb
|
|
146
|
+
- app/models/milkdown_engine/md_document.rb
|
|
147
|
+
- config/importmap.rb
|
|
148
|
+
- config/routes.rb
|
|
149
|
+
- db/migrate/20260325000000_create_milkdown_engine_md_documents.rb
|
|
150
|
+
- lib/milkdown_engine.rb
|
|
151
|
+
- lib/milkdown_engine/engine.rb
|
|
152
|
+
- lib/milkdown_engine/version.rb
|
|
153
|
+
- lib/milkdown_engine/version.rb.erb
|
|
154
|
+
homepage: https://github.com/n-at-han-k/milkdown-engine
|
|
155
|
+
licenses:
|
|
156
|
+
- Apache-2.0
|
|
157
|
+
metadata: {}
|
|
158
|
+
rdoc_options: []
|
|
159
|
+
require_paths:
|
|
160
|
+
- lib
|
|
161
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
162
|
+
requirements:
|
|
163
|
+
- - ">="
|
|
164
|
+
- !ruby/object:Gem::Version
|
|
165
|
+
version: '3.2'
|
|
166
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
|
+
requirements:
|
|
168
|
+
- - ">="
|
|
169
|
+
- !ruby/object:Gem::Version
|
|
170
|
+
version: '0'
|
|
171
|
+
requirements: []
|
|
172
|
+
rubygems_version: 3.7.2
|
|
173
|
+
specification_version: 4
|
|
174
|
+
summary: Rails engine for Milkdown markdown editing
|
|
175
|
+
test_files: []
|