panda-editor 0.4.0 → 0.6.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -0
- data/README.md +68 -0
- data/app/services/panda/editor/html_to_editor_js_converter.rb +68 -68
- data/config/importmap.rb +9 -9
- data/lib/panda/editor/asset_loader.rb +30 -32
- data/lib/panda/editor/blocks/alert.rb +10 -10
- data/lib/panda/editor/blocks/base.rb +1 -1
- data/lib/panda/editor/blocks/header.rb +2 -2
- data/lib/panda/editor/blocks/image.rb +11 -11
- data/lib/panda/editor/blocks/list.rb +5 -5
- data/lib/panda/editor/blocks/paragraph.rb +10 -10
- data/lib/panda/editor/blocks/quote.rb +6 -6
- data/lib/panda/editor/blocks/table.rb +6 -6
- data/lib/panda/editor/content.rb +8 -8
- data/lib/panda/editor/engine.rb +13 -9
- data/lib/panda/editor/footnote_registry.rb +6 -6
- data/lib/panda/editor/html_to_editor_js_converter.rb +159 -0
- data/lib/panda/editor/markdown_to_editor_js_converter.rb +50 -0
- data/lib/panda/editor/renderer.rb +31 -31
- data/lib/panda/editor/version.rb +1 -1
- data/lib/panda/editor.rb +17 -15
- data/lib/panda-editor.rb +5 -0
- data/lib/tasks/assets.rake +28 -28
- data/panda-editor.gemspec +24 -23
- metadata +35 -21
data/lib/panda/editor/version.rb
CHANGED
data/lib/panda/editor.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require_relative
|
|
5
|
-
require_relative
|
|
3
|
+
require 'dry-configurable'
|
|
4
|
+
require_relative 'editor/version'
|
|
5
|
+
require_relative 'editor/engine'
|
|
6
6
|
|
|
7
7
|
module Panda
|
|
8
8
|
module Editor
|
|
@@ -17,20 +17,22 @@ module Panda
|
|
|
17
17
|
|
|
18
18
|
class Error < StandardError; end
|
|
19
19
|
|
|
20
|
-
#
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
# Require components
|
|
21
|
+
require_relative 'editor/renderer'
|
|
22
|
+
require_relative 'editor/content'
|
|
23
|
+
require_relative 'editor/footnote_registry'
|
|
24
|
+
require_relative 'editor/markdown_to_editor_js_converter'
|
|
25
|
+
require_relative 'editor/html_to_editor_js_converter'
|
|
24
26
|
|
|
25
27
|
module Blocks
|
|
26
|
-
autoload :Base,
|
|
27
|
-
autoload :Alert,
|
|
28
|
-
autoload :Header,
|
|
29
|
-
autoload :Image,
|
|
30
|
-
autoload :List,
|
|
31
|
-
autoload :Paragraph,
|
|
32
|
-
autoload :Quote,
|
|
33
|
-
autoload :Table,
|
|
28
|
+
autoload :Base, 'panda/editor/blocks/base'
|
|
29
|
+
autoload :Alert, 'panda/editor/blocks/alert'
|
|
30
|
+
autoload :Header, 'panda/editor/blocks/header'
|
|
31
|
+
autoload :Image, 'panda/editor/blocks/image'
|
|
32
|
+
autoload :List, 'panda/editor/blocks/list'
|
|
33
|
+
autoload :Paragraph, 'panda/editor/blocks/paragraph'
|
|
34
|
+
autoload :Quote, 'panda/editor/blocks/quote'
|
|
35
|
+
autoload :Table, 'panda/editor/blocks/table'
|
|
34
36
|
end
|
|
35
37
|
end
|
|
36
38
|
end
|
data/lib/panda-editor.rb
ADDED
data/lib/tasks/assets.rake
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
namespace :panda_editor do
|
|
4
4
|
namespace :assets do
|
|
5
|
-
desc
|
|
5
|
+
desc 'Compile Panda Editor assets for production'
|
|
6
6
|
task compile: :environment do
|
|
7
|
-
require
|
|
7
|
+
require 'fileutils'
|
|
8
8
|
|
|
9
|
-
puts
|
|
9
|
+
puts 'Compiling Panda Editor assets...'
|
|
10
10
|
|
|
11
11
|
# Create temporary directory for assets
|
|
12
|
-
tmp_dir = Rails.root.join(
|
|
12
|
+
tmp_dir = Rails.root.join('tmp', 'panda_editor_assets')
|
|
13
13
|
FileUtils.mkdir_p(tmp_dir)
|
|
14
14
|
|
|
15
15
|
# Get version from gem
|
|
@@ -22,51 +22,51 @@ namespace :panda_editor do
|
|
|
22
22
|
compile_css(tmp_dir, version)
|
|
23
23
|
|
|
24
24
|
# Copy to public directory
|
|
25
|
-
public_dir = Rails.root.join(
|
|
25
|
+
public_dir = Rails.root.join('public', 'panda-editor-assets')
|
|
26
26
|
FileUtils.mkdir_p(public_dir)
|
|
27
|
-
FileUtils.cp_r(Dir.glob(tmp_dir.join(
|
|
27
|
+
FileUtils.cp_r(Dir.glob(tmp_dir.join('*')), public_dir)
|
|
28
28
|
|
|
29
|
-
puts
|
|
29
|
+
puts '✅ Assets compiled successfully'
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
desc
|
|
32
|
+
desc 'Download Panda Editor assets from GitHub'
|
|
33
33
|
task download: :environment do
|
|
34
|
-
require
|
|
34
|
+
require 'panda/editor/asset_loader'
|
|
35
35
|
|
|
36
|
-
puts
|
|
36
|
+
puts 'Downloading Panda Editor assets from GitHub...'
|
|
37
37
|
Panda::Editor::AssetLoader.send(:download_assets_from_github)
|
|
38
|
-
puts
|
|
38
|
+
puts '✅ Assets downloaded successfully'
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
desc
|
|
41
|
+
desc 'Upload compiled assets to GitHub release'
|
|
42
42
|
task upload: :environment do
|
|
43
|
-
require
|
|
44
|
-
require
|
|
43
|
+
require 'net/http'
|
|
44
|
+
require 'json'
|
|
45
45
|
|
|
46
|
-
puts
|
|
46
|
+
puts 'Uploading Panda Editor assets to GitHub release...'
|
|
47
47
|
|
|
48
48
|
# This task would be run in CI to upload compiled assets
|
|
49
49
|
# to the GitHub release when a new version is tagged
|
|
50
50
|
|
|
51
|
-
version = ENV[
|
|
52
|
-
token = ENV[
|
|
51
|
+
version = ENV['GITHUB_REF_NAME'] || "v#{Panda::Editor::VERSION}"
|
|
52
|
+
token = ENV['GITHUB_TOKEN']
|
|
53
53
|
|
|
54
54
|
unless token
|
|
55
|
-
puts
|
|
55
|
+
puts '❌ GITHUB_TOKEN environment variable required'
|
|
56
56
|
exit 1
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
# Find compiled assets
|
|
60
|
-
assets_dir = Rails.root.join(
|
|
61
|
-
js_file = Dir.glob(assets_dir.join(
|
|
62
|
-
css_file = Dir.glob(assets_dir.join(
|
|
60
|
+
assets_dir = Rails.root.join('public', 'panda-editor-assets')
|
|
61
|
+
js_file = Dir.glob(assets_dir.join('panda-editor-*.js')).first
|
|
62
|
+
css_file = Dir.glob(assets_dir.join('panda-editor-*.css')).first
|
|
63
63
|
|
|
64
64
|
if js_file && css_file
|
|
65
65
|
upload_to_release(js_file, version, token)
|
|
66
66
|
upload_to_release(css_file, version, token)
|
|
67
|
-
puts
|
|
67
|
+
puts '✅ Assets uploaded successfully'
|
|
68
68
|
else
|
|
69
|
-
puts
|
|
69
|
+
puts '❌ Compiled assets not found'
|
|
70
70
|
exit 1
|
|
71
71
|
end
|
|
72
72
|
end
|
|
@@ -74,9 +74,9 @@ namespace :panda_editor do
|
|
|
74
74
|
private
|
|
75
75
|
|
|
76
76
|
def compile_javascript(tmp_dir, version)
|
|
77
|
-
puts
|
|
77
|
+
puts ' Compiling JavaScript...'
|
|
78
78
|
|
|
79
|
-
js_files = Dir.glob(Panda::Editor::Engine.root.join(
|
|
79
|
+
js_files = Dir.glob(Panda::Editor::Engine.root.join('app/javascript/panda/editor/**/*.js'))
|
|
80
80
|
|
|
81
81
|
output = js_files.map { |file| File.read(file) }.join("\n\n")
|
|
82
82
|
|
|
@@ -88,9 +88,9 @@ namespace :panda_editor do
|
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
def compile_css(tmp_dir, version)
|
|
91
|
-
puts
|
|
91
|
+
puts ' Compiling CSS...'
|
|
92
92
|
|
|
93
|
-
css_files = Dir.glob(Panda::Editor::Engine.root.join(
|
|
93
|
+
css_files = Dir.glob(Panda::Editor::Engine.root.join('app/assets/stylesheets/panda/editor/**/*.css'))
|
|
94
94
|
|
|
95
95
|
output = css_files.map { |file| File.read(file) }.join("\n\n")
|
|
96
96
|
|
|
@@ -101,7 +101,7 @@ namespace :panda_editor do
|
|
|
101
101
|
File.write(tmp_dir.join("panda-editor-#{version}.css"), output)
|
|
102
102
|
end
|
|
103
103
|
|
|
104
|
-
def upload_to_release(file,
|
|
104
|
+
def upload_to_release(file, _version, _token)
|
|
105
105
|
# Implementation would upload to GitHub release
|
|
106
106
|
# This is a placeholder for the actual upload logic
|
|
107
107
|
puts " Uploading #{File.basename(file)}..."
|
data/panda-editor.gemspec
CHANGED
|
@@ -1,43 +1,44 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
3
|
+
require_relative 'lib/panda/editor/version'
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
|
-
spec.name =
|
|
6
|
+
spec.name = 'panda-editor'
|
|
7
7
|
spec.version = Panda::Editor::VERSION
|
|
8
|
-
spec.authors = [
|
|
9
|
-
spec.email = [
|
|
8
|
+
spec.authors = ['Otaina Limited', 'James Inman']
|
|
9
|
+
spec.email = ['james@otaina.co.uk']
|
|
10
10
|
|
|
11
|
-
spec.summary =
|
|
12
|
-
spec.description =
|
|
13
|
-
spec.homepage =
|
|
14
|
-
spec.license =
|
|
15
|
-
spec.required_ruby_version =
|
|
11
|
+
spec.summary = 'EditorJS integration for Rails applications'
|
|
12
|
+
spec.description = 'A modular, extensible rich text editor using EditorJS for Rails applications. Extracted from Panda CMS.'
|
|
13
|
+
spec.homepage = 'https://github.com/tastybamboo/panda-editor'
|
|
14
|
+
spec.license = 'BSD-3-Clause'
|
|
15
|
+
spec.required_ruby_version = '>= 3.2.0'
|
|
16
16
|
|
|
17
|
-
spec.metadata[
|
|
18
|
-
spec.metadata[
|
|
19
|
-
spec.metadata[
|
|
20
|
-
spec.metadata[
|
|
17
|
+
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
|
18
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
|
19
|
+
spec.metadata['source_code_uri'] = 'https://github.com/tastybamboo/panda-editor'
|
|
20
|
+
spec.metadata['changelog_uri'] = 'https://github.com/tastybamboo/panda-editor/blob/main/CHANGELOG.md'
|
|
21
21
|
|
|
22
22
|
spec.files = Dir.chdir(__dir__) do
|
|
23
23
|
`git ls-files -z`.split("\x0").reject do |f|
|
|
24
24
|
(File.expand_path(f) == __FILE__) ||
|
|
25
25
|
f.start_with?(*%w[bin/ test/ spec/ features/ .git .github appveyor Gemfile]) ||
|
|
26
|
-
f.end_with?(
|
|
26
|
+
f.end_with?('.gem')
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
|
-
spec.bindir =
|
|
29
|
+
spec.bindir = 'exe'
|
|
30
30
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
|
31
|
-
spec.require_paths = [
|
|
31
|
+
spec.require_paths = ['lib']
|
|
32
32
|
|
|
33
33
|
# Rails dependencies
|
|
34
|
-
spec.add_dependency
|
|
35
|
-
spec.add_dependency
|
|
36
|
-
spec.add_dependency
|
|
37
|
-
spec.add_dependency
|
|
34
|
+
spec.add_dependency 'dry-configurable', '~> 1.0'
|
|
35
|
+
spec.add_dependency 'nokogiri', '~> 1.15'
|
|
36
|
+
spec.add_dependency 'rails', '>= 7.1'
|
|
37
|
+
spec.add_dependency 'redcarpet', '~> 3.6'
|
|
38
|
+
spec.add_dependency 'sanitize', '~> 6.0'
|
|
38
39
|
|
|
39
40
|
# Development dependencies
|
|
40
|
-
spec.add_development_dependency
|
|
41
|
-
spec.add_development_dependency
|
|
42
|
-
spec.add_development_dependency
|
|
41
|
+
spec.add_development_dependency 'factory_bot_rails', '~> 6.2'
|
|
42
|
+
spec.add_development_dependency 'rspec-rails', '~> 6.0'
|
|
43
|
+
spec.add_development_dependency 'standard', '>= 1.35.1'
|
|
43
44
|
end
|
metadata
CHANGED
|
@@ -1,58 +1,57 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: panda-editor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Otaina Limited
|
|
8
8
|
- James Inman
|
|
9
|
-
autorequire:
|
|
10
9
|
bindir: exe
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
|
-
name:
|
|
14
|
+
name: dry-configurable
|
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
|
17
16
|
requirements:
|
|
18
|
-
- - "
|
|
17
|
+
- - "~>"
|
|
19
18
|
- !ruby/object:Gem::Version
|
|
20
|
-
version: '
|
|
19
|
+
version: '1.0'
|
|
21
20
|
type: :runtime
|
|
22
21
|
prerelease: false
|
|
23
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
23
|
requirements:
|
|
25
|
-
- - "
|
|
24
|
+
- - "~>"
|
|
26
25
|
- !ruby/object:Gem::Version
|
|
27
|
-
version: '
|
|
26
|
+
version: '1.0'
|
|
28
27
|
- !ruby/object:Gem::Dependency
|
|
29
|
-
name:
|
|
28
|
+
name: nokogiri
|
|
30
29
|
requirement: !ruby/object:Gem::Requirement
|
|
31
30
|
requirements:
|
|
32
31
|
- - "~>"
|
|
33
32
|
- !ruby/object:Gem::Version
|
|
34
|
-
version: '
|
|
33
|
+
version: '1.15'
|
|
35
34
|
type: :runtime
|
|
36
35
|
prerelease: false
|
|
37
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
37
|
requirements:
|
|
39
38
|
- - "~>"
|
|
40
39
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: '
|
|
40
|
+
version: '1.15'
|
|
42
41
|
- !ruby/object:Gem::Dependency
|
|
43
|
-
name:
|
|
42
|
+
name: rails
|
|
44
43
|
requirement: !ruby/object:Gem::Requirement
|
|
45
44
|
requirements:
|
|
46
|
-
- - "
|
|
45
|
+
- - ">="
|
|
47
46
|
- !ruby/object:Gem::Version
|
|
48
|
-
version: '1
|
|
47
|
+
version: '7.1'
|
|
49
48
|
type: :runtime
|
|
50
49
|
prerelease: false
|
|
51
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
52
51
|
requirements:
|
|
53
|
-
- - "
|
|
52
|
+
- - ">="
|
|
54
53
|
- !ruby/object:Gem::Version
|
|
55
|
-
version: '1
|
|
54
|
+
version: '7.1'
|
|
56
55
|
- !ruby/object:Gem::Dependency
|
|
57
56
|
name: redcarpet
|
|
58
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -68,13 +67,13 @@ dependencies:
|
|
|
68
67
|
- !ruby/object:Gem::Version
|
|
69
68
|
version: '3.6'
|
|
70
69
|
- !ruby/object:Gem::Dependency
|
|
71
|
-
name:
|
|
70
|
+
name: sanitize
|
|
72
71
|
requirement: !ruby/object:Gem::Requirement
|
|
73
72
|
requirements:
|
|
74
73
|
- - "~>"
|
|
75
74
|
- !ruby/object:Gem::Version
|
|
76
75
|
version: '6.0'
|
|
77
|
-
type: :
|
|
76
|
+
type: :runtime
|
|
78
77
|
prerelease: false
|
|
79
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
80
79
|
requirements:
|
|
@@ -95,6 +94,20 @@ dependencies:
|
|
|
95
94
|
- - "~>"
|
|
96
95
|
- !ruby/object:Gem::Version
|
|
97
96
|
version: '6.2'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: rspec-rails
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '6.0'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '6.0'
|
|
98
111
|
- !ruby/object:Gem::Dependency
|
|
99
112
|
name: standard
|
|
100
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -134,6 +147,7 @@ files:
|
|
|
134
147
|
- app/services/panda/editor/html_to_editor_js_converter.rb
|
|
135
148
|
- config/importmap.rb
|
|
136
149
|
- docs/FOOTNOTES.md
|
|
150
|
+
- lib/panda-editor.rb
|
|
137
151
|
- lib/panda/editor.rb
|
|
138
152
|
- lib/panda/editor/asset_loader.rb
|
|
139
153
|
- lib/panda/editor/blocks/alert.rb
|
|
@@ -147,6 +161,8 @@ files:
|
|
|
147
161
|
- lib/panda/editor/content.rb
|
|
148
162
|
- lib/panda/editor/engine.rb
|
|
149
163
|
- lib/panda/editor/footnote_registry.rb
|
|
164
|
+
- lib/panda/editor/html_to_editor_js_converter.rb
|
|
165
|
+
- lib/panda/editor/markdown_to_editor_js_converter.rb
|
|
150
166
|
- lib/panda/editor/renderer.rb
|
|
151
167
|
- lib/panda/editor/version.rb
|
|
152
168
|
- lib/tasks/assets.rake
|
|
@@ -161,7 +177,6 @@ metadata:
|
|
|
161
177
|
homepage_uri: https://github.com/tastybamboo/panda-editor
|
|
162
178
|
source_code_uri: https://github.com/tastybamboo/panda-editor
|
|
163
179
|
changelog_uri: https://github.com/tastybamboo/panda-editor/blob/main/CHANGELOG.md
|
|
164
|
-
post_install_message:
|
|
165
180
|
rdoc_options: []
|
|
166
181
|
require_paths:
|
|
167
182
|
- lib
|
|
@@ -176,8 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
176
191
|
- !ruby/object:Gem::Version
|
|
177
192
|
version: '0'
|
|
178
193
|
requirements: []
|
|
179
|
-
rubygems_version: 3.
|
|
180
|
-
signing_key:
|
|
194
|
+
rubygems_version: 3.7.2
|
|
181
195
|
specification_version: 4
|
|
182
196
|
summary: EditorJS integration for Rails applications
|
|
183
197
|
test_files: []
|