
Security News
Deno 2.2 Improves Dependency Management and Expands Node.js Compatibility
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
CKEditor is a WYSIWYG text editor designed to simplify web content creation. It brings common word processing features directly to your web pages. Enhance your website experience with our community maintained editor. Currently this gem supports ckeditor 4 only.
For basic usage just include the ckeditor gem:
gem 'ckeditor'
or if you'd like to use the latest version from Github:
gem 'ckeditor', github: 'galetahub/ckeditor'
Include this inside your config/initializers/assets.rb
:
Rails.application.config.assets.precompile += %w[ckeditor/config.js]
For file upload support, you must generate the necessary file storage models. The currently supported backends are:
To use the active_record orm with paperclip (i.e. the default settings):
gem 'paperclip'
rails generate ckeditor:install --orm=active_record --backend=paperclip
gem "mini_magick"
rails active_storage:install # if you haven't installed active_storage yet
rails generate ckeditor:install --orm=active_record --backend=active_storage
gem 'carrierwave'
gem 'mini_magick'
rails generate ckeditor:install --orm=active_record --backend=carrierwave
Requires Dragonfly 1.0 or higher.
gem 'dragonfly'
rails generate ckeditor:install --orm=active_record --backend=dragonfly
gem 'mongoid-paperclip', require: 'mongoid_paperclip'
rails generate ckeditor:install --orm=mongoid --backend=paperclip
Active Storage support only Active Record, see for more info
gem 'carrierwave-mongoid', require: 'carrierwave/mongoid'
gem 'mini_magick'
rails generate ckeditor:install --orm=mongoid --backend=carrierwave
All ckeditor models will be generated in the app/models/ckeditor directory. Models are autoloaded in Rails 4. For earlier Rails versions, you need to add them to the autoload path (in application.rb):
config.autoload_paths += %w(#{config.root}/app/models/ckeditor)
Mount the Ckeditor::Engine to your routes (config/routes.rb):
mount Ckeditor::Engine => '/ckeditor'
Setup editor version to load (more info here http://cdn.ckeditor.com/)
# in config/initializers/ckeditor.rb
Ckeditor.setup do |config|
# //cdn.ckeditor.com/<version.number>/<distribution>/ckeditor.js
config.cdn_url = "//cdn.ckeditor.com/4.6.1/basic/ckeditor.js"
end
In view template include ckeditor CDN:
= javascript_include_tag Ckeditor.cdn_url
Precompile ckeditor/config.js:
# in config/initializers/assets.rb
Rails.application.config.assets.precompile += %w[ckeditor/config.js]
= form_for @page do |form|
= form.cktext_area :notes, class: 'someclass', ckeditor: { language: 'uk'}
= form.cktext_area :content, value: 'Default value', id: 'sometext'
= cktext_area :page, :info, cols: 40, ckeditor: { uiColor: '#AADC6E', toolbar: 'mini' }
It also works with bootstrap-form
= bootstrap_form_for resource do |form|
= form.cktext_area :text, ckeditor: { language: 'uk'}
All ckeditor options can be found here
In order to configure the ckeditor default options, create the following files:
app/assets/javascripts/ckeditor/config.js
app/assets/javascripts/ckeditor/contents.css
Adding a custom toolbar:
# in app/assets/javascripts/ckeditor/config.js
CKEDITOR.editorConfig = function (config) {
// ... other configuration ...
config.toolbar_mini = [
["Bold", "Italic", "Underline", "Strike", "-", "Subscript", "Superscript"],
];
config.toolbar = "mini";
// ... rest of the original config.js ...
}
When overriding the default config.js
file, you must set all configuration options yourself as the bundled config.js
will not be loaded. To see the default configuration, run bundle open ckeditor
, copy app/assets/javascripts/ckeditor/config.js
into your project and customize it to your needs.
You should download necessary plugins with all dependencies and extract them in app/assets/javascripts/ckeditor/plugins/
.
After that you can include your plugins in app/assets/javascripts/ckeditor/config.js
in this way:
CKEDITOR.editorConfig = function (config) {
config.extraPlugins = 'eqneditor,autosave,';
}
jQuery sample:
<script type='text/javascript' charset='UTF-8'>
$(document).ready(function(){
$('form[data-remote]').bind('ajax:before', function(){
for (instance in CKEDITOR.instances){
CKEDITOR.instances[instance].updateElement();
}
});
});
</script>
= form.input :content, as: :ckeditor
= form.input :content, as: :ckeditor, input_html: { ckeditor: { height: 400 } }
Note that the toolbar option should match the case specified in the config. If the config is not found it defaults to all available toolbar items.
i.e. config.toolbar_mini becomes {toolbar: 'mini'} in the form.
= form.input :content, as: :ckeditor, input_html: { ckeditor: { toolbar: 'Full' } }
Create a file app/assets/javascripts/init_ckeditor.coffee
ready = ->
$('.ckeditor').each ->
CKEDITOR.replace $(this).attr('id')
$(document).ready(ready)
$(document).on('page:load', ready)
Make sure the file is loaded from your app/assets/javascripts/application.js
To use cancan with Ckeditor, add this to an initializer:
# in config/initializers/ckeditor.rb
Ckeditor.setup do |config|
config.authorize_with :cancancan
end
At this point, all authorization will fail and no one will be able to access the filebrowser pages.
To grant access, add the following abilities (usually ability.rb
)
# Always performed
can :access, :ckeditor # needed to access Ckeditor filebrowser
# Performed checks for actions:
can [:read, :create, :destroy], Ckeditor::Picture
can [:read, :create, :destroy], Ckeditor::AttachmentFile
Setup Pundit and Action Policy similar. Just like CanCanCan, you can write this code in your config/initializers/ckeditor.rb file:
Ckeditor.setup do |config|
config.authorize_with :pundit # or :action_policy
end
Then, generate the policy files for model Picture and AttachmentFile
rails g ckeditor:pundit_policy # or ckeditor:action_policy
By this command, you will got two files:
app/policies/ckeditor/picture_policy.rb app/policies/ckeditor/attachment_file_policy.rb
By default, only the user that logged in can access the models.
You can customize these two policy files as you like.
To override the default CKEditor routes create a config.js file within the host application at app/assets/javascripts/ckeditor/config.js
By default, the engine inherits from ApplicationController
. To override the default parent controller:
# in config/initializers/ckeditor.rb
Ckeditor.setup do |config|
config.parent_controller = 'MyCKEditorBaseController'
end
Based on this, if you want to secure CKEditor controller actions and you can't authenticate in ApplicationController, you could do so with a custom controller after configuring the override above, like so:
class MyCKEditorBaseController < ActionController::Base
before_action :authenticate_user! # or some other auth/permission logic here, like Pundit
end
en:
ckeditor:
page_title: 'CKEditor Files Manager'
confirm_delete: 'Delete file?'
buttons:
cancel: 'Cancel'
upload: 'Upload'
delete: 'Delete'
next: 'Next'
$> rake test CKEDITOR_BACKEND=paperclip
$> rake test CKEDITOR_BACKEND=active_storage
$> rake test CKEDITOR_BACKEND=carrierwave
$> rake test CKEDITOR_BACKEND=dragonfly
$> rake test CKEDITOR_BACKEND=shrine
$> rake test CKEDITOR_ORM=mongoid
$> rake test:controllers
$> rake test:generators
$> rake test:integration
$> rake test:models
This project rocks and uses the MIT-LICENSE.
FAQs
Unknown package
We found that ckeditor demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Security News
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.
Security News
Ransomware payment rates hit an all-time low in 2024 as law enforcement crackdowns, stronger defenses, and shifting policies make attacks riskier and less profitable.