panda-editor 0.1.0 → 0.2.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 +4 -4
- data/.rspec +3 -0
- data/.yamllint +73 -0
- data/CHANGELOG.md +69 -0
- data/config/importmap.rb +1 -1
- data/lib/panda/editor/asset_loader.rb +9 -9
- data/lib/panda/editor/engine.rb +2 -2
- data/lib/panda/editor/version.rb +2 -2
- data/lib/panda/editor.rb +2 -2
- data/lib/tasks/assets.rake +26 -26
- data/log/test.log +0 -0
- data/panda-editor.gemspec +5 -4
- metadata +15 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29b5c9eefc5732b349ea346a6176899394e4aa11384f5b85e40708fbdfb897da
|
4
|
+
data.tar.gz: 17e1479127d132b4727310c89017647fccba50efe0ba5fdc2c17a439ccaa519b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5fffff63b35daa542159668491d1994b48c0ecc5ad76433d657ca6d9b5d2518c7eeebf2c3db8a1da929a3b84fefecc91268b9c12edb29a58cd763c512228fd92
|
7
|
+
data.tar.gz: 12ad18f49d0ffe3d4924ee43a7dc81c08386be51c6e02db07d5ebc7e8562463423b04a6de947a5053127416bb7bfb5050668b718e0de4402df2e5c58060e86d3
|
data/.rspec
ADDED
data/.yamllint
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
---
|
2
|
+
extends: default
|
3
|
+
|
4
|
+
rules:
|
5
|
+
brackets:
|
6
|
+
level: error
|
7
|
+
max-spaces-inside: 1
|
8
|
+
commas:
|
9
|
+
level: error
|
10
|
+
max-spaces-after: 1
|
11
|
+
comments:
|
12
|
+
level: error
|
13
|
+
min-spaces-from-content: 2
|
14
|
+
comments-indentation:
|
15
|
+
level: error
|
16
|
+
document-end:
|
17
|
+
level: error
|
18
|
+
present: false
|
19
|
+
document-start:
|
20
|
+
level: error
|
21
|
+
present: true
|
22
|
+
empty-lines:
|
23
|
+
level: error
|
24
|
+
max: 2
|
25
|
+
max-end: 0
|
26
|
+
max-start: 0
|
27
|
+
empty-values:
|
28
|
+
level: error
|
29
|
+
forbid-in-block-mappings: true
|
30
|
+
forbid-in-flow-mappings: true
|
31
|
+
hyphens:
|
32
|
+
level: error
|
33
|
+
max-spaces-after: 1
|
34
|
+
indentation:
|
35
|
+
level: error
|
36
|
+
spaces: 2
|
37
|
+
indent-sequences: true
|
38
|
+
key-duplicates:
|
39
|
+
level: error
|
40
|
+
key-ordering: disable
|
41
|
+
line-length:
|
42
|
+
level: warning
|
43
|
+
max: 120
|
44
|
+
allow-non-breakable-words: true
|
45
|
+
allow-non-breakable-inline-mappings: true
|
46
|
+
new-line-at-end-of-file:
|
47
|
+
level: error
|
48
|
+
new-lines:
|
49
|
+
level: error
|
50
|
+
type: unix
|
51
|
+
octal-values:
|
52
|
+
level: error
|
53
|
+
forbid-implicit-octal: true
|
54
|
+
forbid-explicit-octal: true
|
55
|
+
quoted-strings:
|
56
|
+
level: error
|
57
|
+
quote-type: double
|
58
|
+
required: only-when-needed
|
59
|
+
trailing-spaces:
|
60
|
+
level: error
|
61
|
+
truthy:
|
62
|
+
level: error
|
63
|
+
allowed-values: ["true", "false"]
|
64
|
+
check-keys: true
|
65
|
+
|
66
|
+
ignore: |
|
67
|
+
vendor/
|
68
|
+
spec/dummy/tmp/
|
69
|
+
spec/dummy/log/
|
70
|
+
coverage/
|
71
|
+
node_modules/
|
72
|
+
.bundle/
|
73
|
+
tmp/
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## [0.2.0] - 2025-08-12
|
9
|
+
|
10
|
+
### Added
|
11
|
+
- Full CI/CD pipeline with GitHub Actions
|
12
|
+
- Automated testing across Ruby 3.2, 3.3 and Rails 7.1, 7.2, 8.0
|
13
|
+
- StandardRB linting integration
|
14
|
+
- YAML validation for workflow files
|
15
|
+
- Security auditing with bundle-audit
|
16
|
+
- Code coverage reporting with Codecov
|
17
|
+
- Automatic gem release workflow
|
18
|
+
- Triggers on version changes after CI passes
|
19
|
+
- Publishes to RubyGems automatically
|
20
|
+
- Creates GitHub releases with changelogs
|
21
|
+
- Comprehensive test suite setup
|
22
|
+
- RSpec configuration for Rails engine testing
|
23
|
+
- Test helpers for HTML normalization
|
24
|
+
- Support for EditorJS block testing
|
25
|
+
- Rails view helpers integration in tests
|
26
|
+
- Development dependencies
|
27
|
+
- Added rspec-rails for testing
|
28
|
+
- Added standard gem for code linting
|
29
|
+
- Added bundle-audit for security scanning
|
30
|
+
- Added erb_lint for template linting
|
31
|
+
|
32
|
+
### Fixed
|
33
|
+
- Test infrastructure issues
|
34
|
+
- Fixed Rails initialization for engine specs without dummy app
|
35
|
+
- Improved HTML whitespace normalization in tests
|
36
|
+
- Added missing ActionView helpers to test environment
|
37
|
+
- CI/CD pipeline issues
|
38
|
+
- Fixed StandardRB version conflicts
|
39
|
+
- Resolved YAML validation errors in workflows
|
40
|
+
- Fixed missing test dependencies
|
41
|
+
- Corrected workflow trigger dependencies
|
42
|
+
|
43
|
+
### Changed
|
44
|
+
- Improved test helper methods for better HTML comparison
|
45
|
+
- Simplified Rails test setup without requiring Sprockets
|
46
|
+
- Updated CI matrix to include Rails 8.0 support
|
47
|
+
|
48
|
+
## [0.1.0] - 2025-08-12
|
49
|
+
|
50
|
+
### Initial Release
|
51
|
+
- Extracted EditorJS functionality from Panda CMS into standalone gem
|
52
|
+
- Core editor blocks support:
|
53
|
+
- Paragraph
|
54
|
+
- Header
|
55
|
+
- List (ordered and unordered)
|
56
|
+
- Quote
|
57
|
+
- Table
|
58
|
+
- Image
|
59
|
+
- Alert
|
60
|
+
- Embed
|
61
|
+
- EditorJS renderer for converting block data to HTML
|
62
|
+
- Rails engine integration
|
63
|
+
- Importmap configuration for EditorJS assets
|
64
|
+
- Configurable custom block renderers
|
65
|
+
- HTML sanitization for security
|
66
|
+
- Asset pipeline integration
|
67
|
+
|
68
|
+
[0.2.0]: https://github.com/tastybamboo/panda-editor/compare/v0.1.0...v0.2.0
|
69
|
+
[0.1.0]: https://github.com/tastybamboo/panda-editor/releases/tag/v0.1.0
|
data/config/importmap.rb
CHANGED
@@ -12,4 +12,4 @@ pin "@editorjs/nested-list", to: "https://cdn.jsdelivr.net/npm/@editorjs/nested-
|
|
12
12
|
pin "@editorjs/quote", to: "https://cdn.jsdelivr.net/npm/@editorjs/quote@2.6.0/+esm"
|
13
13
|
pin "@editorjs/simple-image", to: "https://cdn.jsdelivr.net/npm/@editorjs/simple-image@1.6.0/+esm"
|
14
14
|
pin "@editorjs/table", to: "https://cdn.jsdelivr.net/npm/@editorjs/table@2.3.0/+esm"
|
15
|
-
pin "@editorjs/embed", to: "https://cdn.jsdelivr.net/npm/@editorjs/embed@2.7.0/+esm"
|
15
|
+
pin "@editorjs/embed", to: "https://cdn.jsdelivr.net/npm/@editorjs/embed@2.7.0/+esm"
|
@@ -37,8 +37,8 @@ module Panda
|
|
37
37
|
private
|
38
38
|
|
39
39
|
def use_compiled_assets?
|
40
|
-
Rails.env.production? ||
|
41
|
-
Rails.env.test? ||
|
40
|
+
Rails.env.production? ||
|
41
|
+
Rails.env.test? ||
|
42
42
|
ENV["PANDA_EDITOR_USE_COMPILED_ASSETS"] == "true"
|
43
43
|
end
|
44
44
|
|
@@ -86,7 +86,7 @@ module Panda
|
|
86
86
|
|
87
87
|
def download_assets_from_github
|
88
88
|
Rails.logger.info "[Panda Editor] Downloading assets from GitHub releases..."
|
89
|
-
|
89
|
+
|
90
90
|
begin
|
91
91
|
release_data = fetch_latest_release
|
92
92
|
download_release_assets(release_data["assets"])
|
@@ -99,7 +99,7 @@ module Panda
|
|
99
99
|
def fetch_latest_release
|
100
100
|
uri = URI(GITHUB_RELEASES_URL)
|
101
101
|
response = Net::HTTP.get_response(uri)
|
102
|
-
|
102
|
+
|
103
103
|
if response.code == "200"
|
104
104
|
JSON.parse(response.body)
|
105
105
|
else
|
@@ -110,7 +110,7 @@ module Panda
|
|
110
110
|
def download_release_assets(assets)
|
111
111
|
assets.each do |asset|
|
112
112
|
next unless asset["name"].match?(/panda-editor.*\.(js|css)$/)
|
113
|
-
|
113
|
+
|
114
114
|
download_asset(asset)
|
115
115
|
end
|
116
116
|
end
|
@@ -118,7 +118,7 @@ module Panda
|
|
118
118
|
def download_asset(asset)
|
119
119
|
uri = URI(asset["browser_download_url"])
|
120
120
|
response = Net::HTTP.get_response(uri)
|
121
|
-
|
121
|
+
|
122
122
|
if response.code == "200"
|
123
123
|
save_asset(asset["name"], response.body)
|
124
124
|
end
|
@@ -127,7 +127,7 @@ module Panda
|
|
127
127
|
def save_asset(filename, content)
|
128
128
|
dir = Rails.root.join("public", "panda-editor-assets")
|
129
129
|
FileUtils.mkdir_p(dir)
|
130
|
-
|
130
|
+
|
131
131
|
File.write(dir.join(filename), content)
|
132
132
|
Rails.logger.info "[Panda Editor] Downloaded #{filename}"
|
133
133
|
end
|
@@ -141,11 +141,11 @@ module Panda
|
|
141
141
|
def copy_embedded_assets
|
142
142
|
source_dir = Panda::Editor::Engine.root.join("public", "panda-editor-assets")
|
143
143
|
dest_dir = Rails.root.join("public", "panda-editor-assets")
|
144
|
-
|
144
|
+
|
145
145
|
FileUtils.mkdir_p(dest_dir)
|
146
146
|
FileUtils.cp_r(Dir.glob(source_dir.join("*")), dest_dir)
|
147
147
|
end
|
148
148
|
end
|
149
149
|
end
|
150
150
|
end
|
151
|
-
end
|
151
|
+
end
|
data/lib/panda/editor/engine.rb
CHANGED
data/lib/panda/editor/version.rb
CHANGED
data/lib/panda/editor.rb
CHANGED
@@ -10,7 +10,7 @@ module Panda
|
|
10
10
|
# Autoload components
|
11
11
|
autoload :Renderer, "panda/editor/renderer"
|
12
12
|
autoload :Content, "panda/editor/content"
|
13
|
-
|
13
|
+
|
14
14
|
module Blocks
|
15
15
|
autoload :Base, "panda/editor/blocks/base"
|
16
16
|
autoload :Alert, "panda/editor/blocks/alert"
|
@@ -22,4 +22,4 @@ module Panda
|
|
22
22
|
autoload :Table, "panda/editor/blocks/table"
|
23
23
|
end
|
24
24
|
end
|
25
|
-
end
|
25
|
+
end
|
data/lib/tasks/assets.rake
CHANGED
@@ -3,64 +3,64 @@
|
|
3
3
|
namespace :panda_editor do
|
4
4
|
namespace :assets do
|
5
5
|
desc "Compile Panda Editor assets for production"
|
6
|
-
task :
|
6
|
+
task compile: :environment do
|
7
7
|
require "fileutils"
|
8
|
-
|
8
|
+
|
9
9
|
puts "Compiling Panda Editor assets..."
|
10
|
-
|
10
|
+
|
11
11
|
# Create temporary directory for assets
|
12
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
|
16
16
|
version = Panda::Editor::VERSION
|
17
|
-
|
17
|
+
|
18
18
|
# Compile JavaScript
|
19
19
|
compile_javascript(tmp_dir, version)
|
20
|
-
|
20
|
+
|
21
21
|
# Compile CSS
|
22
22
|
compile_css(tmp_dir, version)
|
23
|
-
|
23
|
+
|
24
24
|
# Copy to public directory
|
25
25
|
public_dir = Rails.root.join("public", "panda-editor-assets")
|
26
26
|
FileUtils.mkdir_p(public_dir)
|
27
27
|
FileUtils.cp_r(Dir.glob(tmp_dir.join("*")), public_dir)
|
28
|
-
|
28
|
+
|
29
29
|
puts "✅ Assets compiled successfully"
|
30
30
|
end
|
31
31
|
|
32
32
|
desc "Download Panda Editor assets from GitHub"
|
33
|
-
task :
|
33
|
+
task download: :environment do
|
34
34
|
require "panda/editor/asset_loader"
|
35
|
-
|
35
|
+
|
36
36
|
puts "Downloading Panda Editor assets from GitHub..."
|
37
37
|
Panda::Editor::AssetLoader.send(:download_assets_from_github)
|
38
38
|
puts "✅ Assets downloaded successfully"
|
39
39
|
end
|
40
40
|
|
41
41
|
desc "Upload compiled assets to GitHub release"
|
42
|
-
task :
|
42
|
+
task upload: :environment do
|
43
43
|
require "net/http"
|
44
44
|
require "json"
|
45
|
-
|
45
|
+
|
46
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
51
|
version = ENV["GITHUB_REF_NAME"] || "v#{Panda::Editor::VERSION}"
|
52
52
|
token = ENV["GITHUB_TOKEN"]
|
53
|
-
|
53
|
+
|
54
54
|
unless token
|
55
55
|
puts "❌ GITHUB_TOKEN environment variable required"
|
56
56
|
exit 1
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
# Find compiled assets
|
60
60
|
assets_dir = Rails.root.join("public", "panda-editor-assets")
|
61
61
|
js_file = Dir.glob(assets_dir.join("panda-editor-*.js")).first
|
62
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)
|
@@ -75,28 +75,28 @@ namespace :panda_editor do
|
|
75
75
|
|
76
76
|
def compile_javascript(tmp_dir, version)
|
77
77
|
puts " Compiling JavaScript..."
|
78
|
-
|
78
|
+
|
79
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
|
+
|
83
83
|
# Add version marker
|
84
84
|
output = "/* Panda Editor v#{version} */\n#{output}"
|
85
|
-
|
85
|
+
|
86
86
|
# Write compiled file
|
87
87
|
File.write(tmp_dir.join("panda-editor-#{version}.js"), output)
|
88
88
|
end
|
89
89
|
|
90
90
|
def compile_css(tmp_dir, version)
|
91
91
|
puts " Compiling CSS..."
|
92
|
-
|
92
|
+
|
93
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
|
+
|
97
97
|
# Add version marker
|
98
98
|
output = "/* Panda Editor v#{version} */\n#{output}"
|
99
|
-
|
99
|
+
|
100
100
|
# Write compiled file
|
101
101
|
File.write(tmp_dir.join("panda-editor-#{version}.css"), output)
|
102
102
|
end
|
@@ -107,4 +107,4 @@ namespace :panda_editor do
|
|
107
107
|
puts " Uploading #{File.basename(file)}..."
|
108
108
|
end
|
109
109
|
end
|
110
|
-
end
|
110
|
+
end
|
data/log/test.log
ADDED
File without changes
|
data/panda-editor.gemspec
CHANGED
@@ -22,7 +22,8 @@ Gem::Specification.new do |spec|
|
|
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
|
-
f.start_with?(*%w[bin/ test/ spec/ features/ .git .github appveyor Gemfile])
|
25
|
+
f.start_with?(*%w[bin/ test/ spec/ features/ .git .github appveyor Gemfile]) ||
|
26
|
+
f.end_with?(".gem")
|
26
27
|
end
|
27
28
|
end
|
28
29
|
spec.bindir = "exe"
|
@@ -32,9 +33,9 @@ Gem::Specification.new do |spec|
|
|
32
33
|
# Rails dependencies
|
33
34
|
spec.add_dependency "rails", ">= 7.1"
|
34
35
|
spec.add_dependency "sanitize", "~> 6.0"
|
35
|
-
|
36
|
+
|
36
37
|
# Development dependencies
|
37
38
|
spec.add_development_dependency "rspec-rails", "~> 6.0"
|
38
39
|
spec.add_development_dependency "factory_bot_rails", "~> 6.2"
|
39
|
-
spec.add_development_dependency "
|
40
|
-
end
|
40
|
+
spec.add_development_dependency "standard", ">= 1.35.1"
|
41
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: panda-editor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Panda CMS Team
|
8
|
+
autorequire:
|
8
9
|
bindir: exe
|
9
10
|
cert_chain: []
|
10
|
-
date: 2025-08-
|
11
|
+
date: 2025-08-13 00:00:00.000000000 Z
|
11
12
|
dependencies:
|
12
13
|
- !ruby/object:Gem::Dependency
|
13
14
|
name: rails
|
@@ -66,19 +67,19 @@ dependencies:
|
|
66
67
|
- !ruby/object:Gem::Version
|
67
68
|
version: '6.2'
|
68
69
|
- !ruby/object:Gem::Dependency
|
69
|
-
name:
|
70
|
+
name: standard
|
70
71
|
requirement: !ruby/object:Gem::Requirement
|
71
72
|
requirements:
|
72
|
-
- - "
|
73
|
+
- - ">="
|
73
74
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
75
|
+
version: 1.35.1
|
75
76
|
type: :development
|
76
77
|
prerelease: false
|
77
78
|
version_requirements: !ruby/object:Gem::Requirement
|
78
79
|
requirements:
|
79
|
-
- - "
|
80
|
+
- - ">="
|
80
81
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
82
|
+
version: 1.35.1
|
82
83
|
description: A modular, extensible rich text editor using EditorJS for Rails applications.
|
83
84
|
Extracted from Panda CMS.
|
84
85
|
email:
|
@@ -87,6 +88,9 @@ executables: []
|
|
87
88
|
extensions: []
|
88
89
|
extra_rdoc_files: []
|
89
90
|
files:
|
91
|
+
- ".rspec"
|
92
|
+
- ".yamllint"
|
93
|
+
- CHANGELOG.md
|
90
94
|
- LICENSE
|
91
95
|
- README.md
|
92
96
|
- app/javascript/panda/editor/application.js
|
@@ -113,6 +117,7 @@ files:
|
|
113
117
|
- lib/panda/editor/renderer.rb
|
114
118
|
- lib/panda/editor/version.rb
|
115
119
|
- lib/tasks/assets.rake
|
120
|
+
- log/test.log
|
116
121
|
- panda-editor.gemspec
|
117
122
|
homepage: https://github.com/tastybamboo/panda-editor
|
118
123
|
licenses:
|
@@ -122,6 +127,7 @@ metadata:
|
|
122
127
|
homepage_uri: https://github.com/tastybamboo/panda-editor
|
123
128
|
source_code_uri: https://github.com/tastybamboo/panda-editor
|
124
129
|
changelog_uri: https://github.com/tastybamboo/panda-editor/blob/main/CHANGELOG.md
|
130
|
+
post_install_message:
|
125
131
|
rdoc_options: []
|
126
132
|
require_paths:
|
127
133
|
- lib
|
@@ -136,7 +142,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
142
|
- !ruby/object:Gem::Version
|
137
143
|
version: '0'
|
138
144
|
requirements: []
|
139
|
-
rubygems_version: 3.
|
145
|
+
rubygems_version: 3.5.22
|
146
|
+
signing_key:
|
140
147
|
specification_version: 4
|
141
148
|
summary: EditorJS integration for Rails applications
|
142
149
|
test_files: []
|