Unofficial CKEditor 5 Ruby on Rails integration gem. Provides seamless integration of CKEditor 5 with Rails applications through web components and helper methods.
Add this line to your application's Gemfile:
gem 'ckeditor5'
In your layout:
<!-- app/views/layouts/application.html.erb -->
<!DOCTYPE html>
<html>
<head>
<!--
โ ๏ธ **Important**: When using `importmap-rails`, make sure the importmap
tags are rendered after `ckeditor5_assets` helper. The importmap must
be included in the head section to ensure proper loading order.
This is crucial for CKEditor 5 to work correctly.
-->
<!-- javascript_importmap_tags -->
<%= yield :head %>
</head>
<body>
<%= yield %>
</body>
</html>
In your view:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<!-- ๐ฆ Adds importmap with CKEditor 5 assets. -->
<!-- ๐ It'll automatically use your `I18n.locale` language. -->
<%= ckeditor5_assets %>
<% end %>
<!-- ๐๏ธ CKEditor 5 might be placed using simple view helper ... -->
<%= ckeditor5_editor %>
<!-- ... or using form input helper -->
<%= form_for @post do |f| %>
<%= f.ckeditor5 :content, required: true %>
<% end %>
(optional) Customize your config (the default config is defined here):
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
# ๐ Specify the version of editor you want.
# โ๏ธ Default configuration includes:
# ๐ Classic editor build
# ๐งฉ Essential plugins (paragraphs, basic styles)
# ๐๏ธ Default toolbar layout
# ๐ GPL license
# Optionally, you can specify version of CKEditor 5 to use.
# If it's not specified the default version specified in the gem will be used.
# version '44.0.0'
# Upload images to the server using the simple upload adapter, instead of Base64 encoding.
# simple_upload_adapter
# Specify global language for the editor.
# It can be done here, in controller or in the view.
# By default the `I18n.locale` is used.
# language :pl
end
Voilร ! You have CKEditor 5 integrated with your Rails application. ๐
Explore various editor configurations with the interactive demo application. For additional inspiration, visit the official CKEditor 5 examples.
To run the demos locally, follow these steps:
bundle install # Install dependencies
bundle exec guard -g rails # Start the server
Open http://localhost:3000/ in a browser to start experimenting. Modify the code as needed.
For extending CKEditor's functionality, refer to the plugins directory to create custom plugins. Community contributions are welcome.
cdn(cdn = nil, &block)
methodversion(version)
methodautomatic_upgrades(enabled: true)
methodgpl
methodlicense_key(key)
methodpremium
methodeditable_height(height)
methodlanguage(ui, content:)
methodtranslations(*languages)
methodckbox
methodtype(type)
methodtoolbar(*items, should_group_when_full: true, &block)
methodmenubar(visible: true)
methodconfigure(name, value)
methodplugin(name, premium:, import_name:)
methodplugins(*names, **kwargs)
methodinline_plugin(name, code)
methodexternal_plugin(name, script:, import_as: nil, window_name: nil, stylesheets: [])
methodsimple_upload_adapter(url)
methodwproofreader(version: nil, cdn: nil, **config)
methodckeditor5_context
helper ๐editor-ready
eventeditor-error
eventeditor-change
eventPresets are predefined configurations of CKEditor 5, allowing quick setup with specific features. The gem includes a :default
preset with common features like bold, italic, underline, and link for the classic editor.
You can create your own by defining it in the config/initializers/ckeditor5.rb
file using the config.presets.define
method. The example below illustrates the setup of a custom preset with a classic editor and a custom toolbar:
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
# It's possible to override the default preset right in the initializer.
version '44.0.0'
# New presets inherit properties from the default preset defined in the initializer.
# In this example, the custom preset inherits everything from default but disables the menubar:
presets.define :inherited_custom
menubar visible: false
end
# In order to define preset from scratch, you can use the `inherit: false` option.
presets.define :blank_preset, inherit: false do
version '44.0.0'
# It tells the integration to fetch the newest security patches and bug fixes.
# It may be disabled, but it's highly recommended to keep it enabled to avoid
# potential security issues.
automatic_upgrades
gpl
type :classic
menubar
toolbar :undo, :redo, :|, :heading, :|, :bold, :italic, :underline, :|,
:link, :insertImage, :mediaEmbed, :insertTable, :blockQuote, :|,
:bulletedList, :numberedList, :todoList, :outdent, :indent
plugins :AccessibilityHelp, :Autoformat, :AutoImage, :Autosave,
:BlockQuote, :Bold, :CloudServices,
:Essentials, :Heading, :ImageBlock, :ImageCaption, :ImageInline,
:ImageInsert, :ImageInsertViaUrl, :ImageResize, :ImageStyle,
:ImageTextAlternative, :ImageToolbar, :ImageUpload, :Indent,
:IndentBlock, :Italic, :Link, :LinkImage, :List, :ListProperties,
:MediaEmbed, :Paragraph, :PasteFromOffice, :PictureEditing,
:SelectAll, :Table, :TableCaption, :TableCellProperties,
:TableColumnResize, :TableProperties, :TableToolbar,
:TextTransformation, :TodoList, :Underline, :Undo, :Base64UploadAdapter
configure :image, {
toolbar: ['imageTextAlternative', 'imageStyle:inline', 'imageStyle:block', 'imageStyle:side']
}
end
end
In order to override existing presets, you can use the presets.override
method. The method takes the name of the preset you want to override and a block with the old configuration. The example below shows how to hide the menubar in the default preset:
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
presets.override :custom do
menubar visible: false
toolbar do
remove :underline, :heading
end
end
end
You can define presets in the controller using the ckeditor5_preset
helper method. See it in the section below (Controller / View helpers).
Configuration of the editor can be complex, and it's recommended to use the CKEditor 5 online builder to generate the configuration. It allows you to select the features you want to include and generate the configuration code in JavaScript format. Keep in mind that you need to convert the JavaScript configuration to Ruby format before using it in this gem.
The gem includes a feature that automatically upgrades the CKEditor 5 version when it's released. It's enabled by default for the :default
preset. It means that the editor will automatically check the version of the editor during the initialization and upgrade it to the latest version if the new patch or minor version is released.
If you want to disable automatic upgrades, you can pass the enabled: false
keyword argument to the automatic_upgrades
method.
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
# ... other configuration
automatic_upgrades enabled: false
end
cdn(cdn = nil, &block)
methodversion(version)
methodautomatic_upgrades(enabled: true)
methodgpl
methodlicense_key(key)
methodpremium
methodeditable_height(height)
methodlanguage(ui, content:)
methodtranslations(*languages)
methodckbox
methodtype(type)
methodtoolbar(*items, should_group_when_full: true, &block)
methodmenubar(visible: true)
methodconfigure(name, value)
methodplugin(name, premium:, import_name:)
methodplugins(*names, **kwargs)
methodinline_plugin(name, code)
methodexternal_plugin(name, script:, import_as: nil, window_name: nil, stylesheets: [])
methodsimple_upload_adapter(url)
methodwproofreader(version: nil, cdn: nil, **config)
methodckeditor5_element_ref(selector)
methodckeditor5_preset(name = nil, &block)
methodTo include CKEditor 5 assets in your application, you can use the ckeditor5_assets
helper method. This method takes the version of CKEditor 5 as an argument and includes the necessary resources of the editor. Depending on the specified configuration, it includes the JS and CSS assets from the official CKEditor 5 CDN or one of the popular CDNs.
Keep in mind that you need to include the helper result in the head
section of your layout. In examples below, we use content_for
helper to include the assets in the head
section of the view.
The example below users the default preset defined here.
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
If you want to fetch some additional translations, you can extend your initializer with the following configuration:
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
# ... rest of the configuration
translations :pl, :es
end
To specify a custom preset, you need to pass the preset
keyword argument with the name of the preset. The example below shows how to include the assets for the custom preset:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets preset: :custom %>
<% end %>
<%-# This editor will use `custom` preset defined in `ckeditor5_assets` above %>
<%= ckeditor5_editor %>
In order to define such preset, you can use the following configuration:
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
# ... rest of the configuration
presets.define :custom do
# ... your preset configuration
translations :pl, :es
end
end
:warning: Keep in mind that all ckeditor5_editor
helpers will use the configuration from the preset defined in the ckeditor5_assets
. If you want to use a different preset for a specific editor, you can pass the preset
keyword argument to the ckeditor5_editor
helper.
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets preset: :custom %>
<% end %>
<%= ckeditor5_editor preset: :default %>
It's possible to define the preset directly in the ckeditor5_assets
helper method. It allows you to dynamically specify version, cdn provider or even translations in the view. The example below inherits the default preset and adds Polish translations and other options:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets version: '43.3.0', cdn: :jsdelivr, translations: [:pl], license_key: '<YOUR KEY> OR GPL' %>
<% end %>
If you want to use CKEditor 5 under the GPL license, you can include the assets using the ckeditor5_assets
without passing any arguments. It'll include the necessary assets for the GPL license from one of the most popular CDNs. In our scenario, we use the jsdelivr
CDN which is the default one.
Example:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
In that scenario it's recommended to add gpl
method to the initializer along with the version:
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
gpl
version '44.0.0'
end
In order to use unpkg
CDN, you can extend your initializer with the following configuration:
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
# ... rest of the configuration
cdn :unpkg
end
However, you can also specify the CDN directly in the view:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets cdn: :unpkg %>
<% end %>
or using helper function:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_jsdelivr_assets %>
<% end %>
If you want to use CKEditor 5 under a commercial license, you have to specify license key. It can be done in the initializer:
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
license_key 'your-license-key'
end
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
or directly in the view:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets license_key: 'your-license-key' %>
<% end %>
In this scenario, the assets are included from the official CKEditor 5 CDN which is more reliable and provides better performance, especially for commercial usage.
The ckeditor5_editor
helper renders CKEditor 5 instances in your views. Before using it, ensure you've included the necessary assets in your page's head section otherwise the editor won't work as there are no CKEditor 5 JavaScript and CSS files loaded.
You can set the initial content of the editor using the initial_data
keyword argument or by passing the content directly to the ckeditor5_editor
helper block.
The example below shows how to set the initial content of the editor using the initial_data
and language
keyword arguments:
<!-- app/views/demos/index.html.erb -->
<%= ckeditor5_editor initial_data: "<p>Initial content</p>" %>
The example below shows how to set the initial content of the editor using the ckeditor5_editor
helper block.
<!-- app/views/demos/index.html.erb -->
<%= ckeditor5_editor do %>
<p>Initial content</p>
<% end %>
CKEditor 5 uses a watchdog utility to protect you from data loss in case the editor crashes. It saves your content just before the crash and creates a new instance of the editor with your content intact. It's enabled by default in the gem.
If you want to disable the watchdog, you can pass the watchdog
keyword argument with the value false
:
<!-- app/views/demos/index.html.erb -->
<%= ckeditor5_editor watchdog: false %>
The classic editor is the most common type of editor. It provides a toolbar with various formatting options like bold, italic, underline, and link.
It looks like this:
The example below shows how to include the classic editor in your view:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
<%= ckeditor5_editor style: 'width: 600px' %>
You can pass the style
keyword argument to the ckeditor5_editor
helper to define the editor's style. The example above shows how to set the width of the editor to 600px
. However you can pass any HTML attribute you want, such as class
, id
, data-*
, etc.
While example above uses predefined :default
preset, you can use your custom presets by passing the preset
keyword argument:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
<%= ckeditor5_editor preset: :custom, style: 'width: 600px' %>
If your configuration is even more complex, you can pass the config
and type
arguments with the configuration hash:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
<%= ckeditor5_editor type: :classic, config: { plugins: [:Bold, :Italic], toolbar: [:Bold, :Italic] }, style: 'width: 600px' %>
If you want to override the configuration of the editor specified in default or custom preset, you can pass the extra_config
keyword argument with the configuration hash:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<!-- You can override default preset in assets helper too. -->
<%= ckeditor5_assets translations: [:pl] %>
<% end %>
<%= ckeditor5_editor extra_config: { toolbar: [:Bold, :Italic] }, style: 'width: 600px' %>
It's possible to define the height of the editor by passing the editable_height
keyword argument with the value in pixels:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
<%= ckeditor5_editor editable_height: 300 %>
The multiroot editor allows you to create an editor with multiple editable areas. It's useful when you want to create a CMS with multiple editable areas on a single page.
ckeditor5_editor
: Defines the editor instance.ckeditor5_editable
: Defines the editable areas within the editor.ckeditor5_toolbar
: Defines the toolbar for the editor.If you want to use a multiroot editor, you can pass the type
keyword argument with the value :multiroot
:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
<%= ckeditor5_editor type: :multiroot, style: 'width: 600px' do %>
<%= ckeditor5_toolbar %>
<br>
<%= ckeditor5_editable 'toolbar', style: 'border: 1px solid var(--ck-color-base-border);' do %>
This is a toolbar editable
<% end %>
<br>
<%= ckeditor5_editable 'content', style: 'border: 1px solid var(--ck-color-base-border)' %>
<br>
<% end %>
Roots can be defined later to the editor by simply adding new elements rendered by ckeditor5_editable
helper.
Inline editor allows you to create an editor that can be placed inside any element. Keep in mind that inline editor does not work with textarea
elements so it might be not suitable for all use cases.
If you want to use an inline editor, you can pass the type
keyword argument with the value :inline
:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
<%= ckeditor5_editor type: :inline, style: 'width: 600px' %>
Balloon editor is a floating toolbar editor that provides a minimalistic interface. It's useful when you want to create a simple editor with a floating toolbar.
If you want to use a balloon editor, you can pass the type
keyword argument with the value :balloon
:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
<%= ckeditor5_editor type: :balloon, style: 'width: 600px' %>
Decoupled editor is a variant of classic editor that allows you to separate the editor from the content area. It's useful when you want to create a custom interface with the editor.
If you want to use a decoupled editor, you can pass the type
keyword argument with the value :decoupled
:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
<%= ckeditor5_editor type: :decoupled, style: 'width: 600px' do %>
<div class="menubar-container">
<%= ckeditor5_menubar %>
</div>
<div class="toolbar-container">
<%= ckeditor5_toolbar %>
</div>
<div class="editable-container">
<%= ckeditor5_editable %>
</div>
<% end %>
Context CKEditor 5 is a feature that allows multiple editor instances to share a common configuration and state. This is particularly useful in collaborative environments where multiple users are editing different parts of the same document simultaneously. By using a shared context, all editor instances can synchronize their configurations, plugins, and other settings, ensuring a consistent editing experience across all users.
Format of the ckeditor5_context
helper:
<!-- app/views/demos/index.html.erb -->
<%= ckeditor5_context @context_preset do %>
<%= ckeditor5_editor %>
<%= ckeditor5_editor %>
<% end %>
The ckeditor5_context
helper takes the context preset as an argument and renders the editor instances within the context. The context preset defines the shared configuration and state of the editor instances. It should be defined somewhere in controller.
ckeditor5_context
helper ๐In your view:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets preset: :ultrabasic %>
<% end %>
<%= ckeditor5_context @context_preset do %>
<%= ckeditor5_editor initial_data: 'Hello World' %>
<br>
<%= ckeditor5_editor initial_data: 'Hello World 2' %>
<% end %>
In your controller:
# app/controllers/demos_controller.rb
class DemosController < ApplicationController
def index
@context_preset = ckeditor5_context_preset do
# Syntax is identical to the `toolbar` method of the preset configuration.
toolbar :bold, :italic
# It's possible to define plugins. Syntax is identical to the `plugins` method of the preset configuration.
# Example:
# plugin :Bold
# inline_plugin :MyCustomPlugin, '...'
end
end
end
It's possible to omit the preset argument, in that case the empty preset will be used.
<!-- app/views/demos/index.html.erb -->
<%= ckeditor5_context do %>
<%= ckeditor5_editor %>
<%= ckeditor5_editor %>
<% end %>
See demo for more details.
You can access the editor instance using plain HTML and JavaScript, as CKEditor 5 is a web component with defined instance
, instancePromise
and editables
properties.
For example:
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets %>
<% end %>
<%= ckeditor5_editor style: 'width: 600px', id: 'editor' %>
โ ๏ธ Direct access of instance
property of the web component. Keep in mind it's unsafe and may cause issues if the editor is not loaded yet.
document.getElementById('editor').instance
๐ Accessing the editor instance using instancePromise
property. It's a promise that resolves to the editor instance when the editor is ready.
document.getElementById('editor').instancePromise.then(editor => {
console.log(editor);
});
โ
Accessing the editor through the runAfterEditorReady
helper method. It's a safe way to access the editor instance when the editor is ready.
document.getElementById('editor').runAfterEditorReady(editor => {
console.log(editor);
});
This section covers frequent questions and scenarios when working with CKEditor 5 in Rails applications.
By default, CKEditor 5 uses the language specified in your I18n.locale
configuration. However, you can override the language of the editor by passing the language
keyword in few places.
Language specified here will be used for all editor instances on the page.
<!-- app/views/demos/index.html.erb -->
<% content_for :head do %>
<%= ckeditor5_assets language: :pl %>
<% end %>
<%= ckeditor5_editor %>
Language specified here will be used for all editor instances in your application.
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
# Optional, it load multiple translation packs: translations :pl, :es
language :pl
end
Language specified here will be used only for this editor instance. Keep in mind that you have to load the translation pack in the assets helper using the translations
initializer method.
<!-- app/views/demos/index.html.erb -->
<%= ckeditor5_editor language: :pl %>
You can preload multiple translation packs in the initializer using the translations
method:
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
translations :pl, :es
end
CKEditor 5 provides a spell and grammar checking feature through the WProofreader plugin. You can enable this feature by configuring the WProofreader plugin in the initializer.
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
wproofreader serviceId: 'your-service-ID',
srcUrl: 'https://svc.webspellchecker.net/spellcheck31/wscbundle/wscbundle.js'
end
See wproofreader(version: nil, cdn: nil, **config)
method for more information about the WProofreader plugin configuration.
See the official documentation for more information about the WProofreader plugin.
You can integrate CKEditor 5 with Rails form builders like form_for
or simple_form
. The example below shows how to integrate CKEditor 5 with a Rails form using the form_for
helper:
<!-- app/views/demos/index.html.erb -->
<%= form_for @post do |f| %>
<%= f.label :content %>
<%= f.ckeditor5 :content, required: true, style: 'width: 700px', initial_data: 'Hello World!' %>
<% end %>
<!-- app/views/demos/index.html.erb -->
<%= simple_form_for :demo, url: '/demos', html: { novalidate: false } do |f| %>
<div class="form-group">
<%= f.input :content, as: :ckeditor5, initial_data: 'Hello, World 12!', input_html: { style: 'width: 600px' }, required: true %>
</div>
<div class="form-group mt-3">
<%= f.button :submit, 'Save', class: 'btn btn-primary' %>
</div>
<% end %>
You can pass the style
, class
and id
keyword arguments to the ckeditor5_editor
helper to define the styling of the editor. The example below shows how to set the height, margin, and CSS class of the editor:
<!-- app/views/demos/index.html.erb -->
<%= ckeditor5_editor style: 'height: 400px; margin: 20px;', class: 'your_css_class', id: 'your_id' %>
You can create custom plugins for CKEditor 5 using the inline_plugin
method. It allows you to define a custom class or function inside your preset configuration.
The example below shows how to define a custom plugin that allows toggling the highlight of the selected text:
# config/initializers/ckeditor5.rb
CKEditor5::Rails.configure do
# ... other configuration
# 1. You can also use "window_name" option to import plugin from window object:
# plugin :MyPlugin, window_name: 'MyPlugin'
# 2. Create JavaScript file in app/javascript/custom_plugins/highlight.js,
# add it to import map and then load it in initializer:
# plugin :MyCustomPlugin, import_name: 'my-custom-plugin'
# 3 Create JavaScript file in app/javascript/custom_plugins/highlight.js
# and then load it in initializer:
# In Ruby initializer you can also load plugin code directly from file:
inline_plugin :MyCustomPlugin, File.read(
Rails.root.join('app/javascript/custom_plugins/highlight.js')
)
# 4. Or even define it inline:
# inline_plugin :MyCustomPlugin, <<~JS
# import { Plugin } from 'ckeditor5';
#
# export default class MyCustomPlugin extends Plugin {
# // ...
# }
# JS
# Add item to beginning of the toolbar.
toolbar do
prepend :highlight
end
end
CKEditor 5 provides a set of events that you can listen to in order to react to changes in the editor. You can listen to these events using the addEventListener
method or by defining event handlers directly in the view.
editor-ready
eventThe event is fired when the initialization of the editor is completed. You can listen to it using the editor-ready
event.
document.getElementById('editor').addEventListener('editor-ready', () => {
console.log('Editor is ready');
});
editor-error
eventThe event is fired when the initialization of the editor fails. You can listen to it using the editor-error
event.
document.getElementById('editor').addEventListener('editor-error', () => {
console.log('Editor has an error');
});
editor-change
eventThe event is fired when the content of the editor changes. You can listen to it using the editor-change
event.
document.getElementById('editor').addEventListener('editor-change', () => {
console.log('Editor content has changed');
});
You can also define event handlers directly in the view using the oneditorchange
, oneditorerror
, and oneditorready
attributes.
<!-- app/views/demos/index.html.erb -->
<script type="text/javascript">
function onEditorChange(event) {
// event.detail.editor, event.detail.data
}
function onEditorError(event) {
// event.detail.editor
}
function onEditorReady(event) {
// event.detail.editor
}
</script>
<%= ckeditor5_editor id: 'editor',
oneditorchange: 'onEditorChange',
oneditorerror: 'onEditorError',
oneditorready: 'onEditorReady'
%>
If you want to contribute to the gem, you can clone the repository and run the following commands:
gem install bundler -v 2.5.22
bundle install
bundle exec guard -g rails
You can run the tests using the following command:
bundle exec rspec
If you want to watch the tests, you can use the following command:
bundle exec guard -g rspec
CKEditorยฎ is a trademark of CKSource Holding sp. z o.o. All rights reserved. For more information about the license of CKEditorยฎ please visit CKEditor's licensing page.
This gem is not owned by CKSource and does not use the CKEditorยฎ trademark for commercial purposes. It should not be associated with or considered an official CKSource product.
This project is licensed under the terms of the GNU General Public License v2.0 or later. See the LICENSE file for details.
This project uses CKEditor 5 which is licensed under the terms of GNU General Public License Version 2 or later. For more information about CKEditor 5 licensing, please see their official documentation.